<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>YakiBoo &#187; Programación</title>
	<atom:link href="http://www.yakiboo.net/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yakiboo.net</link>
	<description>... mi pequeño mundo binario</description>
	<lastBuildDate>Mon, 19 Dec 2011 23:38:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Programación Declarativa &#8211; Prácticas de Prolog resueltas (II)</title>
		<link>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/</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>

]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diagramas de secuencia con SDEdit</title>
		<link>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/</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>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/diagramas-de-secuencia-con-sdedit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conexión entre aplicaciones Android y servicios web .NET</title>
		<link>http://www.yakiboo.net/conexion-entre-aplicaciones-android-y-servicios-web-net/</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>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/conexion-entre-aplicaciones-android-y-servicios-web-net/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Prácticas de Sistemas y Señales (ESI &#8211; UCLM)</title>
		<link>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/</link>
		<comments>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 14:53:41 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Ciencia y Tecnología]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Matlab y Octave]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[UCLM]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2263</guid>
		<description><![CDATA[Aquí os dejo la documentación de prácticas que hice para la asignatura de Sistemas y Señales de la ESI de la UCLM en el año 2009/2010. Están hechas en Matlab ...]]></description>
			<content:encoded><![CDATA[<p>Aquí os dejo la documentación de prácticas que hice para la asignatura de Sistemas y Señales de la ESI de la UCLM en el año 2009/2010. Están hechas en Matlab y Simulink, aunque casi la totalidad de las prácticas son compatibles con Octave. Espero que os sirva de ayuda.</p>
<p>Enlace: <a title="Sistemas y señales - David" href="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" target="_blank">aquí.</a><br />
<object classid="clsid:166b1bca-3f9c-11cf-8075-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"><param name="sound" value="true" /><param name="progress" value="true" /><param name="autostart" value="true" /><param name="swliveconnect" value="false" /><param name="swstretchstyle" value="none" /><param name="swstretchhalign" value="none" /><param name="swstretchvalign" value="none" /><param name="src" value="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" /><embed type="application/x-director" width="500" height="500" src="http://yakiboo.net/apuntes/DavidPerezZaba_DocPracticasSyS.pdf" swstretchvalign="none" swstretchhalign="none" swstretchstyle="none" swliveconnect="false" autostart="true" progress="true" sound="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/practicas-de-sistemas-y-senales-esi-uclm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Documental de Arduino</title>
		<link>http://www.yakiboo.net/documental-de-arduino/</link>
		<comments>http://www.yakiboo.net/documental-de-arduino/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 12:30:58 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Ciencia y Tecnología]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Todo]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2099</guid>
		<description><![CDATA[Hace poco pude conocer la cantidad de cosas que se pueden hacer con una placa Arduino, os dejo un documental que he visto por aquí, espero que os guste. Documental ...]]></description>
			<content:encoded><![CDATA[<p>Hace poco pude conocer la cantidad de cosas que se pueden hacer con una placa Arduino, os dejo un documental que he visto por <a href="http://www.pillateunlinux.com/arduino-documental-sobre-hardware-libre/" target="_blank">aquí</a>, espero que os guste.</p>
<p><center><br />
<a href="http://www.youtube.com/watch?v=uMpURoKsNyo"></a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/uMpURoKsNyo" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/uMpURoKsNyo"></embed></object><br />
</center><br />
<a href="http://vimeo.com/18390711">Documental de Arduino en español</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/documental-de-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programación Declarativa &#8211; Prácticas de Prolog resueltas (I)</title>
		<link>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/</link>
		<comments>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 13:25:26 +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[ejercicios resueltos]]></category>
		<category><![CDATA[Inteligencia artificial]]></category>
		<category><![CDATA[prácticas]]></category>
		<category><![CDATA[Programación declarativa]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2196</guid>
		<description><![CDATA[Este post va dedicado especialmente a los estudiantes de Ingeniería Informática, aunque también le resultará de gran utilidad a cualquier persona que esté empezando a estudiar algo de Inteligencia Artificial ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Este post va dedicado especialmente a los estudiantes de Ingeniería Informática, aunque también le resultará de gran utilidad a cualquier persona que esté empezando a estudiar algo de Inteligencia Artificial utilizando el lenguaje Prolog. A continuación voy a presentar una serie de ejercicios propuestos, así como una posible solución a los mismos. Cabe destacar que es posible que haya algún pequeño error en las soluciones, pero aún así os servirán para comprender el funcionamiento de Prolog.</p>
<p style="text-align: justify;">Pues bien, sin más preámbulos, aquí tenéis los ejercicios:</p>
<h5>Enunciado</h5>
<p style="text-align: justify;"><strong>El siguiente programa Prolog especifica una base de datos deductiva sobre relaciones familiares. Completar el código dado, respondiendo a los diferentes apartados, mediante la lectura de estos fragmentos del Génesis.</strong></p>
<p><em>&#8220;He aquí la descendencia de Teraj: Teraj engendró a Abram (posteriormente llamado `Abraham&#8217;, que significa `Padre de multitud&#8217;), Najor, y Harán. Harán engendró a Lot &#8230; La mujer de Abram se llamaba Sarai (o Sara) y la de Najor Melca, hija de Harán, padre de Melca y de Jesca.&#8221;</em></p>
<p><em>&#8220;Sarai, la mujer de Abram, no le había dado hijos, pero ella tenía una esclava egipcia de nombre Agar. &#8230; tomó a Agar y se la dio por mujer a Abram, &#8230; Agar parió un hijo a Abram y a este hijo tenido de Agar, Abram le llamó Ismael.&#8221;</em></p>
<p><em>Estando en la tierra de Guerar, Abram confeso que: &#8221; es verdad que ella (Sarai) también es mi hermana, hija de mi padre pero no de mi madre, y ahora es mi mujer.&#8221;</em></p>
<p><em>&#8220;Sara, pues, concibió y parió un hijo en su vejez, en el tiempo predicho por Dios. Y Abraham llamó al hijo que le nació Isaac (que significa `el que ríe&#8217;).&#8221; Isaac casó con Rebeca, &#8220;hija de Batuel, el que Melca parió a Najor&#8221; y hermana de Labán. Isaac y Rebeca tuvieron dos hijos, Esaú y Jacob, pero ésta es otra historia.</em></p>
<p style="text-align: justify;"><stron>El código dado por el ejercicio es:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre>%%% HECHOS
&nbsp;
padre(abraham,isaac).
padre(haran,lot).
padre(haran,melca).
padre(haran,jesca).
hombre(isaac).
hombre(lot).
mujer(melca).
mujer(jesca).
&nbsp;
%%% REGLAS
&nbsp;
ascendiente_directo(X, Y) :- (padre(X, Y)<SEMI> madre(X, Y)).
ascendiente(X, Z) :- ascendiente_directo(X, Z).
ascendiente(X, Z) :- ascendiente_directo(X, Y), ascendiente(Y, Z).
hijo(X,Y) :- hombre(X), ascendiente_directo(Y,X).
hija(X,Y) :- mujer(X), ascendiente_directo(Y,X).</pre></td></tr></table></div>

<p><strong>Se pide responder a los siguientes apartados:</strong></p>
<ul>
<li>Completar la base de datos con los hechos extraídos del fragmento del génesis anterior.</li>
<li>Definir las relaciones: ascendente, descendente, abuelo, hermano, tío, sobrino y primo.</li>
<li>Definir un predicado que nos informe de las relaciones que hoy consideramos incestuosas.</li>
</ul>
<h5>Solución</h5>
<p style="text-align: justify;">La solución que propongo es la siguiente (ya todo el código junto):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</pre></td><td class="code"><pre>				%HECHOS
%hombre
hombre(abraham).
hombre(isaac).
hombre(lot).
hombre(najor).
hombre(ismael).
hombre(haran).
hombre(teraj).
hombre(batuel).
hombre(laban).
hombre(esau).
hombre(jacob).
&nbsp;
%mujer
mujer(rebeca).
mujer(melca).
mujer(jesca).
mujer(sara).
mujer(agar).
&nbsp;
%esclava
esclava(agar).
&nbsp;
%padre
padre(abraham, isaac).
padre(abraham, ismael).
padre(haran, lot).
padre(haran, melca).
padre(haran, jesca).
padre(teraj, abraham).
padre(teraj, sara).
padre(teraj, najor).
padre(teraj, haran).
padre(batuel, rebeca).
padre(batuel, laban).
padre(najor, batuel).
padre(isaac, esau).
padre(isaac, jacob).
&nbsp;
%madre
madre(agar, ismael).
madre(sara, isaac).
madre(rebeca, esau).
madre(rebeca, jacob).
madre(melca, batuel).
&nbsp;
%casados 
casado(abraham, sara).
casado(isaac, rebeca).
casado(najor, melca).
&nbsp;
&nbsp;
				%REGLAS
%hijo
hijo(X, Y) :- padre(Y, X), hombre(X).
hija(X, Y) :- padre(Y, X), mujer(X).
&nbsp;
%casados
casados(X, Y) :- casado(X, Y)<SEMI> casado(Y, X).
&nbsp;
%ascendiente_directo
ascendiente_directo(X, Y) :- padre(X, Y)<SEMI> madre(X, Y).
&nbsp;
%abuelo
abuelo(X, Y) :- padre(X, Z), ascendiente_directo(Z, Y).
&nbsp;
%abuela
abuela(X, Y) :- madre(X, Z), ascendiente_directo(Z, Y).
&nbsp;
%nieto
nieto(X, Y) :- (abuelo(Y, X)<SEMI> abuela(Y, X)), hombre(X).
&nbsp;
%nieta
nieta(X, Y) :- (abuelo(Y, X)<SEMI> abuela(Y, X)), mujer(X).
&nbsp;
%ascendiente
ascendiente(X, Y) :- ascendiente_directo(X, Y).
ascendiente(X, Y) :- abuelo(X, Y)<SEMI> abuela(X, Y).
&nbsp;
%hermano
hermano(X, Y) :- hombre(X), (ascendiente_directo(Z, X), ascendiente_directo(Z, Y)), X\=Y.
&nbsp;
%hermana
hermana(X, Y) :- mujer(X), (ascendiente_directo(Z, X), ascendiente_directo(Z, Y)), X\=Y.
&nbsp;
%hermanos
hermanos(X, Y) :- hermano(X, Y)<SEMI> hermana(X, Y)<SEMI> hermano(Y, X)<SEMI> hermana(Y, X).
&nbsp;
%descendiente_directo
descendiente_directo(X, Y) :- ascendiente_directo(Y, X).
&nbsp;
%descendiente
descendiente(X, Y) :- descendiente_directo(Y, X).
descendiente(X, Y) :- nieto(X, Y)<SEMI> nieta(X, Y).
&nbsp;
%tio_carnal
tio_carnal(X, Y) :- hermanos(X, Z), ascendiente_directo(Z, Y), hombre(X).
tia_carnal(X, Y) :- hermanos(X, Z), ascendiente_directo(Z, Y), mujer(X).
&nbsp;
%tio_no_carnal
tio_no_carnal(X, Y) :- casados(X, Z), tia_carnal(Z, Y).
tia_no_carnal(X, Y) :- casados(X, Z), tio_carnal(Z, Y).
&nbsp;
%tio
tio(X, Y) :- tio_carnal(X, Y)<SEMI> tio_no_carnal(X, Y), not(padre(X,Y)), X\==Y.
&nbsp;
%tia
tia(X, Y) :- tia_carnal(X, Y)<SEMI> tia_no_carnal(X, Y), not(madre(X,Y)), X\==Y.
&nbsp;
%sobrino
sobrino(X, Y) :- hombre(X), (tio(Y, X)<SEMI> tia(Y, X)).
&nbsp;
%sobrina
sobrina(X, Y) :- mujer(X), (tio(Y, X)<SEMI> tia(Y, X)).
&nbsp;
%primo
primo(X, Y) :- hombre(X), (tio(Z, X)<SEMI> tia(Z, X)), ascendiente_directo(Z, Y),X\==Y.
&nbsp;
%prima
prima(X, Y) :- mujer(X), (tio(Z, X)<SEMI> tia(Z, X)), ascendiente_directo(Z, Y),X\==Y.
&nbsp;
%primos
primos(X, Y) :- primo(X, Y)<SEMI> primo(Y, X)<SEMI> prima(X, Y)<SEMI> prima(Y, X).
&nbsp;
%incestuosos
incestuosos(X, Y) :- casados(X, Y), hombre(X), mujer(Y),(hermanos(X, Y)<SEMI> primos(X, Y)<SEMI> ascendiente_directo(X, Y)<SEMI> descendiente_directo(X, Y)<SEMI> abuelo(X, Y)<SEMI> nieto(X, Y)<SEMI> abuela(X, Y)<SEMI> nieta(X, Y)<SEMI> tio(X, Y)<SEMI> tia(X, Y)<SEMI> sobrino(X, Y)<SEMI> sobrina(X, Y)).</pre></td></tr></table></div>

<p style="text-align: justify;">Espero que os sirva. Y si quereis aprender Programación Declarativa y Prolog, os recomiendo el libro &#8220;Programación lógica. Teoría y Práctica&#8221;, de Pascual Julián Iranzo y María Alpuente Frasnedo, que está muy bien escrito y completamente en español.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/programacion-declarativa-practicas-de-prolog-resueltas-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prácticas de Simulación UCLM</title>
		<link>http://www.yakiboo.net/practicas-de-simulacion-uclm/</link>
		<comments>http://www.yakiboo.net/practicas-de-simulacion-uclm/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 17:30:36 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[+]]></category>
		<category><![CDATA[Ingeniería Informática]]></category>
		<category><![CDATA[Matlab y Octave]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales y guías]]></category>
		<category><![CDATA[UCLM]]></category>
		<category><![CDATA[Matemáticas]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2172</guid>
		<description><![CDATA[Bueno, aquí os dejo unas prácticas resueltas de Simulación. No implica que este todo bien, es más se hicieron de una forma muy muy rápida, así que seguro que contiene ...]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="text-align: justify;">Bueno, aquí os dejo unas prácticas resueltas de Simulación. No implica que este todo bien, es más se hicieron de una forma muy muy rápida, así que seguro que contiene algunos errores, pero viene muy bien como ayuda para empezar.</p>
<p style="text-align: justify;">Viendo el código en Matlab me da vergüenza como está programado (no intentéis programar en Matlab como lo hacéis en Java o C, porque entonces estaréis perdiendo mucho potencial). Creo que toda la parte que implica sólo la programación en Matlab es compatible con Octave (sólo habrá que cambiar en ciertos lugares un poco de la sintaxis), pero para la parte de Simulink es imprescindible Matlab.</p>
<p style="text-align: justify;">Espero que podáis utilizarlo, lo mejoréis y nos lo enviéis para que podamos volver a colgarlo para los siguientes que lo necesiten.</p>
<p><center><br />
<object classid="clsid:166b1bca-3f9c-11cf-8075-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"><param name="sound" value="true" /><param name="progress" value="true" /><param name="autostart" value="true" /><param name="swliveconnect" value="false" /><param name="swstretchstyle" value="none" /><param name="swstretchhalign" value="none" /><param name="swstretchvalign" value="none" /><param name="src" value="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" /><embed type="application/x-director" width="560" height="600" src="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" swstretchvalign="none" swstretchhalign="none" swstretchstyle="none" swliveconnect="false" autostart="true" progress="true" sound="true"></embed></object><br />
</center><br />
<strong>Descargar: <a title="Prácticas de David" href="http://yakiboo.net/uploads/DocPracticas_DavidAntonioPerezZaba.pdf" target="_blank">aquí</a>.</strong></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="text-align: justify;">Si tienes otros apuntes, prácticas, o lo que sea y quieres compartirlo dinoslo y lo publicamos.</p>
<p style="text-align: justify;">PD: Hay algunos datos &#8220;sospechosos&#8221; a quién los encuentre, le doy un premio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/practicas-de-simulacion-uclm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YakiTo. Un conversor multimedia libre, multiplataforma y multilingüe</title>
		<link>http://www.yakiboo.net/yakito-un-conversor-multimedia-libre-multiplataforma-y-multilingue/</link>
		<comments>http://www.yakiboo.net/yakito-un-conversor-multimedia-libre-multiplataforma-y-multilingue/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 11:08:22 +0000</pubDate>
		<dc:creator>sgm</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Todo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[conversiones]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[recodificar]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[YakiTo]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2145</guid>
		<description><![CDATA[Seguro que en más de una ocasión has querido convertir archivos multimedia, como vídeos, para poder visualizarlos en tu smartphone, videoconsola portátil, mp4, etc. o símplemente has tratado de convertir ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Seguro que en más de una ocasión has querido convertir archivos multimedia, como vídeos, para poder visualizarlos en tu smartphone, videoconsola portátil, mp4, etc. o símplemente has tratado de convertir una película de un formato a otro, por ejemplo, DivX. Existen muchas soluciones para este tipo de tareas, pero la gran mayoría tienen grandes problemas de usabilidad (no son sencillas de utilizar), lo que nos impide sacarles provecho si no somos expertos en la materia.</p>
<p style="text-align: justify;">Pues bien, hoy os quiero presentar a <a href="http://yakito.yakiboo.net/" target="_blank">YakiTo</a>, un conversor multimedia escrito en Java en el que estoy trabajando para presentarlo al concurso universitario de software libre. Está pensado, principalmente, para resultar sencillo al usuario menos experimentado, así como para ofrecer múltiples idiomas de la interfaz gráfica, y posibilitar ciertas características que no son muy comunes en estos conversores, como la conversión de varios videos de forma paralela o la ausencia absoluta de dependencias externas (salvo Java, claro). Todavía está en desarrollo, pero ya existe una versión funcional en <a href="http://yakito.yakiboo.net/" target="_blank">la web del proyecto</a>. Una de las ventajas de la forma en la que estoy desarrollando YakiTo es lo sencillo que resulta colaborar en él, incluso sin tener ni idea de programación, así que si te apetece ayudar a un proyecto de software libre <a href="http://www.yakiboo.net/yakito/?page_id=96" target="_blank">aquí</a> puedes ver cómo hacerlo.</p>
<p style="text-align: justify;">Para instalarlo sólo teneis que ir a <a href="http://yakito.yakiboo.net/" target="_blank">la web del proyecto</a> y descargar la versión de vuestro sistema operativo (YakiTo está disponible para Windows y GNU/Linux, aunque también se distribuye para otros sistemas operativos, pero con menos garantía de que funcionen las cosas). La aplicación tiene el siguiente aspecto:</p>
<p style="text-align: center;"><a href="http://www.yakiboo.net/uploads/yakito2.png"><img class="alignnone size-full wp-image-2148" title="yakito2" src="http://www.yakiboo.net/uploads/yakito2.png" alt="" width="638" height="467" /></a></p>
<p style="text-align: justify;">Tened en cuenta que la versión actual está un poco limitada: sólo dispone del idioma Español y de unos cuantos perfiles de prueba. Lo que me gustaría es que le echarais un ojo y fuerais familiarizándoos con YakiTo. Si la gente colabora conmigo, pronto dispondré de numerosos idiomas y perfiles de conversión para todo tipo de dispositivos. EEspero que mi proyecto os cause buena impresión y estéis atentos a las nuevas versiones que se vayan lanzando.</p>
<p>Un saludo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/yakito-un-conversor-multimedia-libre-multiplataforma-y-multilingue/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Puertos del Market de Android (Android Market)</title>
		<link>http://www.yakiboo.net/puertos-del-market-de-android-android-market/</link>
		<comments>http://www.yakiboo.net/puertos-del-market-de-android-android-market/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 12:56:59 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2102</guid>
		<description><![CDATA[Estaba buscando los puertos del Android Market puesto que normalmente utilizo una &#8220;red wifi&#8221; en la que todos los puertos (tanto salientes como entrantes) están bloqueados por defecto, y necesitaba ...]]></description>
			<content:encoded><![CDATA[<p>Estaba buscando los puertos del Android Market puesto que normalmente utilizo una &#8220;red wifi&#8221; en la que todos los puertos (tanto salientes como entrantes) están bloqueados por defecto, y necesitaba abrirlos para poder utilizar, cacharrear y guarrear el Market de Android. Menos mal que al final pude encontrar con una búsqueda en inglés (para confirmar mis sospechas) que los puertos que utiliza son:</p>
<p style="text-align: center;">External port: <strong>5228</strong> Internal port: <strong>5228</strong> Protocol: <strong>TCP/UDP</strong></p>
<p>Por si a alguien le interesa conocer los puertos de otras aplicaciones, lo encontré en esta <a href="http://findports.com/article/google-android-market" target="_blank">página web</a> que puede que os resulte de interés.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/puertos-del-market-de-android-android-market/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Menu oculto de Android</title>
		<link>http://www.yakiboo.net/menu-oculto-de-android/</link>
		<comments>http://www.yakiboo.net/menu-oculto-de-android/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 19:24:02 +0000</pubDate>
		<dc:creator>David Lovelace</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Móviles]]></category>
		<category><![CDATA[Todo]]></category>

		<guid isPermaLink="false">http://www.yakiboo.net/?p=2092</guid>
		<description><![CDATA[Marcando *#*#4636#*#* en un dispositivo con Android, tenemos acceso a un menú &#8220;secreto&#8221; (Prueba) en el que podemos consultar: - Información sobre el teléfono (IMEI, red, hacer un ping a ...]]></description>
			<content:encoded><![CDATA[<p>Marcando <span style="color: #000000;"><strong>*#*#4636#*#*</strong></span> en un dispositivo con Android, tenemos acceso a un menú &#8220;secreto&#8221; (Prueba) en el que podemos consultar:</p>
<p>- Información sobre el teléfono (IMEI, red, hacer un ping a google.es, establecer tipo de red preferido,&#8230;)</p>
<p>- Información de la batería(temperatura, nivel carga, estado, voltaje,tiempo desde el inicio,&#8230;)</p>
<p>- Historial de la batería (con gráficas y porcentajes del uso )</p>
<p>- Estadísticas de uso (tiempo de uso, número de incios de cada aplicación instalada)</p>
<p>- Información del servicio Blur (sólo para los Motorola con Moto Blur)</p>
<p>Es bastante curioso, estoy descubriendo poco a poco Android, y la verdad es que tiene muchas cosas que me gustan (aunque otras no).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiboo.net/menu-oculto-de-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

