revista atix número 15
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
-
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
-
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