<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>YakiBoo</title>
	
	<link>http://www.yakiboo.net</link>
	<description>... mi pequeño mundo binario</description>
	<lastBuildDate>Tue, 18 Dec 2012 09:17:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/yakiboo" /><feedburner:info uri="yakiboo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Programación Declarativa – Prácticas de Prolog resueltas (II)</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/Hj2mIXXIbXE/</link>
		<comments>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 23:35:37 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Inteligencia Artificial]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[UCLM]]></category>
		<category><![CDATA[Inteligencia artificial]]></category>
		<category><![CDATA[Programación declarativa]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2256</guid>
		<description><![CDATA[Después de la primera entrega, aquí os traigo más ejercicios de Prolog resueltos: Ejercicio 1 Definir un predicado sus(X,Y,L1,L2) que sea capaz de sustituir un elemento X por otro Y ...]]></description>
			<content:encoded><![CDATA[<p>Después de <a href="http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/">la primera entrega</a>, aquí os traigo más ejercicios de Prolog resueltos:</p>
<h5>Ejercicio 1</h5>
<p style="text-align: justify">
Definir un predicado sus(X,Y,L1,L2) que sea capaz de sustituir un elemento X por otro Y en la lista L1, para dar L2.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>%Ejercicio 2
sus(_,_,[],[]).
sus(X,Y,[H<PIPE>T],[Y<PIPE>Res]):-X=H,sus(X,Y,T,Res).
sus(X,Y,[H<PIPE>T],[H<PIPE>Res]):-X\=H,sus(X,Y,T,Res).</pre></td></tr></table></div>

<h5>Ejercicio 2</h5>
<p style="text-align: justify">
Definir la relación aplanar(Lista, Aplanada), donde Lista es en general una lista de listas, tan compleja en su anidamiento como queramos imaginar, y Aplanada es la lista que resulta de reorganizar los elementos contenidos en las listas anidadas en un único nivel, i.e. una lista plana. Por ejemplo:
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre>?- aplanar([[a, b], [c, [d, e]], f], L).
L = [a, b, c, d, e, f]</pre></td></tr></table></div>

<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>%Ejercicio 3
aplanar([],[]).
aplanar([X<PIPE>R],[X<PIPE>P]):- atomic(X),aplanar(R,P).
aplanar([X<PIPE>R],P):-  not(atomic(X)),aplanar(X,P_X),aplanar(R,P_R),append(P_X,P_R,P).</pre></td></tr></table></div>

<h5>Ejercicio 3</h5>
<p style="text-align: justify">
Definir un predicado igualesElem(L1,L2) que compruebe que L1 y L2 son listas que<br />
contienen los mismos elementos independientemente del orden de aparición.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre>%Ejercicio 4 
igualesElem([],[]).
igualesElem([H1<PIPE>T1],[H2<PIPE>T2]):- length([H1<PIPE>T1],N),length([H2<PIPE>T2],N),((H1==H2,igualesElem(T1,T2))<SEMI>
                                (algun(H1,[H2<PIPE>T2]),delete([H1<PIPE>T1],H1,AUX1),delete([H2<PIPE>T2],H1,AUX2),igualesElem(AUX1,AUX2))).
algun(X,[H<PIPE>T]):-(X==H)<SEMI>algun(X,T).</pre></td></tr></table></div>

<h5>Ejercicio 4</h5>
<p style="text-align: justify">
Definir un predicado descomponer(N,A,B) que permita resolver el problema de descomponer un número natural N en la suma de dos pares A y B. Esto es, descomponer(N,A,B) debe tomar como entrada un natural N y devolver dos naturales A y B tales que N = A + B.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre>descomponer(N,A,B):-
    between(0,N,A), A mod 2=:=0, 
    between(0,N,B), B mod 2=:=0,
    A+B=:=N.</pre></td></tr></table></div>

<h5>Ejercicio 5</h5>
<p style="text-align: justify">
Rompecabezas de Brandreth. El cuadrado de 45 es 2025. Notad que si partimos el número<br />
en dos obtenemos los números 20 y 25 cuya suma es, precisamente, 45. Obtener que otros números cuyo cuadrado es un número de cuatro cifras cumplen esta propiedad. Con este fin, definir un predicado numBrandreth (N, C) que devuelva uno de estos números N y su cuadrado C.
</p>
<h6>Solución</h6>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre>numBrandreth(N,C):-between(32,99,N), C is N*N, A is C mod 100, B is C//100, A+B=:=N.</pre></td></tr></table></div>

<img src="http://feeds.feedburner.com/~r/yakiboo/~4/Hj2mIXXIbXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/</feedburner:origLink></item>
		<item>
		<title>La gran burbuja</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/KYrOUFEc9Qs/</link>
		<comments>http://www.yakiboo.net/la-gran-burbuja/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:36:17 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Libertad]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2435</guid>
		<description><![CDATA[Tal vez no os lo hayáis planteado, pero lo aparéntemente libre y abierto que es Internet está sufriendo cambios que minimizan esa apertura y libertad. Antes era fácil buscar información ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">
Tal vez no os lo hayáis planteado, pero lo aparéntemente libre y abierto que es Internet está sufriendo cambios que minimizan esa apertura y libertad. Antes era fácil buscar información en Google y ver qué había en la red en relación a tu pregunta. Sin embargo, ahora los resultados pasan más de 30 filtros hasta que llegan a ti. Está muy bien pensado eso de los resultados adaptados a tus intereses personales, pero esa personalización puede ocultarnos realidades, con o sin ánimo de hacerlo; y eso es peligroso.
</p>
<p style="text-align: justify">
Os recomiendo que veáis la siguiente charla sobre el tema. Os hará pensar, y no os quitará mucho tiempo.
</p>
<p><center><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/wGq3HWILr6k" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p style="text-align: justify">
Espero vuestras opiniones.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/KYrOUFEc9Qs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/la-gran-burbuja/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/la-gran-burbuja/</feedburner:origLink></item>
		<item>
		<title>Diagramas de secuencia con SDEdit</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/KMe1rm43ZWE/</link>
		<comments>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 19:23:22 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Ingeniería del Software]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2428</guid>
		<description><![CDATA[Muchos de vosotros, sobre todo los que estudiéis Ingeniería Informática, o algún grado similar, os habréis visto en la situación de tener que hacer diagramas de secuencia. Este tipo de ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Muchos de vosotros, sobre todo los que estudiéis Ingeniería Informática, o algún grado similar, os habréis visto en la situación de tener que hacer diagramas de secuencia. Este tipo de diagramas son realmente útiles para detallar casos de uso algo complejos.</p>
<p style="text-align: justify;">Pues bien, en muchas ocasiones la principal dificultad es encontrar la herramienta idónea para llevar a cabo estos diagramas. Existen muchas aplicaciones libres que permiten dibujar diagramas de todo tipo (una de las más destacables es <a href="http://projects.gnome.org/dia/">DIA</a>), pero yo os voy a presentar una herramienta muy diferente: <a href="http://sdedit.sourceforge.net/">SDEdit</a>. Esta aplicación está diseñada para realizar diagramas de secuencia únicamente, pero de forma totalmente automática. El usuario simplemente debe especificar formalmente el diagrama de secuencia en forma de texto, y el programa automáticamente realiza el diagrama gráficamente. Los resultados son muy buenos, como podéis ver en la siguiente imagen:</p>
<p style="text-align: center;"><a href="http://www.yakiboo.net/uploads/uc-modificar_cuenta.png"><img class="size-full wp-image-2429 aligncenter" title="uc-modificar_cuenta" src="http://www.yakiboo.net/uploads/uc-modificar_cuenta.png" alt="" width="525" height="250" /></a></p>
<p style="text-align: justify;">Para que os hagáis una idea de cómo es el código que maneja SDEdit, a continuación podéis ver el código empleado para generar el diagrama anterior:</p>
<pre>#![Modificar cuenta (escenario normal)]
visitante:Actor
w:Ventana de modificación
i:Gestor de usuarios
p:Persistencia
visitante:w.cambiar datos
visitante:w.pulsar botón de guardar
w:i.datos modificados
i:p.datos modificados
p:i.cambios exitosos
i:w.cambios exitosos
w:visitante.cambios realizados</pre>
</p>
<p style="text-align: justify;">Como podéis ver, no es nada complicado y el resultado es bastante bueno. Espero que os sea útil.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/KMe1rm43ZWE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/</feedburner:origLink></item>
		<item>
		<title>¿Problemas con la batería en Ubuntu 11.10?</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/_ot5TIuNYFo/</link>
		<comments>http://www.yakiboo.net/%c2%bfproblemas-con-la-bateria-en-ubuntu-11-10/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 23:35:12 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[bateria]]></category>
		<category><![CDATA[Laptop]]></category>
		<category><![CDATA[portátil]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2419</guid>
		<description><![CDATA[Si utilizas Ubuntu 11.10 con Gnome-shell &#8212;aunque esto también es aplicable a otras distribuciones con Gnome 3&#8212;, es posible que tu portátil no calcule bien el tiempo restante de batería ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Si utilizas Ubuntu 11.10 con Gnome-shell &#8212;aunque esto también es aplicable a otras distribuciones con Gnome 3&#8212;, es posible que tu portátil no calcule bien el tiempo restante de batería y, a causa de ello, ejecute la acción establecida para batería crítica (suspensión o hibernación) cuando no debe. Ésto es causado por algún tipo de problema en la política de cálculo de tiempo restante. Así pues, para solucionarlo, símplemente basta con indicarle a Gnome 3 que ignore el tiempo y se fije símplemente en el porcentaje de batería para ejecutar la acción asociada al nivel crítico. Para ello, basta con abrir una consola y ejecutar lo siguiente (todo en la misma línea y separado por un espacio):</p>
<pre>gsettings set org.gnome.settings-daemon.plugins.power</pre>
<p></p>
<pre>'use-time-for-policy' 'false'</pre>
<p></p>
<p style="text-align: justify;">Alternativamente, se puede utilizar la herramienta gráfica <strong>dconf-editor</strong>, instalable desde los repositorios (el paquete se llama dconf-tools), para editar dicho parámetro.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/_ot5TIuNYFo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/%c2%bfproblemas-con-la-bateria-en-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/%c2%bfproblemas-con-la-bateria-en-ubuntu-11-10/</feedburner:origLink></item>
		<item>
		<title>Conexión entre aplicaciones Android y servicios web .NET</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/M7h0dn-tszo/</link>
		<comments>http://www.yakiboo.net/conexion-entre-aplicaciones-android-y-servicios-web-net/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 14:42:43 +0000</pubDate>
		<dc:creator>Jesús Manzano Camino</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Móviles]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Servicios Web]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2359</guid>
		<description><![CDATA[Introducción Hoy en día es casi imprescindible el uso de Internet o de bases de datos alojadas en la red por parte de nuestas aplicaciones Android. Uno de los métodos ...]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p style="text-align: justify">Hoy en día es casi imprescindible el uso de Internet o de bases de datos alojadas en la red por parte de nuestas aplicaciones Android. Uno de los métodos más fáciles y comunes para realizar una comunicación hacia dichos servicios y bases de datos se realiza mediante el consumo de servicios web, los cuales en la mayoría de los casos actuan como una capa intermedia entre nuestra aplicación e Internet.Hoy explicaremos como enlazar nuestra aplicación con nuestros servicios web.</p>
<blockquote><p>Nota:Si no sabeis como crear un servicio web bajo .NET os recomiendo que echeis un ojo a éste <a href="http://www.yakiboo.net/servicios-web-net-con-conexion-a-mysql/">artículo</a> en el que explico como crearlo.</p></blockquote>
<h3>Obtención e importación de la librería ksoap2</h3>
<p style="text-align: justify">Lo primero de todo es descargar la librería que nos permitirá la conexión hacia el servicio web. Se trata de ksoap2 y desde <a href="http://ksoap2-android.googlecode.com/svn/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.8/ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar">aquí</a> podemos descargar el .jar .Una vez descargado y creado un proyecto Android en Eclipse, en la carpeta /res del proyecto crearemos una carpeta llamada lib en la que guardaremos el .jar (para saber siempre donde buscarlo a la hora de añadirlo a nuestro proyecto).</p>
<p style="text-align: justify">Ahora procederemos a añadirlo como librería a nuestro proyecto. Suponiendo que utilizamos Eclipse, hacemos click derecho sobre el proyecto y vamos a Propiedades, en la sección Java Build Path nos movemos hasta la pestaña Libraries, damos a Add JARs y procedemos a seleccionar el jar descargado (Lo acabamos de poner dentro de la carpeta lib del proyecto).</p>
<p style="text-align: justify">Una vez que ya tenemos nuestro librería añadida estamos listos para usarla. Para ello deberemos importarla añadiendo esto a la lista de import de la clase que vaya a hacer uso de la librería:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.ksoap2.SoapEnvelope</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.ksoap2.serialization.PropertyInfo</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.ksoap2.serialization.SoapObject</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.ksoap2.serialization.SoapSerializationEnvelope</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.ksoap2.transport.HttpTransportSE</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">Importada la librería vamos a ver como se utiliza. Los pasos para realizar una conexión son por regla general los siguientes:</p>
<ul style="text-align: justify">
<li>Preparación de los datos necesarios para la conexión del servicio web (dirección del servicio web, nombre del método).</li>
<li>Preparación de los datos a enviar al servicio web (en el caso que hubiera).</li>
<li>Apertura de la conexión con los datos necesarios.</li>
<li>LLamada al método y obtención de los datos provenientes del servicio werb (en el caso que hubiera).</li>
<li>Tratamiento de dichos datos devueltos.</li>
</ul>
<blockquote><p>Nota: el último punto aunque no parezca importante si que hay que indicarlo para explicar mas tarde el procesamiento de datos complejos provenientes del servicio web.</p></blockquote>
<h3>Preparación de los datos para la conexión</h3>
<p style="text-align: justify">Para llamar al servicio web necesitaremos cuantro cadenas de texto (String) que usaremos siempre para realizar las llamadas a los métidos del servicio web.</p>
<p>El primero es el denominado &#8220;namespace&#8221; cuyo valor nos indica el propio servicio web al crearlo. El namespace viene indicado en la cabecera del servicio web:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #009900;">&#91;</span>WebService<span style="color: #009900;">&#40;</span>Namespace <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://ip:puerto/NombreDelServicio/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p style="text-align: justify">Por lo que la cadena que define el namespace sería:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> NAMESPACE <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://ip:puerto/NombreDelServicio/&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">El segundo es la URL del servicio web, que viene a ser la adición del nombre del archivo .asmx a la cadena que define el NAMESPACE:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> <span style="color: #003399;">URL</span> <span style="color: #339933;">=</span> NAMESPACE<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;Service1.asmx&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">El tercer dato que necesitamos es el nombre de método que guardaremos en la variable METHOD:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> METHOD<span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">El cuaro dato será el SOAPACTION, que será una combinación del NAMESPACE y del método al que llamemos:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> SOAPACTION <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Apertura de la conexión y adición de los datos</h3>
<p style="text-align: justify">Definidos los datos iniciales veamos la preparación de datos en caso de que queramos enviar datos al servicio web.Para ello haremos uso de la clase SoapObject, que es un tipo de datos de encapsulación para poder enviar y recibir datos del servicio web (actua como un parseador de xml que es lo que se acaba enviando o recibiendo de un servicio web), y de la clase PropertyInfo que es una clase que nos permite añadir información al objeto SoapObject. Veamos un ejemplo.</p>

<div class="wp_syntax"><div class="code"><pre class="java">METHOD <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;method&quot;</span><span style="color: #339933;">;</span>
SoapObject request <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SoapObject<span style="color: #009900;">&#40;</span>NAMESPACE, METHOD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
PropertyInfo pi1 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PropertyInfo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pi1.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;variable1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pi1.<span style="color: #006633;">setValue</span><span style="color: #009900;">&#40;</span>“a”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
request.<span style="color: #006633;">addProperty</span><span style="color: #009900;">&#40;</span>pi1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">Hay que tener mucho cuidado al añadir las variables, ya que el nombre de éstas debe coincidir con el nombre de las varibles del método al que llamamos en el servicio web. Como se ve lo que hacemos es crear un objeto PropertyInfo al que añadiremos el nombre y el valor de la variable que deseamos enviar.</p>
<p style="text-align: justify">Una vez que tenemos los datos a enviar, pasaremos a abrir la conexión. Para ello utilizaremos la clase SoapSerializationEnvelope y la clase HttpTransportSE:</p>

<div class="wp_syntax"><div class="code"><pre class="java">SoapSerializationEnvelope envelope <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SoapSerializationEnvelope<span style="color: #009900;">&#40;</span>
SoapEnvelope.<span style="color: #006633;">VER12</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
envelope.<span style="color: #006633;">dotNet</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//indicamos que utilizaremos servicios .NET</span>
envelope.<span style="color: #006633;">setOutputSoapObject</span><span style="color: #009900;">&#40;</span>request<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//añadimos a la conexión el objeto SoapObject anteriormente creado</span>
HttpTransportSE androidHttpTransport <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HttpTransportSE<span style="color: #009900;">&#40;</span><span style="color: #003399;">URL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
androidHttpTransport.<span style="color: #006633;">debug</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//nos aseguramos así de que funcione siempre</span></pre></div></div>

<h3>LLamada al método y obtención de los datos provenientes del servicio web</h3>
<p>Ya que tenemos abierta la conexión no queda mas que definir la variable SOAPACTION y realizar la llamada.</p>

<div class="wp_syntax"><div class="code"><pre class="java">SOAPACTION <span style="color: #339933;">=</span> NAMESPACE <span style="color: #339933;">+</span> METHOD<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	androidHttpTransport.<span style="color: #006633;">call</span><span style="color: #009900;">&#40;</span>SOAPACTION, envelope<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	SoapObject response <span style="color: #339933;">=</span> envelope.<span style="color: #006633;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//tratamiento de la respuesta</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;error&quot;</span>, e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify">De ésta manera llamamos al método del servicio web. Si el metodo del servicio web devuelve algún dato tendremos que tratarlo. En el caso de que nos encontremos con algún tipo complejo de datos (como una lista o de alguna clase que hayamos creado para tal propósito) deberemos tratarlo para recuperar la información. Para ello utilizaremos la clase SoapObject que encapsula los datos recibidos sean cual sean su naturaleza y nos proporciona una serie de métidos para poder extraer la información tal y como se devolvió desde el servicio web.</p>
<h3>Tratamiento de datos complejos provenientes de un servicio web</h3>
<p style="text-align: justify">Pongamos que el método del servicio web al que llamamos devuelve un List, el tratamiento de datos sería algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="java">SOAPACTION <span style="color: #339933;">=</span> NAMESPACE <span style="color: #339933;">+</span> METHOD<span style="color: #339933;">;</span>
<span style="color: #003399;">List</span> l <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	androidHttpTransport.<span style="color: #006633;">call</span><span style="color: #009900;">&#40;</span>SOAPACTION, envelope<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	SoapObject response <span style="color: #339933;">=</span> envelope.<span style="color: #006633;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//tratamiento de la respuesta</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>response <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">//comprobamos que la respuesta no esté vacía</span>
                <span style="color: #666666; font-style: italic;">//recorremos el objeto</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> response.<span style="color: #006633;">getPropertyCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                           <span style="color: #666666; font-style: italic;">//obtenemos el elemento i de la lista (sabemos que es un String)</span>
                           l.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>response.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                           Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;elmento&quot;</span><span style="color: #339933;">+</span>i<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;devuelto&quot;</span>,response.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> l<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;error&quot;</span>, e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify">Explicaré mejor el código de arriba. La variable response del tipo SoapObject obtiene el List que se devolvío por parte del servicio web y mediante un bucle utilizando la variable getPropertyCount() que nos devuelve el número de elementos que posee, recorremos el objeto como si recorrieramos el List. Cada elemento obtenido mediante el bucle es del tipo SoapObject, al cual simplemente haremos un toString() ya que sabemos que es un String. Hay que tener mucho cuidado a la hora del procesamiento de los datos devueltos ya que hay que estar totalmente seguro de que tipo de datos devuelve el método invocado.</p>
<p style="text-align: justify">Si los datos fueran mas complejo aún (imaginemos un List&lt;List&gt;) deberíamos extraer cada SoapObject del objeto devuelto por parte del servicio web (que a su vez sería un List) para, mediante otro bucle anidado, recorrer la segunda lista obteniendo ya si los valores de las cadenas de texto que contienet. Sería algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="java"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>response <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">//comprobamos que la respuesta no esté vacía</span>
        <span style="color: #666666; font-style: italic;">//recorremos el objeto</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> response.<span style="color: #006633;">getPropertyCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//obtenemos el elemento i del List&amp;lt; List&amp;lt; String &amp;gt; &amp;gt;;</span>
        SoapObject element <span style="color: #339933;">=</span> response.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #666666; font-style: italic;">/*recorremos el List&amp;lt; String &amp;gt; i */</span>
        <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> j<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> element.<span style="color: #006633;">getPropertyCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	        <span style="color: #003399;">String</span> a <span style="color: #339933;">=</span> element.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	        <span style="color: #666666; font-style: italic;">//tratamos la cadena a</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify">Y con esto daríamos por concluída la lección sobre conexiones a servicios web .NET en Android usando ksoap2. Éstas conexiones nos vendrán muy bien por ejemplo para acceder a datos que están alojados en bases de datos en la red o simplemente para realizar operaciones fuera del alcance de nuestro dispositivo.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/M7h0dn-tszo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/conexion-entre-aplicaciones-android-y-servicios-web-net/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/conexion-entre-aplicaciones-android-y-servicios-web-net/</feedburner:origLink></item>
		<item>
		<title>Servicios web .NET con conexión a MySQL</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/c6WYeZUIaU0/</link>
		<comments>http://www.yakiboo.net/servicios-web-net-con-conexion-a-mysql/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 13:38:07 +0000</pubDate>
		<dc:creator>Jesús Manzano Camino</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Servicios Web]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2343</guid>
		<description><![CDATA[Éste es un pequeño artículo para quien se vea en la necesidad de crear servicios web bajo la plataforma .NET que tengan que acceder a una base de datos MySQL. ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Éste es un pequeño artículo para quien se vea en la necesidad de crear servicios web bajo la plataforma .NET que tengan que acceder a una base de datos MySQL.</p>
<h3>Introducción y herramientas</h3>
<p style="text-align: justify">Como trabajo fin de grado tengo que desarrollar una aplicación bajo Android que se comunique con una base de datos MYSQL en un servidor. Para realizar tal tarea pensé en crear un servicio web que hiciera de intermediario entre mi aplicación y el servidor con la base de datos, por desgracia tuve que hacerlo bajo Windows por lo que el servicio web estaría desarrollado en C# usando VIsual Web Developer Express (descargar <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-web-developer-express" target="_blank">aquí</a>). Por ello el tuto está desarrollado bajo dichas plataformas.</p>
<h3>Introducción a los servicios web</h3>
<p style="text-align: justify">Los servicios web funcionan como una capa intermedia que enlaza en mi caso una aplicación Android con una base de datos, pero puede ser el enlace entre dos aplicaciones o entre una aplicación y la persistencia. De esta manera se hace transparente el acceso a distintos contenidos web por parte de las aplicaciones que desarrollemos.</p>
<h3>Creación de servicios web en .NET</h3>
<p style="text-align: justify">Bajo Visual Web Developer Express es sencillo crear un servicio web en C#, simplemente Archivo-&gt;Nuevo y elegimos un servicio web y bajo el lenguaje C#. Un Servicio web constará de una clase principal donde se alojarán los métodos públicos a los que se accederá a través de Internet y métodos internos a los que se accederá internamente. Para  métodos de acceso externo debemos escribir la etiqueta [WebMethod] antes de la declaración del método. Un ejemplo de servicio web:</p>
<div>
<div>

<div class="wp_syntax"><div class="code"><pre class="java">namespace Service
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">///</span>
    <span style="color: #666666; font-style: italic;">/// Descripción breve de Service1</span>
    <span style="color: #666666; font-style: italic;">///</span>
    <span style="color: #009900;">&#91;</span>WebService<span style="color: #009900;">&#40;</span>Namespace <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://ip:puerto/Service/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#91;</span>WebServiceBinding<span style="color: #009900;">&#40;</span>ConformsTo <span style="color: #339933;">=</span> WsiProfiles.<span style="color: #006633;">BasicProfile1_1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">ComponentModel</span>.<span style="color: #006633;">ToolboxItem</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span>
    <span style="color: #666666; font-style: italic;">// Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.</span>
    <span style="color: #666666; font-style: italic;">// [System.Web.Script.Services.ScriptService]</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Service1 <span style="color: #339933;">:</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">Web</span>.<span style="color: #006633;">Services</span>.<span style="color: #006633;">WebService</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#91;</span>WebMethod<span style="color: #009900;">&#93;</span> <span style="color: #666666; font-style: italic;">//Marca del método que lo define como de acceso externo</span>
        <span style="color: #000000; font-weight: bold;">public</span> string hello<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;hello&quot;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Acceso del servicio web a la base de datos mysql</h3>
<p style="text-align: justify">Ahora que ya se conoce el funcionamiento de los servicios web puedo pasar al enlace de dichos servicios web con una base de datos (mysql en este caso)..En el caso del servicio web hay que descargarse de la página de mysql el conector para .NET de <a href="http://dev.mysql.com/downloads/connector/net/6.3.html#downloads">aquí</a> (es la version 3.6.7 ya que la 6.4.4 da algunos errores a la hora de acceder a la base de datos) . Una vez descargado e instalado pasamos a añadirlo a nuestro servicio web. Para ello, vamos a la pestaña del explorador de soluciones y en la parte de referencias (carpeta References) hacemos click derecho-&gt;Agregar referencia. Buscamos en la pestaña de .NET la referencia a MySql.Data y damos a añadir.<br />
Una vez hecho esto ya podemos tener acceso a la base de datos desde el servicio web. En el caso de mi proyecto y obligado a trabajar con Windows Server, me encontré con el problema de que no conseguía acceder a la base de datos. LA SOLUCIÓN: instalar en el servidor la misma versión del conector que instalé en mi computadora para añadir al servicio web. De esta manera conseguí conectarme a la base de datos.</p>
<h3>Acceso a la base de datos desde servicios web (Código)</h3>
<p style="text-align: justify">Ahora por fin podemos ver ya en código el acceso a una base de datos mysql. Para acceder a la base de datos mysql debemos abrir primeramente una conexion con dicha base de datos. Para ello utilizaremos MysqlConnection, al cual hay que pasarle un String que definirá el path con los datos de la base de datos ( dirección de la base de datos, nombre de la base de datos, contraseña y usario). un ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java">string path <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Server=xxx.xx.xx.xx; database=nombre_base_de_datos; password=pass;
User=user;&quot;</span><span style="color: #339933;">;</span>
MySqlConnection conexion <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MySqlConnection<span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">Una vez abierta la conexión, podemos realizar las consultas que necesitemos siguiendo uns pasos básicos. Existe una diferencia entre realizar una introducción o una consulta y se utilizarán distintos métodos para ello. Pongo un ejemplo de acceso y de consulta a una base de datos mysql:</p>

<div class="wp_syntax"><div class="code"><pre class="java">string path <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Server=xxx.xx.xx.xx; database=nombre_base_de_datos; password=pass; User=user;&quot;</span><span style="color: #339933;">;</span>
MySqlConnection conexion <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MySqlConnection<span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
conexion.<span style="color: #006633;">Open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
MySqlCommand command <span style="color: #339933;">=</span> conexion.<span style="color: #006633;">CreateCommand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//creamos un comando de inserción en la base de datos</span>
command.<span style="color: #006633;">CommandText</span> <span style="color: #339933;">=</span>INSERT INTO table_name values <span style="color: #009900;">&#40;</span>  ”value1”,”value2”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
command.<span style="color: #003399;">Connection</span> <span style="color: #339933;">=</span> conexion<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> num <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
num <span style="color: #339933;">=</span> command.<span style="color: #006633;">ExecuteNonQuery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//en el caso de una consulta</span>
 command.<span style="color: #006633;">CommandText</span> <span style="color: #339933;">=</span> SELECT <span style="color: #339933;">*</span> FROM table_name<span style="color: #339933;">;</span>
command.<span style="color: #003399;">Connection</span> <span style="color: #339933;">=</span> conection<span style="color: #339933;">;</span>
MySqlDataReader reader <span style="color: #339933;">=</span> command.<span style="color: #006633;">ExecuteReader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//comprobamos que la consulta haya tenido efecto</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>reader.<span style="color: #006633;">HasRows</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">//gestionamos los datos devueltos</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//cerramos la conexión con la base de datos en cualquiera de los dos tipos de acceso</span>
command.<span style="color: #003399;">Connection</span>.<span style="color: #006633;">Close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: justify">Con eso bastaría, ya tendríamos un servicio web que se conectaría a una base de datos mysql.</p>
</div>
</div>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/c6WYeZUIaU0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/servicios-web-net-con-conexion-a-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/servicios-web-net-con-conexion-a-mysql/</feedburner:origLink></item>
		<item>
		<title>HP Envy Touchpad en Debian Squeeze</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/q_7x4ouoEHg/</link>
		<comments>http://www.yakiboo.net/hp-envy-touchpad-en-debian-squeeze/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 11:27:41 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Synaptics]]></category>
		<category><![CDATA[Touchpad]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2337</guid>
		<description><![CDATA[Este post va dedicado a los afortunados poseedores de un HP Envy, aunque desconozco si a otras personas puede interesarles. Si habéis tratado de instalar Debian en este portátil, os ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Este post va dedicado a los afortunados poseedores de un HP Envy, aunque desconozco si a otras personas puede interesarles.</p>
<p style="text-align: justify;">Si habéis tratado de instalar Debian en este portátil, os habréis percatado de lo mal que funciona el Touchpad:</p>
<ul style="text-align: justify;">
<li>No hay posibilidad de hacer clic derecho</li>
<li>No funciona el doble clic sobre el LED para encender/apagar</li>
<li>No funcionan los gestos multi-touch.</li>
</ul>
<p style="text-align: justify;">Tal y como he podido observar, estos problemas son solventados en un 90% en Ubuntu, pero si queremos utilizar Debian, como es mi caso, existe una pequeña solución parcial, que hará infinítamente más agradable el uso del touchpad hasta que haya una solución mejor. Lo que vamos a hacer es instalar una versión especial del driver de synaptics, que corrige el problema del click derecho (no es mucho, pero sí lo básico para poder utilizar el portátil sin un ratón externo), además de hacer que moviendo el dedo sobre los botones no se desplaze el puntero.</p>
<p style="text-align: justify;">Así pues, descargad el paquete (este es para 64 bits) e instaladlo. Tras ello reiniciad y listo!:</p>
<ul>
<li><a href="http://people.debian.org/~tolimar/tmp/clickpad/squeeze/xserver-xorg-input-synaptics_1.2.2-2.1_amd64.deb" target="_blank">http://people.debian.org/~tolimar/tmp/clickpad/squeeze/xserver-xorg-input-synaptics_1.2.2-2.1_amd64.deb</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/q_7x4ouoEHg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/hp-envy-touchpad-en-debian-squeeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/hp-envy-touchpad-en-debian-squeeze/</feedburner:origLink></item>
		<item>
		<title>Gnome-panel con varios monitores (Gnome 2.x)</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/pQTq9uN2SOw/</link>
		<comments>http://www.yakiboo.net/gnome-panel-con-varios-monitores-gnome-2-x/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 21:41:38 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Gnome-panel]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2330</guid>
		<description><![CDATA[Si utilizáis gnome y soléis conectar el portátil a un monitor externo habréis sufrido más de una vez la imposibilidad aparente de no poder colocar el panel de Gnome donde ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Si utilizáis gnome y soléis conectar el portátil a un monitor externo habréis sufrido más de una vez la imposibilidad aparente de no poder colocar el panel de Gnome donde os de la gana. A mí cuando conecto el monitor externo me gusta que éste sea el monitor principal y, por lo tanto, el panel de gnome (en mi caso sólo utilizo uno) aparezca en él, y no en la pantalla del portátil. Conseguir esto es muy sencillo, y esta pequeña receta os ahorrará más de un quebradero de cabeza:</p>
<ul>
<li style="text-align: justify;">Debemos abrir el editor de configuración de gnome. Para ello pulsamos <strong>Alt+F2</strong> y en la ventanita que aparece escribimos <strong>gconf-editor</strong>. Hecho esto pulsamos <strong>Ejecutar</strong>.</li>
<li style="text-align: justify;">En el programa de configuración nos desplazamos por el árbol de la izquierda a <strong>apps/panel/toplevels/panel_&lt;no&gt;</strong>. Ahí símplemente modificamos el valor del campo <strong>monitor</strong> por el del monitor externo. Tengamos en cuenta para ello que el monitor 0 es el del propio portátil, por lo que si únicamente tenemos un monitor externo, éste será el número 1.</li>
</ul>
<p style="text-align: justify;">Esto es todo. Ya tendremos el panel (o los paneles) configurados para aparecer en el monitor externo, en caso de que esté conectado. Si desactivamos el monitor externo, el panel aparecerá en la pantalla del portátil, y cuando conectemos el monitor se moverán a éste.</p>
<p style="text-align: right;">(visto <a href="https://answers.launchpad.net/ubuntu/+source/gnome-panel/+question/8152">aquí</a>)</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/pQTq9uN2SOw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/gnome-panel-con-varios-monitores-gnome-2-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/gnome-panel-con-varios-monitores-gnome-2-x/</feedburner:origLink></item>
		<item>
		<title>Activar autocompletado en bash</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/E4kMC8J8CQM/</link>
		<comments>http://www.yakiboo.net/activar-autocompletado-en-bash/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 16:57:27 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2316</guid>
		<description><![CDATA[En algunas distribuciones de GNU/Linux el autocompletado en la consola no viene activado por defecto. Activarlo es muy sencillo, y basta, generalmente, con instalar el paquete bash-completion. En Debian se ...]]></description>
			<content:encoded><![CDATA[<p>En algunas distribuciones de GNU/Linux el autocompletado en la consola no viene activado por defecto. Activarlo es muy sencillo, y basta, generalmente, con instalar el paquete <strong>bash-completion</strong>. En Debian se hace así:</p>
<pre># apt-get install bash-completion</pre>
<p></p>
<p>En caso de que aún así no funcione el autocompletado, bastará con añadir las siguientes lineas al archivo <strong>/root/.bashrc</strong>:</p>
<pre>if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi</pre>
<p></p>
<p>Eso es todo. La próxima vez que iniciemos sesión root en un terminal tendremos el autocompletado 100% funcional.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/E4kMC8J8CQM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/activar-autocompletado-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/activar-autocompletado-en-bash/</feedburner:origLink></item>
		<item>
		<title>Tablas LaTeX desde OpenOffice Calc</title>
		<link>http://feedproxy.google.com/~r/yakiboo/~3/6oAYKrF__AE/</link>
		<comments>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 01:17:41 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[Diseño y ofimática]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Libre Office]]></category>
		<category><![CDATA[Ofimática]]></category>
		<category><![CDATA[OpenOffice]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2299</guid>
		<description><![CDATA[Es posible que en alguna ocasión os hayáis topado con la necesidad de incluir una tabla en un documento LaTeX. Si la tabla es muy extensa o contiene gran cantidad ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Es posible que en alguna ocasión os hayáis topado con la necesidad de incluir una tabla en un documento LaTeX. Si la tabla es muy extensa o contiene gran cantidad de información, la tarea puede resultar sumamente tediosa.</p>
<p style="text-align: justify;">María del Carmen Ramírez me envió este pequeño tutorial para hacer las tablas en OpenOffice Calc y exportarlas después a LaTeX, facilitando mucho la tarea:</p>
<ul style="text-align: justify;">
<li>En primer lugar debemos descargar e instalar la macro <strong>calc2latex</strong> para OpenOffice, que será la encargada de generar el código LaTeX. Para ello:
<ul>
<li>Descargamos la macro (en formato ZIP) desde <a href="http://calc2latex.sourceforge.net/" target="_blank">la web del proyecto</a>.</li>
<li>Abrimos Calc, el procesador de hojas de cálculo de OpenOffice, y vamos al menú <strong>Herramientas</strong> &gt; <strong>Administrador de extensiones</strong>. Allí añadimos el ZIP que hemos descargado, mediante el botón <strong>Añadir</strong>, y seguidamente cerramos la ventana.</li>
<li>Desde este momento, la macro que hemos descargado ya está a nuestra disposición.</li>
</ul>
</li>
<li>Ahora ya podemos utilizar la macro. Para comprobar cómo funciona, vamos a crear una tabla de ejemplo en OpenOffice Calc.</li>
<li>Una vez tengamos la tabla lista, vamos a <strong>Herramientas</strong> &gt; <strong>Macros</strong> &gt; <strong>Ejecutar macro</strong>, y en la sección <strong>Mis macros</strong> desplegamos Calc2LaTeX y seleccionamos la macro del mismo nombre. En el cuadro de la derecha se mostrarán las funciones disponibles. Debemos seleccionar la función <strong>Main</strong> únicamente y hacer clic sobre <strong>Ejecutar</strong>.</li>
<li>Se desplegará una ventana en la que podremos personalizar algunos parámetros de la generación de código. Si no deseamos hacer ningún cambio basta con que hagamos clic sobre <strong>Convert</strong> y obtendremos el código LaTeX listo para copiar y pegar en el editor LaTeX que utilicemos.</li>
</ul>
<p style="text-align: justify;">Ya sólo nos queda probarlo. Debemos saber que el código obtenido con la macro no proporciona la tabla totalmente igual que la escribimos, es decir, es posible que nos mantenga elementos como palabras escritas en negrita o las alineaciones de los datos dentro de las celdas, pero si hemos modificado por ejemplo el color de algún dato, eso no nos lo mantiene.</p>
<p style="text-align: justify;">Os dejo un .tex de ejemplo, así tendréis la posibilidad de ver el código y observar cómo desde una tabla escrita en OpenOffice consigo un resultado más aproximado a lo que realmente busco.</p>
<ul style="text-align: justify;">
<li><a href="http://www.yakiboo.net/uploads/Ejemplo-Calc2LaTeX.zip" target="_self">Código LaTeX</a></li>
<li><a href="http://www.yakiboo.net/uploads/Ejemplo-Calc2LaTeX.pdf" target="_self">Documento anterior compilado a PDF</a></li>
</ul>
<p style="text-align: justify;">Espero que os sea de utilidad. Muchas gracias a María del Carmen por la info.</p>
<img src="http://feeds.feedburner.com/~r/yakiboo/~4/6oAYKrF__AE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yakiboo.net/tablas-latex-desde-openoffice-calc/</feedburner:origLink></item>
	</channel>
</rss>
