lunes, 3 de diciembre de 2012

Alternativa al uso de cookies

Alternativa a las famosas cookies en el navegador... Ahora posible. 

En realidad me gustaría que fuera una revelación tan eufórica como parece el enunciado antes mencionado, sin embargo no es más que una alternativa que gracias a HTML5 es posible ahora, la cual consiste en guardar variables globales con la herramienta de localStorage que ahora proporcionan los navegadores que incluyen esta funcionalidad. Obviamente estamos utilizando javascript para conseguirlo.

El siguiente es el enlace al artículo de donde obtuve esta valiosa información, con un ejemplo sencillo y concreto.


Espero sea de su utilidad.

¡Saludos Javer@s!

martes, 16 de octubre de 2012

Line Wrap en NetBeans 7

Hay algunas opciones que encontramos de manera explícita en muchos editores de texto y herramientas para edición de código. Una de ellas es el Line wrapping, wrapping text, Wrap, etc. En editores como el Kate, gedit, notepad++, entre otros,  podemos encontrar esta opción muy a la mano. En otros como Eclipse es necesario tener el plugin correspondiente (al menos eso me comentaron yo aún no lo he checado en Eclipse pero prometo checarlo). 

En NetBeans es curioso pero esa opción se agregó hasta hace poco me parece. 

Para activar el Line Wrapping es necesario acceder en nuestro NetBeans a :
Tools >>> Options >>> Editor >>> Formatting

Y en ese cuadro de dialogo cambiamos el combo que dice : "Line Wrap" de "Off" a "After words", y ¡listo! quedará activado en nuestro editor. En la versión en español debe ser algo parecido.

Es buena idea darse una visita por estas opciones, pueden llegar a hacer mucho más confortable nuestro editor, pensemos que pasamos a veces horas ante esa pantalla y bien vale la pena que esté lo mejor adaptada a nuestros gustos y necesidades, hará más fácil la programada, se los aseguro.

Aqui la fuente de donde obtuve este útil tip:


Word/line wrap in netbeans 7


¡Hasta la vista Javer@s! 

lunes, 15 de octubre de 2012

Descargando... por favor espere...


En estos tiempos donde las descargas en internet como la conocemos se encuentran seriamente amenazadas con leyes como la famosa SOPA en Estados Unidos, la PIPA o el ACTA; es importante saber las alternativas que podemos tener para la descarga de los contenidos que nos interesan.

Hubo un tiempo, no hace mucho (de verdad no hace mucho, no soy tan viejo), cuando la única manera que había de descargar música o cualquier otro tipo de contenidos era a través de páginas con sus enlaces directos bastaba hacer un "guardar como ..." para tener los contenidos en nuestros discos duros, los sitios eran pocos y los contenidos sumamente limitados. 

Cuando el auge de los mp3 comenzaba, ya había algunos sitios  con nombres bastante sugestivos como downloadmp3.com o descargamusicagratis.com. Estos sitios parecían funcionar sin demasiados inconvenientes, de vez en cuando alguno era clausurado, pero en ese entonces eran más difíciles de encontrar, aunque con las velocidades que había, también era imposible pensar en descargar contenidos de películas u otra cosa que estuviera más allá de los 5 MB.

Después empezó el boom de los programas P2P (Pear to Pear). Fueron una maravilla para muchos usuarios, tiempos en los que el Napster reinaba sin duda. Aparecieron otros como Imesh, Audiogalaxy, Kazaa, Limeware, y alternativas que fueron evolucionando o cambiando de nombres cuando eran clausurados. Otros también aparecieron para quedarse hasta nuestros días, algunos que seguramente si identifica la generación actual como Ares o Emule. Una gran alternativa llevando el almacenamiento distribuido y descentralizado de contenidos al extremo, donde cada usuario es un repositorio posible. Por esta naturaleza descentralizada es que han sobrevivido a pesar de los años y los ataques de campañas "anti-piratería".

Y así -en realidad no me dí ni cuenta cuando sucedió- aparecieron los servidores de descargas. Estos repositorios gigantes de contenidos vinieron a cambiarlo todo, permitiendo la disponibilidad de nuestros archivos en la red. Con pocas restricciones si eras usuario gratuito, o con agregados bastante atractivos si eras usuario de paga. Uno de los más memorables y que sin duda todos extrañaremos es el magnífico Megaupload. Precisamente por la reciente desaparición de éste servidor, podemos prever un panorama difícil para este negocio, ya que muchos sitios se ven amenazados por las políticas que se quieren implantar "pro derechos de autor". La cuestión de estas leyes es un tema a parte, ha venido creciendo en popularidad y será centro de muchos debates todavía en el futuro.

En estos recientemente ha aparecido Mega, la nueva propuesta del creador de Megaupload, dice es una alternativa que además de ser completamente legar revolucionará al mundo, veremos que sucede.

Bueno, para terminar esta entrada me gustaría incluir algunas recomendaciones de sitios donde se publican recursos en la red, descarga de contenidos multimedia, programas, herramientas e incluso conocimiento o cultura en general. Hablo de sitios que también se encuentran amenazados por el hecho de  estar funcionando al margen de las políticas restrictivas del conocimiento que hemos mencionado anteriormente.

Aquí los sitios, seguramente muchos ya son por demás conocidos por ustedes, sin embargo es bueno mencionarlos y si hay alguien que no los conocía es bueno que se den una vuelta, son de verdad muy buenos y seguro a más de uno nos han sacado de más de algún apuro:
  • taringa
  • directoriow
  • argentinawarez
  • thepiratebay
No sabemos que sucederá, solo que estos duros golpes a los servidores para descargas de archivos serán un factor que hará que se cambie de rumbo seguramente, una alternativa muy interesante siguen siendo las descargas por medio de Torrents, lo cual lo platicaremos más adelante. El Ares por su parte parece estar aferrado a no morir y seguir siendo la primera opción si de descargar canciones se trata. Emule sigue funcionando, hay otros servidores de descargas que siguen apareciendo y que siguen dando a sus usuarios maneras de continuar compartiendo sus archivos. El futuro no se ve tan claro, seguro cuando menos nos lo imaginemos habrá un importante cambio de nuevo. Esperaremos.

Me despido. Sigamos descargando, compartiendo, descubriendo y creando ... el conocimiento es del mundo 8)  ¡¡Hasta la vista Javer@s!!

lunes, 24 de septiembre de 2012

Abrir archivos psd cmyk con gimp, un poco de ayuda

He estado trabajando en algunos proyectos web y por lo general es necesario hacer ediciones de algunas imagenes, para esto he utilizado GIMP. Como muchos sabrán es una interesante alternativa para la edición de imágnes al estilo de Photoshop. La verdad para cosas sencillas que he necesitado ha sido más que suficiente, no soy un master pero he podido realizar algunos efectos sencillos y retoques básicos.

En una ocasión me tocó importar unos archivos PSD que en general se abren sin problemas con GIMP sin embargo hay un modo CMYK que utiliza la aplicación de Adobe que nos puede mostrar un error como este:

Error loading PSD file: Unsupported color mode: CMYK

Encontré despues una entrada que habla de haber tenido el mismo problema y fue así como lo pude resolver y abrir el archivo psd sin problemas, aunque siempre hay que hacer algunos ajustes (como en el caso de archivos *x de la suite de MS-Office al abrirlos con Libre Office)  que a veces no interpreta bien GIMP, pero en general son cosas salvables.

Bueno aquí les dejo el enlace del artículo original, el cual mis respetos y agradecimientos al autor, es bastante bueno:

Abrir archivos PSD CMYK con Gimp

¡¡hasta la vista Javer@s!!!


sábado, 31 de marzo de 2012

Case insensitive Mysql: sensibilidad a mayúsculas y minúsculas en MySQL


A continuación incluyo un pequeño artículo donde habla de como MySQL es sensible a mayúsculas y minúsculas en función del sistema operativo que lo esté conteniendo. Como es bien sabido Linux es sensible a mayúsuculas, por lo tanto en un servidor MySQL corriendo en Linux se presentará éste caso. En uno corriendo en Windows al parecer no será así, porque Windows no es sensible a mayúsculas. En el artículo se da una breve descripción del porqué. 

Tuve un problema similar al del artículo utilizando Hibernate con anotaciones en una aplicación Java, donde se nos había ocurrido poner los nombres de tablas con mayúsucula inicial, como por ejemplo: "Usuarios", quienes usábamos Linux tuvimos que resolverlo porque nos creaba por ejemplo la tabla "usuarios" vacía. 

Me voy directo a la manera para resolverlo, transcribiendo del artículo:
Afortunadamente, MySQL contempla el problema. Basta arrancar con mysqld –lower_case_table_names=1 y así cuando creemos cualquier base de datos o tabla, automáticamente la pondrá en minúsculas, haciendo que aparentemente se convierta en "case insensitive". No es totalmente cierto, porque lo que hace en realidad es convertirlo todo a minúsculas.
Aquí el artículo completo. Espero les sea de utilidad:


Aprovecho para agradecer al autor, muy recomendable su blog

¡Saludos Javer@s!

domingo, 4 de marzo de 2012

Recursos en la red: CMS's

¡HOla Javer@s!

Hoy con la intención simplemente de poner sobre la mesa un interesante tema. En la red hay múltiples sitios que comparten características de manera general. Claro que a alguien se le ocurrió un día desarrollar herramientas que automatizaran la creación de algún tipo de sitios. Así fueron apareciendo los famosísimos CMS (Content Management System) o editor de contenidos como comúnmente solemos referirnos.

Los hay para toda clase de contenidos: publicación de artículos, catálogos de productos, blogs, páginas personales, e inclusive contenidos mas complejos e interacciones más específicas. 

Nombres y productos hay muchos: Joomla, Drupal, Moodle, Fork, Wordpress, Mambo, Calipso, y un interminable etc...

A continuación incluyo una lista donde aparecen algunos de los CMS de código abierto más populares:

¿Alguna sugerencia o experiencia con estas interesantes herramientas?  Bienvenidos los comentarios.

¡Saludos Javer@s!

Hasta la próxima...

jueves, 1 de marzo de 2012

Obtener videos Flash desde cache en Linux

Hoy les platico algo que es más como una curiosidad que en ocasiones es útil. Parafraseando una entrada en internet cuya fuente sito al final, pude resolver algo que a mi me ha servido para guardar un respaldo de los videos Flash que veo de repente por la red.

Con las versiones anteriores del plugin de Flash Player de Adobe en Linux era posible ver directamente el archivo que se quedaba en cache de disco al ver nuestros archivos Flash en algún navegador. Entonces sin necesidad de usar herramienta adicional podiamos copiar un video accediendo al directorio tmp de nuestro sistema de archivos, escribiendo en la consola algo como esto:
$ cp /tmp/FlashXasdf ~/video.flv
En ese entonces identificábamos fácilmente un archivo Flash por el prefijo "Flash" presisamente... que difícil ¿verdad?

Sin embargo los chivos de Adobe pensaron que esto no debería suceder y en las versiones siguientes de su plugin han quitado este comportamiento. Ahora lo que hacen es borrar el archivo del sistema de archivos sin embargo se sigue descargando y sigue ocupando espacio en el disco duro, por lo tanto mantiene una liga para poder accederlo. Mientras exista un hilo de ejecución que tenga referencia a ese archivo (en nuestro caso el plugin de Flash, ¡cuidado! si cierras el plugin o el navegador esta referencia desaparecerá llevándose el archivo consigo), el archivo permanece en el sistema de archivos en Linux. A grandes rasgos algo así es lo que sucede.

Ahora, para acceder a este archivo y copiarlo a nuestro directorio haremos uso de un par de herramientas en linux. La clave de este descubrimiento es que se sigue creando en un primer momento el archivo como /tmp/Flash* así que de esa manera lo buscamos:
$ lsof | grep Flash 
COMMAND   PID   USER      FD  TYPE DEVICE SIZE/OFF NODE NAME 
firefox-b 23230 vagabundo 84u REG  254,0  1065348  929 /tmp/FlashXXQCasdK (deleted)
El header esta agregado, asi que el comando lsof solo les mostrará lo campos de la parte de abajo, para que no se vayan a asustar. De los datos que aparecen los que nos interesan en particular son el PID y el FD que son con los que podremos hacer referencia al archivo en cuestión.

Para continuar usaremos el directorio /proc del sistema de archivos. Éste directorio tiene varias gracias, ofrece mucha información del sistema que se esta ejecutando actualmente y esta presente por lo general en todas las distribuciones Linux. También mantiene archivos utilizados por las aplicaciones. En este caso con los datos que hemos recolectado antes (PID=23230 ,FD=84). Estos datos apuntan a una referencia que seria /proc/23230/fd/84 . Sin embargo no podemos acceder directamente a nuestro video, es necesario hacer un truco más escribiendo en nuestra consola:
$ cat /proc/23230/fd/84 > ~/video.flv
Y .... ya tenemos nuestro video C: 

Espero les sea útil. Este prcedimiento es, como lo comenté en un pricnipio, para Linux. En Windows no se si se pueda hacer algo similar, pero seguramente también hay alguna manera, ¿Alguien conoce alguna?

Anexo aquí el tutorial original de donde parafraseé el contenido de arriba, a cuyo autor se le agradece enormemente. Viene un poco más explicado aunque en inglés:


¡Saludos Javer@s!... hasta la próxima...

sábado, 25 de febrero de 2012

Agregar Sintax Highlighting a blogger o a web

Desde que conocí el concepto de "sintaxhighlighting" y lo vi funcionando en un editor de algún lenguaje - el primero que conocí lo vi en el editor de c++ de Borland en modo texto... ¡uy nostalgia! - me dí cuenta que era una de esas herramientas para desarrolladores que difícilmente podría dejar de utilizar. Te cambia completamente el panorama de haber escrito programas en editores planos, aburridos y sin chiste. Los desarrolladores pasamos horas y horas a veces en frente de una pantalla de algún editor, es gratificante cualquier cosa que pueda hacer más llevadero este tiempo, sobre todo si se está programando algún módulo o sistema engorroso o enfadoso.

En la actualidad cualquier editor de texto pueda considerarse medianamente decente tiene la opción para hacer resaltado de sintaxis (sintaxis highlighting) de los archivos fuentes más comunes (c, c++, java, php, basic, html, xml, c#, etc). Conste que hablo de editores de texto planos, los procesadores de texto son otro cuento muy diferente.

Al poco tiempo el resaltado también se ha utilizado en las páginas web, y no había razón alguna porque aquí en ésta bitácora no hiciéramos uso de esta notable herramienta.

Aquí una manera muy sencilla de implementación para Blogger que a su vez puede utilizarse en cualquier página web que estén desarrollando. Esta es la alternativa que estoy usando por cierto:

Tutorial usar Syntax Highlighting en Blogger

Ésta alternativa se puede utilizar para cualquier página que estén desarrollando, definitivamente creo el syntax highlighting se ve bien.

Aqui un ejemplo de como se ve y a la vez de como se puede usar en una página html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml'>

  <head>
      <base href="http://alexgorbatchev.com/"/>
    <title>SyntaxHighlighter - Feature Demo</title>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js' type='text/javascript'></script>
 
    <link href='/SyntaxHighlighter/css/main.css' rel='stylesheet' type='text/css' />
  <link href='/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css' />
  <link href='/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css' />
  <script src='/pub/sh/current/scripts/XRegExp.js' type='text/javascript'></script>
  <script src='/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
  <script src='/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'></script>
  <script src='/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
  <script src='/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script>
  <script src='/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script>
  
  </head>
  <body class='no_sponsor'>
    
    <div id='content'>
      
      
      <h3 id='source'>Source</h3>
      <pre class='brush: plain'>
       <pre class="brush: php; highlight: [5, 15]; html-script: true">
       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>SyntaxHighlighter Demo Page - <?= htmlspecialchars($title) ?></title>
       </head>
      
       <body>
      
       <?
       /***********************************
        ** Multiline block comments
        **********************************/
      
       $stringWithUrl = "http://alexgorbatchev.com";
       $stringWithOutUrl = 'hello world';
       
       ob_start("parseOutputBuffer");  // Start Code Buffering
       session_start();
       
       function parseOutputBuffer($buf) {
        global $portal_small_code, $portal_gzcompress;
        global $PHP_SELF, $HTTP_ACCEPT_ENCODING;
      
        // cleaning out the code.
        if($portal_small_code && !$portal_gzcompress) {
         $buf = str_replace(" ", "", $buf);
         $buf = str_replace("\n", "", $buf);
         $buf = str_replace(chr(13), "", $buf);
        }
       }
      
       ?>
      
       <!-- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -->
      
       </body>
       </html>
       </pre>
      </pre>
      <h3 id='result'>Result</h3>
      <pre class='brush: php; highlight: [5, 15]; html-script: true'>
       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>SyntaxHighlighter Demo Page - <?= htmlspecialchars($title) ?></title>
       </head>
      
       <body>
      
       <?
       /***********************************
        ** Multiline block comments
        **********************************/
      
       $stringWithUrl = "http://alexgorbatchev.com";
       $stringWithOutUrl = 'hello world';
       
       ob_start("parseOutputBuffer");  // Start Code Buffering
       session_start();
       
       function parseOutputBuffer($buf) {
        global $portal_small_code, $portal_gzcompress;
        global $PHP_SELF, $HTTP_ACCEPT_ENCODING;
      
        // cleaning out the code.
        if($portal_small_code && !$portal_gzcompress) {
         $buf = str_replace(" ", "", $buf);
         $buf = str_replace("\n", "", $buf);
         $buf = str_replace(chr(13), "", $buf);
        }
       }
      
       ?>
      
       <!-- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -->
      
       </body>
       </html>
      </pre>
      <script src='/SyntaxHighlighter/scripts/main.js' type='text/javascript'></script>  
    </div>
    <div id='clear'></div>    
   
  </body>

</html>


Hay muchas otras alternativas, esta sólo es una de ellas pero espero les sea útil... ¡¡¡saludos javer@s!!!

miércoles, 25 de enero de 2012

Webservices con PHP

El uso de webservices se ha generalizado en la red debido al uso de diferentes tecnologías en sistemas globales y la necesidad de comunicación entre diversos componentes. A alguien en algún momento se le ocurrió: "Bueno, si el protocolo más utilizado para transmitir datos a través de internet es el http, porque no hacemos un estandar para la comunicación de nuestras aplicaciones que se hagan por medio de ese protocolo, sin importar en que lenguaje o plataforma estén corriendo"... y ¡gualá! aparecieron los estandares para el uso de Webservices en las aplicaciones modernas.

Se supone, que un webservice debidamente hecho y que cumpla con los estándares establecidos, será capaz de proporcionar un recurso para cualquier aplicación bajo cualquier lenguaje que soporte clientes de webservices. Para este ejemplo de uso de webservices es bueno que estemos familiarizados con conceptos de: HTML, XML, WSDL,SOAP y PHP.

En este caso vamos a crear un webservice de lo más sencillo utilizando PHP. Vamos a utilizar dos formas, una por medio de la librería nativa de PHP para crear un servidor SOAP y otra utilizando una librería que ya tiene un buen tiempo que funciona para hacer webservice de manera fácil y rápida en PHP llamada NuSOAP.

Ejemplo Webservice con PHP y NuSOAP

Aquí un ejemplo de servidor webservice que llamaremos serverNuSOAP.php usando la librería de NuSOAP que se descarga de su sitio. Para su funcionamiento necesitamos tener en el mismo lugar el directorio con la librería NuSOAP para que funcione la linea de require_once('lib/nusoap.php'); .

Teniendo nuestro archivo en un servidor Apache con PHP y con los módulos SOAP habilitados, podemos acceder a la especificación WSDL por medio de http://midominio/serverNuSOAP.php?wsdl y NuSOAP nos generará automáticamente el archivo WSDL.

Ahora vamos a ver un pequeño cliente (cliente.php) que utilice este servicio:
De esta manera accedemos al servicio publicado.

Ejemplo Webservice sólo con PHP

Ahora un ejemplo utilizando solo las librerías de PHP. Incluyo esto porque, aunque la librería de NuSOAP hace las cosas realmente fáciles, no es una librería estándar, es un esfuerzo hecho por terceros que no se encuentra completamente actualizado y además, leí por ahí, que no permite utilizar ciertas herramientas para mantener la seguridad en nuestros Webservices. En fin, aquí el ejemplo de como sería un servidor muy sencillo del webservice al que llamaremos servicio.php:

Este servicio lo podríamos consumir de la misma manera que el anterior, sin embargo al no tener un archivo WSDL con las definiciones pertinentes lo consumiremos a través de un cliente al que llamaremos clientephp.php:

Este ejemplo funciona perfectamente con clientes PHP, sin embargo hay problemas con aplicaciones hechas con otros lenguajes, como C# por ejemplo. Si queremos utilizar nuestro servicio desde cualquier cliente es importante tener publicado el archivo WSDL, que en este caso tendríamos que generar a patín o por medio de algún generador de WSDL. Java y C# pueden generar el archivo WSDL al vuelo en la forma que lo hace NuSOAP, pero no he encontrado la manera de hacerlo a través de las librerías nativas de SOAP para PHP, si alguien tiene algún ejemplo sería muy útil que lo pudiera compartir.

Les anexo un par de ejemplos más:
Ejemplo sencillo
Otro ejemplo sencillo

Un par de herramientas para generar WSDL con PHP. Yo he utilizado Katy (wsdl-writer) y es fácil de implementar, aunque creo que el proyecto ya no esta en mantenimiento. De cualquier manera son alternativas fáciles para una tarea, que al hacerlo a patín, resulta ser de lo mas engorrosa.
WSDL Generator
wsdl-writer


Hasta aquí llegamos el día de hoy Javer@s.... hasta la vista....