revista atix número 15

Upload: gonzalezmd

Post on 30-May-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Revista Atix Nmero 15

    1/49

  • 8/14/2019 Revista Atix Nmero 15

    2/49

  • 8/14/2019 Revista Atix Nmero 15

    3/49

    Direccin y Coordinacin General

    Esteban Saavedra Lpez ([email protected])

    Diseo y Maquetacin

    Jenny Saavedra Lpez ([email protected])

    Esteban Saavedra Lpez ([email protected])

    Revisiones

    Esteban Saavedra Lpez

    Jenny Saavedra Lpez

    Noticias

    Jenny Saavedra Lpez

    Marcia Velasquez

    Autores Frecuentes

    Esteban Saavedra LpezJoseph Sandoval

    Mario Carrion

    Martn MrquezRenzo Martinez

    Rafael Rendon

    Herramientas

    La edicin de esta revista fue realizada de forma integra haciendo uso de SoftwareLibre

  • 8/14/2019 Revista Atix Nmero 15

    4/49

  • 8/14/2019 Revista Atix Nmero 15

    5/49

    Transcurrieron 365 das ms en nuestras vidas, 365 das ms de estar inmersos ennuestras actividades, pues como cada ao, es hora de hacer un recuento de todaslas cosas, de todas la actividades, de todas las experiencias que tuvimos, parapoder evaluarlas y ver cuanto crecimos o cuanto aprendimos. Para muchos esbastante triste ver que se va un ao ms, por que represento un ao bueno; encambio otros sentirn el alivio de ver que se va un ao que fue malo para ellos, perotodos esperanzados esperamos que el ao que viene sea mejor que el que se va.

    Un ao ms de hacer comunidad, un ttulo que refleja nuestra dedicacin dentro lacomunidad nacional e internacional, una comunidad que desde que emprendimos el

    desafo nos dio su respaldo y confi en nuestro trabajo. A toda esta gran comunidadles damos nuestro agradecimiento y les reiteramos nuestro compromiso de seguirtrabajando promoviendo el uso de las tecnologas libres y destacando el conceptode libertad.

    En este ultimo nmero del 2009, deseamos expresarles nuestros mayores deseosde felicidad en estas fiestas de fin de ao, y la mayor prosperidad en el ao queviene. FELICIDADES A TODA LA COMUNIDAD

    Un ao ms de hacer comunidad.

    Bienvenidos a nuestro dcimo quinto nmero

    Esteban Saavedra LpezDirector y Coordinador General

  • 8/14/2019 Revista Atix Nmero 15

    6/49

  • 8/14/2019 Revista Atix Nmero 15

    7/49

    Educacin pblica,software privativo

    La constitucin poltica Costarricense en suArtculo 78, captulo VII denominadoEducacin y Cultura indica:

    La educacin preescolar y la general bsicason obligatorias. Estas y la educacindiversificada en el sistema pblico songratuitas y costeadas por la Nacin.

    Es interesante pensar que la inclusin de

    nuestros jvenes en un sistema educativomoderno en el que el uso de las tecnologassea el medio para lograr un justo acceso alconocimiento, basados en el compromiso delestado plasmado en nuestra constitucin deofrecer educacin gratuita y obligatoriadenota graves incongruencias en sus efectosprcticos tal y como se realiza hoy en da.

    Parece no tener sentido que en las escasasaproximaciones de nuestros nios a lascomputadoras se realicen sobre softwareprivativo. El software privativo es aquel quesu licencia no permite copiar, distribuir omodificar el programa como tal.

    En la mayora de los casos el softwareprivativo no permite ser copiado o instaladoen mltiples computadoras. As por ejemplosi a un nio se le ensea en su centroeducativo utilizar un paquete de ofimticaprivativo. Qu posibilidades tiene eseestudiante de instalar dicho software en su

    casa? La respuesta tiene dos enfoques, elms difundido en nuestro pas seraconseguir una copia ilegal del software, elsegundo sera adquirir una licencia legal.

    Si consideramos que el salario mnimoaprobado en el primer trimestre de 2009 paraun mensajero es de 192.385 Ser posibleque se costee la compra de una nicalicencia por 60.000 de un paquete deofimtica reducido? Acaso se cumplir loque se busca en nuestra constitucin?.

    El enfoque errado tomado por lasautoridades partcipes de la gestin de laeducacin pblica toma matices mspreocupantes si tomamos el rumbo seguido.La tctica tomada es no tener rumbo;mientras algunos hablan de neutralidadtecnolgica, es evidente que esdescabellado no tener polticas claras deinclusin de la tecnologa en la educacin.

    El impacto del software privativo en laeducacin pblica no solo afecta

    econmicamente. El software privativo nopermite ser modificado por terceros, lo queprovoca que nuestro modelo de inclusin delas tecnologas dependa de un nicoproveedor. A su vez la utilizacin de softwareprivativo deja de lado las posibles mejorasque pueden ofrecer los centros de educacinsuperior, ya que nunca podran estudiar losprogramas y mucho menos publicar mejoras.

    Hay que dejar claro que s existenalternativas, existe software educativo de

    altsima calidad liberado bajo el esquema desoftware libre. El software libre es el quepermite estudiar, modificar, distribuir elsoftware basados en un enfoquecolaborativo.

    La utilizacin de software libre permitira a loscentros educativos regalar una copia delsoftware a sus estudiantes sin necesidad dese incurra en un gasto adicional, permite adistintos entes contribuir en el desarrollo de

  • 8/14/2019 Revista Atix Nmero 15

    8/49

  • 8/14/2019 Revista Atix Nmero 15

    9/49

  • 8/14/2019 Revista Atix Nmero 15

    10/49

  • 8/14/2019 Revista Atix Nmero 15

    11/49

    GNUPlot Script

    Muchas veces el realizar una grfica requiererealizar un conjunto de pasos previos,reflejados en un conjunto de instrucciones,

    para este caso GNUPlot permite que eseconjunto de instrucciones sea almacenado enun archivo de texto (script) y sea invocado deforma interactiva o como parmetro de lainstruccin de ploteo.

    load 'archivo_script' (de formainteractiva)

    o

    gnuplot archivo_script (como argumento)

    #Gnuplot script de ejemploset autoscaleunset label #remove any log-scalingset xtic autoset ytic autoset title "Script de ejemplo"set xlabel "Titulo Eje x"set ylabel "Titutlo Eje y"set key 0.01,100set label "Punto Clave" at 0.003,260set arrow from 0.0028, 250 to 0.003,280set xr [0.0:0.022]set yr [0:325]plot "ejemplo.dat" using 1:2 t 'Serie 1'with linespoints,"ejemplo.dat" using 1:3t 'Serie 2' with pointspause 5 "Wait for 5 seconds"

    Grficas 2D y 3Dplot sin(x)

    splot sin(x)

  • 8/14/2019 Revista Atix Nmero 15

    12/49

    Estilo de grficas

    GNUPlot permite la personalizacin deestilos, ms propiamente la personalizacindel estilo de trazo que se utiliza para lasgrficas.

    Los estilos disponibles son:

    lines points

    impulses yerrorbars

    fsteps histeps

    boxxyerrorbars vector

    error lines xerrorlines

    linespoints dots

    xyerrorbars steps

    boxes boxerrorbars

    financebars candlesticks

    yerrorlines xyerrorlines

    Estos estilos son asignados con lainstruccin: plot sin(x) with impulses

    plot sin(x) with impulses

    plot sin(x) with steps

    Personalizar las grficas

    Instruccin Descripcin

    set title "Force-Deflection Data" Asignar un ttulo

    set xlabel "Deflection (meters)" Asignar una etiqueta en el eje X

    set ylabel "Force (kN)" Asignar una etiqueta en el eje Y

    set xrange [0.001:0.005] Cambiar el rango en el eje X

    set yrange [20:500] Cambiar el rango en el eje Y

    set autoscale Dejar que Gnuplot establezca el rango de los ejes

  • 8/14/2019 Revista Atix Nmero 15

    13/49

    set key 0.01,100 Mover el identificador de la grfica a la coordenada x,y

    unset key Eliminar el identificador de la grfica

    set label "yield point" at 0.003, 260 Poner una etiqueta en una coordenada x,y

    unset label Eliminar todas las etiquetas

    set logscale Dibujar usando ejes logartmicos

    unset logscale; set logscale y Activar y desactivar escala logartmica

    set xtics (0.002,0.004,0.006,0.008)

    unset xtics; set xtics auto

    set title 'Grfico de la variacin de la velocidad'set xlabel 'Tiempo/s'set ylabel 'Velocidad/ms^{-1}'

    set xrange[0:7]plot x*sin(1.2*x)

    Incluir indicadoresset title 'Grfico de la Velocidad Vs eltiempo'set xlabel 'Tiempo/s'

    set ylabel 'Velocidad/ms^{-1}'set xrange[0:7]set mxtics 4set arrow 1 from 1.9,-1.0 to 2.01,1.8set label 1 "Primer maximo" at 1.8,-1.0rightplot x*sin(x) title "Velocidad"

  • 8/14/2019 Revista Atix Nmero 15

    14/49

    Ajuste de curvas

    Muchas veces surge la necesidad de poderajustar nuestros datos, bajo un cierto criterio(lineal, no lineal, etc), una de las ventajas deusarGNUPlot va referida al ajuste de curvasdados los datos y el tiempo de ajuste que se

    precisa, aspecto que facilita enormemente eltrabajo y la facilidad para los usuarios.

    Inicialmente debemos considerar lapresencia de un archivo que contenga losdatos que sern ajustados, como se muestraen el ejemplo siguiente:

    datos.dat

    1 62 53 54 45 2

    Realzamos el ploteo de los datos originales,para luego contrastar con los datos ajustadossegn diversas curvas.

    plot datos.dat w l

    Ajuste a una ecuacin lineal

    f1(x)=a*x+bfit f1(x) 'datos.dat' via a, b# a=-0.9, b=7.1plot f1(x) w l, 'datos.dat' w l

    Ajuste a una ecuacinpolinomial de 2do grado

    f2(x)=a*(x**2)+b*x+cfit f2(x) 'datos.dat' via a, b, cplot f2(x) w l, 'datos.dat' w l

    Ajuste a una ecuacinpolinomial de 3er grado

    f3(x)=a*(x**3)+b*(x**2)+c*x+dfit f3(x) 'datos.dat' via a, b, c, d

    plot f3(x) w l, 'datos.dat' w l

  • 8/14/2019 Revista Atix Nmero 15

    15/49

    Ajuste a una ecuacinpolinomial de 4to grado

    f4(x)=a*(x**4)+b*(x**3)+c*(x**2)+d*x+efit f4(x) 'datos.dat' via a, b, c, d, eplot f4(x) w l, 'datos.dat' w l

    Grficas mltiples

    GNUPlot permite realizar ms de una grficaen cada una de las salidas, permitiendo deesta forma realizar comparativas entre lasdistintas grficas realizadas.

    set multiplot; #get into multiplot modeset size 1,0.5;set origin 0.0,0.5; plot sin(x);set origin 0.0,0.0; plot cos(x)unset multiplot #exit multiplot mode

    Grabar trabajos

    Generalmente cuando estamos realizandotrabajos con cierto grado de complejidad, elcual vamos ajustando paulatinamente hasta

    lograr los resultados esperados, esconveniente disponer de la posibilidad depoder grabar la secuencia de instruccionesrealizadas para tal efecto, para este casoGNUPlot dispone de la instruccin save, y laload para recuperar la secuencia deinstrucciones desde un archivo previamenteguardado.

    A continuacin mostramos algunos ejemplosde su uso:

    save 'trabajo.gnu'save functions 'funciones.dat'save var 'variables.dat'save set 'opciones.dat'save term 'terminal.gnu'save '-'save '|grep title >titulo.gp'

    load 'trabajo.gnu'load "funciones.dat"load "< loadfile_generador.sh"

    Salida impresa y grfica

    GNUPlot provee la posibilidad de direccionarla salida de sus grficas, estas pueden serredirigidas para ser impresas (formatoPostScript) o pueden ser redirigidas hacia unarchivo de imagen (gif, tgiff, jpeg, pbm, pdf,latex, pstricks, postscripts etc... ) o la terminalX11 (opcin por defecto)

    Su uso podra ser:

  • 8/14/2019 Revista Atix Nmero 15

    16/49

    set terminal gifset output 'archivo01.gif'plot....#set output #puede ser necesario paraalgunas terminales

    Un ejemplo prctico con una salida a unarchivo gif:

    set terminal gifset output 'archivo01.gif'set title 'Grfico de la Velocidad Vs eltiempo'set xlabel 'Tiempo/s'set ylabel 'Velocidad/ms^{-1}'set xrange[0:7]set mxtics 4set arrow 1 from 1.9,-1.0 to 2.01,1.8set label 1 "Primer maximo" at 1.8,-1.0rightplot x*sin(x) title "Velocidad"

    Un ejemplo prctico con una salida a unarchivo eps:

    set xlabel 'time in seconds'set ylabel 'throughput packets/second'set yrange [15:25]set term postscript enhanced color epsset output 'grafico.eps'plot 'ejemplo.dat' using 1:2 t'throughput (with RTS)' w l,'ejemplo.dat' using 1:3 t 'throughput(without RTS)' w l

    Interaccin con lenguajes deprogramacin

    Una de las grandes virtudes de GNUPlot esbrindar la posibilidad de ser utilizado desdeuna aplicacin desarrollada en lenguajes deprogramacin como Python, Perl, C, C++;cualidad que hace que se pueda reutilizaresta poderosa herramienta desde nuestraspropias aplicaciones.

    Poder de GNUPlotEste artculo solo intenta mostrar unapequea parte del gran potencial que sedispone en GNUPlot. Adicionalmentecomentar que muchsimas universidades en

    todo el mundo han incluido a estaherramienta por sus buenas caractersticas,innumerables funciones implementadas ysobre todo por su facilidad de uso y rapidezen su curva de aprendizaje.

    Referencias[1] http://www.gnuplot.info/

    Autores

    Pilar Castel DiazCentro de Investigacin en Fsica yMatemticas (ES)[email protected]

    Esteban Saavedra LpezPresidente de la Fundacin AtixLibre (Bolivia)Activista de Software Libre en Bolivia

    [email protected]@atixlibre.org

    http://jesaavedra.opentelematics.orghttp://www.atixlibre.org

  • 8/14/2019 Revista Atix Nmero 15

    17/49

    EntendiendoLINQ con C# y MonoLINQ es una tecnologa integrada en .NET que proporciona la capacidad para consultaro manipular diversas fuentes de datos, independientes del proveedor, utilizando deforma nativa la sintaxis de cualquier lenguaje de programacin soportado por .NET

    Introduccin

    Hoy en da es comn encontrar aplicacionesen las cuales hay una necesidad dereemplazar o migrar de una o de variasfuentes de datos hacia otra u otras fuentesde datos similares o totalmente diferentes, sibien este cambio se da por razones dedesempeo, econmicas o de capacidad,este cambio implica que el desarrolladorajuste o reescriba el lenguaje de acceso a lafuente de datos (SQL, Macros,DOM, Xquery)para poner en marcha la aplicacin utilizandola fuente de datos actualizada.

    Un escenario as presenta las siguientesdificultades:

    Los errores de sintaxis del lenguaje deacceso a la fuente de datos no sonlocalizables por el compilador y solo se

    encuentran en tiempo de ejecucin.

    Obliga a que el desarrollador entienda adeterminado nivel el lenguaje demanipulacin de la fuente de datos, porejemplo si es una base de datos se debeentender SQL, si es un XML entender DOM oXQuery.

    Es inevitable la mezcla de lenguajes en lasolucin, para el desarrollo un lenguaje de

    programacin imperativo orientado a objetos(como C#) y un lenguaje imperativo (comoSQL) para la manipulacin de datos.

    En este escenario LINQ proporciona unasolucin estupenda, ya que las consultasestaran integradas dentro del lenguaje de

    programacin sin importar cual fuese lafuente de datos y con la consistencia deutilizar el mismo patrn para todas lasconsultas.

    Acerca de LINQ

    Language Integrated Query o LINQ es unatecnologa integrada en .NET queproporciona la capacidad para consultar omanipular diversas fuentes de datos,independientes del proveedor, utilizando de

    forma nativa la sintaxis de cualquier lenguajede programacin soportado por .NET, lo cualnos proporciona el soporte del compilador ynos permite concentrarnos nicamente en lasbsquedas en lugar de cmo hacer la rutinapara cada bsqueda, adems la sintaxis deLINQ es similar a SQL lo que nosproporciona un estndar, ya que es la mismasintaxis para todas las fuentes de datosdiferentes o similares.

    Dependiendo de la fuente de datos a trabajar,es el componente LINQ a utilizar, los

    componentes se agrupan en:

    LINQ to SQL: Es el conjunto declases, estructuras, interfaces yenumeraciones utilizadas para escribirconsultas a bases de datosrelacionales como PostgreSQL, SQLServer o MySQL.

    LINQ to Objects: Es la APIpredeterminada de LINQ y permite

  • 8/14/2019 Revista Atix Nmero 15

    18/49

    escribir consultas para arreglos,estructuras y colecciones de objetosen memoria.

    LINQ to XML: Proporciona lahabilidad de escribir consultas paraprocesar fuentes de datos XML.

    LINQ to DataSet: Es la API dedicadaa trabajar con clases DataSets yDataTables, ya que aun existenaplicaciones y desarrolladores queutilizan esta solucin.

    En este tutorial mostraremos una serie deejemplos con cada una de las expresiones yoperadores de consulta de LINQ, utilizando elAPI predeterminada de LINQ o sea LINQ toObjects.

    Trabajando LINQ con MonoAntes de empezar a trabajar debemos tenerinstalado y configurado la ltima versin delproyecto Mono, sto se consigue desde elsitio de descarga: http://www.mono-

    project.com/Main_Page

    Empezaremos creando una aplicacin deconsola, para ejemplificar sobre todo las

    expresiones de consulta que se utilizan conLINQ.

    Esta aplicacin tendr tres colecciones deobjetos (entidades) Hospital, Almacn yArtculos la relacin entre un hospital, unalmacn y los artculos est dada por unarelacin de uno a muchos, donde un hospitaltiene desde uno a varios almacenes y encada almacn hay uno o varios artculosdiferentes.

    Para empezar con el ejemplo, escribiremos elcdigo de las objetos que utilizaremos en elejemplo, este cdigo es el siguiente:

    class Hospital {

    public int ID{set;get;}

    public string NombreH {set;get;}

    }

    class Almacen {

    public Hospital Hospital {set;get;}

    public int IDAlmacen{ set;get;}public string NombreA { set; get;}

    }

    class Articulo{

    public Almacen Almacen {set;get;}

    public int IDArticulo {set;get;}

    public string Nombre {set;get;}

    public double Precio{set;get;}

    }

    Ahora dentro del mtodo Main escribimos el siguiente cdigo, para iniciar las colecciones condatos donde realizaremos las bsquedas con LINQ.

    List lHospitales = new List();var hospitales = new Hospital[] {

    new Hospital{ID = 1,NombreH="Angeles Pedregal"},

    new Hospital{ID = 2, NombreH="1ero Octubre"},

    new Hospital{ID = 3, NombreH="Ignacio Zaragoza"},

    new Hospital{ID = 4, NombreH="Angeles Torreon"}

    };

    List lAlmacenes = new List();

    var almacenes = new Almacen[]{

    new Almacen{Hospital = hospitales[0],IDAlmacen = 1,NombreA = "Patriotismo"},

    new Almacen{ Hospital = hospitales[0],IDAlmacen = 2,NombreA = "Zaragoza"},

    new Almacen{ Hospital = hospitales[1],IDAlmacen = 3,NombreA = "101"},

    new Almacen{ Hospital = hospitales[2],IDAlmacen = 4,NombreA = "404"},

    new Almacen{ Hospital = hospitales[1],IDAlmacen = 5,NombreA = "Monterrey"},

    new Almacen{ Hospital = hospitales[2],IDAlmacen = 6,NombreA = "Guadalajara"}

    };List lArticulos = new List();

    var articulos = new Articulo[]{

    new Articulo{Almacen = almacenes[0],IDArticulo = 1005,Nombre = "HOJA SIERRA

    18MM",Precio = 1.5},

    new Articulo{Almacen = almacenes[0],IDArticulo = 1006,Nombre = "DRENAJE BLAKE

    2229 15FR C/PUNZON",Precio = 1.5},

    new Articulo{Almacen = almacenes[1],IDArticulo = 1007,Nombre = "VICRYL ETHICON

    3-0",Precio = 6.22},

    new Articulo{Almacen = almacenes[1],IDArticulo = 1008,Nombre = "PDS II*

    VIOLETA / ETHICON",Precio = 9.2},

  • 8/14/2019 Revista Atix Nmero 15

    19/49

    new Articulo{Almacen = almacenes[1],IDArticulo = 1009,Nombre = "IOBAN 2

    ANTIMICROBIAL / 3M",Precio = 3.11},

    new Articulo{Almacen = almacenes[2],IDArticulo = 1010,Nombre = "COMP FEM ANAT R/

    C IZQ NO 1",Precio = 10.20},

    new Articulo{Almacen = almacenes[3],IDArticulo = 1011,Nombre = "BASE TIBIAL ANAT

    DER NO 7",Precio = 10.45},

    new Articulo{Almacen = almacenes[4],IDArticulo = 1012,Nombre = "INSERT ART UNIV

    UHMPE 3-4 X 9MM",Precio = 12.80},

    };

    //Agregamos la informacinforeach(Almacen a in almacenes)

    lAlmacenes.Add(a);

    foreach(Articulo r in articulos)

    lArticulos.Add(r);

    Uso de la palabra reservadavar

    La palabra reservada var se utiliza paralograr una escritura ms compacta en elcdigo ya que le indica al compilador queinfiera el tipo de la variable que se le asignaral declararle el valor inicial, por ejemplo en laforma clsica donde se declara el tipo devariable de forma explcita se escribe:

    string s = "Revista Atix";

    int i = 14;

    DataSet ds = new DataSet();

    utilizando la escritura de forma implcita convar se escribe:

    var s = "Revista Atix";

    var i = 14;

    var ds = new DataSet();

    El uso de la palabra reservada var tiene lassiguientes limitaciones:

    siempre se debe asignar un valorinicial a la variable al declararse

    no se puede asignar a var un valornull

    no se puede asignar ms de unavariable var en una sentencia.

    Las variables var solo tienen alcance localno pueden utilizarse como variables globalesde clase.

    Sintaxis y operadores de lasconsultas en LINQ

    Bsicamente la sintaxis de las consultas en

    LINQ es similar a las consultas SQL,utilizando las palabras reservadas select ,from , where , orderby join.

    Aqu a diferencia de las consultas SQL lapalabra reservada fromva al comienzo de la

    consulta y al final se emplea la palabra

    reservada select , como en el cdigosiguiente:

    var fromQuery = from a in lAlmacenes

    select a;

    Similar a SQL tenemos la palabra reservadawhere , como en el cdigo siguiente:

    var whereQuery = from a in lAlmacenes

    where a.Hospital.ID == 2 select a;

    El uso de orderby y descending se

    ejemplifica en los cdigos siguientes:

    var orderbyQuery = from a in lAlmacenes

    orderby a.NombreA select a;

    var orderbyQueryDesc = from a in

    lAlmacenes orderby a.NombreA descending

    select a;

    Continuando con la similitud con SQL no

    debe faltar la palabra reservada join, comoen el siguiente cdigo:

    var joinQuery = from r in lArticulos join

    a in lAlmacenes on r.Almacen.IDAlmacen

    equals a.IDAlmacen select new

    {r.Nombre,a.NombreA };

  • 8/14/2019 Revista Atix Nmero 15

    20/49

    Cada una de las consultas que se realizan con LINQ, regresan una interfaz IEnumerable , por

    eso en el mtodo Display El parmetro que recibe es un Ienumerable, el cdigo completo del

    ejemplo se lista a continuacin:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    namespace LinqAtix

    {

    class Program{

    public static void Main(string[] args){

    var hospitales = new Hospital[] {

    new Hospital{ID = 1,NombreH="Angeles Pedregal"},

    new Hospital{ID = 2, NombreH="1ero Octubre"},

    new Hospital{ID = 3, NombreH="Ignacio Zaragoza"},

    new Hospital{ID = 4, NombreH="Angeles Torreon"}

    };

    List lAlmacenes = new List();

    var almacenes = new Almacen[]{

    new Almacen{Hospital = hospitales[0],IDAlmacen = 1,NombreA = "Patriotismo"},

    new Almacen{ Hospital = hospitales[0],IDAlmacen = 2,NombreA = "Zaragoza"},

    new Almacen{ Hospital = hospitales[1],IDAlmacen = 3,NombreA = "101"},

    new Almacen{ Hospital = hospitales[2],IDAlmacen = 4,NombreA = "404"},

    new Almacen{ Hospital = hospitales[1],IDAlmacen = 5,NombreA = "Monterrey"},

    new Almacen{ Hospital = hospitales[2],IDAlmacen = 6,NombreA = "Guadalajara"}

    };

    List lArticulos = new List();

    var articulos = new Articulo[]{

    new Articulo{Almacen = almacenes[0],IDArticulo = 1005,Nombre = "HOJA SIERRA

    18MM",Precio = 1.5},

    new Articulo{Almacen = almacenes[0],IDArticulo = 1006,Nombre = "DRENAJE BLAKE

    2229 15FR C/PUNZON",Precio = 1.5},

    new Articulo{Almacen = almacenes[1],IDArticulo = 1007,Nombre = "VICRYL ETHICON

    3-0",Precio = 6.22},

    new Articulo{Almacen = almacenes[1],IDArticulo = 1008,Nombre = "PDS II*

    VIOLETA / ETHICON",Precio = 9.2},

    new Articulo{Almacen = almacenes[1],IDArticulo = 1009,Nombre = "IOBAN 2

    ANTIMICROBIAL / 3M",Precio = 3.11},

    new Articulo{Almacen = almacenes[2],IDArticulo = 1010,Nombre = "COMP FEM ANAT R/

    C IZQ NO 1",Precio = 10.20},

    new Articulo{Almacen = almacenes[3],IDArticulo = 1011,Nombre = "BASE TIBIAL ANAT

    DER NO 7",Precio = 10.45},

    new Articulo{Almacen = almacenes[4],IDArticulo = 1012,Nombre = "INSERT ART UNIV

    UHMPE 3-4 X 9MM",Precio = 12.80},

    };

    //Agregamos la informacin

    foreach(Almacen a in almacenes)

    lAlmacenes.Add(a);

    foreach(Articulo r in articulos)

    lArticulos.Add(r);

    //Consultas Linq:Trabajando con FROM

    var fromQuery = from a in lAlmacenes select a;

    //listamos todos los almacenes

    Display(fromQuery);

    //listamos todos los almacenes donde el id Hospital sea el 2

    var whereQuery = from a in lAlmacenes where a.Hospital.ID == 2 select a;

    Display(whereQuery);

    //listamos todos los almacenes en orden alfabetico

    var orderbyQuery = from a in lAlmacenes orderby a.NombreA select a;

    Display(orderbyQuery);

  • 8/14/2019 Revista Atix Nmero 15

    21/49

    //listamos todos los almacenes en orden alfabetico en forma descendente

    var orderbyQueryDesc = from a in lAlmacenes orderby a.NombreA descending select

    a;

    Display(orderbyQueryDesc);

    //listamos el nombre de los articulos y el nombre del Hospital

    var joinQuery = from r in lArticulos join a in lAlmacenes on r.Almacen.IDAlmacen

    equals a.IDAlmacen select new {r.Nombre,a.NombreA };

    Console.WriteLine("======Resultados del Query======");

    foreach(var j in joinQuery)

    Console.WriteLine("Articulo: {0}\tAlmacn: {1}",j.Nombre,j.NombreA);Console.ReadKey(true);

    }

    static void Display(IEnumerable ie){

    Console.WriteLine("======Resultados del Query======");

    foreach(Almacen a in ie)

    Console.WriteLine("{0}\t{1}",a.IDAlmacen,a.NombreA);

    }

    }

    class Hospital {

    public int ID{set;get;}

    public string NombreH {set;get;}

    }

    class Almacen {

    public Hospital Hospital {set;get;}public int IDAlmacen{ set;get;}

    public string NombreA { set; get;}

    }

    class Articulo{

    public Almacen Almacen {set;get;}

    public int IDArticulo {set;get;}

    public string Nombre {set;get;}

    public double Precio{set;get;}

    }

    }

    Para compilar el ejemplo, debemos de utilizar el comando gmcs, como se muestra en la imagensiguiente:

  • 8/14/2019 Revista Atix Nmero 15

    22/49

    Para ejecutar el programa utilizamos el comando mono Program.exe, y la salida

    correspondiente se muestra en la imagen siguiente:

    ConclusinLINQ es una ms de las muchas tecnologasque ofrece .NET y Mono para facilitar eltrabajo a los desarrolladores en cuanto altrabajo con fuentes de datos, LINQ es unenfoque total de llevar la manipulacin dedatos en los lenguajes orientados a objetos,librando los inconvenientes de trabajar conlos lenguajes de manipulacin de datos quecada proveedor posee.

    Los ejemplos pueden ser descargados de

    http://www.humansharp.com/

    Este documento est protegido bajo lalicencia de documentacin libre FreeDocumentacion License del Proyecto GNU,para consulta ver el sitiohttp://www.gnu.org/licenses/fdl.txt ,

    toda persona que lo desee est autorizada ausar, copiar y modificar este documento

    segn los puntos establecidos en laLicencia FDL

    Autor

    I.S. Martn [email protected]

  • 8/14/2019 Revista Atix Nmero 15

    23/49

    SQLite El gestor debases de datos

    ultra ligero. (2da Parte)Nuestro objetivo, crear una pequea aplicacin en lenguaje Java que sea capaz deilustrar la combinacin de dos grandes tecnologas para trabajar con bases de datos.

    Introduccin

    Nuevamente aqu, para tratar la continuacinde SQLite como alternativa ligera a losgrandes Sistemas gestores de bases dedatos. En la primera parte de este tema nosconcentramos en describir lascaractersticas, ventajas y desventajas,cuando es y cuando no es recomendableutilizar esta herramienta, entre otros. En estasegunda parte nos enfocaremos ms a uncaso prctico donde se ejemplifica de formasencilla el acceso a bases de datos SQLitedesde Java.

    El hecho de utilizar Java para este ejemploprctico radica principalmente en que estaplataforma de desarrollo se ha popularizadomucho en los ltimos aos, tanto en losmedios universitarios como en el mbitolaboral, Java es famoso.

    El proyectoSea la siguiente situacin problema:

    En una tienda en lnea que vende libros,tanto impresos como electrnicos (ebook), setiene la necesidad de llevar un control de lainformacin de cada uno de los libros que laempresa vende, datos como: Nombre dellibro, Autor, edicin, ISBN, idioma en que

    est escrito el libro, y por ltimo el precio. Sele pide a usted como programador lacreacin de una aplicacin que permita llevara cabo el control de estos datos.

    Como pueden ver lo que se nos pide no esmuy complicado, con una base de datos, unanica tabla en donde almacenar los camposcorrespondientes y listo. El punto interesanteaqu es como poder administrar dichainformacin de forma externa al manejadorde la base de datos, en nuestro caso desdeuna aplicacin creada en lenguaje Java.

    Estableciendo conexinJava - SQLite

    Si echan un vistazo por la Web se darncuenta de la importancia que a cobradoSQLite en el mundo de las bases de datos ypor ende en la forma de trabajo de losdesarrolladores de software, a tal grado queestos das existen una gran cantidad dedrivers o wrappers que facilitan la conexin abases de datos SQLite con la mayora de loslenguajes de programacin ms conocidos...y los no tanto.

    Nosotros que estamos trabajando con Java,

    uno de los lenguajes ms populares dentrodel desarrollo de software contamos con unabuena variedad de opciones que nospermiten establecer conexin entre nuestrasaplicaciones y las bases de datos SQLite.

    A continuacin algunas de las herramientasde conexin a bases de datos SQLite conJava:

  • 8/14/2019 Revista Atix Nmero 15

    24/49

  • 8/14/2019 Revista Atix Nmero 15

    25/49

    Requerimientos

    Grfico 2. Nuestra eleccin para enlazar java y SQLite.

    De las opciones que se presentan voy ha decantar la utilizacin de Xerial SQLite JDBC Driver,el cual es una extensin de Zentus's SQLite JDBC Driver, debido a la facilidad de uso. Laverdad es que no he probado todas estas herramientas, no puedo asegurar que mi eleccin seala mejor pero para nuestro propsito me parece una buena opcin.

    Para el ejemplo que trabajaremos es necesario descargar el archivo sqlite-jdbc-xx.yy.zz.jar de lapgina de oficial de Xerial SQLite JDBC Driver y colocar dicho archivo en la carpeta de trabajodonde se encuentren los cdigos.

    Adems est claro que necesitamos tener instalado SQLite en nuestro ordenador, para el

    ejemplo utilizamos SQLite 3.

    Estructura de nuestra aplicacin

    Para nuestro ejemplo haremos un pequeo programa que nos permita realizar bsicamente 3operaciones; insercin de registros, consultas y eliminacin de registros. A continuacin sedetalla el cdigo ms relevante de la aplicacin, clases a utilizar y los mtodos para cada unade las operaciones.

    El driver que vamos a usar es un driver JDBC, que ste trabaja con las bibliotecas de clasesque java dispone para la conexin a bases de datos, dichas clases se encuentran contenidas enel paquete java.sql el cual ser necesario incluir en nuestro programa, todo o solo las clases

    que necesitemos. En nuestro ejemplo solo utilizaremos las siguientes:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;

    Listado 1. Clases necesarias para la conexin.

    La funcin de cada una de estas clases se ver a continuacin.

    Insercin de Registros

    La primera operacin es insertar registros en la nueva base de datos solicitando al usuario que

    introduzca datos, nos apoyamos de la clase JOptionPane para facilitar la introduccin de losdatos, para nuestro ejemplo damos por hecho que el usuario introducir datos correctos,controlar todos esos detalles toma muchas lneas de cdigo, en este ejemplo no lo haremos;para aplicaciones ms formales el control de la entrada de datos es necesaria o ms bien dichoes OBLIGATORIA.

  • 8/14/2019 Revista Atix Nmero 15

    26/49

    123456789

    10

    111213

    1415161718192021

    2223

    24

    public void insertaRegistro(){

    String nombreLibro = "", autor = "", isbn = "", idioma = "";int edicion = 1;float precio = 0f;

    try {nombreLibro = JOptionPane.showInputDialog("Nombre del libro: ");autor = JOptionPane.showInputDialog("Autor del libro: ");

    edicion = Integer.parseInt(JOptionPane.showInputDialog("Edicion:"));

    isbn = JOptionPane.showInputDialog("ISBN: ", "Nuevo registro");idioma = JOptionPane.showInputDialog("Idioma: ");precio = Float.parseFloat(JOptionPane.showInputDialog("Precio:

    "));

    } catch(Exception e) { System.out.println("ERROR - " + e.toString());}

    try {sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);sentencia.executeUpdate("INSERT INTO libros VALUES('" +

    nombreLibro + "', '" + autor + "', " + edicion + ", '" + isbn + "', '" +

    idioma + "', " + precio + ")");

    }catch(SQLException sqle){ System.out.println("ERROR - " +sqle.toString()); }}//Fin insertaRegistro()

    Listado 2. Mtodo para insercin de registros.

    Veamos brevemente la funcin de cada una de las lneas resaltadas. En la lnea 18 preparamosuna sentencia para aplicarse sobre la base de datos a la cual apunta conexion, en la lnea 19establecemos un tiempo de espera para cada transaccin, de la lnea 20 a la 22 procedemos aejecutar una operacin sobre la base de datos, insertamos un nuevo registro.

    Consultas

    Una de las operaciones ms importantes de las bases de datos es sin duda la recuperacin dedatos, con este cdigo se realiza una consulta que nos permite recuperar informacin de labase de datos y la muestra al usuario de forma ordenada.

    1234

    5

    6

    78910111213141516

    public void realizaConsulta(){

    String clave = "", resultados = "";clave = JOptionPane.showInputDialog("Dato clave para la consulta " +

    " (en blanco para todo): ");try{

    String consulta = "SELECT * FROM libros WHERE nombre = '" + clave+"' or autor = '" + clave + "' or isbn = '" + clave + "'";

    if(clave.equals("")) //Una consulta de todoconsulta = "SELECT * FROM libros";

    sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);

    ResultSet cs = sentencia.executeQuery(consulta);

  • 8/14/2019 Revista Atix Nmero 15

    27/49

    171819202122232425

    26272829303132

    3334

    while(cs.next()) {resultados += "Libro: " + cs.getString("nombre") + "\n";resultados += "Autor: " + cs.getString("autor") + "\n";resultados += "Edicion: " + cs.getInt("edicion") + "\n";resultados += "ISBN: " + cs.getString("isbn") + "\n";resultados += "Idioma: " + cs.getString("idioma") + "\n";resultados += "Precio: $" + cs.getFloat("precio") + "\n\n";

    }JTextArea texto = new JTextArea(resultados);

    texto.setFont(new Font("Sans-Serif", Font.PLAIN, 10));texto.setEditable(false);JScrollPane scroll = new JScrollPane(texto);scroll.setPreferredSize(new Dimension(250, 400));

    JOptionPane.showMessageDialog(null, scroll);}catch(SQLException sqle){ System.out.println("ERROR - " +

    sqle.toString()); }

    }//Fin realizaConsulta()

    Listado 3. Mtodo para realizar consultas.

    Con este mtodo procedemos a pedir datos al usuario para realizar la consulta y posteriormente

    en las lneas 7 y 8 formulamos la consulta en base a la informacin proveda por el usuario, encaso de que la cadena est vaca, en las lneas 9 y 10 formulamos una consulta total.

    En la lnea 15 se crea un ejemplar de la clase ResultSet que permite almacenar los datosresultantes de una consulta, de las lneas 17 a 24 procedemos a dar formato a la salida de laconsulta para poder presentarla de forma ordenada.

    Eliminacin de Registros

    Si por algn motivo se necesita eliminar algn registro, o varios de ellos, con este mtodotenemos la posibilidad de hacerlo. La eliminacin se basa en 4 campos como son nombre dellibro, Autor o el ISBN, o en su caso la eliminacin de todos los registros para una entrada de '*'.

    La forma en que se realiza la operacin es muy tonta xD, pero de momento solo estamosexperimentando, no es necesario tanto control.

    1234

    567

    8

    9101112131415

    16

    public void eliminaRegistros(){

    String clave = "";clave = JOptionPane.showInputDialog("Nombre de libro, Autor a eliminar o

    ISBN" + " (* para eliminar todo): ");try{

    //Eliminamos solo en base al titulo del libro, nombre de autor o ISBNString comando = "DELETE FROM libros WHERE nombre = '" + clave +

    "' or autor = '" + clave + "' or isbn = '" + clave + "'";

    if(clave.equals("*")) //Eliminar todos los registroscomando = "DELETE FROM libros";

    sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);sentencia.executeUpdate(comando);

    }catch(SQLException sqle) { System.out.println("ERROR - " +sqle.toString()); }}

    Listado 4. Mtodo para la eliminacin de registros.

    Las sentencias que se utilizan en este mtodo consisten bsicamente en solicitar al usuario los

  • 8/14/2019 Revista Atix Nmero 15

    28/49

    datos de un libro, para en base a eso poder eliminar los registros pertinentes, en caso de recibircomo entrada el smbolo '*' el usuario indica que quiere eliminar todos los registros de la basede datos, lneas 11 y 12 controlan esta situacin.

    Los tres mtodos anteriores contienen lo sustancial del trabajo con la base de datos, acontinuacin se lista el cdigo completo para la mimi-aplicacin que he preparado para esteejemplo, aparte del cdigo antes listado lo dems es solo para preparar la interfaz de usuario.

    import java.io.*; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.awt.*;import java.awt.event.*;import javax.swing.*;

    public class DatabaseConnection {private Connection conexion;private Statement sentencia;public DatabaseConnection(String databaseName) throws ClassNotFoundException{

    //Cargamos driver para SQLite

    Class.forName("org.sqlite.JDBC");conexion = null;try{

    //Creamos la base de datos de nombre indicado como parametroconexion = DriverManager.getConnection("jdbc:sqlite:"+databaseName+".db");sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);//Creamos la tabla, si existe se sobreescribesentencia.executeUpdate("DROP TABLE IF EXISTS libros");sentencia.executeUpdate("CREATE TABLE libros " +

    "(nombre STRING, autor STRING, edicion INTEGER, " +"isbn INTEGER, idioma STRING, precio REAL )");

    }catch(SQLException sqle){ System.out.println("ERROR - " + sqle.toString()); }}

    public void insertaRegistro(){

    String nombreLibro = "", autor = "", isbn = "", idioma = "";int edicion = 1;float precio = 0f;

    try {nombreLibro = JOptionPane.showInputDialog("Nombre del libro: ");autor = JOptionPane.showInputDialog("Autor del libro: ");edicion = Integer.parseInt(JOptionPane.showInputDialog("Edicion: "));isbn = JOptionPane.showInputDialog("ISBN: ", "Nuevo registro");idioma = JOptionPane.showInputDialog("Idioma: ");precio = Float.parseFloat(JOptionPane.showInputDialog("Precio: "));

    } catch(Exception e) { System.out.println("ERROR - " + e.toString()); }

    try {sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);sentencia.executeUpdate("INSERT INTO libros VALUES('" + nombreLibro +

    "', '" + autor + "', " + edicion + ", '" + isbn +"', '" + idioma + "', " + precio + ")");

    }catch(SQLException sqle){ System.out.println("ERROR - " + sqle.toString()); }}//Fin insertaRegistro()

  • 8/14/2019 Revista Atix Nmero 15

    29/49

    public void realizaConsulta(){

    String clave = "", resultados = "";clave = JOptionPane.showInputDialog("Dato clave para la consulta " +

    " (en blanco para todo): ");try{

    String consulta = "SELECT * FROM libros WHERE nombre = '" + clave+"' or autor = '" + clave + "' or isbn = '" + clave + "'";

    if(clave.equals("")) //Una consulta de todo

    consulta = "SELECT * FROM libros";

    sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);

    ResultSet cs = sentencia.executeQuery(consulta);

    while(cs.next()) {resultados += "Libro: " + cs.getString("nombre") + "\n";resultados += "Autor: " + cs.getString("autor") + "\n";resultados += "Edicion: " + cs.getInt("edicion") + "\n";resultados += "ISBN: " + cs.getString("isbn") + "\n";resultados += "Idioma: " + cs.getString("idioma") + "\n";resultados += "Precio: $" + cs.getFloat("precio") + "\n\n";

    }

    JTextArea texto = new JTextArea(resultados);texto.setFont(new Font("Sans-Serif", Font.PLAIN, 10));texto.setEditable(false);JScrollPane scroll = new JScrollPane(texto);scroll.setPreferredSize(new Dimension(250, 400));

    JOptionPane.showMessageDialog(null, scroll);}catch(SQLException sqle){ System.out.println("ERROR - " + sqle.toString()); }

    }//Fin realizaConsulta()

    public void eliminaRegistros(){

    String clave = "";clave = JOptionPane.showInputDialog("Nombre de libro, Autor a eliminar o " +

    "ISBN (* para eliminar todo): ");try{

    //Eliminamos solo en base al titulo del libro, nombre de autor o ISBNString comando = "DELETE FROM libros WHERE nombre = '" + clave +

    "' or autor = '" + clave + "' or isbn = '" + clave + "'";

    if(clave.equals("*")) //Eliminar todos los registroscomando = "DELETE FROM libros";

    sentencia = conexion.createStatement();sentencia.setQueryTimeout(30);sentencia.executeUpdate(comando);

    }catch(SQLException sqle) {System.out.println("ERROR - " + sqle.toString());

    }

    }}

    Listado 5. Clase DatabaseConnection que trabaja con la base de datos.

    Ahora la clase que utiliza a DatabaseConnection y muestra la interfaz de usuario.

  • 8/14/2019 Revista Atix Nmero 15

    30/49

    import java.io.*;import java.sql.*;import java.awt.*;import java.awt.event.*;import java.awt.FlowLayout;

    import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JLabel;

    public class AdminApp extends JFrame {//private static AdminApp ventana;private JLabel lblLeyenda;private JButton btnInsertar;private JButton btnConsultar;private JButton btnEliminar;private DatabaseConnection conexion;

    public AdminApp() throws IOException{

    super(".: Accesando a SQLite :.");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);

    setLayout(new FlowLayout(FlowLayout.CENTER, 200, 10));

    lblLeyenda = new JLabel("Eliga una operacion:
    ");btnInsertar = new JButton("Inserta Registro");btnConsultar = new JButton("Consulta datos");btnEliminar = new JButton("Elimina Registro");

    try{conexion = new DatabaseConnection("Ejemplo");

    }catch(Exception e){System.out.println("ERROR - " + e.toString());

    }

    ActionListener accion = new ActionListener() {public void actionPerformed(ActionEvent event)

    {if(event.getSource() == btnInsertar)

    conexion.insertaRegistro();else if(event.getSource() == btnConsultar)

    conexion.realizaConsulta();else if(event.getSource() == btnEliminar)

    conexion.eliminaRegistros();}

    };btnInsertar.addActionListener(accion);btnConsultar.addActionListener(accion);btnEliminar.addActionListener(accion);add(lblLeyenda);add(btnInsertar);add(btnConsultar);

    add(btnEliminar);setSize(350, 200);

    }public static void main(String[] argumentos) throws IOException{

    AdminApp ventana = new AdminApp();ventana.setVisible(true);

    }}

    Listado 6. Clase principal AdminApp.

  • 8/14/2019 Revista Atix Nmero 15

    31/49

    Compilacin y resultado

    Una vez teniendo el cdigo anterior procedemos a compilarlo normalmente con:

    $ javac AdminApp.java

    Ahora, para ejecutar la aplicacin es necesario contar con el archivo sqlite-jdbc-xx.yy.zz.jar( xx.yy.zz es la versin la cual puede variar ligeramente) el cual pueden descargar de la pginaoficial de Xerial SQLite JDBC Driver, si no lo ha hecho aun, ahora es buen tiempo para hacerlo.Una vez descargado el archivo lo colocamos en el directorio donde estn los cdigos fuentes dela aplicacin, tambin pueden colocarse en algn otro directorio solo que se tendra queespecificar dicha ruta el el classpath para poder ejecutar el programa, en el ejemplo utilizamosel directorio actual.

    $ java -cp .:sqlite-jdbc-3.6.19.jar AdminApp

    Del comando anterior se ejecuta la aplicacin utilizando bibliotecas nativas a la plataforma en la

    que se ejecute el programa. Xerial SQLite JDBC permite realizar la ejecucin utilizando cdigo100% java, hay dos formas de hacerlo:

    $ java -Dsqlite.purejava=true -cp .:sqlite-jdbc-3.6.19.jar AdminApp

    O con setProperty() de la clase System antes de cargar el controlador de la base de datos,quedando de la siguiente manera:

    System.setProperty("sqlite.purejava", "true");Class.forName("org.sqlite.JDBC");

    Ahora, si todo va bien el resultado es el siguiente:

    Grfico 3. Las 3 operaciones de nuestra aplicacin.

    La primera operacin, la de insercin de registros se ve en accin al presionar el primer botn.

  • 8/14/2019 Revista Atix Nmero 15

    32/49

    Grfico 4. Insertando registros a la base de datos.

    Despus de haber agregado registros a la base de datos es posible que quieran consultardichos datos, esto es posible con la segunda opcin de nuestro programa.

    Grfico 5. Resultado de la consulta a la base de datos.

    Como ltima opcin se tiene la posibilidad de eliminar registros de nuestra base de datos enbase al nombre del libro, el autor, o en su caso el ISBN del libro o libros a eliminar. Se da laopcin de eliminar la tabla entera con el smbolo '*' como entrada.

  • 8/14/2019 Revista Atix Nmero 15

    33/49

  • 8/14/2019 Revista Atix Nmero 15

    34/49

    El cdigo de esta aplicacin estar disponible eninforscience.260mb.com/data/SQLite.mas.Java.ATIX.zip para que les sea ms fcil

    acceder al cdigo.

    Conclusin

    Como se muestra en este documento existen varias herramientas que permiten a las bases dedatos SQLite conectarse y operar con una gran variedad de lenguajes, siendo Java uno de losms privilegiados al contar con varias de ellas. Xerial JDBC SQLite Driver nos permite conectarSQLite con Java de forma sencilla tal y como se ha visto en este documento.

    Referencias

    [1] www.sqlite.org

    [2] www.xerial.org

    Autor

    Rafael Rendn PabloEstudiante de Ingeniera en Sistemas ComputacionalesUsuario de software libre

    [email protected]

  • 8/14/2019 Revista Atix Nmero 15

    35/49

    Monitoreo de accesoa pginas Web en lneaEn el anterior nmero de esta revista vimos la forma de analizar los logs de nuestraspginas Web, ste es un tipo de monitoreo fuera de lnea (offline), ahora presentaremosuna forma de monitoreo en lnea (online) de nuestras pginas Web utilizando laherramienta APACHETOP.

    Introduccin

    El APACHETOP es una herramienta demonitoreo en tiempo real en modo texto,parecida a la herramienta TOP, con la cualpodemos desplegar informacin de nuestroservidor Web APACHE como: el estado,estadsticas de acceso, etc.

    Instalacin de Apachetop

    Se debe bajar el instalador de la URLhttp://www.webta.org/projects/apachet

    op Utilizaremos la distribucin DEBIAN para

    implementar el APACHETOP..

    Para la instalacin ejecutaremos el siguientecomando:

    # apt-get install apachetop

    Ejecutando Apachetop

    La forma bsica de ejecutar la herramientaAPACHETOP es ejecutando:

    # apachetop -f

    Para este ejemplo:

    # apachetop -f /var/log/apache2/access.log

  • 8/14/2019 Revista Atix Nmero 15

    36/49

    Donde las cinco primeras lneas soninformacin respecto a los procesos deAPACHE:

    En la primera lnea se tiene la horadel ltimo acceso (last hit), el tiempode ejecucin del comando (atopruntime) y la hora actual.

    En la segunda lnea (All) se tiene eltotal de solicitudes que el programaha procesado desde su ejecucin (10reqs), el nmero de peticiones porsegundo (0.2/sec), el total de datostransferidos (58.4K), el volumen detransferencia por segundo(1425.0B/sec) y la media de cantidadde datos por solicitud (5985.1B/req).

    En la tercera lnea se tiene lasmedidas por cdigo de respuesta del

    servidor (2xx, 3xx, 4xx y 5xx) y setiene para cada cdigo la cantidad derespuestas y entre parntesis suporcentaje con respecto al total.

    En la cuarta y quinta lnea, se tieneinformacin similar a la segunda ytercera lnea respectivamente, con ladiferencia de que estas medidas selas realiza en un lapso de tiempodeterminado por la variable R, paraeste ejemplo se tiene que R ( 30s)

    treinta segundos, que sera el tiempode muestreo para la cuarta y quintalnea. Mediante los parmetros H(hits) y T (time) podremos cambiar elvalor de R.

    En las lneas restantes, por debajo dela quinta lnea, se tiene la informacinde los ltimos accesos por URL,donde:

    REQS: Total de solicitudes que elprograma ha procesado desde su

    ejecucin de la URL. REQ/S: Nmero de peticiones por

    segundo.

    KB: Total de datos transferidos.

    KB/S: Volumen de transferenciapor segundo.

    URL: Es la direccin a la cualhacen referencia los 4 anterioresvariables (REQS, REQ-S, KB yKB/S).

    Cuando se tiene mucha informacin sepuede utilizar filtros en esta herramientapresionando la tecla f., lo cual nos ayuda enel anlisis.

    Presionando la tecla d se puede cambiar lavista a URL, REFERRER HOST.

    Para invocar a la ayuda se debe presionar latecla f la tecla ?.

    Conclusiones

    La herramienta APACHETOP es unaherramienta de monitoreo en lnea (real time)

    el cual nos permite analizar estadsticas deacceso al servidor Web, determinando loscuellos de botella en nuestro servidor Web.

    Con esta sencilla y til herramientaAPACHETOP y junto a la herramienta TOPnos permiten realizar un anlisis derendimiento, de nuestro servidor quecontenga nuestra pgina Web.

    Referencias

    [1] www.webta.org/projects/apachetop/

    Autor

    Renzo Martinez PardoIngeniero Sistemas [email protected]

  • 8/14/2019 Revista Atix Nmero 15

    37/49

  • 8/14/2019 Revista Atix Nmero 15

    38/49

    Willay newsLongoMatch: Digital Coach

    Cuando se trata de una contienda encualquier disciplina deportiva, losentrenadores y jugadores utilizan una seriede tcticas y estrategias, en su mayoraestudiadas con anticipacin, y cuando lalucha es a ganador, se debe observar hastael mas mnimo detalle del equipoadversario... claro que no es unaexageracin, de hecho muchos de los

    equipos que participan en los JuegosOlmpicos, Mundial de Ftbol, etc gastan unmontn de dinero, preparando susestrategias, ya sea con expertos analistas ono.

    Justo en este asunto es donde entra unamuy til herramienta, se trata deLongoMatch o Digital Coach como la llamasu creador Andoni Morales Alastruey, la cualresulto finalista en el 3er. ConcursoUniversitario de Software Libre de Espaa.

    LongoMatch es una aplicacin multimediapara realizar anlisis tcnico/tcticos pormedio de vdeos de encuentros deportivos.Ayuda a los entrenadores a identificar las

    jugadas clave de un partido y organizarlaspor categoras: penaltis, tiros libres, defensa1:1, salidas, oportunidades de gol, etc.

    Se puede adaptar a todo tipo de deportescuenta con reproduccin en cmara lenta -

    frame stepping, crea listas con las jugadasmas relevantes para verlas secuencialmente,exporta una jugada tomando capturas avelocidad variable para anlisis esttico archivos PNG, es multiplataforma, etc.En el aspecto tcnico, LongoMatch estescrito C# y corre bajo Mono. La interfazgrfica usa las libreras GTK, la base dedatos est implementada con db4o (unabase de datos puramente orientada aobjetos) y como motor grfico usaGstreamer.

    LongoMatch con muy buenas miras al futuro,se encuentra en su versin 0.15.4, yseguramente cuando ya este lista su versin1.0 muchos clubes deportivos incluyendo losmas pequeos, podrn tener acceso a estatecnologa, tecnologa que por cierto sueleser muy cara.

  • 8/14/2019 Revista Atix Nmero 15

    39/49

    GENIVI: Una AlianzaPoderosa

    Desde que la exitosa compaa deautomviles BMW lanzo a la plataformaGENIVI de cdigo abierto , como un

    elemento estratgico para mejorar almximo la experiencia de conducir, muchasempresas a lo largo de este ao se aliaron aeste gran proyecto, apoyando a la nueva erade cooperacin entre fabricantes yproveedores de tecnologa, cuyo interscompartido es el de agilizar el desarrollo deIVI (In Vehicle Infotainment Info-entretenimiento en los vehculos)

    IVI es un campo que esta avanzando apasos gigantes debido a que abarca

    productos y servicios automotrices y deentretenimiento, incluyendo: msica,noticias, Internet, multimedia, navegacin ylocalizacin, adems de telefona. Por logeneral si un fabricante de automvilespretende que un determinado modelo tengaeste tipo de tecnologa deber: desarrollarlo,probarlo, implementarlo y adems darsoporte a estos productos... tanto en deHardware y Software parecidos a las de unacomputadora.

    Los fundadores de GENIVI BMW, Wind

    River, Intel, GM, PSA, Delphi, Magneti-Marelli, y Visteon: creen en el poder decdigo abierto y en el desarrollo de softwarede colaboracin, para crear un eco-sistemaque fomente la innovacin, acorte los ciclosde desarrollo, reduzca el tiempo decomercializacin y costes para las empresasde desarrollo de equipos y software.

    GENIVI cuenta con nuevos miembros: Nokiaque contribuir con su amplia experiencia enla normalizacin y la creacin de

    especificaciones abiertas, NEC Electronicstraer su experiencia en dispositivossemiconductores y ayudara en el desarrollode plataformas abiertas, Mentor Graphics yWipro Technologies.

    Sin duda alguna estamos viviendo una erabastante diferente o quiz soada y aunquepor ahora GENIVI se centre en tecnologassolo para el entretenimiento y no as para elmantenimiento o control del vehculo, enmenos de lo que nos imaginemos, esta

    Poderosa Alianza, nos estar impresionandocon interesantes noticias sobre estagrandiosa plataforma.

    Autor

    Marcia Estrella Velasquez AguilarEgresada de la carrera de Ingeniera deSistemas (F.N.I.)[email protected]

  • 8/14/2019 Revista Atix Nmero 15

    40/49

    Willay newsEnerga Osmtica

    En nmeros anteriores ya habamos

    comentado que muchas empresasorientaban su investigacin a la produccinde energa alternativa y tambin al cuidadodel medio ambiente, otros dos clarosejemplos de esto son:

    En Noruega, especficamente en las plantasde Statkraft existe una planta que generaelectricidad gracias a un grupo de clulasque fuerzan la smosis: la planta generaenerga explotando la que est disponible almezclarse el agua dulce con el agua delmar. La energa osmtica es renovable y eslibre de emisiones, est siendo desarrolladapor Statkraft desde hace 10 aos y sercapaz de contribuir con la produccin deenerga ecolgica en forma global.

    En la actualidad esta tecnologa aun sesigue perfeccionando, pero segn Statkraftel potencial global de energa osmtica esestimado en 1600-1700 TWh por ao y las

    plantas se pueden instalar en cualquier lugaren que agua dulce y salada se mezclen.

    Esta podra representar una innovadorafuente de energa alternativa en el mundo

    Watersquare almacena aguade lluvia

    Segn expertos alemanes es lamentable vercomo se van litros y litros de agua cuandollueve, por lo cual este grupo de expertos deUrbanisten ha ideado la Watersquare que escomo un gran contenedor de agua de lluvia,que almacena el agua proveniente de lalluvia.

    Con este emprendimiento los nios podrndisfrutar jugando alrededor de la piscina yen invierno ser usada como pista depatinaje sobre hielo. Incluso se estudia aun eluso posterior que se le pueda dar al aguaalmacenada.

  • 8/14/2019 Revista Atix Nmero 15

    41/49

    Diseos innovadores

    Continan los diseos innovadores sobredispositivos o perifricos para ordenadores.Es el caso del Keystuck inventado porYoonsang Kim y Eunsung Park.

    Lo sorprendente de este teclado es lacapacidad que tiene para plegarse como sifuera un abanico, para poder as trasladarloa todos lados. Tiene conexin inalmbrica ala PC y es ideal para que ellos que cuentancon un pequeo espacio.

    Otro interesante invento va referido al

    EZPower Universal Remote, es un mando adistancia que basa su funcionamiento enbase a aire, este invento permitir dejar ladependencia que existe en el uso debateras por parte de los mandos adistancia, ms aun cuando se dispone deuna gran cantidad de estos.

    La carga completa del EXPower dura unos 7das y el dispositivo est diseado paracontrolar hasta 6 aparatos (TV, VCR, Cable,SAT, AUX, DVD).

    Autor

    Jenny Saavedra LpezDiseo y Edicin Revista Atix

    [email protected]

  • 8/14/2019 Revista Atix Nmero 15

    42/49

  • 8/14/2019 Revista Atix Nmero 15

    43/49

  • 8/14/2019 Revista Atix Nmero 15

    44/49

  • 8/14/2019 Revista Atix Nmero 15

    45/49

  • 8/14/2019 Revista Atix Nmero 15

    46/49

    Contacto

    Para solicitar cualquier informacin, puedes contactar a:

    Esteban Saavedra Lpez ([email protected] )

    Jenny Saavedra ([email protected])

    Publicacin

    Te invitamos a ser parte de la Revista ATIX. La forma de participar puede serenvindonos:

    Artculos referidos a reas como: Instalacin y personalizacin de Aplicaciones Scripting Diseo grfico Programacin y desarrollo de aplicaciones Administracin de servidores Seguridad y cualquier tema enmarcado dentro del uso de Software Libre

    Trucos y recetas. Noticias.

    Comics. Links de inters.

  • 8/14/2019 Revista Atix Nmero 15

    47/49

    Empezamos a registrar nuestra historia

  • 8/14/2019 Revista Atix Nmero 15

    48/49

  • 8/14/2019 Revista Atix Nmero 15

    49/49