»
S
I
D
E
B
A
R
«
Creando un componente basado en Software Libre – I Parte
Diciembre 20th, 2009 by John Carlos Arrieta Arrieta

<


Simbiotica


Creative Commons License



www.simbiotica.com.co


Contáctenos…

Esta sitio y todo su contenido  está protegida por
licencia de Creative Commons

Información de la Plataforma desde una aplicación  escrita en Java.

Cordial saludos para todos, disculpen mi larga ausencia, casi dos meses sin volver a escribir artículos en mi sitio estaba desesperando, espero de corazón que hayan trabajado, estudiado y disfrutado mucho todos estos meses, yo he hecho lo mismo pero con muy poca oportunidad de descansar y disfrutar, debido a que he estado muy ocupado con mis nuevos estudios de postgrado.

Bueno esta vez he preparado un artículo muy interesante, en el cual les enseñare varias cosas importantes entre las que se encuentran:

Diseñar y crear componentes.

Permitir que nuestras aplicaciones escritas en Java puedan interactuar con otras aplicaciones.

Uso de componentes para construir otros componentes o aplicaciones.

Principios básicos del uso de componentes y aplicaciones de software libre para crear nuevos componentes y aplicaciones.

Seguir con el aprendizaje de Netbeans para la construcción de software escritos con Java.

Para lograr estos objetivos he ideado la construcción de un componente que podrá ser reutilizado por otras cualquier tipo de aplicación Java, permitiéndoles obtener  información propia del PC como por ejemplo:

  • Información sobre la CPU, marca, modelo, velocidad, arquitectura, fabricante
  • Información sobre los dispositivos de almacenamiento, tipo dispositivo, nombre de la partición, serial de la partición, total despacio, especio ocupado, espacio libre, si es de escritura o de solo lectura.
  • Información sobre el sistema operativo, fabricante, versión, modelo, usuario que inicio sesión, carpeta del usuario, tiempo de inicio del sistema.
  • Información sobre la memoria RAM del PC y de la Maquina Virtual Java, cantidad total, ocupada y disponible.
  • Información de los procesos que se ejecutan sobre el Sistema Operativo, nombre del ejecutable, uso de la CPU, uso de la memoria y sesión en la que se ejecuta.

Algunos de estos datos los vamos a obtener mediante el uso de un componente de Software Libre (de ahora en adelante en este articulo Software Libre lo llamare SL)  llamado Sigar, sellada bajo la magnífica y siempre glorificada GNU -GPL (General Public License) o Licencia Publica General, este componente es una librería de clases escritas en lenguaje Java, acompañadas de otro conjunto de librerías escritas en lenguaje C,  compiladas en varios sistemas operativos entre los cuales se encuentra Windows, varias distribuciones de GNU/Linux y otras de GNU/Unix y otros Unix como Solaris y FreeBSD, en su página oficial se puede descargar Sigar para ser utilizada en muchos lenguajes de programación, entre ellos por supuesto Java, que es el que les traigo a colación.

¿Por qué un componente Java para obtener información sobre la plataforma?

Java al ser un lenguaje multiplataforma, posee grandes ventajas frente otros lenguajes de programación nativos como VBA, C++, entre otros,  pero irónicamente la multiplataformidad también es culpable de muchos de los problemas que agobian a este excelente lenguaje, esto se debe a que los programas escritos en Java utilizan un programa llamado Maquina Virtual o JVM para compilación y posterior ejecución, el cual simula la plataforma de un PC, es decir su CPU y su Sistema Operativo, elementos con los que interactúan normalmente cualquier programa,  sobre todo los que están escritos en lenguajes nativos, se les llama nativos porque al utilizarlos para construir nuestros programas, su compilación genera código binario o ejecutable especifico para la plataforma en la que fueron compilados, obligándonos entonces a tener que recompilar y generar ejecutables de nuestros programas en todas las versiones que hay de cada sistemas operativos, de tal forma que  el usuario pueda seleccionar y escoger las compilaciones  adecuadas a sus plataformas, esta situación permite a los programas escritos en  lenguajes nativos tener acceso directo a memoria, a las librerías del SO para  E/S, dispositivos de almacenamiento, gestión del núcleo y hardware (win32 en el caso de Windows y kernel en el caso de GNU/Linux),  incluso violar las reglas de presentación, registro y ejecución supervisada por el SO, como por ejemplo los virus.

Los  programas escritos 100% en Java no poseen algunos de los privilegios o permisos de ejecución descritos anteriormente, porque al similar virtualmente la plataforma mediante la JVM, al compilar código fuente Java se genera código ejecutable llamado ByteCode diseñado especialmente la plataforma virtual y no para la plataforma real, como si ocurre con los lenguajes nativos, por ende,  al ser ejecutados los programas Java, es necesario tener instalada la JVM sobre la plataforma real de nuestros PC, aunque la JVM simule ser la verdadera plataforma del PC, en realidad es y se ejecuta como cualquier otro programa corriendo sobre el verdadero SO, RAM y CPU, como ventanaje principal permite ejecutar cualquier programa escrito y compilado con Java en cualquier PC que tenga la JVM instalada, sin tener que recopilar varias veces el mismo programa para todas las plataformas existentes, es decir, escribimos nuestros programas,  lo compilamos una sola vez y lo podemos ejecutar en cualquier PC que tenga la JVM instalada,  como desventajas tenemos que los programas Java:

  • No tienen ninguna comunicación directa con la plataforma real, de hecho, los programas Java desconocen al SO y a l CPU real, para ellos solo existe la JVM como plataforma (Mini Plataforma), por ende todas las operaciones que realizan las hacen sobre ella.
  • Al ser JVM un programa cómo cualquier otro en ejecución sobre la plataforma, no podemos escribir aplicaciones 100% en código Java para manipular el comportamiento de ciertos aspectos del SO, ya que la JVM no tiene permisos para realizar estas operaciones sobre el SO, para evitar que las aplicaciones Java se salgan del control del SO y de la JVM, pudiendo desestabilizar la plataforma real del PC, como consecuencia a estas restricciones Java no puede generar código maquina, muy útil para realizar tareas como:
  • Cambiar la forma rectangular de una ventana, solo mediante un truco de transparencia e imágenes.
  • Colocar un programa Java en el registro de Windows, ya que el sistema operativo no lo identifica como un programa mas, solo identifica a la JVM que lo ejecuta, para el SO la JVM es el programa y cada programa Java ejecutándose sobre la JVM es tan solo un subproceso ejecutado por dicha maquina virtual, si se termina el proceso de la JMV, se terminara con la ejecución de todos los programas Java ejecutados en el PC.
  • Conocer los dispositivos de almacenamiento del PC y sus respectivos sistemas de archivos o particiones.
  • Conocer que otros programas o procesos se están ejecutando en el PC junto a la JVM o junto a nuestros programas Java.
  • Saber la versión, marca, velocidad, arquitectura y modelo del CPU.
  • Conocer información propia de la memoria RAM del PC, los programas Java solo pueden saber la cantidad de memoria RAM que el sistema operativo le a la JVM para que actué como falsa plataforma para sus procesos, los cuales están representados por nuestros programas Java.
  • Interactuar directamente con los puertos de entrada y de salida, como el serial, paralelo o USB.
  • Color nuestros programas Java en el administrador de instalación y desinstalación de aplicaciones del SO, este no las ve como otras aplicaciones mas, sino como  subprocesos ejecutados por la JVM.
  • los programas escritos en Java son más lentos que otros programas escritos en lenguajes nativos, esto se debe a que su ejecución está limitada a la velocidad procesamiento de la JVM, el código compilado bytecode de los programas Java tiene que ser procesado y ejecutado primero por la JVM, para luego ser interpretado y ejecutado como código ejecutable nativo para la plataforma en la que se está ejecutando la JVM, algo que no es necesario en los programas escritos con lenguajes nativos.
  • La JVM ejecuta un subprograma denominado Garbage Collector o Recolector de Basura, el cual reprocesa constantemente los todos nuestros programas Java mientras estos están en ejecución, con el único objetivo de liberar la memoria RAM de la JVM que ya no está uso por los programas Java y que aun tiene información no útil, considerada basura por la JVM, esto disminuye aun más la velocidad de ejecución de nuestros programas Java.

La solución

Para dar solución a los problemas descritos anteriormente, Java posee la gran capacidad de poder integrarse con muchos lenguajes de programación, entre ellos los lenguajes nativos como C y C++, PHP. VBA y todos los lenguajes de la familia .NET Framework, esto permite a los desarrolladores Java utilizar las bondades (velocidad, permisos al núcleo o kernel del SO, código binario a nivel de máquina) que poseen el resto de lenguajes de programación, escribiendo aplicaciones en estos lenguajes e integrarlas o ejecutarlas desde código Java, pasándole parámetros de entrada y recibiendo  parámetros de salida emitida por dichas aplicaciones, tambien se puede hacer el proceso contrario, realizando aplicaciones Java y ser ejecutadas desde otros lenguaje, como vemos Java pone en práctica dos proverbios muy sabios como lo son:

Si no puedes con el enemigo hazte amigo de él

Si no puedes hacer algo, simplemente delega a otros esa función.

A esta capacidad de java se le conoce como JNI o Métodos Nativos de Java,  que consiste en escribir partes de un mismo programa en lenguajes diferente a Java o lenguajes Nativos (en teoría se puede utilizar cualquier lenguaje, pero en la práctica solo se ha desarrollado ampliamente y de forma satisfactoria con el lenguaje C y C++, VB.NET, C#, Python y Rubi y PHP), compilarlos por separado y escribir código Java que realice las llamadas a las funciones y clases compiladas en los otros lenguajes,  normalmente empaquetados en librerías y repositorios (.dll, .cab, .exe y .lib para Windows, .os y .bin para Linux, .dylib para MacOS).

Existen muchas iniciativas y proyectos hace y están haciendo uso exhaustivo de esta característica de Java, entre ellos el componente de Software Libre Sigar, que tratare de mostrarles de forma básica en este articulo, otros ejemplos de aplicaciones Java Nativas son:

  • JavaComm: es SL (Software libre) que nos permite trabajar con los puertos seriales (com y usb) y el puerto paralelo.
  • JavaforUSB: es SL igual que el anterior pero especialista en puerto USB.
  • JavaPos y JPos: son SL para trabajar con dispositivos vinculados a un punto de venta (impresoras POS y Fiscales, Display, Cajas Registradoras, balanzas, Lectores de Barras, Lector de Tarjetas de dinero, etc)
  • gstreamer-java: es SL para capturar video por cámaras.
  • DJ Project Native Swing: es SL para integrar el navegador web, el reproductor y flash dentro de aplicaciones java y otras utilerías
  • jflash: es SL para interactuar para interactuar Flash con Java y viceversa
  • JFlashPlayer: no SL igual que JFlash
  • JNIEasy: es SL y permite realizar de forma muy simple aplicación java y convertirlas por debajo en código C++, no hay que saber C.
  • Entre otras..

Aplicación de ejemplo para este Articulo

Se trata de realizar un componente utilizado para obtener información importante sobre algunos elementos físicos del PC, como la memoria, el disco duro y la CPU, del mismo modo obtendremos información sobre destalles específicos del S.O como su versión, arquitectura, fabricante, modelo y datos sobre el usuario que lo inicio y por ultimo le añadiremos a nuestro componente funcionalidad para manipular los procesos que se ejecutan sobre el sistema operativo, tal y como lo hace el administrador de de tareas,   sacar alguna información poco muchas veces hemos querido  que el software que escribimos pueda mostrar información sobre la arquitectura y algunos elementos de Hardware del PC donde se instalan, esta información para muchos fines benéficos, el más común de todos  es verificar si el PC donde se instala nuestro software cuenta con las características (algunas veces llamados requerimientos no funcionales) necesarias para poder ejecutar el aplicativo, otro objetivo igualmente popular pero menos agradable para el usuario,  es evitar en alto nivel que el software sea instalado más un PC al mismo tiempo, esta fue una de las muchas estrategias que utilizo Microsoft para evitar instalaciones ilegales (un forma de piratería  de software) de sus productos, la cual consiste en leer información propia del hardware del PC, por ejemplo el serial de formateo que tiene una partición del disco duro, e mas serial de la RAM, el serial, marca , modelo y velocidad del CPU, espacio total de la partición, serial, modelo y marca de la tarjeta madre, etc, luego esta información es enviada vía internet a un servidor Web de la compañía dueña del software instalado, junto a ella se envían otros datos, como por ejemplo los datos de la persona que compro legalmente la copia de uso (licencia comercial) del software y el numero serial o clave de instalación incluido en la copia original, todos estos datos se almacenan en una base de datos, esto sirve para llevar un control de las ventas y por supuesto de las copias instaladas, notificando en cada instalación  si la copia del software es legal o ilegal,  al comparar los datos del PC  y de instalación con los datos almacenados en la Base de datos, algunos software toman medidas como evitar la instalación o deshabilitar el uso del producto, otros simplemente notifican de la ilegalidad, informado las formas de adquirir una copia legal, y pueden incluso deshabilitar algunas funcionalidad es importantes del software.

Ejemplos del uso de este componente.

Algunas empresas que desean mantener registro de las características sobre los equipos de compto que utilizan, este componente permitirá que aplicaciones distribuidas  se comuniquen entre enviándose periódicamente información específica sobre  las características de cada uno,  almacenarlas en una base de datos para su posterior seguimiento, ver los procesos y manipular en ejecución de una maquina remota, mediante el desarrollo de aplicaciones distribuidas escritas en Java que envíen de un punto a otro un listado de los procesos que en ellas se ejecutan, por ejemplo en un café internet, una sala de informática académica, supervisión de la ejecución de aplicaciones en una empresa y otro uso interesante será, llevar un seguimiento estadístico de las plataformas en las que se instalan las aplicaciones que desarrollamos con el fin de prestar un mejor soporte y servicio a nuestros usuarios y clientes, aun que se puede utilizar este componente para impedir que se instalen nuestras aplicaciones en más de una maquina de forma simultánea, utilizando para ellos la información de la plataforma en la que se esta instalando el software y compararla con la información sobre la ultima instalación realizada por el usuario, acompañada por sus datos y una clave de registro, característica propia de algunos software propietarios o no libres, legalmente no se está permitido el uso de  este componente para tal fin, esto se debe a que voy a utilizar el componente de SL Sigar y por ende se violaría una de las reglas primordiales de la licencia GNU-GPL bajo la cual está sellada.

Que es GNU-GPL de Software Libre.

Sin importar cual sea el uso que le darán a este componente que voy a crear en este articulo, quien utilice software o construye software debería leer la  importante licencia GNU-GPL, si aun no la conocen pueden leerla de su sitio oficial GNU licencias GPL, en este articulo no voy a tratar este tema porque perdería el objetivo inicial, pero si les cuento que esta licencia cuenta con todo el fundamento legislativo que puede tener un contrato de servicios, es decir, su violación puede ocasionar graves conflictos penales, especialmente para los profesionales en informática y empresas que se dedican a ofrecer servicios y desarrollo de soluciones informáticas.

GPL básicamente estipula que todo producto digital (software, documentos, página Web, obra musical, obra multimedia como videos, presentaciones,  etc.) que desee utilizar esta licencia como contrato de uso, deberá cumplir con los cuatro los pilares del  software libre, que en  palabras de Richard Stallman pionero y fundador del movimiento internacional GNU:

  1. Un programa es libre si puede ser ejecutado y usado de todas las formas en que uno quiera, a diferencia de los privativos tienen limitaciones por medio de la licencia de uso o incluidas en el código.
  2. El código debe permitir el estudio y cambio haciéndose público.
  3. La copia y distribución debe ser libre.
  4. El software libre debe permitir la distribución de copias modificadas por un programador, inclusive permitir su venta.

Repito, hablare  en otro artículo con detalle al respecto de cada punto, por ahora solo basta con decirles que muchas personas con mente retorcidas y e cree más astutos que todos nosotros, llamadas piratas,   piensan que pueden utilizar estos cuatro estatutos del software libre para sacar provecho del trabajo que otros han realizado, de esta manera es muy fácil pensar por ejemplo, que podemos utilizar código fuente o código compilado de un software  libre para crear un nuevo software que no sea libre, es decir negar al menos una de las cuatro libertades y  así sacar ventajas económicas o reconocimiento intelectual a costa del sacrificio, trabajo y conocimiento tecnológico de las personas que originalmente crearon el SL con toda la buena voluntad que los caracteriza, y lo han puesto a disposición de todos nosotros sin ninguna clase de restricción de uso, a estas personas sucias les llamo piratas de SL, o ladrones del pueblo, algunos títulos fanfarrones que tiene profesionales y de postgrado en informática realizan estas accesiones sucias, aun mas sabiendo perfectamente que es ilegal, desafortunadamente  algunos los ven como grandes personas dentro de su contexto laboral, debe ser porque gozan de una suerte envidiable por muchas personas realmente serias, o porque no los conocen muy bien, a mi esas personas no me engañan, yo solo los veo como mediocres y charlatanes, discúlpeme,  le juro que no es con usted querido lector o lectora, cualquier parecido con la realidad es simple pura coincidencia, excepto en el área en la que me desempeño laboralmente,  siguiendo con SL es importante notar que es aquí donde la licencia GPL entra a tomar un papal más que protagónico,  yo diría  heroico, porque dentro de los términos y condiciones de  la Licencia Publica General en los artículos 2 y 3 para ser mas especifico,  se indica explícitamente que cualquier modificación del código fuente o cualquier vinculación del producto con otro producto de software diferente, ya sea de forma parcial o total, obliga de forma automática al producto subyacente que sea liberado mediante la misma licencia GPL, en cualquiera de sus presentaciones, ya sea un nuevo producto, actualizaciones del mismo o mejora del software libre utilizado durante el proceso, esto incluye cualquier tipo de uso del Software Libre GPL, no solamente su código fuente, sino también el código compilado, es de decir, imaginemos por ejemplo que construimos un programa que utilice como SMBD a MySQL que es SL GPL, entonces  estamos obligados a liberar nuestro programa con la licencia GPL, de no ser así, cometeríamos un delito informático conocido como piratería de Software Libre, así es amigos, como lo están imaginado en estos momentos, la licencia GPL es viral, todo producto sea un sistema competo, un componente que utilice para funcionamiento o beneficio,  al menos una  línea de código fuente o compilada  con esta licencia, también deberá ser liberado como GNU-GPL o alguna otra licencia derivada o compatible con ella, tal y como se indica en su sitio http://www.gnu.org/licenses/license-list.es.html , es por esto que debemos leer muy bien los términos de las licencias de un software en cualquiera de sus tipo (SO, utilidad, herramienta de trabajo, librería o script de código fuente) domo instalador o código fuente y recordar que si es una licencia de software libre, para nosotros lo menos importante es el código fuente de nuestro proyecto y debemos respetar las cuatro libertades básicas del SL.

Explicado lo anterior, podemos continuar con nuestro proyecto,

Bajo este principio fue precisamente como se creó la librería Sigar, con el fin de obtener información propia del SO y hardware del PC desde el lenguaje Java.

Manos a la Obra.

Primero que todo descargamos la librería Sigar desde si sitio oficial de descarga http://support.hyperic.com/display/SIGAR/Home, luego descomprimimos  el archivo en nuestro directorio de trabajo preferido, entramos a la carpeta creado y podemos ver un directorio llamado sigar-bin, allí se encuentran los archivos necesario para utilizar en nuestros proyectos, si no usamos un buen IDE como NetBeans o Eclipse, debemos colocar esta carpeta dentro de la ruta de la variable de entrono ClassPath de Java, para más información pueden ver este otro articulo

Aun que Sigar ofrece clases para obtener casi toda la información que deseamos al respecto, parte de la intención que tengo con este artículo es enseñarles como utilizar Java para comunicarnos con aplicaciones (.exe, .bat, .sys) desde el SO DOS, en este caso para obtener el serial de cada partición y obtener información sobre los procesos ejecutándose sobre la plataforma, es importante anotar que  los comandos que utilizare son los de DOS, aunque pueden existir comandos equivalentes en otros SO, el código lo escribiré solo para procesar la salida generada por estos comandos, de tal forma que muy probablemente esta función no podrá ser de utilidad al ejecutar el programa en otras plataformas.

El proyecto está diseñado de la siguiente forma:

  • Crearemos un componente que devuelva información del la plataforma solo con el uso de la librería Siglar.
  • Luego le daremos la capacidad al componente para que pueda obtener el nombre y serial  de las particiones.
  • Por último haremos que el componente devuelva información sobre los procesos ejecutándose sobre la plataforma.
  • Todo esto lo haremos solo programando en Java sobre el IDE NetBeans y por supuesto con el uso de algunas utilidades del sistema operativo, en este caso MS Windows.

Herramientas utilizar.

JSDK 1.6: El Standard Developer kid Para Java que a la fecha en la que escribí este articulo, se encontraba en la versión 1.6u18.

NetBeans IDE: El entorno Integrado de Desarrollo de mi preferencia para Desarrollar aplicaciones en Java, que a la fecha en la que escribí este articulo se encontraba en la versión 6.7 estable y 7.0 beta.

Sigar: Librería de SL escrito para múltiples lenguajes de programación entre ellos Java, la cual nos permite  extraer información importante sobre la plataforma operativa de un PC, estos datos normalmente solo pueden ser consultados mediante librerías especiales escritas en lenguajes híbridos de bajo y lato nivel como por ejemplo C (es el más común), ensamblador, Basic, pascal, etc, el objetivo de Sigar es abstraer al programador de instrucciones de bajo nivel o de aprender otros lenguajes de programación para poder información sobre la plataforma desde sus programas.

SO Microsoft Windows Vista Home Basic (se puede utilizar cualquiera de las versiones de Windows), solo  indispensable para desarrollar la segunda parte de este articulo, después de terminado el componente se puede utilizar cualquier sistema operativo para probar el componente.

TaskList: Software de MS (Microsoft) que se ejecuta como un comando entregado en el SO D.O.S (Disk Operation System), el cual permite ver una lista de los procesos que se ejecutan sobre el sistema operativo, este comando cuenta con muchos parámetros que permiten obtener información relevante sobre procesos en ejecución, el tipo de procesos si es aplicación cliente o servicio, el consumo de la RAM de dicho proceso etc.

Vol: Software de MS (Microsoft) que se ejecuta como un comando entregado en el SO D.O.S (Disk Operation System), el cual permite ver información sobre una determinada partición, esta información consiste en el Serial de particionado y el nombre de la partición.

Para más información sobre el uso de Netbean puede ver este artículo.

Crear un proyecto nuevo en Netbean

1.    ir a menú archivo à clic en nuevo proyecto

image001

2.    Seleccionar en Categoría Java y Proyecto Biblioteca de clases Java, pulsar siguiente.

image003

3.    Colocar un nombre al proyecto (recordar las reglas de nombres de Proyectos, Paquetes, Clases, Interfaces, Enumeraciones, Métodos y Variables),

4.    Colocar el nuevo proyecto en una ruta conocida, por ejemplo dentro de la ruta por defecto de los proyectos de NB.

5.    Si se desea otra ruta pulsar el botón examinar y escoger la ruta deseada.

6.    Notar que se crea un nuevo directorio con el nombre del proyecto (recordar que esta directorio tiene una carpeta llamada SRS, BNPROYECT, TEST, BUILD y DIST estos dos últimos se crean al compilar y compilar y generar el proyecto).

Verificar que se ha creado el nuevo proyecto

  1. Ir al panel de Proyectos de NB y notar que no se crea un paquete raíz con el nombre del proyecto, tal y como si ocurre cuando creamos un proyectos tipo Aplicaciones Java o Aplicaciones de Escritorio Java, el resto de la estructura es igual a los otros dos tipos de proyectos.

image005

Crear un nuevo paquete en el proyecto

1.    Luego nos colocamos en sobre el árbol del Proyectos en el ítem paquete predeterminado, el cual se encuentra vacio (de color gris), pulsamos clic derecho sobre dicho paquete y creamos un nuevo Paquete Java, tal como lo muestra la figura, este paquete será utilizado para almacenar la clase que será compartida entre el cliente y el servidor.

image007

2.    Damos un nombre l paquete (recordar las reglas de nombrado de paquetes Java ), note que se crea un nuevo directorio con el mismo nombre del paquete, este nuevo directorio será colocado dentro del directorio SRC, recordar que en java los paquetes representan directorios donde se colocan las clases organizadas según su funcionalidad.

image009

3.    Ir al panel de Proyectos y ver que se ha creado un nuevo paquete con el nombre que escogimos (el nombre del paquete es irrelevante, se pude escoger cualquiera que cumpla con las reglas)

image011

Crear las clases del proyecto

Ahora crearemos una nueva clase para colocar en ella el código fuente que será enviado por la red y ejecutado  por el cliente o servidor una vez sea recuperado y reconstruido a su tipo original,

1.    Nos colocamos sobre el paquete que hemos creado y pulsamos clic derecho sobre él, seleccionamos la opción nuevo, luego la opción Clase Java.

image013

2.    Colocamos un nombre a la nueva clase (Recordar las reglas Java para dar nombres a Clases), verificar que la nueva clase será colocada dentro del proyecto que estamos trabajando (el panel de proyectos puede tener más de un proyecto abierto y si no tenemos cuidado podemos confundirnos de proyecto ), de igual forma verificamos que la nueva clase sea guardada dentro del  paquete que seleccionamos, notar que se creara nuevo archivo con el nombre de la clase y con extensión .java (en java los archivos de código fuente son almacenados con extensión JAVA), por ende NB lo coloca dentro del directorio SRC (abreviatura de Source, que en español significa fuente), aquí es donde se almacenan todos los archivos de código fuente java del proyecto que estemos trabajando.

image015

3.    Ir al panel de proyecto y ver que se ha creado un nuevo archivo de código fuente en el paquete correspondiente.

image017

4.    Repetir el proceso para crear las otras clases, una llamada ParticionDiscoDuro, otra llamada Proceso y otra llamada Principal

5.    Ir al panel de proyectos y desplegar el paquete utilidad, y v remos que se han creado nuevas las nuevas clases.

image019

Agregar librerías al nuestro proyecto

Para hacer uso de la librería SL Sigar hay que agregarla al proyecto, igual ocurre con todas las librerías que necesitemos utilizar.i

Para ver como agregar librerías al proyecto, podemos seguir los siguientes pasos

1.    Crear una nuevo carpeta en el directorio principal del proyecto

image021

2.    Ir al panel de archivos y seleccionar el nuestro proyecto, dar clic derecho  y seleccionar la opción nuevo, luego la opción Otros

image024

3.    En la ventana que aparece debemos seleccionar la categoría Otros, que se encuentra al final de la lista

4.    luego seleccionamos el tipo de archivo carpeta que se encuentra igualmente al final de la lista.

5.    Pulsamos siguiente.

image026

6.    Le damos un nombre cualquiera a la nueva carpeta, si lo deseamos podernos pulsar en examinar para seleccionar la ubicación de dicha carpeta dentro del proyecto, podemos observar que la ruta de la nueva carpeta se encuentra dentro de la ruta del proyecto.

7.    Pulsamos siguiente.

image027

8.    Repetimos el mimo proceso para crear otra carpeta llamada singar dentro de la carpeta librerías que acabamos de crear.

image029

9.    Verificamos que se haya creado una nueva Carpeta en el proyecto.

10. Ahora solo tenemos que ubicar dentro del sistema operativo la carpeta donde descargamos o colocamos nuestra librería, en este caso la librería Singar.

11. Una vez ubicada esta carpeta, si la librería viene en un archivo de empaquetamiento .zip, .rar, .7z, .tar, o .gz, descomprimimos dicho archivo, entramos a la carpeta que se genera después de la descomprensión, ubicamos la carpeta lib, entramos a ella seleccionamos todos los archivos con extensión .jar que se encuentran ubicados dentro de dicha carpeta lib (en algunos cosos solo es necesario el archivo .jar que tiene el mismo nombre que la librería), en nuestro caso particular también debemos seleccionar todas las librerías con extensión .DLL, .OS, . DYLIB Y .LIB, esto se debe a que SL Sigar ofrece información del PC donde se está ejecutando el programa que la utiliza, nuestro programa está escrito en Java, significa que es multiplataforma, lo que quiere decir que SL Sigar debe obtener información sobre dicha plataforma, con el fin de ser compatible con la capacidad de multiplataformidad de Java, es por esta razón que el SL Sigar incluye en sus librerías un conjunto de archivos que contienen las bibliotecas de de código compilado nativo para muchas plataformas, entre las que se encuentran como lo había dicho anteriormente, la gran mayoría de distribuciones importantes o matrices de GNU/Linux (de las que se basan muchas otras distribuciones ), otras de GNU/Unix y por supuesto Windows

12. Damos clic derecho sobre los archivos seleccionado y escogemos la opción copiar, esto colocara una copia de los archivos en el porta-datos del sistema opetativo en el que estamos escribiendo nuestro software, en este caso Windows.

image032

13.  Luego volvemos a NetBeans y nos ubicamos nuevamente en el panel de Archivos, damos clic derecho sobre la carpeta que hemos creado y seleccionamos la opción pegar.

image033

14. Verificamos que las librerías se han copiado físicamente dentro de la nueva carpeta creada.

image035

15. Ahora vamos al panel de proyectos y seleccionamos nuestro proyecto en caso de que tengamos más de uno abierto,

16. Nos colocamos en la opción Biblioteca

17. Damos clic derecho escogemos la opción Agregar archivo JAR/Carpeta

image037

18. Buscamos la carpeta de nuestro proyecto y entramos a la carpeta librerías donde colocamos nuestras librerías

19. Seleccionamos las librería necesarias o deseadas, en nuestro caso la librería singar.jar

20. Pulsamos abrir.

image040

21. Verificamos que NetBeans haya colocado las librerías dentro de las bibliotecas del proyecto.

image041

22.  Repetimos estos mismo pasos por cada una de las bibliotecas externas que queremos agregar a nuestro proyecto.

23. De esta forma podremos utilizar en nuestro código fuente las clases compiladas que están dentro de las librerías agregadas al proyecto.

24. Las otras librerías que no son .jar debemos dejarlas siempre en la misma carpeta donde se encuentra la librería que las usa, en este caso la librería sigar.jar

Escribir el código de las clases necesarias.

Para escribir el código de las clases que harán parte del proyecto, solo tenemos que ir al panel de proyectos seleccionar el paquete deseado y seleccionar dando doble clic sobre el archivo de la clase que queremos editar, NetBeans nos proporciona un potente editor que nos facilita la generación de código de nuestras clases.

Como el código de las clases es  algo extenso, explicare solo las funciones más importantes.

Estructura de la clase InformacionPC.java

Esta clase contiene un conjunto de atributos que almacenan información propia del PC, acerca del Sistema Operativo, de la CPU, de la Memora RAM y de los sistemas de Archivos de la plataforma en cualquier programa que utilice este componente.

Lo primero que hay que ver son las clases necesarias, aquí en esta grafica se pueden apreciar las clases que he utilizado, en primer lugar de la lista se encuentra:

  • La Interfaz Serializable: la cual permite convertir nuestros objetos en un chorro de bits manipulables, haciendo posible el envió de dichos objetos por la red, almacenarlos en un archivo, etc.
  • La clase SimpleDateFormat: utilizada para formatear fechas en formato Data a cadena y viceversa.
  • La clase ArrayList: es una colección de objetos almacenados secuencialmente, se comporta exactamente igual que una lista y tiene muchas funciones para poder trabajar con los objetos que se encuentran referenciados en su interior
  • La clase Calendar: se utiliza como base para trabajar con fechas en utilizando el calendario gregoriano.
  • La clase Date: clase algo descontinuada para trabajar con fecha, en la actualidad solo se uso como objeto para almacenar los datos de una fecha, mas no para realizar operaciones con ellas.
  • La clase GregorianCalendar: esta clase se diseño para ser la sucesora de Date, es la clase que se utiliza para realizar operaciones con fechas gregorianas.
  • Las clases CpuInfo y CpuPerc: son clases que perteneces al componente Sigar, se utilizan para obtener información sobre el procesador de la plataforma.
  • Las clases Mem y OperatingSystem:al igual que CpuInfo y CpuPerc pertenecen al componente Sigar, se utilizan para obtener información sobre la memoria RAM e información sobre el Sistema operativo respectivamente.
  • La clases Sigar y SigarException: La primera es el núcleo de la librería Sigar, con ella se pueden optener cas todos los demás objetos de las clases que forman al componente, la ultima representa un error en tiempo de ejecución, posiblemente ocurrido por uno de varios motivos asociados a la plataforma

image043

Las variables que utiliza la clase para guardar la información que obtiene sobre la plataforma

image045

La función que recoge información sobre el sistema operativo

image047

La función que recoge información sobre la CPU

image049

La función que recoge información sobre la memoria RAM

image051

La función que utiliza a  la clase ParticionDiscoduro con el fin de hacer un llamado a su función datosDiscoDuro, para obtener información sobre las particiones de la plataforma

image053

La función que imprime los datos recogidos sobre la plataforma al momento de representar un objeto de la clase InformacionPC como una cadena de caracteres imprimibles.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public String toString(){
SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
String fechaEncendidoS = formatoFecha.format(fechaEncendido);
String informacion =
"::: Datos del Equipo :::\n\n" +
"::: Datos del Sistema Operativo :::\n\n" +
"Sistema Operativo:  "+nombreSO+"\n" +
"Arquitectura:  "+arquitecturaSO+"\n" +
"Version:  "+versionSO+"\n" +
"Nuemero de actualizaciones:  "+numeroDeActualizaciones+"\n" +
"Fabricante:  "+fabricante+"\n" +
"Descripcion:  "+descripcionSO+"\n" +
"Año de fabrica:  "+versionDeFabricaSO+"\n" +
"Uso de CPU :  "+usoCPUSO+"\n" +
"Maquina:  "+maquinaSO+"\n" +
"Codigo de  fabrica:  "+codigoFebrica+"\n" +
"Nombre de fabrica:  "+nombreDeFabrica+"\n" +
"Fecha encendido:  "+fechaEncendidoS+"\n\n" +
"::: Datos de la CPU :::  \n\n" +
"Marca CPU :  "+fabricanteCPU+"\n" +
"Modelo CPU:  "+modeloCPU+"\n" +
"Velocidad CPU:  "+velocidadCPU+"MHz\n" +
"Consumo CPU:  "+consumoCPU+"\n" +
"Tamaño de la Cache CPU:  "+tamañoCacheCPU+"\n" +
"Total Nucleos:  "+totalNucleos+"\n" +
"Total Socket CPU:  "+totalSocketCPU+"\n" +
"Total Socket por Nucleo CPU:  "+totalNucleosPorSocket+"\n" +
"Velocidad CPU:  "+velocidadCPU+"\n";
int i = 1;
for (String consumo : consumoDeLosCPU) {
informacion += "CPU No." +i+ " tiene un consumo de "+consumo+"\n";
++i;
}
informacion += "\n::: Datos de la  memoria RAM :::  \n\n" +
"RAM total:  "+ramTotal+" Mb\n" +
"RAM Ocupada:  "+ramOcupada+" Mb\n" +
"RAM Libre:  "+ramLibre+" Mb\n\n"+
"::: Datos del Sistema de Archivos :::  \n\n" ;
for (MedioDeAlmacenamiento particion  : listaPerticiones) {
informacion += "-- Paticion No."+(listaPerticiones.indexOf(particion)+1)+" --\n"+ particion;
}
return informacion;
}

Por último se encuentra el constructor de la clase InformacionPC que se encarga de realizar el llamado a  las funciones respectivas dando valores a sus variables atributos.

image055

Estructura de la clase MedioDeAlmacenamiento.java

Esta clase le he diseñado para obtener información sobre las particiones de los medios de almacenamiento que se encuentran instalados en la plataforma, inicialmente utiliza la librería Sigar para obtener información del tamaño y tipo de medios, pero en la segunda parte de este articulo, le agregare mas funciones como por ejemplo que puede obtener el nombre y el serial del medio para plataformas Windows, esto lo realizare con el uso de unas utilidades de Windows.

Veamos cuales son las clases que utilizo para lograr mi objetivo.

La clase File: se utiliza para obtener información y realizar operaciones sobre uno o varios archivos de los sistemas de archivos que utiliza la plataforma.

Las clases FileSystem, FileSystemUsage, NfsFileSystem, SigarProxy, SigarProxyCache: pertenecen a la librería Sigar, las tres primeras representan una particiones de archivos de la plataforma, ejecutan código de bajo nivel escrito en C, para obtener información sobre las particiones, las dos últimas clases se utilizan para  hacer conexiones con unidades de almacenamiento remoto, siempre y cuando la plataforma local tenga acceso a ellas.

image057

Los atributos de la clase que almacenan los datos obtenidos sobre cada partición de archivos

image059

Los constructores de la clase

image061

Constructor que utiliza a Sigar para obtener los datos de las particiones

image063

Constructor que utiliza la JVM para obtener los datos de las particiones

image065

La función que realiza el trabajo de comunicarse con la plataforma y obtener la información utilizando Sigar y retorna una lista de particiones de la platadorma

image067

Sobre escribiendo la función toString para que devuelva una cadena con información sobre la partición

image069

Compilando y probando el componente

Para realizar una prueba simple solo creare un una clase más que llamare Principal, esta clase lo único que tendrá será el método public static void main(String ar[ ]), función que es detectada por la maquina virtual  para iniciar la ejecución de los programas Java, esta función creara un objeto de la clase Información PC e imprimirá esta objeto por la consola del sistema operativo que se esté utilizando en la prueba, en este caso Windows.

image071

Ustedes pueden ir adelantándose un poco e intentar imprimir estos datos en una ventana, para ellos no necesitan la clase Principal, solo crear un objeto de la clase Información PC y utilizar sus métodos getXXX para colocar los datos de la plataforma en una ventana, más o menos esto será lo que hare en la segunda parte de este articulo, pero utilizare otros componentes de SL para crear graficas estadísticas de forma dinámica y mostrar los datos de la plataforma de una manera más agradable, además de esto creare un adiestrador de tareas similar al de Windows, escrito en java utilizado este mismo componente que he escrito en este articulo.

Ahora compilamos

1.    Un que este paso es opcional, es buena práctica hacerlo,  Antes de compilar se puede verificar que este proyecto este configurado como proyecto principal, en caso de que tengan más de un proyecto abierto en NB, esto lo pueden hacer yendo al panel de proyectos y dando clic derecho sobre el proyecto, damos clic en establecer como proyecto principal.

image073

2.    clic en el botón compilar que se encuentra en la barra de herramientas de NB

image076

Veamos la salida desde la consola de NB

image077

He colocado aquí la salida completa para que la puedan apreciar mejor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
debug:
::: Datos del Equipo :::

::: Datos del Sistema Operativo :::

Sistema Operativo:  Win32
Arquitectura:  x86
Version:  6.0
Nuemero de actualizaciones:  Service Pack 2
Fabricante:  Microsoft
Descripcion:  Microsoft Windows 2008
Año de fabrica:  2008
Uso de CPU :  little
Maquina:
Codigo de  fabrica:  Longhorn Server
Nombre de fabrica:  Windows 2008
Fecha encendido:  2009-12-09 09:52:02 AM

::: Datos de la CPU :::

Marca CPU :  Intel
Modelo CPU:  Core(TM)2 Duo CPU     T6570  @ 2.10GHz
Velocidad CPU:  2094MHz
Consumo CPU:  1.6%
Tamaño de la Cache CPU:  -1.0
Total Nucleos:  2
Total Socket CPU:  2
Total Socket por Nucleo CPU:  1
Velocidad CPU:  2094
CPU No.1 tiene un consumo de 9.4%
CPU No.2 tiene un consumo de null
Datos de la  memoria RAM :::

RAM total:  3032.0 Mb
RAM Ocupada:  1.99604224E9 Mb
RAM Libre:  1.183203328E9 Mb
::: Datos del Sistema de Archivos :::

-- Paticion No.1 --
Nombre Unidad: C:\
Nombre Particion: C:\
Tipo de particion: NTFS
Dispositivo: local
Propiedades: Lectura y Escritura
Espacio Total : 218.0 GB
Espacio Ocupado: 137.0GB
Espacio Libre: 81.0GB
Porcentaje de Uso: 63.0%
-- Paticion No.2 --
Nombre Unidad: D:\
Nombre Particion: D:\
Tipo de particion: NTFS
Dispositivo: local
Propiedades: Lectura y Escritura
Espacio Total : 14.0 GB
Espacio Ocupado: 4.0GB
Espacio Libre: 10.0GB
Porcentaje de Uso: 28.0%
-- Paticion No.3 --
Nombre Unidad: E:\
Nombre Particion: E:\
Tipo de particion: cdrom
Dispositivo: cdrom
Propiedades: Lectura y Escritura
Espacio Total : 0.0 GB
Espacio Ocupado: 0.0GB
Espacio Libre: 0.0GB
Porcentaje de Uso: 0.0%
-- Paticion No.4 --
Nombre Unidad: F:\
Nombre Particion: F:\
Tipo de particion: cdrom
Dispositivo: cdrom
Propiedades: Lectura y Escritura
Espacio Total : 0.0 GB
Espacio Ocupado: 0.0GB
Espacio Libre: 0.0GB
Porcentaje de Uso: 0.0%

Creando las librerías de nuestro componente

Ahora solo nos queda crear las librerías de nuestros componente para que pueda ser utilizado en cualquier aplicación Java, esta es una labor algo pesada si no se cuenta con un buen IDE como lo es NB, gracias a él esta operación se convierte en un simple clic, NB realiza todo el trabajo pesado y nos entrega las librerías lista.

1.    dar clic en el botón Limpiar y Generar  Proyecto que se encuentra en la barra de herramientas de NB

image080

2.    Ir al panel de Archivos de NB, notar que se ha creado una nueva carpeta llamada dist, este directorio es donde NB se ha colocado las librerías de nuestro componente o proyecto

image081

3.    Ahora hay que colocar en este directorio, más específicamente dentro del directorio lib, el resto de librerías nativas que son utilizadas por Sigar para realizar su labor a bajo nivel sobre las plataformas donde se utiliza, para ello nos colocamos en la carpeta librerías que creamos anteriormente, recordar que en ella se encuentran los componentes externos que conforman nuestro proyecto, en este caso la el componente Sigar y todas sus librerías y recursos (archivos),  luego entramos a la carpeta sigar y copiamos todos el contenido de esta capeta, a excepción del archivo sigar.jar, el cual ya hemos colocado anteriormente dentro del proyecto.

image083

4.    Volvemos al directorio dist y nos colocamos sobre la carpeta lib, aquí pegamos tos archivos que anteriormente hemos copiado, esto con el fin de agregar las librerías que necesita sigar (también conicidad como dependencias) y puedan estad disponibles junto a nuestro componente.

image085

Así quedaría nuestro componente final

image087

Ya debemos  ofrecer a todos nuestro proyecto, para ellos lo hacemos en tres presentaciones:

  • El proyecto de codigo Fuente (solo el proyecto de NetBeans con los recursos necesarios para su compilación), si no se asusten, saben bien esta es una obligación moral, ética, social y legal, no podemos apropiarnos del esfuerzo y la buena voluntad de otras personas, las cuales han estudiando y trabajado muy duro para ofrecernos sus proyectos como Software Libre, facilitándonos muchas labores a veces algo complejas.
  • El proyecto de compilado (solo la carpeta dist con el código binario muy cerca del enlace para descargar el proyecto de código fuente)
  • El proyecto de código fuente y el compilado (un empaquetado de toda la capeta de trabajo donde tenemos guardado el proyecto de código fuente y la carpeta dist)
  • Lo importante es que el código fuente este siempre disponible con las cuatro libertades que exige la licencia GNU-GPL.

Los animo a ir adelantándose un poco e intentar imprimir estos datos en una ventana, solo tienen que agregar una clase tipo Formulario para la ventana de la aplicación, ir al diseñador de GUI de NB agregar los componentes de deseados en dicha ventana, crear un objeto de la clase Información PC y utilizar sus métodos getXXX para colocar los datos de la plataforma en una ventana, ir a la clase Principal y crear un objeto de la Ventana diseñada, centrarla en la pantalla del PC y hacerla visible, más o menos esto será lo que hare en la segunda parte de este articulo, pero utilizare otros componentes de SL para crear graficas estadísticas de forma dinámica y mostrar los datos de la plataforma de una manera más agradable, además,  creare un administrador de tareas similar al de Windows, escrito en Java utilizado este mismo componente que he escrito en este articulo  nny  nuevas cosas que les enseñare en esta próxima entrega.

Descargar El Proyecto en Netbeans desde aquí

Feliz  navidad para todos y prospero año nuevo.

Que el nuevo año los inunde de ganas por estudiar, por trabajar, de salir adelante y sobre todos de  hacer el bien siempre, pase lo que pase.

Mil bendiciones para todos.

1291 Visitas hoy
Comparte en tu Web:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • email
  • Reddit
  • RSS
  • StumbleUpon

16 Responses  
  • Jair Enrique Otero Foliaco writes:
    Enero 1st, 2010 at 3:35

    Los Variedad de Archivos los cuales son particulares para un sistema operativo se adiciona la proyecto para que al momento de ejecutar el proyecto este se efectivo y no cause ningún problema.

    • John Carlos Arrieta Arrieta writes:
      Enero 10th, 2010 at 11:19

      Exacto, esa variedad de archivos que ves contienen código nativo para cada plataforma, el componente comprueba mediante código Java (supongo que con las propiedades del sistema System.getProperty(“os.name”),…) el nombre y la arquitectura de la plataforma en la que se esta ejecutando y luego medianta validaciones ejecuta el código nativo correspondiente, el cual no es codigo Java sino código de lenguajes nativos, el favorito para estas operaciones es C o Ensamblador.

  • Jair Enrique Otero Foliaco writes:
    Enero 1st, 2010 at 14:25

    En el Sistema Operativo que se ejecute no importe que estos no se utilicen.

    • John Carlos Arrieta Arrieta writes:
      Enero 10th, 2010 at 11:15

      Hola Jair gracias por participar en este sitio Web.

      Asi es como dices, no importa el SO. pues Sigar es un componente multiplicadora, muy a pesar que el código que utiliza para acceder a la información de la plataforma esta escrito en C con instrucciones de bajo nivel y ensamblador, lo cual hace que sea por naturaleza código nativo, es por eso Sigar que utiliza compilaciones de dicho código para diferentes plataformas, eso lo puedes notaqr observando el nombre de las librerias .so, .dll. bin,… que están incluidas en el proyecto.

  • Bruno writes:
    Abril 20th, 2010 at 17:02

    John:

    Quiero agradecerte por haber compartido toda esta información que por cierto es de grandisima utilidad.
    Ademas para comentarte que estoy siguiendo este proyecto paso a paso para aprender las bondades de java usando la clase sigar.
    Saludos y muchos éxitos para que continúes así.

    • John Carlos Arrieta Arrieta writes:
      Abril 20th, 2010 at 17:23

      Gracias Bruno por participar en este sitio Web.
      Por cuestiones laborales no he podido terminar los artículos siguientes que para los que están aprendiendo java son considerados los mas importantes, puesto que en ellos explicare como construí la aplicación ejemplo JTastManager usando la librería SL que he desarrollado y el IDE NetBeans, espero que antes de que se acabe el semestre pueda publicar los 2 artículos finales de esta serie.

      Mantente atento a las actualizaciones del sitio, aunque he escrito un poco de código PHP para permitir que WordPress (el sistema de Bitácoras o Blogs que utilizo en este sitio web) notifique a todos los usuarios de registrados cada vez que publique un nuevo articulo, lo he probado una o dos veces pero creo que con algunas cuentas de correo no me funciona.

      Nuevamente Gracias por el comentario Amigo.

  • Bruno writes:
    Abril 21st, 2010 at 8:52

    Claro John, voy a mantenerme atento, ya marque tu web en mis favoritos.
    Saludos.
    Bruno

  • Bruno writes:
    Abril 23rd, 2010 at 8:16

    Hola John:
    Yo de nuevo. No nada solo para comentarte que hay un problema con el valor del consumo de cpu para el 2º cpu. Al igual que a ti, me devuelve null.

    CPU No.1 tiene un consumo de 25.0%
    CPU No.2 tiene un consumo de null

    Al hacer un debug, veo que cuando recorre este for, solo carga una vez consumoDeLosCPU.

    InformacionPC.java
    111- for (CpuPerc consumoDeCPU : listaConsumoPorCPU) {
    112- consumoDeLosCPU[i] = (CpuPerc.format(consumoDeCPU.getUser()));
    113- }

    • John Carlos Arrieta Arrieta writes:
      Abril 23rd, 2010 at 13:53

      Gracias Bruno por el trabajo de depurar este código, dentro de poco subo el proyecto completo con unas actualizaciones como la obtención del serial de las particiones del disco disco

  • Bruno writes:
    Abril 23rd, 2010 at 8:20

    listaConsumoPorCPU[] carga los dos CPUs con los valores para cada nucleo.

    Saludos John.

  • Bruno writes:
    Abril 23rd, 2010 at 16:16

    John Gracias por responderme:
    Ante todo comentarte que ya he podido solucionar el problema con el consumo del CPU Nº2 y me gustaria compartirlo contigo.

    Este es mi humilde aporte.
    En la seccion de Declaraciones:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    56- //en este vector del tipo String almacenaremos el valor de  
    57- //listaConsumoPorCPU[i].user()
    58-    private String[] consumoDeLosCPU = null;

    En el metodo informacionCPU()
    //cargo el vector consumoDeLosCPU[]
    112- int i = 0;
    113- consumoDeLosCPU = new String[listaConsumoPorCPU.length];                
    114- for (CpuPerc consumoDeCPU : listaConsumoPorCPU) {
    115- consumoDeLosCPU[i]=(CpuPerc.format(consumoDeCPU.getUser()));
    116- i++;
    117- }
    118- //le asigno el vector a al atributo consumoDeLosCPU pasandole el vector
    119- this.setConsumoDeLosCPU(consumoDeLosCPU);

    En el metodo toString()

    1
    2
    3
    4
    5
    6
    7
    178-//Traigo el vector de la propiedad consumoDeLosCPU y la guardo en vector de 179-//Strings y luego lo recorro para concatenar al final de el string de
    180-//informacion.

    181- consumoDeLosCPU = this.getConsumoDeLosCPU();
    182- for (int i = 0; i &lt; consumoDeLosCPU.length; i++) {
    183-      informacion += &quot;CPU No.&quot; + (i+1) + &quot; tiene un consumo de&quot;+           -         consumoDeLosCPU[i]+&quot;\n&quot;;
    184-}

    Eso es todo. Como hago para enviarte el codigo completo?
    Saludos

    • John Carlos Arrieta Arrieta writes:
      Abril 23rd, 2010 at 16:49

      Me parece excelente, mira para ver si lo puedes colocar como adjunto en un comentario o escribe solo los puntos relevantes colocalo en formato java, cuando estes en el panel de edicion del comentario, te vas para html y escribes el codigo fuente entre estas etiquetas:
      < code lang = "Java" >
      // este es el código java
      < / code >

      ejemplo:

      1
      // este es el codigo java

      mira como he formateado el código que me escribiste en el comentario anterior

      Sino envíamelos a r r i e t a j o h n a r r o b a h o t m a i l . c o m y yo realizo un nuevo articulo y explico que el gran trabajo que haz hecho.

  • Bruno writes:
    Abril 26th, 2010 at 16:30

    Bueno John para el proximo comentario lo hare.
    Ademas te envie por email lo requerido.
    Saludos

  • Creando un componente basado en Software Libre – V Parte | SIMBIOTICA writes:
    Mayo 9th, 2010 at 3:32

    [...] Creando un componente basado en Software Libre – I Parte [...]

  • Francis writes:
    Junio 14th, 2010 at 0:35

    HOla muy bueno tu aporte hermano , queria preguntarte como obtengo una lista de el software instalado en la pc con esta libreria sigar? alguna idea?

  • John Carlos Arrieta Arrieta writes:
    Julio 9th, 2010 at 20:10

    Pregunta…
    ==========
    Hola Jhon…
    Estoy implementando tu administrador de tareas, en modo consola….

    Pero, me genera errores en esta parte:

    private ArrayList ListaParticiones;

    – Aqui me dice, que cree una clase llamada ParticionDiscoDuro, en la cual, me genera esto:

    class ParticionDiscoDuro {

    static ArrayList datosDiscoDuro() {
    throw new UnsupportedOperationException(“Not yet implemented”);
    }

    }

    public void InformacionParticiones(){

    ListaParticiones = ParticionDiscoDuro.datosDiscoDuro();

    }

    Al final logro borrar todos los errores, pero este no se borra

    for (MediodeAlmacenamiento Particion : ListaParticiones) {
    Informacion += “– Paticion No.”+(ListaParticiones.indexOf(Particion)+1)+” –\n”+ Particion;
    }

    Me podrias decir que va en la clase ParticionDiscoDuro…
    Soy nuevo en NetBeans, y no me estoy adueñando de tu codigo..
    Ya que estoy de vacaciones en la universidad, solo lo estoy tratando de implementar, porque estoy de vacaciones….

    Gracias de antemano

    Respuesta
    ===========
    Nuevamente saludos Ricardo,
    No, no esta incompleta, en todas las versiones que he liberado de este proyecto en el código fuente completo, incluso si desea avanzar un poco mas en las partes III, IV y V explico como utilizarlo por ejemplo en una aplicación gráfica para el escritorio, es mi propia versión del Administrador de Tareas de Windows.

    Esta clase tiene la desventaja que solo funciona en PC con MS-GUIN2, no he escrito aun el código para que funcione en GNU/Linux, ojala y tenga un poco mas de tiempo libre para poder escribir este código y hacerla aun mas compatible con otras plataformas.

    Básicamente esta clase lo que hace es ejecutar ordenes sobre el sistema de linea de comandos de MS-GUIN2, pasarles parámetros, obtener y procesar su salida, estos comandos son precisamente TASKLIST y TASKKILL, el primero devuelve una lista con información de los procesos que se ejecutan en el sistema en el mismo instante en que se envía el comando al S.O, el segundo simplemente tumba, mata o elimina uno o varios procesos de en ejecución, para ellos solo hay que pasarles el PID (Process Identication), el resultado del procesamiento de la salida de TASKLIST es la creación de un nuevo objeto Proceso por cada linea de la lista de procesos en ejecución, es decir un objeto Proceso por cada proceso en ejecución, como veras las propiedades de la clase Proceso corresponden a una simple abstracción que he realizado de la salida de TASKLIST.

    Si te animas a escribir código para que funcione en GNU/Linux, te recomiendo que ejecutes y analices la salida de alguno de estos comandos TOP o kSysGuard, son los comandos equivalentes a TASKLIST y TASKKILL de DOS.

    Si miras bien el código fuente del proyecto, en Java para la ejecución de comandos tanto en Windows como en GNU/Linux, se utiliza el método exec() de la clase Runtime del paquete lang.

    por ejemplo:

    Runtime aplicacion = Runtime.getRuntime();
    try{
    String comando = “cmd /c dir”;
    aplicacion.exec( comando );
    }
    catch(Exception e){
    System.out.println(“Error al ejecutar ” +comando);
    }
    }

    Espero que haber ayudado a resolver tus dudas.


Por favor deje sus Comentarios aquí:

© Gurpo de Investigacion DEARTICA