sábado, 19 de julio de 2014

Simple programa para ver videos de youtube con Flash sin HTML5 y que no se corten al minimizar


Buenas noches.
Este mini post tiene el objetivo de solucionar un drama enorme que se viene sucediendo en los últimos tiempos con Youtube y HTML5. Conozco muchos casos, muchísimos, en los que antes podían escuchar música desde Youtube, minimizando la ventana del navegador y haciendo otra cosa en la computadora. Hoy en día, culpa de la actualización de Flash a HTML5 de los vídeos, esto se ha vuelto un poco tedioso, muchos vídeos entrecortan la música al querer hacer lo mismo que antes con Flash y en algunos casos hasta se tilda el navegador, lo que conlleva a emitir cientos de insultos a la computadora.
Todos culpan entonces que su computadora está lenta, pero no es tan así, en gran parte tiene que ver HTML5, Youtube por defecto usa el reproductor que viene incorporado en el nuevo estándar de este lenguaje y las etiquetas <video></video> sin, me parece, importarles que anda como el culo (Perdón la expresión, igualmente me importa poco si les molesta).
Bien, para resolver esto, decidí hacer un programita que reproduzca vídeos de Youtube pegando el link del mismo en un TextBox y usando Flash, como en viejas épocas.
Probando esto, vi que Flash descarga y reproduce los vídeos con mayor velocidad y ocupando muchos menos recursos, una joyita.
En Windows, ya vienen por defecto las librerías de Flash para reproducir vídeos, por si de casualidad no las tiene el ".rar" que acompaña este post la posee. Esta librería se llama AxInterop.ShockwaveFlashObjects.dll. La pueden agregar como referencia desde las COM no desde las NET cuando coloquen en Agregar Referencia.
Una vez agregada esta librería, deben agregar el control a las herramientas, porque casi seguro que no les va a aparecer. El control que les debe aparecer es como un panel, ese panel es donde se va a reproducir el vídeo. Si no les aparece en las herramientas coloquen en elegir elemento apretando botón derecho del Mouse sobre las herramientas y ahí elijan la misma dll que referenciaron.
Bien, entonces creamos un proyecto de Windows Form (me olvidaba decirles que iba a ser Windows Form). Luego referencien como les indiqué más arriba. Una vez obtenido el control, lo arrastran al Formulario, además arrastran un botón y un TextBox.
En el TextBox vamos a crear un evento KeyPress que va a tener la función de que cuando se presione enter se va a ir al vídeo que se indique, el botón va a tener el evento click que también va a realizar la misma función:

Los eventos mencionados son los siguientes:

private void ClickGo(object sender, EventArgs e)
{
vPlay();
}

private void PressEnter(object sender, KeyPressEventArgs e)
{
if(e.KeyChar==(Char)Keys.Enter)
{
vPlay();
}
}

Bien, como verán, ambos eventos ejecutan el método Play(), el método Play es el siguiente y más abajo explico cada cosa:

void vPlay()
{
smovie=TextBoxYoutube.Text;
vConvert();
FlashYoutubePlayer.Movie=smovie;
}

- smovie es un string que declaré globalmente (En el código que adjunto está).
- FlashYoutubePlayer es el nombre que le dí al control Flash agregado.
- vConvert() es una función que realiza una conversión del link de Youtube, veámosla:

void vConvert()
{
if(smovie.Contains("watch?v="))
{smovie= smovie.Replace("watch?v=", "v/"); }
}

Esta función quita del link "watch?v=" y lo reemplaza por "v/", esto hace que se eliminen las restricciones por país y se pueda reproducir cualquier vídeo. Se pueden hacer muchísimas cosas más, como agregar una base de datos que guarde los vídeos reproducidos, que los descargue y que guarde los links, además de otras cosas sobre el mismo control Flash, etc... Pero dejaremos esto para una futura versión... que quizás nunca llegue.

Va a tener muchas restricciones este mini programa, no les va a mostrar por ejemplo los vídeos recomendados de los costados, ni se va a poder presionar el "volver a la página anterior", sí les va a mostrar los vídeos recomendados al final del vídeo, pero el beneficio es que no se les va a cortar, va a andar rápido y ademas no te vas a tener que comer las propagandas malditas que te ponen estos desgraciados, es ideal para trabajar mientras se coloca una lista de reproducción de Youtube.

Yo lo compilé utilizando el Net Framework 2.0 para que ande en la mayoría de las computadoras, si quieren en las opciones pueden cambiarlo al .Net 4.0 que va a andar sin dramas. No incluyo el Net Framework en el instalador porque va a ser muy pesado. El instalador está hecho con ClickOnce, aunque prefiero mi querido Inno Setup con ISTool.

Bien, acá les dejo el código y el Instalador del mismo. Este lo hice en Visual Studio 2010.

Los que no son programadores, descarguen el instalador solamente.

Espero les sirva. Un saludo.

Código de YoutubePlayer

Instalador


viernes, 20 de junio de 2014

MySQL, PostgreSQL, Richard Stallman y la elección de una base de datos para nuestro sistema.

 La licencia GPL, la bendita licencia GPL o maldita mejor dicho para mí, es una tremenda trampa para quienes quieren hacer dinero con el software, una tremenda trampa es MySQL por usar esa licencia.
Hasta hace un tiempo, un jefe de una empresa importante de software me dijo que uno podía usar MySQL con fines comerciales y dentro de productos con código privativo sin pagar un solo centavo a Oracle, que es la actual dueña de MySQL (todo el mundo sabe que compró SUN Microsystem antigua dueña de MySQL para limitar el desarrollo de ésta Base de Datos y destruir su competencia, aparte de hacerse con los derechos de JAVA, el supuesto lenguaje libre (que de libre no tiene nada)), dijo que sólo habría que pagar si se le pedía soporte o se reformaba el código. No sé que pasará para los desarrollos ya hechos con MySQL, pero la verdad es que este jefe estaba equivocado, completamente, hay que ser estúpido para ser director y no saber la verdad del asunto, debería dejar su cargo ya que por su culpa, esta empresa se podría comer decenas de juicios.

 La verdad de la milanesa es que si de verdad querés ganar plata con un sistema, éste no deberá ser open source. Me van a decir que Google y Facebook hacen todo open source, bien, entonces que te den el código fuente de su buscador y de su red social respectivamente, ya que todo es open source. Critican a Microsoft por usar licencia privativa en su producto Windows, pero como Windows es su principal producto, al igual que la red social para Facebook y el buscador para Google (que como dije, no entregan su código fuente), entonces por qué Microsoft es el demonio y los otros los santos? Con esto no quiero decir que Microsoft sea santo, quiero decir que los otros están a su mismo nivel.

 Luego está el caso de Apple, que tiene todo privativo pero está como "santificado", quién sabe por qué, si casi todo lo que hace es privativo.

 Y después está Richard Stallman, acérrimo defensor del open source, llevando luces de fuegos de artificio y haciendo creer que todo sería un paraíso si todos los sistemas fueran open source. Si esto fuera así, a los programadores nos convendría poner una verdulería o ir a trabajar de cartoneros.

 Richard Stallman, alias la máquina de criticar, dice lo siguiente de cada lenguaje y empresa:
Java: Decía que había inseguridad y que no era open source, por lo tanto, que no usen Java.
C++: Decía que era un mal diseño, que no lo usen tampoco.
C#: Decía que si Microsoft cambia su licencia, estamos fritos todos los programadores. Así que no había que usarlo.
Windows: Que sus usuarios están presos y que es una porquería como Microsoft.
Apple: Que es peor que Microsoft.
Linux: Que arruinó el GNU y que culpa de Linus Torvals no lograron el núcleo propio y demás cosas contra Linus y Linux.
Si fuera por él, sólo habría que usar Lisp y Unix, eso y morirnos de infelices, es lo mismo.

 Soy usuario de software libre y creador de software libre, pero hay límites, límites que Richard no los tiene y critica todo lo que se le cruza sin pensar que él usa o usaba una notebook (usaba porque se la robaron, habrán dicho "es open source" y me la llevo) que no permitía instalar software privativo, siendo que esa misma restricción, impide al usuario de hacer la principal ley del open source, que es hacer lo que se quiera con lo que se compra o adquiere.

 Este post tiene un rápido análisis de las bases de datos existentes y de cuál es la indicada para hacer un sistema de doble licenciamiento (GPL y Privativo) el cuál deberá poseer conectores ADO.Net para la plataforma .NET, en cuyo caso la base de datos no tenga costo alguno:

Barajé algunas posibilidades, que son en resumen, bases de datos conocidas y con las que trabajé varias veces y a continuación detallo los resultados:

SQLServer: Esta base de datos es propiedad de Microsoft, es de código privativo y tiene una versión express totalmente funcional con algunas limitaciones con respecto a la versión completa, como 4GB de tamaño máximo por base de datos, uso de un sólo núcleo de preprocesador. La versión completa encarece demasiado el  proyecto, además de la posibilidad de una futura versión Linux, Android, Mac/OS e IOS hicieron que descartara su uso por el trauma que significaría una migración a otra base de datos compatible con los otros sistemas operativos, no ocurriría lo mismo con otras soluciones privativas de Microsoft como el caso de Microsoft Solver y Microsoft Sync Framework, que usaría en el proyecto y que mudaría de sistema operativo gracias a Xamarín y la plataforma Mono, en cuyo caso  simplemente con cambiar de librería se solucionaría el problema de migración. Por otro lado la versión Express es poco clara con respecto a su uso, pudiendo ser objeto de sanciones legales.


MySQL: Este motor de bases de datos es el más usado en el mundo, extremadamente rápido para aplicaciones incluso de gran tamaño, fácil de usar y de configurar con las características que pueden usarse triggers, funciones, backups, replicación, uso de algunas herramientas excelentes como MySQL WorkBench y Mysql Administrator. Actualmente es propiedad de Oracle que lo heredó al comprar Sun Microsystem, su antigua dueña. Parecía ser la solución perfecta ya que trabajé en esta base de datos la mayoría del tiempo, incluso la estructura de datos (Modelo Entidad-Relación) para este proyecto la realicé en MySQL WorkBench con la predisposición de  usarla casi convencido. En lo apresurado del título "Gratis" que tiene MySQL, obvié algunos conceptos de lo que significa la licencia que posee, la GPL (General Public License). El doble licenciamiento que pretendo darle al producto (Licencia Privativa y Licencia Compatible con la GPL versión 2) hubiese implicado una posible demanda por parte de Oracle si no adquiría  una versión comercial para cada producto vendido con licencia privativa, esto encarecía en 2 mil pesos por unidad de producto debiendo cargar con los costos el cliente y si usare la parte cliente (esto iba en contra de una de las ventajas que va a tener el software en donde no se pretende cobrar por cada copia de acceso a datos en modo Cliente desde tablets, smartphones y otras pcs), también debía pagar por la misma para no tener posibles problemas legales con Oracle, pasando de 6 mil pesos a 8 mil pesos aproximadamente por unidad servidora el producto en su costo total y otros 2000 mil pesos por unidad Cliente, lo cual desanimaría a los clientes que compraran el producto en cuanto al precio. Es de suponer que la licencia privativa será más barata que la open source, pero este tipo de licenciamiento al tener un costo elevado, muy pocos verán con buenos ojos comprarlo (por más verso que haya sobre el Open Source).
La Licencia GPL busca asegurarse que todo software que incluye una parte  GPL, debe ser también GPL, ya que se considera software "derivado" y si esto no fuera así, no cumpliría los términos de la GPL dando lugar a juicios por patentes.

MariaDB: Del mismo creador de Mysql, proporciona total compatibilidad con esta última es  más rápida y con novedades que la mejoraban considerablemente, pero  esto es casi lo mismo ya que su licencia también es GPL, con la diferencia que si se usa como cliente (conectores que acceden a  la BD) la licencia es LGPL (Lesser General Public License) con permiso para poder incluirla en software privativo sin tener que pagar, igualmente quedaba lo de tener que pagar por la licencia servidora para la licencia privativa. Queda entonces descartada por lo mismo que MySQL.

PostgreSQL: Posee una licencia BSD (Berkeley Software Distribution), incompatible con GPL ya que este permite poder usar la base de datos en una aplicación privativa, pudiendo distribuir en el mismo instalador a PostgreSQL gratis sin tener restricciones por patentes ni licencias, con la  única obligación de de acompañar la distribución con un archivo ".txt" que indica los permisos de la misma. Además es la mejor opción por versatilidad (compite con la base de datos Oracle y es más robusta que MySQL, además de que puedo modificarla, venderla y nunca depender de una empresa como  en el caso de MySQL o SQLServer). PostgreSQL es la indicada, además de que un sin número de servidores la apoyan en el mundo y está en constante progreso con su variedad de colaboradores y su seguridad que a todos sorprende.

SQLite: Esta base de datos no es Cliente - Servidor, no posee un proceso activo a la espera de recibir y enviar información. Es muy rápida, he realizado algunos trabajos para este motor. La gran desventaja que tiene los otros motores con este otro, es que no pueden usarse en smartphones o tablets que requieren ahorro de energía, IOS, Android, Windows Phone y RT difícilmente puedan  contener a PostgreSQL o MySQL. El objetivo no es usarla como base de datos principal sino, como base de datos que sirva para la replicación o sincronización en conjunto con PostgreSQL.

CONCLUSIÓN:
 PostgreSQL con SQLite son las indicadas. En el caso de PostgreSQL la he probado guardando imágenes y toda clase de archivos en formato bytea y anda espectacular (las guardo en distintos tamaños de previsualización e hice algoritmos que cuando crece la bd hasta cierto punto, cree una nueva bd), soy defensor total de que hay que guardar todo en la base de datos (no la ruta, todo el archivo) y cuyo análisis y experiencia sobre el tema lo dejo para otro post. MySQL también es bárbara y también la probé guardando imágenes en formato blob y mediumblob y anda fenomenal con el manejo de imágenes y archivos en general, pero muere con su licencia GPL.
 PostgreSQL es un mundo, hay de todo lo imaginable y lo inimaginable, es cuestión de ponerse, aunque acepto que lleva más tiempo trabajar con PostgrSQL que con MySQL.

Espero haber aclarado dudas y que les sirva mi análisis. Saludos.