Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

Obteniendo una Conexion a partir de un EntityManager

Hace unos dias cuando estaba realizando unos reportes con la herramienta iReport, me tope con la necesidad que para poder invocar los reportes elaborados era necesario enviar una instancia de un objeto Connection para el metodo que genera el reporte.

Crear una conexion es sencillo pero yo no estaba manejando mi conexion de la manera tradicional pues estaba usando JPA que es la API de persistencia de datos de Java y esta es la que maneja las conexiones y la configuracion de la cadena de conexion se guardda en la unidad de persistencia que es nada mas y nada menos que un XML.

En un principio pense en acceder al XML directamente, pero como sabia que la conexion se maneja a traves del objeto EntityManager decidi averiguar como se hacia y pues la forma fue la siguiente asi de simple:

public Connection getConnection() {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("NombreUnidadPersistencia");
EntityManager em=emf.createEntityManager();
return ((oracle.toplink.essentials.ejb.cmp3.EntityManager)em)
.getServerSession()
.getDefaultConnectionPool()
.acquireConnection()
.getConnection();
}


Espero que esto le sirva cuando se tenga la necesidad de obtener una instancia de la conexion que esta utilizando a travez de un EntityManager.

Comentarios (3)

Introduciendo al uso de persistencia de datos JPA

Como parte de mi promesa de volver a bloguear activamente, ahora voy a escribir sobre el uso de la API de persistencia de datos de Java comunmente llamado JPA.


Pero antes de empezar este post aun recuerdo cuando Rodrigo queria implementar esta historia en nuestro proyecto de Sistemas de informacion gerencial, definitivamente si a mi no me hubiera agarrado el berrinche hubiesemos avanzado bastante en poco tiempo, ya que perdi bastante tiempo queriendo escribir mis diske reglas del negocio, por eso en ese caso se aplico bien lo que dicen la gente adulta "uno de cipote es tonto".

Este post se centrara en utilizar JPA utilizando el IDE Netbeans 6.1, ya que es el que tengo mas tiempo utilizandolo, y en mi caso la base de datos de mi preferencia es PostgreSQL.

La base de datos que cree la llame simplemente "tienda" y su estructura esta compuesta por dos tablas:

CREATE TABLE tienda
(
id serial NOT NULL,
descripcion character varying(20),
CONSTRAINT pk_tienda PRIMARY KEY (id)
)

CREATE TABLE empleado
(
nick character varying(15) NOT NULL,
nombre character varying(30),
fk_tienda integer,
CONSTRAINT pk_empleado PRIMARY KEY (nick),
CONSTRAINT tienda_empleado FOREIGN KEY (fk_tienda)
REFERENCES tienda (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

Luego de esto nos dirigimos a nuestro Netbeans y creamos un proyecto "Java Application", creamos el nombre que nos plazca en mi caso le coloque JPAejemplo, incluso deje que el Netbeans me creara una clase con el metodo main que es alli donde mostrare su uso.


Luego de esto nos vamos a la pestana de "servicios" y creamos una nueva conexion a una base de datos, lo bueno de usar Netbeans es que ya trae el driver para PostgreSQL o si se desea tambien MySQL, si se esta usando algun otro como SQL Server, Oracle, SyBase, etc., es necesario agregarlo.


Para crear la nueva conexion hacemos clic derecho sobre el nodo que dice "Databases" en la pestana de servicios, y elegir la opcion "New Connection" del menu emergente. Ingresamos los datos necesarios para pegarnos a nuestra base de datos y damos aceptar.


Ya teniendo nuestra conexion abierta procedemos a crear nuestros objetos de reglas del negocio persistentes.

Para ello damos clic derecho sobre el proyecto, elegir nuevo y dar clic en la opcion "Entity Classes from Database", aparecera un asistence para la creacion de nuestros objetos persistentes.

El primer paso es elegir la conexion que creamos, para luego escoger las tablas que estaran involucradas.

Luego dar siguiente el asistente nos preguntara el nombre que le daremos a nuestras clases asi como tambien el paquete donde las encapsularemos.


Notese hay una alerta la cual indica que no hemos creado una unidad de persistencia debemos crearla para poder proseguir, asi que hacemos clic en el boton "Create Persistence Unit".


En la ventana de dialogo por lo general no se toca simplemente lo dejamos como esta siempre recordando el nombre de la unidad de persistencia que en este caso se llamara "JPAejemploPU", que luego la utilizaremos pero eso sera solamente una vez.

Ya generada la unidad de persistencia precionaremos el boton finalizar. Si seguimos los pasos tal cual como lo he indicado debemos tener dos clases creadas una llamada "Empleado" y la otra "Tienda".

Ahora para poder continuar debemos tener claro el tipo de dato que son las llaves primarias de las dos tablas que creamos en el caso de la tabla Tienda su llave primaria es de tipo "Serial" es equivalente a la opcion autoincrement de MySQL o IDENTITY de SQL Server.

Teniendo claro eso definimos la forma en la clase Tienda de como se generara el codigo primario cuando se indique que queremos realizar por decirlo asi un insert.

En la seccion del campo Id de la clase Tienda debemos agregar lo siguiente:

GeneratedValue(strategy=GenerationType.IDENTITY)

Esto se coloca despues de la anotacion "Column" del campo Id, que debe quedar asi:

@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;


No hay que olvidar agregar los respectivos import.

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;


Con esto que se le agrego a la clase indicamos la forma de generar el valor para el campo Id en cada insert.

Ese tipo de generacion aplica para base de datos MySQL, SQL Server, Sybase, PostgreSQL (cuando trata de campos de tipo serial).

Pero cuando usamos secuencias se debe utilizar otro tipo de generacion de valores, como es el caso para Oracle, que en otro post lo explicare con mas detalle.

Pero bien no basta con solo agregar eso a la clase, tambien es necesario crear nuestras "Consultas nombradas", por esta caracteristica es que me gusto bastante esto del JPA, ya que es bastante, bastante flexible.

Creamos una simple para mostrar todos los empleados, ahora procedemos a editar la clase Empleado y en la anotacion "NamedQueries" agregamos la nuestra tan simple como esto:

@NamedQuery(name="Empleado.verTodos", query="SELECT e FROM Empleado e")

Que al final debe quedar asi:

@NamedQueries({
@NamedQuery(name="Empleado.verTodos", query="SELECT e FROM Empleado e"),
@NamedQuery(name = "Tienda.findById", query = "SELECT t FROM Tienda t WHERE t.id = :id"), @NamedQuery(name = "Tienda.findByDescripcion", query = "SELECT t FROM Tienda t WHERE t.descripcion = :descripcion")})

Ya hecho todo esto, pasamos a la parte mas interesante, que es utilizar nuestras clases ya configuradas, para ello creamos dos clases mas para la manipulacion de las ya antes mencionadas.

Una la llamaremos ControlEmpleado.java y la otra ControlTienda.java

El objetivo de estas sera mostrar consultar, agregar, eliminar o modificar un objeto en especifico.

Pero para no hacer mas largo este post de lo que ya esta por que me estoy cagando del sueno solo mostrare como mostrar los resultados de una consulta, y realizar un insert.

Pues bien para realizar un insert nos vamos a la clase ControlTienda y agregamos el siguiente metodo:

public void insertPrueba() {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("JPAejemploPU");
EntityManager em=emf.createEntityManager();

Tienda nueva = new Tienda();
nueva.setDescripcion("Otra tienda");

em.getTransaction().begin();
em.persist(nueva);
em.getTransaction().commit();
}


Eso es todo, lo mas correcto hubiera sido que el metodo recibiera una instancia de tienda y luego por medio de JPA se realizara el insert, pero el punto era mostrar como se hace.

Ahora como mostramos los registros? pues es tambien muy sencillo, y eso haciendo uso de nuestra consulta nombrada.

Creamos otro metodo en la clase ControlEmpleado, que devuelva un arreglo de Empleados.

public Empleado[] getEmpleados() {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("JPAejemploPU");
EntityManager em=emf.createEntityManager();

Query q = em.createNamedQuery("Empleado.verTodos");

return (Empleado[]) q.getResultList.toArray(new Empleado[0]);
}

Ya con esto desde el metodo main hacemos un recorrido por los registros que nos devuelva nuestro metodo.

Empleado[] empleados = new ControlEmpleado().getEmpleados();

for (int i= 0 ;i
System.out.println(empleados[i].getNombre()+ " trabajo en "+empleados[i].getTienda().getDescripcion());



Y eso es todo, espero poder aportar mas con lo que he quedado pendiente en este post, saludos marachitos.

Comentarios (4)

Eliminar un elemento de un XML con JDOM

Para intentar disipar la crisis que tengo en este momento me voy a poner a escribir sobre como eliminar un elemento de un XML en Java.

Es una cosa muy sencilla nada mas se debe utilizar el metodo remove de un objeto.

Supongamos que tenemos la siguiente estructura XML


Bien ya teniendo la estructura de ese archivo XML hacemos uso de JDOM, y creamos el siguiente codigo que eliminara a una persona con un Id introducido desde linea de comando.


Siempre hay que recordar que para que los cambios se hagan efectivos se debe guardar el archivo como lo explicado en la entrada de como trabajar XML con JDOM.

Comentarios (3)

Sistema Académico elaborado con la tecnología Mono

Hace poco escuche la frase "ahora me propondré desarrollar solo con software libre", pero para mi sorpresa muchos ya lo están haciendo y es el caso de Tany Villalba que le había estado siguiendo la pista en la lista de correo de Mono Hispano y para mis sorpresa ha desarrollado un sistema académico con la tecnología del proyecto Mono.

El sistema según como se puede apreciar en la pagina del proyecto consiste en:
  • Catalogod de Cursos
  • Curriculas
  • Control de Notas
  • Convalidaciones
  • Matriculas
  • Control de Creditaje
  • Prerequisitos en Materias
  • Control de Pagos de pensiones (tentativo - no se sabe si se implementara, esta por ahora incluido en la base de datos)
Se puede apreciar capturas de pantalla en su Ubuntu a la vez un poco de código fuente, que fue hecho totalmente con Monodevelop.

También en la pagina del proyecto ha puesto a la disposición de la comunidad el código fuente como también de la base de datos.

Incito a la comunidad a tener iniciativas de desarrollar software con tecnologías libres tanto usando Mono como Java así como lo ha hecho Tany.

Comentarios (1)opiniones, ¿cual es la tuya?

Configurar letra de acceso rápido en controles Swing / Java

Hay tips que al parecer son sencillos, pero cuando uno esta descubriendo un nuevo mundo no parecen estar a la vista.

Pues a veces se tiene la necesidad de querer subrayar una letra de un JButton o un JMenu para poder ejecutar su acción o acceder al elemento.

A diferencia de .NET que se hacia anteponiendo el símbolo "&" (sino mas recuerdo), en la propiedad "Text" del control en Swing, se tiene que usar la propiedad mnemonic.

"Sección de propiedades de un JMenu en NetBeans"

Ya asignada la letra que queremos que esta subrayada el efecto se puede ver en vista de diseño o ejecución.

"Ventana de prueba"

Comentarios (0)

Diferencia de código con SVN y Netbeans

Después de estar trabajando ya un buen ratito con Netbeans 6.0 y Subversión he visto que es muy productiva esa combinación.

De las cosas bonitas que le he visto es como se pueden ver las diferencias entre el archivo local y el del repositorio.

"Netbeans analizando las diferencias entre código modificado, que bonito se ve y bastante intuitivo"

Para saber que significan los colores se puede visitar la guía de Subversión para Netbeans 6.0, esta en ingles pero esta fácil de entender. No se por que con todas las bondades que tiene Netbeans aun nos siguen torturando en la U, usando Visual Studio.

Comentarios (0)

Problema con punto al dividir cadenas en Java

Ya programando de lleno en Java, para SIG me encontré con algo curioso que quizás a mas de alguien le pueda servir.

Pues el caso es que quería dividir una cadena por cada punto que se encontrase de la siguiente manera.

String cadena="hola.mundo";
String[] palabra=cadena.Split(".");

System.out.println(palabra[0]);
System.out.println(palabra[1]);


Y me aparecía error que excedía el rango del arreglo, después descrubi que el error consistía en que split toma el punto para referirse a cualquier carácter entonces no dividía la cadena.

Entonces la solución fue ir a ver los patrones para usar el punto.

Hay dos formas de usarlo

cadena.Split("\\.")

o sino

cadena.Split("[.]");

Quizás para mas de algun otro programador experimentado en Java sea trivial pero para mi fue algo bastante nuevo despues de venir de php y .NET. Espero que a alguien mas le sirva.

Comentarios (3)

Usando Netbeans 6.0 con Subversión en GNU/Linux

Después de ver lo vergón que es Subversión, he corroborado como bien dijo Rodrigo que NetBeans 6.0 se integra muy bien con Subversión.

Ya traveseandolo un poco explicare cual es la manera para trabajar con un proyecto realizado con NetBeans 6.0 y realizar programación XP.

Para que NetBeans 6.0 pueda integrarse con SVN debemos instalar un cliente de linea de comandos para que el IDE sirva como de front-end.

# apt-get install subversion

Ya hecho lo anterior, ya iniciado el NetBeans 6.0 debemos ir al menu "Tools" para luego elegir "Options".

Estando alli debemos ir a la categoría "Miscelaneous", dar clic en la ficha "Versioning" y elegir la opción "Subversion".


Donde dice "Specify the SVN Home Folder" debemos escribir la ruta donde se encuentra el cliente en linea de comandos de SVN, en mi caso era /usr/bin.

Después de guardar la configuración, debemos cerrar el NetBeans y volverlo a abrir para que se apliquen los cambios.

Luego volvemos a dirigirnos al menú "Tools" y elegimos la opción "Checkout", nos aparecerá una ventana donde debemos agregar la URL del repositorio, hecho esto al dar clic en el botón next nos preguntara el usuario y password del repositorio, yo le doy recordar ya que es una contraseña aleatoria que nos asigna google code.


En la siguiente pantalla del asistente debemos configurar en que carpeta del repositorio guardaremos nuestras revisiones del proyecto.



Es recomendable marcar "skip 'carpeta' and checkout only its content" para que NetBeans no cree otra carpeta, despues de esto elegimos la carpeta donde tengamos nuestros proyectos y habilitar que se NetBeans escanee los proyectos en esa carpeta por si los queremos usar con SVN marcando la casilla "Scan for Netbeans Projects after Checkout".


Luego de eso NetBeans nos dará un aviso de cuantos proyectos están disponibles para sincronizarlos con el servidor SVN, en mi caso tenia dos disponibles.


Elegimos el que queremos utilizar, y para actualizar las revisiones nada mas es necesario dar clic derecho sobre el elemento que queremos hacerlo, elegir en el menú emergente el submenu "Subversion" y elegir la opcion "Commit", escribimos el respectivo comentario de la revision y damos al boton "Commit".


Ya hecho esto NetBeans se encargara de sincronizar con el repositorio.

Comentarios (3)

Juego de tablero Geek

Aprendiendo a programar en C++ con un juego de mesa. Si eres un geek programador padre de familia, como en mi caso, el C-Jump es un buen juego que es recomendable para compartir con la familia. Este juego de mesa provee a los niños fundamentos de programación de C++, tales como sentencias if, else, while, switch, goto, break, continue, return; con lo cual podrán desarrollar la lógica de sentencias de comandos. El juego se desarrolla en alguna montaña nevada en donde el objetivo es pasar por cada uno de los checkpoints, y por supuesto el esquiador que llegue primero a la meta y no arroje ninguna excepción gana.

El juego incluye:

  • 1 tablero.
  • 1 set de figuras de colores.
  • 1 dado.

Comentarios (1)opiniones, ¿cual es la tuya?

Visual Studio Express para todos

Después de haber quedado de acuerdo en lass herramientas que usaremos para el desarrollo el sistema en SIG, rodrigo sugirió que podríamos usar el Visual Studio Express como alternativa a mi tanta necedad de usar SharpDevelop.

Entonces el compa se tomo la molestia de registrarse con Microsoft y así poder adquirir la suite lite del IDE para .NET CSharp, y yo tuve el detalle de uplodearlo para toda la majada que no quiera instalarse el IDE completo.

En el archivo va incluido el numero de registro.

Descarga: CSharpExpress


Definitivamente con este tipo de post me siento como luchoedu.org jaja.

Comentarios (0)

Indicadores para ser un buen programador

Leyendo el blog de Yo, programador encuentro ciertos indicadores que describe algunas costumbres para ser un buen programadores así como también de los negativos aca los comparto con ustedes.

Indicadores positivos:

  • Le apasiona la tecnología
  • Programa en su tiempo libre, es su hobby
  • Hablará largo y tendido de cualquier tema técnico si se le pregunta
  • Ha tenido proyectos personales significativos a través de los años
  • Aprende nuevas tecnologías por si solo
  • Tiene opiniones fuertes sobre cual tecnología es la mejor para varios usos
  • Se siente incomodo trabajando con tecnologías que el crea no son “correctas”
  • Puede mantener una buena conversación en cualquier variedad de temas, no tan solo aquellos que sean técnicos
  • Empezó a programar mucho antes de entrar a la universidad o al trabajo
  • Tiene proyectos personales grandes que no necesariamente aparecen en el cv
  • Conoce de una gran variedad de tecnologías (las cuales no necesariamente están en el cv)

Indicadores negativos:

  • Solo programa mientras está en el trabajo
  • No le gusta hablar de programación, aunque se le pregunte
  • Aprende nuevas tecnologías cuando la compañía lo envía a tomar cursos
  • Usa la tecnología que le indiquen, cualquier tecnología es “buena”
  • Empezó a programar en la universidad
  • Toda su experiencia en programación está en su cv
  • Enfocado en uno o dos plataformas de programación (ejemplo: todo lo que tiene que ver con aplicaciones de java) sin ninguna experiencia fuera de esa plataforma.

Comentarios (3)

Dos tipos de programadores

Intentando leer e interpretar la entrada "The two types of programmers" en Coding Horror, me pareció interesante opinar acerca del articulo.


Este articulo ha venido como anillo al dedo pues se adapta bien a lo que estamos estudiando en la cátedra de recursos humanos.

Aquí las dos grandes categorías:

  • Programadores Alfa: Es el tipo de gente que empresas como Google se preocupan por reclutar. Gente que fueron los primeros en instalarse GNU/Linux en el periodo de los 90, gente que participan en algún proyecto de software libre por puro hobbie y que están a la última en cuanto a programación y herramientas. Estos constituyen el 20% de la mayoría de programadores.
  • Programadores comunes: es la masa de la industria del software, gente que fue a un centro de estudios superior, aprendió C++, C# o Java, y encontró trabajo en un banco, instituciones de gobierno, o como docentes. Usan las herramientas que Microsoft les imponga, han usado poco o nunca GNU/Linux, ni están interesados en él, nunca han usado herramientas de control de versiones... Saben exactamente qué hacer para terminar su trabajo, y cuando llega el fin de semana se van para su casa y se olvidan de los ordenadores. Aquí se encuentra el restante 80% de la mayoría de programadores.
De entre otras curiosidades también menciona.
  • Que la mayoría de la industria del software está formada por "programadores comunes": pequeños desarrollos para Windows o pequeñas compañías que contratan a sus propios programadores.
  • Que la mayoría de los "geeks" olvidan el hecho, no se ponen a pensar que exista "el otro 80%" y se sorprenden de que en su empresa no sean capaces de usar la última distribución de GNU/Linux que ellos acaban probar.
Nomas queda hacerse la pregunta tu mi querido lector que gustas del arte de la programación ¿en que categoría te consideras?

Comentarios (4)

Iniciando programadores con enfoque orientado a objetos

En todo el tiempo que he estado en la U, últimamente nos tratan de inculcar desarrollar con el nuevo enfoque de programación orientada objetos, y como todo las personas ponen mucha resistencia al cambio mas cuando desde ya hace bastante han hecho sus cosas de una forma estructurada.

Awebo la mara tiene razón de poner resistencia pues así fueron formados, pues según la metodología de enseñanza que se toma en la UES e incluso creo que en otras casas de estudio superior en las cátedras de programación, es que nos ensenan a programar de forma estructurada luego cuando entramos en el proceso de diseñar y desarrollar sistemas mas o menos decentes, por su complejidad la mejor técnica es usar el enfoque orientado a objetos y de allí se viene un gran problema.

Creo que a veces la gente piensa que primero se debe iniciar a la gente de manera estructurada para luego que piensen orientado a objetos, y es que esto lo veo como un error grande ya que sacar a la gente de una forma de pensar llevarla a otra diferente es difícil.

Para mi se deberia de dar una media introducción a la referencia del lenguaje de programación en la cual se quiere preparar al futuro programador e inducirlo al análisis orientado a objetos ya que es mas natural.

Comentarios (1)opiniones, ¿cual es la tuya?

Diseña reportes y gráficos en Java con iReport

La herramienta iReport es un diseñador de informes visual, poderoso, intuitivo y fácil de usar para JasperReport escrito en Java.

Este instrumento permite que los usuarios elaboren visualmente informes complejos con imágenes, subinformes, etc. Está además integrado con JFreeChart, una de la biblioteca gráficas OpenSource más difundida para Java.

Características mas importantes de iReport
  • 100% escrito en Java, licencia GPL v2, es decir totalmente gratis.
  • Multiplataforma.
  • Maneja el 98% de las etiquetas de JasperReport, permite diseñar rectángulos, líneas, elipses, campos de los textfields, subreportes.
  • Soporta internacionalización nativamente.
  • Navegador de la estructura del documento.
  • Recopilador y exportador integrados .
  • Soporta JDBC. Soporta JavaBeans como orígenes de datos
  • Incluye asistentes para crear automáticamente orígenes de datos, consultas SQL, informes, subreportes.
  • Tiene asistentes para las plantillas.
"iReport en mi debian GNU/Linux"
Su instalación es sencillisima en cuanto para GNU/Linux nada mas se necesita descomprimiar y ejecutar el archivo ireport.sh que es el que lanza la aplicación.

La documentación de esta excelente herramienta de desarrollo es un libro en formato pdf que se llama The Definitive Guide to iReport, y la subí a través de mediafire, así que les he ahorrado sino mas recuerdo como $49 que es el costo del libro.

Comentarios (4)

Nuevo Zend Studio 6 for Eclipse

Acabo de actualizarme a la versión 6.0 del Zend Studio para GNU/Linux, que es un editor bastante bonito para php4 y php5. La verdad no le veo mayores cambios a la versión de prueba que estaba usando que era la v5.0 cuyo codename es Neon, lo mas notable es que awebo es mas pesado, para todo incluso hasta para cargar, pero cuando lo logra definitivamente es un deleite usarlo.

Este IDE esta basado en Eclipse pdt e incluso probé este ultimo mencionado ya que es totalmente libre, pero aun no trae cosas como el Zend Studio así como el editor html wysiwyg, conectarme remotamente a un servidor ftp, ssh. Para lograr eso había que hacer uso de plugins que no eran libres entonces prácticamente terminaba en lo mismo.

"Editor de php"

"Editor wysiwig para html/php"

Si alguien necesita el keygen de este editor no dude en pedirlo ya que funciona tanto para windows como para GNU/Linux. Me muero de la verguenza tener que ser pirata en un sistema operativo libre :-S

#Actualizado Lunes 18 de Feb. 2008
Subí el keygen en rapidshare, este es el link para descargarlo, es un ejecutable comprimido con tar.gz, para abrirlo se puede usar winrar, y para hacerlo funcionar en GNU/Linux se usa wine.

Comentarios (2)

Mono Debian, esta gente si esta en la jugada

Awebo que la gente del sistema operativo universal no paran de sorprenderme, hace poco vi en la pagina oficial de Mono Project que esta la versión 1.2.6 del framework y al actualizar mi repositorio testing de mi debian ya esta actualizado también con esta versión.

"Captura de la version de mono en mi debian testing"

Osea que no hay excusa para no usarlo, para a todos aquellos programadores de .NET que quieran aportar sus soluciones al mundo libre.

Comentarios (0)

La trampa de .NET

En lo particular me gusta mucho programar en C# mas que java, pero después de leer una de las antiguas polémicas de Richard Stallman, me recordé del proyecto de Microsoft el que esta muy de moda .NET.

Y es que es grande el viejo, el exponía que Java estuvo amarrado a dependencias privativas, pero esto ya se esta solventando ya que Sun esta liberando sino es que ya la libero su maquina virtual y al parecer el JDK ya tiene licenciamiento GPL.

¿Pero por que .NET es una trampa? por que como lo dice Richard Stallman:

Si algunas de las dependencias de un programa no son libres, entonces todo o parte del programa no se puede ejecutar en un sistema completamente libre —es inusable en el mundo Libre—.


La dependencia no libre de nuestras aplicaciones es el framework .NET, entonces ciertamente "es inusable en el mundo libre", para cubrir esa TRAMPA, se hace uso del proyecto Mono.


Al ser C# desarrollado y estandarizado por Microsoft, luego aprobado por la ECMA e ISO, surge el proyecto Mono iniciado por Ximian, que luego Novell lo retoma despues de adquirir Ximian. El proyecto surge para crear un grupo de herramientas libres para sistemas Unix/Linux, Mac OS, entre otros, compatibles con .NET.

Algunos me dirán que Mono aun no implementa al 100% los proyectos de .NET y es como lo dice Richard Stallman con respecto a Java en su momento:

Si usted escribe un programa en Java sobre la plataforma Java de Sun, está expuesto a usar funcionalidades exclusivas de Sun sin ni siquiera darse cuenta. Para cuando se dé cuenta, quizás las haya estado usando durante meses, y rehacer el trabajo le tomaría más meses. Podría decir «volver a empezar es demasiado trabajo». Entonces su programa habrá caído en la trampa del Java; será inusable en el mundo Libre.
La manera fiable de evitar la trampa del Java es tener en su sistema solamente una implementación libre del Java. Así, si usted usa una funcionalidad o biblioteca del Java que el software libre todavía no soporta, se dará cuenta en seguida, y podrá reescribir ese código de inmediato.


En el caso de .NET una implementación libre es usando Mono, para que nuestras aplicaciones no tengan dependencias privativas y sean totalmente libres. Y para esto no hay ningun problema ya que Mono se puede usar tanto en Windows como en GNU/Linux y tener aplicaciones totalmente multiplataforma y libres.

Comentarios (0)

Monodevelop y su integracion con Gtk

Para los que nos interesa programar Mono/.NET en nuestros sistemas GNULinux, Mac OS, tenemos el IDE Monodevelop el cual tiene prioridad en desarrollar las interfaces con Gtk.

He extraído de la documentación en linea de Monodevelop cuatro vídeos (a través de la extension de firefox/iceweasel llamada Download Helper) sobre las novedades de la versión 1.0 Beta 3 (0.18) de este IDE con respecto a Gtk y otras hierbas.


"Creando interfaces con stetic integrado en monodevelop"



"Creando Widgets personalizados"



"Empaquetando nuestro código fuente"



"Control de versión"

Comentarios (2)

Me pican las manos

Después de experimentar este pasatiempo nuevo de la blogueada he dejado de lado la programada (que bonita que me quedo la rima), y es que con este nuevo pasatiempo me he estado documentando mas en lugar de estar aplicando.

Lo mio definitivamente es lo practico. Pero mi problema es que estoy como que falto de inspiración pues no se que desarrollar y ni se con que lenguaje de los que me gustan hacer algo.

La única razón por la cual quiero que comience el ciclo en la U es para tener que programar por que de de allí las demás materias son administrativas, me gusta esa área, pero no se puede empezar a aplicar al momento hay que esperar mucho, por algo no estudie administración de empresas.

Bueno ni mas que decir ya quiero empezar con SIG.

Comentarios (2)

Php también para QT

Supongo que esta es una iniciativa de la gente de Trolltech para poder usar su librerías gráficas QT con el lenguaje php. Un dato no muy curioso quizás para mucha gente lo vaya a ser es que casi en su totalidad el entorno de escritorio KDE esta elaborado con QT.

En un principio QT no fue libre por esta razón mucha gente no simpatiza con KDE, hasta el año 2000 cambia su licencia a GPL y en Enero de este año ahora tiene licencia GPL v3.

No he simpatizado mucho con las QT por la razón, en lo particular, que he encontrado poca documentación sobre esta al contrario de Gtk+.

Como me dio curiosidad que tan vergon sea esta onda me decidí a instalarlo en mi Debian Lenny, me baje las fuentes en la sección download del proyecto php-qt al parecer aun no hay una versión para windows.

Seguí los pasos de la documentación del proyecto, al momento de escribí este post e instalarlo están en la versión 0.9.

Requerimientos:
  • build-essential
  • cmake
  • php5
  • php5-dev
  • php5-cli
  • libqt4-dev
  • libsmokeqt4-dev

Un dato curioso que no lo prevenían en las instrucciones de la compilación al momento de probar el ejemplo y es el siguiente error.

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20060613+lfs/php_qt.so' - libsmokeqt.so.2: cannot open shared object file: No such file or directory in Unknown on line 0


Así que la solución fue instalarme el paquete libsmokeqt4-dev y se soluciono.

Ahora bien lo instale siguiendo los siguientes pasos.

Descargar las fuentes y cambiar de directorio hacia donde están las fuentes

$ tar -xvf php-qt-0.9.tar.gz
$ cd phpqt

Crear una carpeta llamada "build" y cambiar de directorio a esta

$ mkdir build
$ cd build

Ejecutar cmake

$ cmake ..

Según la documentación allí mismo tengo que hacer make y make install pero me daba error entonces lo que supuse es que debía ejecutar estas dos ultimas ordenes un nivel superior y seguir el resto de la compilación.

$ cd ..
$ make
# make install

Luego agregar la extensión php_qt.so al php.ini en mi caso el php.ini se encuentra en /etc/php5/cli/

# echo extension=php_qt.so >> /etc/php5/cli/php.ini

Ya hecho esto podemos probar el ejemplo de calculadora que esta en la carpeta examples junto con las fuentes

$ cd examples/calculator
$ php main.php

"Un pantallazo de la calculadora hecha con php-qt"

Por el momento no he leído la poca documentación que esta en el proyecto definitivamente esta mejor documentado php-gtk.

Comentarios (1)opiniones, ¿cual es la tuya?