Como siempre hay amigos, familia, amigos de la familia, entusiastas del SL y de la Programación que encuentran mi correo por internet o me conocen por referencia y aprovechan la oportunidad para hacerme preguntas sobre temas diversos, en esta oportunidad 3 personas diferentes que estan comenzando a programar en PHP y estan estudiando el paradigma de la Programación Orientada a Objetos se han estado confundiendo mucho con las definiciones de Clases Abastractas e Interfaces proporcionadas en la documentación oficial de php.net y esta publicación es un intento para diluir esas dudas adicionalmente aprovecho esta oportunidad para disculparme con ellos pues prometí escalercer las dudas antes, pero esta semana los problemas terrenales me alcanzaron y tuve que lidiar con las diligencias/molestias/atenciones que conlleva una operación de emergencia, dando gracias porque todo salio bien y no hubo inconvenientes mayores.

¿Qué son las Clases Abstractas?

Las clases abstractas son clases normales con super poderes capacidades especiales, dado a que sus propiedades y metodos que pueden ser implementados o no dependiendo a las reglas del juego, pero, como sucede esto?, no hay mejor manera de explicarlo que con un ejemplo extraido de la documentación de php.net


class Fruta {
private $color;

public function comer() {
//Masticar
}

public function setColor($c) {
$this->color = $c;
}
}

class Manzana extends Fruta {
public function comer() {
//Masticar hasta llegar al Centro
}
}

class Naranja extends Fruta {
public function comer() {
//Pelar la Naranja
//Masticar
}
}

Instanciamos la clase, es decir, te doy una manzana y tu te la comes.


$manzana = new Manzana();
$manzana->comer();

Al finalizar el metodo “comer()”, podrías decir a que te supo la fruta, la respuesta sería a Manzana pues fue lo que te di y si te diera una fruta de manera generica…


$fruta = new Fruta();
$fruta->comer();

A que te supo la fruta?, no tiene mucho sentido ya que no deberias haber podido comerte la fruta pues no deberia funcionar de esa manera, en algun punto deberia de existir una restricción en la implementación de metodos y propiedades, por eso es que deberia declarar la Clase Fruta como abstracta y a su vez el metodo “comer()” que esta contiene.

Ejemplo:


abstract class Fruta {
private $color;

abstract public function comer()

public function setColor($c) {
$this->color = $c;
}
}

¿Que son las Interfaces?

Pensemos en las interfaces como declaraciones de metodos que objetos en comun pueden compartir, inclusive si esos objetos no guardan relación ninguna. Digamos que tenemos una serie de objetos que mediante la herencia no pueden conectarse o no pueden heredar metodos de un objeto padre ya que no tendria sentido, aqui es donde la interfaz juega un papel muy importante, por supuesto no hay mejor manera de explicar esto que con un ejemplo:


interface interaccion {
public function encender() {
//Procedimiento para encender
}

public function apagar() {
//Procedimiento para apagar
}
}

class lampara implements interaccion {
//Heredada de la Interfaz
public function encender() {
}
//Heredada de la Interfaz
public function apagar() {
}
}

class automobil implements interaccion {
//Heredada de la Interfaz
public function encender() {
}
//Heredada de la Interfaz
public function apagar() {
}
}

Espero que los ejemplos hallan sido suficientes para lograr su comprensión sobre el tema y en palabras finales podemos resumir que la diferencia entre las clases abstractas y las interfaces es que cada una se utiliza para disgregar y discernir limites en la estructura de la aplicacion que se quiere construir usando el paradigma de “Programación Orientada a Objeos”. Las interfaces nos permiten compartir comportamientos entre objetos no relacionados mientras que las clases abstractas nos permiten limitar y/o definir con precisión las capacidades de cada objeto.

Leer más

Bueno si, efectivamente existen muchos tutoriales de como poder tener office en ubuntu pero en este caso les voy a comentar sobre uno en el cual, entre la configuración, la descarga de ciertos archivos cuando mucho tardaran 20 min claro, eso seria relativo dependiendo de la velocidad de tu conexión.

Para conocer la forma de instalarlo solo debemos ir a esta pagina

Leer más

La nueva interfaz gráfica de Fedora 15 (Gnome 3) puede ser confusa para algunos, en especial si están acostumbrados a otros sistemas operativos o distribuciones. Recientemente he visto como se ha incrementado la cantidad de preguntas en canal de IRC #fedora-latam referente a este tema, desde ¿Como se instalan programas en Fedora? hasta "Descargue este blender.exe, ¿Como lo instalo?".

La ventaja de usar aplicaciones que están en el repositorio de Fedora es que los programas allí colocados tienen una firma electrónica que valida y garantiza la autenticidad del programa que estás instalando además garantiza que el programa que instalas tiene una alta calidad y es compatible 100% con Fedora y a diferencia de Windows no tienes que estar buscando cracks ni tener que hacer cualquier cantidad de cosas antes de poderlos descargar.

Aquí les dejo un video:



Para los que tienen equipos que no soportan la nueva interfaz gráfica de Gnome 3 y están corriendo en 'fall-back mode' aquí les dejo unas capturas de pantalla:

  1. Hacemos click en Aplicaciones, se encuentra en la parte superior izquierda de nuestras pantallas, seguidamente click en Herramientas de sistema del y por ultimo en Añadir/Quitar Software

    Click en Aplicaciones luego en Herramientas de sistema y por ultimo Añadir/Quitar Software

  2. Buscamos la aplicación que queremos instalar, en este caso Blender y la seleccionamos en la ventana de los resultados que se encuentra a la derecha.

    Buscamos la aplicación, en este caso blender

  3. Revisamos las dependencias requeridas para instalar esta aplicación y aceptamos.

    Revisamos la lista de dependencias y aceptamos

  4. Por ultimo, autorizamos la instalación de la aplicación y su dependencias autentificandonos con las credenciales apropiadas.

    Autorizamos la instalación autentificandonos con las credenciales apropiadas

  5. Luego de esto Blender se instalara con todas las dependencias necesarias para su funcionamiento. Los programas instalados pueden ser localizados inmediatamente en el menú de aplicaciones.

Leer más

logo de appleYa asentada la polvareda es hora de hacer un análisis de uno de los productos que más me llama la atención para este año de la mano del gigante de Cupertino, Apple, aunque no poseo ningún producto de tan diabólica compañía de ellos, siempre he admirado su disposición por lograr cosas nuevas, por su innovación en el mercado y por el nicho que ocupan (Productos Electrónicos para la clase Media/Alta), lo que no podemos dejar de lado es que esta gente sabe lo que hace y no se puede desestimar su entrada al sector de “La Nube” aunque halla sido tres años después del alboroto.

Hay que mirar de cerca todo lo que ha sucedido que desde que Steve Jobs regreso a la compañía y como sus estrategias han dado resultado, ejemplo de ello es el WWDC que ha sido utilizado como frente para mostrar sus nuevos productos, haciendo memoria: En el 2002 mostró a Mac OS 10/X que ha sido el cohete de Apple por todos estos años en parte porque es un producto de excelente calidad y usando fundaciones totalmente solidas (Unix), en el 2008 nos mostró el iPhone y la rompe paradigmas App Store.

Este año no se ha quedado atras mostrando una nueva versión de Mac OS X (10.7 “Lion”), nuevas versiones del iPhone, iPad y iPod Touch que correrán la nueva versión de su sistema operativo iOS5 y de ultimo pero sin quitarle merito iCloud. Es importante resaltar que Apple no es líder en ventas de Laptops o Computadoras de Escritorio pero ocupan un porcentaje importante como lo explique antes en una clase o en un nicho especifico, el hecho mas curioso con respecto a estos equipos y es a lo que hago referencia cuando entablo conversaciones con amigos en reuniones sociales es que su precio es excesivo comparándolo con otras marcas, es como pagar el doble del producto del competidor y la única diferencia (Física o en Hardware) sera un diseño mas atractivo con alguna cubierta de aluminio. Hace años atrás la brecha de separación entre sus productos con respecto a los de los competidores provenia de sus procesadores con arquitectura RISC que los diferenciaban de los Brutos X86 (Como alguna vez Steve Jobs definió los procesadores de Intel) pero IBM decidió no producirlos más lo que obligo al gigante de Cupertino cambiar de arquitectura, haciendo la competencia mucho más difícil.

Volviendo al tema de iCloud y a manera de sorpresa el anuncio de este producto se encontró con muchas conjeturas y malentendidos en su mayoría por el hecho de arribar un poco tarde, lo que es verdad es que existe mucho escepticismo porque ya se había intentado esto (MobileMe) con resultados negativos dando vida a otro servicio mas útil (Find My iPhone), pero que tienen los Competidores (Google, Yahoo, Microsoft, Dropbox, Flickr, etc.) que Apple no tenga, si enumeramos los servicios que estos poseen y que forman “La Nube”: E-Mail, Calendario, Libreta de Contactos y/o Direcciones, Galerías de Fotos, Almacenamiento de Archivos / Páginas Web y todo esto accesible desde cualquier computador usando un navegador. la incertidumbre está, es palpable, ahora Apple tiene que demostrar que puede pertenecer a la revolución de “La Nube” inclusive con 3 años de atraso.

En mi opinión personal estos servicios diferentes carecen de integración uno con el otro y es esta vulnerabilidad lo que puede explotar Apple para ponerse al frente, hemos sido testigos de como Google esta tacleando el problema conectando Android con cuentas en gmail y sacando al mercado productos como ChromeBook que utilizan toda su suite de aplicaciones web almacenando todos los datos del usuario en “La Nube”, tambien Microsoft esta en el camino correcto integrando las interfaces de sus sistemas operativos a una sola visión, pero todavia falta camino por recorrer e interconexiones que realizar.

Ahora llega iCloud al escenario, mostrando un paradigma totalmente diferente de lo que las tendencias “Todo en el Navegador” nos brindan hasta ahora y es lo que pudiera cambiar la dirección de la corriente, por ejemplo, la manera en que usamos Google Docs es abriendo el Navegador y dirigiéndonos al url proporcionada por el servicio el cual nos permite componer o editar documentos almacenados que están disponibles desde cualquier parte del mundo si posees una conexión a Internet. Con iCloud la cuestión es totalmente diferente pues solo necesitas abrir tu procesador de palabras y generar el documento o simplemente editarlo, no existe la necesidad de guardarlo, no necesitas una URL para el servicio web, literalmente puedes dejarlo como esta y abrirlo en cualquier otro dispositivo (Laptop, iPad, iPod Touch y/o iPhone) porque no tienes que descargarlo, simplemente puedes acceder a el porque ya esta en tu dispositivo, el archivo se guardo automáticamente y fue enviado a todos los dispositivos que tengas asociados, en todo momento el sistema hace esto por ti y si editas el archivo nuevamente los cambios son propagados a través de tu red de equipos.

Esta es la visión, este es el comportamiento, esta es la experiencia que hace que mucha gente pague por un Equipo con sobre precio solo por tener la facilidad y la integración de toda una plataforma, esta es la manera en que Apple y Steve Jobs vienen revolucionando la computación y estoy totalmente seguro que esto se volverá más que una tendencia cambiando los paradigmas de “La Nube”, esto no se detiene aquí, este tipo de operación se extenderá a través de todos los equipos que tengas identificados con tu Apple ID, si personalizas, haces algún cambio o simplemente compras aplicaciones directamente desde App Store toda esa información se distribuye a donde sea necesaria facilitando su acceso desde cualquier parte.

Me gusta mirar esto como un juego de ajedrez, ahora falta el movimiento de los competidores, especialmente Google el cual ha sido el pionero en todo este alboroto de la vida en “La Nube”, Google, muestra que tienes para nosotros!.

Leer más

Microsoft Logo outiside Office Al finalizar la gran demostración de Windows 8 (Windows 7 con una interfaz mas avanzada de lo que existe para Windows phone) se hablo de la posibilidad de crear aplicaciones para este sistema operativo usando HTML5 y JavaScript. Como HTML5 tiene una gran lista de características que amenazan la continuidad de Flash y Silverlight las especulaciones crecieron de manera exponencial, el pánico se extendió a través de comentarios por muchos de los foros de la comunidad de terceros y todo lo que se puede “escuchar” es rumores acerca de la muerte de Silverlight y de la plataforma .NET en favor a HTML5/Javascript.

Lo más curiso es que toda esta novela se genero luego de un comentario tal vez inofensivo de mano Julie Larson-Green quien mientras demostraba la nueva interfaz cargando una aplicacion que mostraba indicaciones del tiempo y sus pronosticos esbozo las palabras en ingles “This is written with our new development platform, which is based on HTML5 and JavaScript” ahora en español “Esta aplicación esta escrita en nuestra nueva plataforma de desarrollo que esta basada en HTML5 y Javascript” lo que ella no menciono fue que esta plataforma sera el remplazo a futuro de .NET (que quizas lo sea dependiendo de como evolucione el Internet) lo que tampoco dijo es que sera la plataforma preferida para programar en Windows 8, solo que la aplicacion que estaba mostrando fue desarrollada usando la nueva plataforma en la que estan trabajando y que entre las nuevas caracteristicas del Sistema Operativo ahora puedes usar la tecnologia web para crear aplicaciones de escritorio.

Luego de esto se han desentrañado muchas opiniones tanto oficiales como de parte de empleados de Microsoft, entre tanto la gente detras del Proyecto Jupiter ha comentado que todavia estan vigientes y trabajando para salir a la luz una vez Windows 8 salga al mercado.

Para los que no están enterados, Jupiter es una nueva librería de interfaz para Windows 8 que permitirá a los desarrolladores crear aplicaciones “inmersivas” (ni idea a que se refieren con este termino) usando un enfoque basado en XAML proveniente de las nuevas herramientas de Microsoft. Jupiter permitirá elegir varios lenguajes de programación entre ellos: C Sharp, Visual Basic, C++ y por supuesto tendrá soporte para aplicaciones nativas desarrolladas con Silverlight.

Basado en lo que pude ver de la presentación de Windows 8, Microsoft quiere competir con Google en el Nicho de los sistemas operativos basados en Web sin perder el chivo o el mecate, entre otras palabras ofrecerá soporte con esta nueva UI basada en Mango, ofrecerá esta nueva plataforma de desarrollo que permitirá Unificar el escritorio con Aplicaciones de Tecnología Web (HTML 5 / Javascript) y a su vez ofrecerá soporte a aplicaciones que no estén diseñadas con tanta novedad (En el vídeo se puede observar como Windows 8 hace un fall-back para ser compatible con aplicaciones “viejas” hasta muestra la barra del menu de inicio una vez ejecutada la aplicación) o que simplemente no compitan en este nicho definiendolo mejor como aplicaciones cuya disposición o paradigma sea imposible tener una presentación web.

Es claro que hay muchas opiniones al respecto y de gente importante en el nicho de bloggers sobre Microsoft, tambien estan las de muchos otro grupos cuyas interrogantes son validas y lamentablemente ocasionadas por la falta de comunicación que proviene desde las mas altas esferas de Microsoft, en mi opinión y dado a lo que he estado observando desde que Bill Gates dejo su puesto de CEO para dedicarse a la filantropía es que la Compañía ya no esta en postura de ataque o con rodilla en tierra como dicen por aquí, las estrategias han cambiado a patrones desconocidos y quizás pueda aceverar que dichas estrategias se han basado ultimamente en confunsión en vez de atracción por nuevos desarrollos y características de sus nuevos productos. Es lamentable ver al que una vez fue el mas grande y feroz adversario perder terreno por otras opciones, a la vez me alegro que este perdiendo terreno gracias a al impulso del Sofware Libre, es hora de aprovechar que el gigante esta tambaleando para acestar golpes que lo debiliten aun mas.

Me preocupa que dicha debilidad nos produzca retraso y quizás dirán “WTF!!”, pero mucho del impulso que ha tenido el Software Libre no solo proviene de las malas políticas de Microsoft y sus compañeros privativos, si no también por ser un adversario excelente, si somos un adversario pequeño solo nos importa mejorar y salir adelante para vencer, ahora es un tanto difícil saber que pasara una vez que hallamos derrotado al adversario y faltan algunos años para que esto sea una realidad pero lo que me no me gustaría es que se perdiera el ritmo por exceso de confianza.

Viendo esto desde otro punto de vista, si Microsoft y su equipo logran salir adelante con esto (Porque son conocidos por anunciar una cosa y publicar otra) tendrán una unificación con mucha cohesión, mayor inclusive de la que Google ha logrado con sus productos, es una batalla admirable la que estos contendientes están luchando (Google, Apple y Microsoft), con algunos anuncios de adquisiciones y modificación de posturas, Microsoft esta dejando por sentado que no quiere cometer los mismos errores que en el pasado y quiere tener posición a todo nivel ofreciendo productos de calidad y compitiendo con bajos precios (como Apple con su nueva versión de MacOS 10.7) tomando el control de todos los procesos.

Para finalizar les dejo unos videos de la Integración de estas plataformas:

Otro artículo Interesante sobre la Integración de XBox Live y Windows 8

Para reflexionar sobre todo esto, ¿Qué alternativas existen que se adapten a las 4 Libertades Básicas de la GPL que nos permitan unificar nuestra plataforma GNU/Linux con algún sistema operativo Móvil y/o plataforma de juegos o para DVR’s?, son libres de comentar al respecto.

Esta publicación toma mucho del contenido del post del amigo y entusiasta por Haiku-os Thom Holwerda en osnews acompañáda de mi opinion y otras adiciones sobre el tema.

Leer más

Mi presentación ante el Grupo de Usuarios de Linux de South MIami Dade

A finales del 2006 fue la ultima vez que asistí a una reunión del grupo de usuarios de Linux (LUG por su siglas en ingles) de Miami hasta este pasado fin de semana. El grupo es un poco mas pequeño de lo que recuerdo pero las intenciones y la motivación siguen siendo las mismas.

Mi participación este pasado 11 de Junio no se limito a ser oyente, por el contrario, di una corta charla que consistió en un recuento del FUDcon de Panamá, Un servidor casero económico y diagnosticar problemas usando strace.

El tema que mas genero preguntas fue el del "Un servidor casero económico" especialmente sobre un NSLU2 que lleve para que lo vieran, algunos de los participantes no podían creer que esa cosa tan pequeña con un costo menor de $30 pudiese convertirse en un servidor web. Parte de mi charla consistió en demostrar lo que es capaz de hacer este mini NAS hackeado a mini server, así que les mostré el blog http://www.linuxevolution.org que esta corriendo sobre mi NSLU2 y además les hice una demostración de transmisión de imágenes en vivo con fotos del evento.

La charla cerro con el tema de 'Diagnosticar problemas con strace' fue la siguiente y aunque cubrí todo lo básico, me hubiese gustado haber hecho una practica sobre este tema.

Aquí les dejo un video de parte de mi presentación donde le explico a un miembro del LUG sobre el NSLU2. Me despido muy agradecido con Jonathan Respeto del southdadelug.org por su invitación a este evento y pueden descargar aqui mi presentación en formato PDF.

Si te pareció interesante este articulo, tal vez este otro también te interese: Reunión de septiembre en el LUG de Miami

Leer más

El modo de single user (usuario individual) un modo en el cual un sistema operativo multi-usuarios es iniciado en modo de super usuario. Por lo general se usa para mantenimientos. En Linux es muy popular iniciar en este modo para cambiar el password del usuario.

Aquí les dejo los pasos para arrancar Fedora (y la mayoría de las distribuciones de linux) en modo single user.

  1. Al momento de arrancar presiona 'TAB' y seleccionamos el kernel desde el cual queremos arrancar en caso de que tengamos varios. deberías de ver una pantalla como esta: Seleccionamos la primera opción de arranque de Fedora Linux y presionamos la tecla e para editarla

  2. Presiona la tecla E para editar esta entrada en el menú de grub y selecciona la segunda linea, la que comienza con la palabra kernel.

    Es esta segunda linea que vamos a editar

  3. Presiona E para que puedas editar esa linea y agregar la palabra single al final de la linea.

    Asi se ve el inicio de la linea que vamos a editar en la configuración de grub

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Le pasamos el parámetro single al kernel en el grub

    Le pasamos el parámetro single al kernel en el grub

  4. Presiona ENTER para finalizar la edición de parámetros del kernel. Seguidamente presiona la tecla B para arrancar esa entrada del grub en modo single user. Como ven, ejecutando el comando who -r muestra en que nivel estamos, en este caso estamos en single.

    who -r nos muestra que estamos en single user mode

Una vez que iniciamos bajo modo single user, podemos iniciar el servicio de red ejecutando /etc/init.d/network start. Suficiente para usar fpaste y irssi y consultar cualquier duda que tengamos en el canal #fedora del servidor irc.freenode.net.

Supongamos que necesitamos soporte por que nuestra laptop no termina de iniciar. Algo que podemos hacer es iniciar en mode single user, arrancar el servicio de red y ejecutar cat /var/log/messages | fpaste luego ejecutamos irssi -c irc.freenode.net y nos unimos al canal de Fedora LATAM con el comando /j #fedora-latam, allí podemos compartir la URL que nos dio como resultado el comando fpaste.

Existe aun un nivel mas bajo que single user mode donde no se montan particiones en modo escritura. Es un nivel mucho mas básico. Para entrar en este nivel es necesario pasarle al kernel el parámetro init=/bin/bash en vez de pasarle single. Le pasamos el parámetro init con el valor /bin/bash al kernel en el grub

Un nivel mas bajo que single. Bajo init=/bin/bash el comando who no reporta en que nivel estamos. Un nivel mas bajo que single. Bajo /bin/bash el comando who no reporta en que nivel estamos

Leer más