<?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>BLOG AMERICATI</title>
	<atom:link href="http://americati.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://americati.com/blog</link>
	<description>Comentarios sobre Tecnología Informática</description>
	<lastBuildDate>Thu, 16 Feb 2012 20:29:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Validar si dos JARs tienen el mismo contenido</title>
		<link>http://americati.com/blog/?p=587</link>
		<comments>http://americati.com/blog/?p=587#comments</comments>
		<pubDate>Thu, 29 Dec 2011 18:59:46 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=587</guid>
		<description><![CDATA[Simple, con un script de shell... lamentablemente cmp jar1.jar jar2.jar no funciona. #!/bin/bash if [ $# != 2 ] ; then echo "Debe proporcionar dos jars como argumentos" exit 2 fi TMP1=/tmp/j1-$RANDOM TMP2=/tmp/j2-$RANDOM mkdir $TMP1 mkdir $TMP2 cp $1 $TMP1/j1.jar cp $2 $TMP2/j2.jar cd $TMP1 jar xf j1.jar cd $TMP2 jar xf j2.jar rm -f [...]]]></description>
			<content:encoded><![CDATA[<p>Simple, con un script de shell... lamentablemente cmp jar1.jar jar2.jar no funciona.<br />
<span id="more-587"></span><br />
<code><br />
#!/bin/bash<br />
if [ $# != 2 ] ; then<br />
echo "Debe proporcionar dos jars como argumentos"<br />
exit 2<br />
fi<br />
TMP1=/tmp/j1-$RANDOM<br />
TMP2=/tmp/j2-$RANDOM<br />
mkdir $TMP1<br />
mkdir $TMP2<br />
cp $1 $TMP1/j1.jar<br />
cp $2 $TMP2/j2.jar<br />
cd $TMP1<br />
jar xf j1.jar<br />
cd $TMP2<br />
jar xf j2.jar<br />
rm -f $TMP1/j1.jar $TMP2/j2.jar<br />
if diff -r $TMP1 $TMP2<br />
then<br />
echo "Contenidos iguales"<br />
fi<br />
rm -rf $TMP1 $TMP2<br />
</code></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D587&amp;t=Validar%20si%20dos%20JARs%20tienen%20el%20mismo%20contenido" id="facebook_share_button_587" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_587') || document.getElementById('facebook_share_icon_587') || document.getElementById('facebook_share_both_587') || document.getElementById('facebook_share_button_587');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_587') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=587</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Variables volátiles no son 100% seguras entre threads</title>
		<link>http://americati.com/blog/?p=582</link>
		<comments>http://americati.com/blog/?p=582#comments</comments>
		<pubDate>Fri, 23 Sep 2011 16:23:29 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=582</guid>
		<description><![CDATA[Los tutoriales de programación MT recomiendan el uso de variables volátiles típicamente para demarcar condiciones booleanas en estrategias de pooling para comunicación entre threads. Esto no significa que sus valores sean atómicos. El siguiente programa ilustra este punto. La variable "t" se usa como un contador el cual es incrementado por 1000 threads en tiempos [...]]]></description>
			<content:encoded><![CDATA[<p>Los tutoriales de programación MT recomiendan el uso de variables volátiles típicamente para demarcar condiciones booleanas en estrategias de pooling para comunicación entre threads. Esto no significa que sus valores sean atómicos.</p>
<p><span id="more-582"></span></p>
<p>El siguiente programa ilustra este punto. La variable "t" se usa como un contador el cual es incrementado por 1000 threads en tiempos relativamente aleatórios, lo mismo que la variable "t2". El resultado es estable para "t2" (1000) mientras que durante algunas ejecuciones se observa que "t" oscila entre 995 a 1000. Es muy probable que el resultado varíe según la implementación del JRE y de la cantidad de procesadores del computador, pero en general, no hay garantía del incremento atómico de "t".</p>
<pre class="brush: java; title: ; notranslate">
public class Volatiles implements Runnable {

	static volatile long t;
	static AtomicLong t2 = new AtomicLong(0);

	public static void main(String[] args) throws InterruptedException {
		for(int z = 0; z &lt; 100 ; z ++) {
			Thread.sleep(10);
			for(int j = 0 ; j &lt; 10 ; j ++) {
				new Thread(new Volatiles()).start();
			}
		}
		Thread.sleep(2500);
		System.out.println(&quot;T=&quot; + t + &quot; T2=&quot; + t2.get());
	}

	@Override
	public void run() {
		try {
			Thread.sleep(1000 + (int) (Math.random() * 100));
		} catch(InterruptedException ex) {}
		t ++;
		t2.incrementAndGet();
	}

}
</pre>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D582&amp;t=Variables%20vol%C3%A1tiles%20no%20son%20100%25%20seguras%20entre%20threads" id="facebook_share_button_582" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_582') || document.getElementById('facebook_share_icon_582') || document.getElementById('facebook_share_both_582') || document.getElementById('facebook_share_button_582');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_582') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=582</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terrible experiencia con Ubuntu Unity</title>
		<link>http://americati.com/blog/?p=576</link>
		<comments>http://americati.com/blog/?p=576#comments</comments>
		<pubDate>Mon, 18 Jul 2011 03:15:06 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=576</guid>
		<description><![CDATA[Tras navegar entre muchos comentarios negativos y unos pocos positivos acerca del nuevo entorno gráfico (que según indican sólo es un Shell sobre el escritorio Gnome), decidí probarlo personalmente. Miento en parte. Mi interés era probar Flightgear versión 2 que está disponible en Ubuntu Natty, pero como valor agregado probaría por fin el tan mencionado [...]]]></description>
			<content:encoded><![CDATA[<p>Tras navegar entre muchos comentarios negativos y unos pocos positivos acerca del nuevo entorno gráfico (que según indican sólo es un Shell sobre el escritorio Gnome), decidí probarlo personalmente.</p>
<p><span id="more-576"></span></p>
<p>Miento en parte. Mi interés era probar Flightgear versión 2 que está disponible en Ubuntu Natty, pero como valor agregado probaría por fin el tan mencionado asunto.</p>
<p>Al principio nada fuera de lo usual: el clásico instalador, con una agradable diferencia: solicita algunos valores de configuración (como el nombre de host) mientras va haciendo la copia de los archivos del CD (lo cual es lógico pues la configuración sólo se aplica al final.)</p>
<p>Tras el reboot, nada fuera de lo común (lo común es aquí Ubuntu 10.04) salvo esa extraña barra de botones de la izquierda (el "dash")... detección correcta de la red inalámbrica, y a buscar el terminal para pegarlo en la barra de tareas como vengo haciendo desde hace muchos Ubuntus.... recordemos: aplicaciones-&gt;accesorios.... mmm... no hay menú de aplicaciones... muy extraño, pero no hay problema: en la práctica el menú es poco utilizado pues tengo lanzadores directos a mis 10 aplicaciones que cubren el 99% de mi uso diario. Buscando en el menú me encuentro con una especie de popup para navegar y/o buscar las aplicaciones, evidentemente orientado al principiante que nunca ha utilizado Ubuntu o Linux. Tipeo "terminal" y se lanza el programa. Ya tengo línea de comando... pero he tardado mucho. Habrá que acostumbrarse?</p>
<p style="text-align: center;"><a href="http://americati.com/blog/wp-content/uploads/2011/07/Unity-Dash.jpg"><img class="size-full wp-image-578 aligncenter" title="Unity-Dash" src="http://americati.com/blog/wp-content/uploads/2011/07/Unity-Dash.jpg" alt="" width="45" height="276" /></a></p>
<p>Otra vez el "dash": consciente de estar perdiendo toda objetividad, me atrevo a mencionar que dicho elemento (que es quizá el central en Unity) me produjo un Dejavú: mi mente retrocedió más de una década a la época de los window-manager menores, concretamente a esto (que para nuestros días luce abominable, especialmente con ese icono inferior de Netscape):</p>
<p style="text-align: center;"><a href="http://americati.com/blog/wp-content/uploads/2011/07/afterstep_fullscreen.png"><img class="aligncenter  wp-image-579" title="afterstep_fullscreen" src="http://americati.com/blog/wp-content/uploads/2011/07/afterstep_fullscreen.png" alt="" width="343" height="378" /></a></p>
<p>El "dash" parece que tiene más inteligencia de lo que parece, y es evidente que de algún modo puedo agregarle lanzadores de aplicaciones. No puedo arrastrarla a otra zona de la pantalla (algo que -salvando distancias- sí se podía hacer con Windows 95) aunque viendo los foros aparentemente hay manera de lograrlo. Revisando algunos sites como <a href="http://omgubuntu.co.uk/natty/">este</a>, descubro que hay muchas cosas ocultas (y según los escritores todas muy buenas y muy productivas), y que el famoso dash tiene más inteligencia e indicadores de lo que aparenta. No encuentro con rapidez cómo minimizar una ventana (luego leo que debe poderse hacer usando el menú...) y a cada momento percibo con más fuerza que la papelera ocupa un cuarto de la pantalla (cosa que no es cierto, pero el inconsciente es un exagerado total.) Los menús de la aplicación se han ido fuera de la aplicación, lo cual en mi opinión no es intuitivo pero evidentemente ahorra algo de espacio; sin embargo, es claro que la lógica de dicha decisión es "una aplicación a la vez", como bien suele ocurrir en un smartphone o en una netbook.. y Unity es el sistema (shell o como se denomine) que provee consistencia (unifica?) el computador con el netbook, al parecer en detrimento del primero.</p>
<p>En algunos documentos se justifican algunas decisiones por ser más "Mac-like" (similares al entorno de Apple), pero esto creo que está muy equivocado. Como leí en un foro: si quiero un sistema Mac-like, entonces compro una Mac.</p>
<p><a href="http://americati.com/blog/wp-content/uploads/2011/07/ubu-unity.png"><img class="aligncenter size-full wp-image-577" title="ubu-unity" src="http://americati.com/blog/wp-content/uploads/2011/07/ubu-unity.png" alt="" width="872" height="226" /></a></p>
<p>Y para terminar de incrementar mi decepción, Flightgear sigue con los mismos problemas de siempre. Ha sido un domingo decepcionante.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D576&amp;t=Terrible%20experiencia%20con%20Ubuntu%20Unity" id="facebook_share_button_576" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_576') || document.getElementById('facebook_share_icon_576') || document.getElementById('facebook_share_both_576') || document.getElementById('facebook_share_button_576');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_576') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=576</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven sin Maven</title>
		<link>http://americati.com/blog/?p=566</link>
		<comments>http://americati.com/blog/?p=566#comments</comments>
		<pubDate>Thu, 21 Apr 2011 23:41:50 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=566</guid>
		<description><![CDATA[Maven puede ser indeseable bajo ciertas circunstancias... Pero su resolución de dependencias puede ser muy útil. Cómo crear un proyecto para el cual conocemos las "dependencias maven" pero no los JARs específicos? Podemos crear un proyecto auxiliar con maven y configurar el POM respectivo... por ejemplo con el arquetipo quickstart. Luego procedemos a crear un [...]]]></description>
			<content:encoded><![CDATA[<p>Maven puede ser indeseable bajo ciertas circunstancias...</p>
<p><span id="more-566"></span></p>
<p>Pero su resolución de dependencias puede ser muy útil. Cómo crear un proyecto para el cual conocemos las "dependencias maven" pero no los JARs específicos?</p>
<p>Podemos crear un proyecto auxiliar con maven y configurar el POM respectivo... por ejemplo con el arquetipo quickstart. Luego procedemos a crear un package. Esto descarga todos los JARs necesarios a $HOME/.m2.</p>
<p>mvn archetype:create -DgroupId=com.americati -DartifactId=PROYECTO.mvn</p>
<p>cd PROYECTO.mvn</p>
<p>edit pom.xml</p>
<p>-&gt; Agregar dependencias</p>
<p>Luego podemos "compilar", lo que descarga las dependencias.</p>
<p>mvn compile</p>
<p>Ahora podemos ejecutar el siguiente comando para extraer todas las dependencias (JARs) al directorio que querramos (por omision a target/dependency)</p>
<p>mvn dependency:copy-dependencies -DoutputDirectory=/tmp/mis-dependencias</p>
<p>Estos JARs se pueden agregar al classpath de nuestro proyecto real.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D566&amp;t=Maven%20sin%20Maven" id="facebook_share_button_566" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_566') || document.getElementById('facebook_share_icon_566') || document.getElementById('facebook_share_both_566') || document.getElementById('facebook_share_button_566');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_566') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=566</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autenticación inversa contra el phishing</title>
		<link>http://americati.com/blog/?p=564</link>
		<comments>http://americati.com/blog/?p=564#comments</comments>
		<pubDate>Tue, 29 Mar 2011 17:06:11 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=564</guid>
		<description><![CDATA[Los esquemas de autenticación tradicionales (Número de tarjeta, PIN, etc.) tienen diversos inconvenientes... La autenticación normalmente se basa en un texto secreto (contraseña.) El caso más simple es el número de tarjeta de crédito, el cual en un pasado lejano sirvió para este propósito. Quién podría adivinar tremendos números? además, qué establecimiento serio intentaría hacer [...]]]></description>
			<content:encoded><![CDATA[<p>Los esquemas de autenticación tradicionales (Número de tarjeta, PIN, etc.) tienen diversos inconvenientes...</p>
<p><span id="more-564"></span></p>
<p>La autenticación normalmente se basa en un texto secreto (contraseña.) El caso más simple es el número de tarjeta de crédito, el cual en un pasado lejano sirvió para este propósito. Quién podría adivinar tremendos números? además, qué establecimiento serio intentaría hacer un fraude? Estas asunciones fueron perdiendo peso con el tiempo, y de manera total con el Internet. El PIN tiene la ventaja de haber sido concebido desde el principio como un valor secreto, pero las prácticas comerciales lo han invalidado. Por ejemplo, mi banco hasta hace poco me pedía tipear el PIN en el número de teléfono como parte de una llamada de servicio, como si la línea telefónica no fuera vulnerable.</p>
<p>La siguiente tendencia consiste en convertir al PIN en un elemento dinámico, con lo que obtenemos un token de generación temporal, o la remisión de un nuevo PIN por el servidor para cada transacción (la cual podría ser enviada por SMS.)  Esta autenticación múltiple ciertamente equivale a un password más difícil de comprometer, y brinda más seguridad al servidor. El problema es que no brinda más seguridad al usuario (phishing.)</p>
<p>La solución típica apunta al uso de certificados digitales que en teoría garantizarían que el usuario no sea engañado. Lamentablemente esto no funciona por sus graves fallos tanto en el cliente como en el servidor:</p>
<p><strong>En el cliente</strong></p>
<p>- Los usuarios no verifican que están accediendo mediante un canal seguro (el inocuo candado tan bien escondido en una esquina.)</p>
<p>- Los usuarios no comprenden la ventana de alerta con los problemas del certificado del servidor (cómo distinguirlo de un problema del disco duro? o de la línea de Internet? etc...)</p>
<p>- Los certificados comprometidos tardan en ser detectados por ciertos clientes (http://blog.dayspring-tech.com/2009/09/browser-security-ocsp-crl/)</p>
<p><strong>En el servidor</strong></p>
<p>- Los certificados digitales se vencen y es responsabilidad de cada administrador estar pendiente de esto, lo que normalmente no ocurre, lo que acostumbra a los usuarios a ignorar la advertencia del certificado</p>
<p>- Los certificados digitales tienen (en apariencia) costo elevado, y muchas entidades medianas los evitan por tal motivo; se cree que los que no tienen costo elevado no tienen la calidad suficiente</p>
<p>La solución a estos problemas es difícil; a mi entender se requiere un mecanismo de alerta para vencimiento de certificados, nuevos navegadores que exclusivamente utilicen conexiones con certificados, y alguna extensión al HTTP para que los navegadores tradicionales NO se usen para este propósito.</p>
<p>Una alternativa a mi entender más razonable consiste en proporcionar más control al usuario (o en todo caso, hacia su extremo.) Por ejemplo, en lugar de que el token sea exclusivamente enviado desde el usuario al servidor, el servidor podría (complementariamente) proporcionar un token al usuario, el cual sería validado por este último.</p>
<p>En general, creo que el problema de la actual guerra contra el phishing consiste en pretender proteger al usuario mediante el agregado de más medidas diseñadas para proteger al servidor.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D564&amp;t=Autenticaci%C3%B3n%20inversa%20contra%20el%20phishing" id="facebook_share_button_564" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_564') || document.getElementById('facebook_share_icon_564') || document.getElementById('facebook_share_both_564') || document.getElementById('facebook_share_button_564');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_564') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=564</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Políticas de Seguridad</title>
		<link>http://americati.com/blog/?p=558</link>
		<comments>http://americati.com/blog/?p=558#comments</comments>
		<pubDate>Tue, 18 Jan 2011 21:31:14 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=558</guid>
		<description><![CDATA[Por lo general no sirven, o no se aplican como debe ser, o son sólo para decir que se poseen para cumplir las formalidades. Concepto: Documentos en los que la estrategia de la organización se describe en lo concerniente a la confidencialidad, integridad y disponibilidad de la información. -&#62; En realidad el documento es la [...]]]></description>
			<content:encoded><![CDATA[<p>Por lo general no sirven, o no se aplican como debe ser, o son sólo para decir que se poseen para cumplir las formalidades.<br />
<span id="more-558"></span></p>
<p>Concepto: Documentos en los que la estrategia de la organización se describe en lo concerniente a la confidencialidad, integridad y disponibilidad de la información.</p>
<p>-&gt; En realidad el documento es la manera de plasmar esta estrategia para poder ser transmitida con facilidad. El documento no es palabra sagrada!!!</p>
<p><strong>Objetivos</strong></p>
<p>Confidencialidad: la información debe tenerla sólo quien (por el criterio elegido) debe tenerla</p>
<p>Integridad: Protección de modificación no autorizada</p>
<p>Disponibilidad: La información se puede utilizar cuando se requiere</p>
<p>-&gt; Estos son objetivos generales de la seguridad. Hay otros que interactúan, por ejemplo, evitar las falsificaciones, reducir el consumo de recursos indebidos, etc. que no necesariamente están referidos a la información.</p>
<p><strong>Beneficios</strong></p>
<p>El documento permite involucrar concretamente a las gerencias, por ende, dar más peso a la seguridad</p>
<p>Es una prueba para clientes y/o inversionistas de que la seguridad tiene importancia en la organización</p>
<p>Sirven como patrón para medir las ventajas de los productos de seguridad (en qué medida están alineados con la política) así como para medir la efectividad de la administración de seguridad</p>
<p>Permite delimitar responsabilidades</p>
<p>Sirve como guía de seguridad</p>
<p>Da poder al equipo de seguridad para tomar decisiones impopulares</p>
<p>-&gt; Todo en la medida que las personas valores los documentos y no sean vistos como más papelitos para justificar un puesto</p>
<p><strong>Definición</strong></p>
<p>Riesgo -&gt; Valor de la información x vulnerabilidad</p>
<p>Risk Profile -&gt; Financiamiento</p>
<p>-&gt; El riesgo es algo subjetivo! la experiencia proporciona un primer estimado. Métodos formales objetivos son imprácticos.</p>
<p><strong>Oficial de Seguridad / Security Task Force</strong></p>
<p>Define la estrategia de seguridad (conjuntamente con Gerencia)</p>
<p>Definir política de seguridad corporativa</p>
<p>Definir políticas de seguridad para sistemas específicos</p>
<p>Campañas de involucramiento de usuarios</p>
<p>Interacción con auditores de seguridad</p>
<p>-&gt; Debe ser alguien que vive la seguridad, que respire el olor de los ataques, que disfrute la paranoia, que  conozca a fondo los sistemas.</p>
<p><strong>Niveles de Seguridad</strong></p>
<p>Unclassified -&gt; Accesible públicamente</p>
<p>Shared -&gt; Datos compartidos con personas de fuera de la organización</p>
<p>Company-only -&gt; Sólo miembros de la organización</p>
<p>Confidential -&gt; La persona debe estar en una lista de acceso</p>
<p>-&gt; Y quién define esto? hay tiempo para definirlo para cada pieza de información? para mantenerlo actualizado? (wikileaks!)</p>
<p><strong>Contenido de Política</strong></p>
<p>- Ámbito/alcance</p>
<p>- Validez</p>
<p>- Propietario</p>
<p>- Responsabilidades</p>
<p>- Documentación de soporte</p>
<p>- Especificaciones</p>
<p>- Condiciones y plazos de revisión</p>
<p>- Cumplimiento/consecuencias</p>
<p>-&gt; Deseable pero impráctico: mucha burocracia para mantener esto al día; lectura aburrida = pasa desapercibida</p>
<p><strong>Ámbitos a considerar (dominios)</strong></p>
<p>- Physical seurity</p>
<p>- Network security</p>
<p>- Access control</p>
<p>- Encryption</p>
<p>- Compliance</p>
<p>- Auditing and review</p>
<p>- Security awarness</p>
<p>- Incident response and disaster contingency plan</p>
<p>- Acceptable use policy</p>
<p>- Software security</p>
<p>- Key management</p>
<p>-&gt; Ver dominios ISO y norma técnica peruana. Está bien como para empezar a pensar.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D558&amp;t=Pol%C3%ADticas%20de%20Seguridad" id="facebook_share_button_558" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_558') || document.getElementById('facebook_share_icon_558') || document.getElementById('facebook_share_both_558') || document.getElementById('facebook_share_button_558');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_558') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=558</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Relación entre los valores de la salida de &quot;free&quot;</title>
		<link>http://americati.com/blog/?p=556</link>
		<comments>http://americati.com/blog/?p=556#comments</comments>
		<pubDate>Thu, 06 Jan 2011 20:22:35 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=556</guid>
		<description><![CDATA[Free permite obtener una estadística rápida de la memoria. $ free total used free shared buffers cached Mem: 3574884 2120140 1454744 0 124012 1112440 -/+ buffers/cache: 883688 2691196 Swap: 3540984 202188 3338796 Cuál es la relación entre estos valores? El siguiente diagrama puede ayudar: $ free total used free shared buffers cached Mem: T=U+F U [...]]]></description>
			<content:encoded><![CDATA[<p>Free permite obtener una estadística rápida de la memoria.</p>
<p><span id="more-556"></span></p>
<pre>
$ free
               total          used        free         shared    buffers     cached
Mem:       3574884    2120140    1454744          0     124012    1112440
-/+ buffers/cache:     883688     2691196
Swap:      3540984     202188    3338796
</pre>
<p>Cuál es la relación entre estos valores? El siguiente diagrama puede ayudar:</p>
<pre>
$ free
               total          used        free         shared    buffers     cached
Mem:       T=U+F       U              F             0           B            C
-/+ buffers/cache:      U-(B+C)    F+(B+C)
Swap:      ST=SU+SF  SU           SF
</pre>
<p>El sistema cuenta con "F" kb de memoria sin utilizar (este número nunca llega a ser cero.) U representa el espacio consumido, por lo que U+F debe corresponder al total de la memoria reconocida por el sistema operativo (la cual a su vez debería coincidir con la memoria física instalada, con ciertas consideraciones.)<br />
B+C es memoria dedicada a "caching", la cual no es estrictamente necesaria pero contribuye de manera sustancial a mejorar el rendimiento del sistema por lo que tiende a crecer y apropiarse de toda la memoria disponible (sin embargo, es liberada si un proceso lo requiere.) En ese sentido, no es una memoria "estrictamente consumida por los procesos", la cual corresponde a "U-(B+C)" (segunda línea.)<br />
La tercera línea corresponde al uso de las áreas swap configuradas. Este uso se incrementará en la medida que el espacio libre de la memoria se agote.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D556&amp;t=Relaci%C3%B3n%20entre%20los%20valores%20de%20la%20salida%20de%20%22free%22" id="facebook_share_button_556" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_556') || document.getElementById('facebook_share_icon_556') || document.getElementById('facebook_share_both_556') || document.getElementById('facebook_share_button_556');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_556') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=556</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrumpir threads bloqueados en una cola</title>
		<link>http://americati.com/blog/?p=554</link>
		<comments>http://americati.com/blog/?p=554#comments</comments>
		<pubDate>Sat, 30 Oct 2010 21:58:29 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=554</guid>
		<description><![CDATA[BlockingQueue no soporta esta funcionalidad. Para el caso de threads que están leyendo de la cola el método más recomendado es el "poison pill" (objeto que señala la necesidad de interrupir el proceso de lectura.) Esto no funciona para los threads bloqueados en el caso de escritura. Crearemos una implementación que contenga un método stop() [...]]]></description>
			<content:encoded><![CDATA[<p>BlockingQueue no soporta esta funcionalidad. Para el caso de threads que están leyendo de la cola el método más recomendado es el "poison pill" (objeto que señala la necesidad de interrupir el proceso de lectura.) Esto no funciona para los threads bloqueados en el caso de escritura.</p>
<p><span id="more-554"></span></p>
<p>Crearemos una implementación que contenga un método stop() el cual interrumpa todos los threads bloqueados y que además interrumpa automáticamente a cualquier thread que quisiera leer o escribir en el futuro (en mi opinión este comportamiento es muy útil.) En ese sentido, la cola queda en "estado detenido". A continuación una primera implementación:</p>
<p>public class StoppableArrayBlockingQueue&lt;E&gt; extends ArrayBlockingQueue&lt;E&gt; {</p>
<p>private final java.util.Set&lt;Thread&gt; threadSet = new java.util.HashSet&lt;Thread&gt;();</p>
<p>private volatile boolean shutdown = false;</p>
<p>public void stop() {</p>
<p>shutdown = true;</p>
<p>java.util.Iterator&lt;Thread&gt; it = threadSet.iterator();<br />
while(it.hasNext()) {<br />
Thread thread = it.next();<br />
it.remove();<br />
thread.interrupt();<br />
}<br />
}</p>
<p>public StoppableArrayBlockingQueue(int n) {<br />
super(n);<br />
}</p>
<p>@Override<br />
public void put(E e) throws InterruptedException {</p>
<p>if(shutdown) throw new InterruptedException("Cola detenida");<br />
threadSet.add(Thread.currentThread());<br />
super.put(e);<br />
threadSet.remove(Thread.currentThread());<br />
}</p>
<p>El código es bastante evidente; hemos sobrecargado a "put()" pero las ideas son similares para otros métodos de BlockingQueue. La variable "shutdown" requiere ser volatile para evitar problemas de visibilidad entre threads. Este código funcionará bien "casi siempre" pero puede presentar algunos problemas:</p>
<p>La iteración puede fallar si el threadSet es modificado concurrentemente. Esto se puede resolver sincronizando el loop así como las operaciones de agregado y eliminación contra el mismo threadSet.</p>
<p>El stop() puede ocurrir tras la consulta de "shutdown" pero antes del add(), en cuyo caso este thread nunca será interrumpido. Esto puede solucionarse sincronizando la consulta con la adición al Set:</p>
<p>@Override<br />
public void put(E e) throws InterruptedException {</p>
<p>synchronized(threadSet) {<br />
if(shutdown) {<br />
throw new InterruptedException("Queue is down");<br />
}</p>
<p>threadSet.add(Thread.currentThread());<br />
super.put(e);<br />
synchronized(threadSet) {<br />
threadSet.remove(Thread.currentThread());<br />
}</p>
<p>}</p>
<p>Puesto que los threads que utilizan "shutdown" están sincronizados al mismo objeto, esta variable ya no require ser "volatile".</p>
<p>Finalmente, si la interrupción llega tras el put()  pero antes del remove() entonces el thread retornará en estado interrumpido (el remove() no eliminará nada pero esto no da problemas.) Puesto que el método declara "throws InterruptedException" lo convencional será lanzar esta excepción si el thread se interrumpe, por lo cual haremos un test complementario:</p>
<p>synchronized(threadSet) {<br />
threadSet.remove(Thread.currentThread());<br />
}<br />
if(Thread.currentThread().isInterrupted()) {<br />
throw new InterruptedException("Queue is down");<br />
}</p>
<p>Notar que el análisis de estado del thread está tras el bloque sincronizado de remove(). Se podría colocar antes del remove() siempre y cuando esté dentro del bloque sincronizado:</p>
<p>synchronized(threadSet) {</p>
<p>if(Thread.currentThread().isInterrupted()) {<br />
throw new InterruptedException("Queue is down");<br />
}</p>
<p>threadSet.remove(Thread.currentThread());<br />
}</p>
<p>Si estuviera fuera del bloque, la interrupción podría ocurrir tras dicho análisis pero antes de aquél.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D554&amp;t=Interrumpir%20threads%20bloqueados%20en%20una%20cola" id="facebook_share_button_554" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_554') || document.getElementById('facebook_share_icon_554') || document.getElementById('facebook_share_both_554') || document.getElementById('facebook_share_button_554');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_554') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=554</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POTIX/ZK Partnership</title>
		<link>http://americati.com/blog/?p=552</link>
		<comments>http://americati.com/blog/?p=552#comments</comments>
		<pubDate>Sat, 30 Oct 2010 21:05:13 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=552</guid>
		<description><![CDATA[Desde  este mes AMERICATI es partner de POTIX como se puede apreciar en su sitio web. Para quien no conoce aún el poderoso framework ZK, lo invitamos a ver la fulgurante exposición de 20 segundos. Share]]></description>
			<content:encoded><![CDATA[<p>Desde  este mes AMERICATI es partner de POTIX como se puede apreciar<a href="http://www.zkoss.org/partner/"> en su sitio web</a>. Para quien no conoce aún el poderoso framework ZK, lo invitamos a ver la fulgurante <a href="http://www.zkoss.org/Steps/discover.dsp">exposición de 20 segundos</a>.</p>
<p><img class="aligncenter" title="ZK DIRECT RIA" src="http://www.zkoss.org/img/mainpic.jpg" alt="" width="676" height="296" /></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D552&amp;t=POTIX%2FZK%20Partnership" id="facebook_share_button_552" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_552') || document.getElementById('facebook_share_icon_552') || document.getElementById('facebook_share_both_552') || document.getElementById('facebook_share_button_552');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_552') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=552</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eliminar mensajes de arranque de Spring en pequeñas aplicaciones</title>
		<link>http://americati.com/blog/?p=549</link>
		<comments>http://americati.com/blog/?p=549#comments</comments>
		<pubDate>Sat, 09 Oct 2010 01:44:40 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=549</guid>
		<description><![CDATA[Al inicializar el contexto se muestra información muy valiosa pero que eventualmente molesta si el resultado deseado es algo muy breve en la consola. Spring requiere commons-logging, el cual a su vez utiliza log4j o JUL. Para aplicaciones pequeñas no justifica agregar log4j por lo que asumimos el uso (implícito) de JUL. Spring genera mensajes [...]]]></description>
			<content:encoded><![CDATA[<p>Al inicializar el contexto se muestra información muy valiosa pero que eventualmente molesta si el resultado deseado es algo muy breve en la consola.</p>
<p><span id="more-549"></span></p>
<p>Spring requiere commons-logging, el cual a su vez utiliza log4j o JUL. Para aplicaciones pequeñas no justifica agregar log4j por lo que asumimos el uso (implícito) de JUL. Spring genera mensajes informativos en el arranque del contexto. Para evitarlos, agregar esta línea antes de su inicialización:</p>
<p>Logger.getLogger("").setLevel(Level.WARNING);</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D549&amp;t=Eliminar%20mensajes%20de%20arranque%20de%20Spring%20en%20peque%C3%B1as%20aplicaciones" id="facebook_share_button_549" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_549') || document.getElementById('facebook_share_icon_549') || document.getElementById('facebook_share_both_549') || document.getElementById('facebook_share_button_549');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_549') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=549</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick WSDL generation from XSD schema</title>
		<link>http://americati.com/blog/?p=547</link>
		<comments>http://americati.com/blog/?p=547#comments</comments>
		<pubDate>Sat, 09 Oct 2010 00:17:54 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=547</guid>
		<description><![CDATA[A Standalone application using Spring WS /* following the spring-ws conventions for the creation of endpoints */ package com.mycompany.hr.ws; import java.io.StringWriter; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import org.springframework.core.io.Resource; import org.springframework.core.io.FileSystemResource; import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition; import org.springframework.xml.xsd.SimpleXsdSchema; public class Prueba { public static void main(String[] args) throws Exception { new Prueba(); } public Prueba() throws [...]]]></description>
			<content:encoded><![CDATA[<p>A Standalone application using Spring WS</p>
<p><span id="more-547"></span></p>
<p>/* following the spring-ws conventions for the creation of endpoints */</p>
<p>package com.mycompany.hr.ws;</p>
<p>import java.io.StringWriter;</p>
<p>import javax.xml.transform.Source;<br />
import javax.xml.transform.Transformer;<br />
import javax.xml.transform.TransformerFactory;<br />
import javax.xml.transform.stream.StreamResult;</p>
<p>import org.springframework.core.io.Resource;<br />
import org.springframework.core.io.FileSystemResource;<br />
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;<br />
import org.springframework.xml.xsd.SimpleXsdSchema;</p>
<p>public class Prueba {</p>
<p>public static void main(String[] args) throws Exception {<br />
new Prueba();<br />
}<br />
public Prueba() throws Exception {<br />
Resource s = new FileSystemResource(new java.io.File("/tmp/my-schema.xsd"));</p>
<p>SimpleXsdSchema sxs = new SimpleXsdSchema();<br />
sxs.setXsd(s);<br />
sxs.afterPropertiesSet();<br />
DefaultWsdl11Definition d = new DefaultWsdl11Definition();<br />
d.setSchema(sxs);<br />
d.setPortTypeName("Poporoto");<br />
d.afterPropertiesSet();<br />
Source src = d.getSource();<br />
StringWriter sw = new StringWriter();<br />
StreamResult result = new StreamResult(sw);</p>
<p>TransformerFactory transfac = TransformerFactory.newInstance();<br />
Transformer trans = transfac.newTransformer();<br />
trans.transform(src, result);<br />
System.out.println(sw.toString());<br />
}<br />
}</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D547&amp;t=Quick%20WSDL%20generation%20from%20XSD%20schema" id="facebook_share_button_547" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_547') || document.getElementById('facebook_share_icon_547') || document.getElementById('facebook_share_both_547') || document.getElementById('facebook_share_button_547');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_547') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=547</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validando un esquema XSD</title>
		<link>http://americati.com/blog/?p=545</link>
		<comments>http://americati.com/blog/?p=545#comments</comments>
		<pubDate>Fri, 08 Oct 2010 16:48:23 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=545</guid>
		<description><![CDATA[Tenemos un esquema.xsd. Estará bien escrito? Caso de muestra: &#60;?xml version="1.0" encoding="UTF-8"?&#62; &#60;xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"&#62; &#60;xs:complexType name="sumandosType"&#62; &#60;xs:sequence&#62; &#60;xs:element name="sumando" maxOccurs="unbounded" minOccurs="0"&#62; &#60;xs:simpleType&#62; &#60;xs:restriction base="xs:float"&#62; &#60;xs:minInclusive value="0.0"/&#62; &#60;xs:manInclusive value="1000.0"/&#62; &#60;/xs:restriction&#62; &#60;/xs:simpleType&#62; &#60;/xs:element&#62; &#60;/xs:sequence&#62; &#60;/xs:complexType&#62; &#60;/xs:schema&#62; Xmlstarlet al rescate: $ xmlstarlet val esquema.xsd esquema.xsd - valid Esto demuestra que el esquema es válido desde el [...]]]></description>
			<content:encoded><![CDATA[<p>Tenemos un esquema.xsd. Estará bien escrito?</p>
<p><span id="more-545"></span></p>
<p>Caso de muestra:</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;<br />
&lt;xs:complexType name="sumandosType"&gt;<br />
&lt;xs:sequence&gt;<br />
&lt;xs:element name="sumando" maxOccurs="unbounded" minOccurs="0"&gt;<br />
&lt;xs:simpleType&gt;<br />
&lt;xs:restriction base="xs:float"&gt;<br />
&lt;xs:minInclusive value="0.0"/&gt;<br />
&lt;xs:manInclusive value="1000.0"/&gt;<br />
&lt;/xs:restriction&gt;<br />
&lt;/xs:simpleType&gt;<br />
&lt;/xs:element&gt;<br />
&lt;/xs:sequence&gt;<br />
&lt;/xs:complexType&gt;<br />
&lt;/xs:schema&gt;</p>
<p>Xmlstarlet al rescate:</p>
<p>$ xmlstarlet val esquema.xsd<br />
esquema.xsd - valid</p>
<p>Esto demuestra que el esquema es válido desde el punto de vista de un documento XML, pero no desde el punto de vista de que se trata de un esquema. Para esto podemos utilizar:</p>
<p>xmlstarlet val -e -s http://www.w3.org/2001/XMLSchema.xsd esquema.xsd<br />
esquema.xsd:9: element manInclusive: Schemas validity error : Element '{http://www.w3.org/2001/XMLSchema}manInclusive': This element is not expected.<br />
esquema.xsd - invalid</p>
<p>AJA! a corregir manInclusive (cambiar por maxInclusive.)</p>
<p>El problema de esto es que estamos forzando a xmlstarlet a consultar el esquema del esquema al website de W3. Podemos descargar el esquema a fin de hacer la validación localmente. Asimismo, necesitamos descargar el esquema xml:</p>
<p>wget http://www.w3.org/2001/XMLSchema.xsd</p>
<p>wget http://www.w3.org/2001/xml.xsd</p>
<p>Y modificar el XMLSchema.xsd para  que su schemaLocation apunte a nuestro xml.xsd local (puesto que normalmente apunta al archivo en el web server de W3):</p>
<p>...</p>
<p>&lt;/xs:annotation&gt;<br />
&lt;xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation=<strong>"xml.xsd"</strong>&gt;<br />
&lt;xs:annotation&gt;<br />
...</p>
<p>Ahora nuestra validación es más veloz y no dependemos de un sitio web externo:</p>
<p>xmlstarlet val -e -s XMLSchema.xsd esquema.xsd</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D545&amp;t=Validando%20un%20esquema%20XSD" id="facebook_share_button_545" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_545') || document.getElementById('facebook_share_icon_545') || document.getElementById('facebook_share_both_545') || document.getElementById('facebook_share_button_545');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_545') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=545</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notas en programación móvil</title>
		<link>http://americati.com/blog/?p=542</link>
		<comments>http://americati.com/blog/?p=542#comments</comments>
		<pubDate>Tue, 28 Sep 2010 01:18:42 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=542</guid>
		<description><![CDATA[Sólo ideas sueltas... Mercado fragmentado: WinME? sólo para fanáticos de Windows; fracaso tras fracaso, pero esto no impide que algún día den en el blanco. HP/Palm? por aquí ya no suena. Apple? a comprar Macs y aprender Objective-C. Y por supuesto, el $dolor$ de comprar los iPhones. Blackberry? mercado pequeño aunque pudiente, sin embargo despierta [...]]]></description>
			<content:encoded><![CDATA[<p>Sólo ideas sueltas...</p>
<p><span id="more-542"></span></p>
<p>Mercado fragmentado: WinME? sólo para fanáticos de Windows; fracaso tras fracaso, pero esto no impide que algún día den en el blanco. HP/Palm? por aquí ya no suena. Apple? a comprar Macs y aprender Objective-C. Y por supuesto, el $dolor$ de comprar los iPhones. Blackberry? mercado pequeño aunque pudiente, sin embargo despierta poco interés a futuro. J2ME? aún no hay SDK para MIDP 3.0 en Linux aunque pocos celulares lo soportan todavía; no despierta interés pero vence en ubicuidad. Android? algún día llegarán estos teléfonos, pero google es cool. Symbian? nunca más C++ (en todo caso incluirlo dentro del J2ME); Samsung bada-bada-bada? ...sobrevivirá un año más?</p>
<p>Por lo pronto ya funcionan nuestros prototipos descargables desde la web.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D542&amp;t=Notas%20en%20programaci%C3%B3n%20m%C3%B3vil" id="facebook_share_button_542" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_542') || document.getElementById('facebook_share_icon_542') || document.getElementById('facebook_share_both_542') || document.getElementById('facebook_share_button_542');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_542') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=542</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial y Guía Breve del Comando Sed para Unix y Linux</title>
		<link>http://americati.com/blog/?p=538</link>
		<comments>http://americati.com/blog/?p=538#comments</comments>
		<pubDate>Thu, 23 Sep 2010 14:20:40 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=538</guid>
		<description><![CDATA[Publicado originalmente el 14 de Noviembre de 2006. [Descargar versión PDF] Tabla de contenidos Resumen Autoría y Copyright Revisiones Introducción Uso básico Conociendo la operación de sed Ejecutar un "script" de sed: opción -f Cómo opera sed internamente Condiciones para ejecución de comandos sed Comandos de sed Ejemplos de Sed Substituciones simples: Cambiar Ajos por [...]]]></description>
			<content:encoded><![CDATA[<div title="Tutorial y Guía Breve del Comando Sed para Unix y Linux" lang="es">
<div>
<div>
<div>
<h2><strong>Publicado originalmente el 14 de Noviembre de 2006. <a href="http://americati.com/blog/wp-content/uploads/2010/09/sed.pdf">[Descargar versión PDF]</a><br />
</strong></h2>
</div>
<p><span id="more-538"></span><strong>Tabla de contenidos</strong></p>
</div>
</div>
<div>
<dl>
<dt><a> Resumen </a></dt>
<dd>
<dl>
<dt><a> Autoría y Copyright </a></dt>
<dt><a> Revisiones </a></dt>
</dl>
</dd>
<dt><a> Introducción </a></dt>
<dd>
<dl>
<dt><a> Uso básico </a></dt>
</dl>
</dd>
<dt><a> Conociendo la operación de <code>sed</code> </a></dt>
<dd>
<dl>
<dt><a> Ejecutar un "script" de <code>sed</code>: opción -f </a></dt>
<dt><a> Cómo opera <code>sed</code> internamente </a></dt>
<dt><a> Condiciones para ejecución de comandos <code>sed</code> </a></dt>
<dt><a> Comandos de <code>sed</code> </a></dt>
</dl>
</dd>
<dt><a> Ejemplos de <code>Sed</code> </a></dt>
<dd>
<dl>
<dt><a> Substituciones simples: Cambiar Ajos por Frijoles </a></dt>
<dt><a> Usando comandos avanzados </a></dt>
</dl>
</dd>
</dl>
</div>
<div title="Resumen">
<div>
<div>
<div>
<h2><a name="id2509124"></a> Resumen</h2>
</div>
</div>
</div>
<p>Este documento pretende proporcionar una visión general y comentar algunos aspectos interesantes del popular comando "<code>sed</code>" disponible en prácticamente todos los sistemas Unix y Linux. Para varios ejemplos se asume que el lector ya conoce el lenguaje de expresiones regulares.</p>
<div title="Autoría y Copyright">
<div>
<div>
<div>
<h3><a name="id2549343"></a> Autoría y Copyright</h3>
</div>
</div>
</div>
<p>Este documento tiene copyright (c) 2006 AmericaTI EIRL (www.americati.com.) Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la "GNU Free Documentation License, Version 1.2", excepto en lo mencionado en el siguiente párrafo. Esta licencia puede obtenerse en: <a href="http://www.gnu.org/licenses/fdl.txt" target="_top">http://www.gnu.org/licenses/fdl.txt</a></p>
<p>Si se desea crear un trabajo derivado o publicar este documento para cualquier propósito, por favor contactarnos (vía nuestra página web) a fin de tener la oportunidad de proporcionar una versión más reciente. De no ser esto posible, la última versión debería estar disponible en el sitio web <a href="http://www.americati.com/" target="_top">AmericaTI.com.</a></p>
<p>Son bienvenidas todas las sugerencias y correcciones.</p>
<p>Este documento fue confeccionado con DocBook utilizando el preprocesador <strong>Qdk</strong> disponible en <a href="http://qdk.sourceforge.net/" target="_top">SourceForge.net.</a></p>
</div>
<div title="Revisiones">
<div>
<div>
<div>
<h3><a name="id2509174"></a> Revisiones</h3>
</div>
</div>
</div>
<div>
<ul type="disc">
<li>0.1 2006-10-11 Primera versión preliminar</li>
<li>0.2 2007-01-24 Ejemplos de comandos avanzados</li>
<li>0.3 2007-03-26 Agregados dos ejemplos</li>
</ul>
</div>
</div>
</div>
<div title="Introducción">
<div>
<div>
<div>
<h2><a name="id2509210"></a> Introducción</h2>
</div>
</div>
</div>
<p>Sed es considerado un editor de texto orientado a "flujo" (en contraposición a los clásicos editores "interactivos) el cual acepta como entrada un archivo o la entrada estándar; cada línea es procesada y el resultado es enviado a la salida estándar.</p>
<p>Para casos muy simples, se suele emplear la sintaxis:</p>
<pre>sed comandos_sed archivo</pre>
<p>donde "<code>comandos_sed</code>" corresponde a uno o más especificaciones acerca de qué hacer con las líneas que se leen desde "<code>archivo</code>"<sup>[<a name="id2507096">1</a>]</sup>.</p>
<div title="Uso básico">
<div>
<div>
<div>
<h3><a name="id2507112"></a> Uso básico</h3>
</div>
</div>
</div>
<p>Tal vez la manera más simple de iniciarse en <code>sed</code> es mediante ejemplos:</p>
<div title="Borrar la segunda línea">
<div>
<div>
<div>
<h4><a name="id2507131"></a> Borrar la segunda línea</h4>
</div>
</div>
</div>
<pre>$ cat rata
1
2
3
4
5
6
$ sed '2d' rata
1
3
4
5
6</pre>
<p>Como se aprecia, tenemos un archivo de texto tremendamente simple conteniendo seis líneas. Al ejecutar <code>sed</code> cada línea es sometida a los "comandos <code>sed</code>". En este caso, el único comando es "d" referido a la línea número dos (la cual contiene un "2".) Este comando elimina la línea en cuestión, mientras que el resto de líneas no es alterado y por omisión se envían a <code>stdout</code>.</p>
</div>
<div title="Imprimir una línea">
<div>
<div>
<div>
<h4><a name="id2507181"></a> Imprimir una línea</h4>
</div>
</div>
</div>
<pre>$ sed '2p' rata
1
2
2
3
4
5
6</pre>
<p>En este ejemplo hemos solicitado la impresión (comando "p") de la línea número dos. Debido a que por omisión las líneas que ingresan son a la vez enviadas a <code>stdout</code>, resulta que la segunda línea es mostrada en dos oportunidades. Obviamente esto no suele ser lo más útil; en el siguiente ejemplo desactivaremos la "impresión automática" de las líneas con la opción "-n":</p>
<pre>$ sed -n '2p' rata
2</pre>
</div>
<div title="Modificar líneas">
<div>
<div>
<div>
<h4><a name="id2507227"></a> Modificar líneas</h4>
</div>
</div>
</div>
<p>El comando de substitución "s" permite modificar líneas:</p>
<pre>$ sed 's/5/t/' rata
1
2
3
4
t
6</pre>
<p>El comando "s" recibe un "patrón de búsqueda" y un texto de reemplazo. En el ejemplo anterior hemos buscado el texto "5" (en todas las líneas) y éste ha sido reemplazado por la letra "t" (podría ser cualquier texto.)</p>
<p>El amperstand (&amp;) se utiliza para reemplazar con "el texto hallado":</p>
<pre>$ sed 's/5/&amp;t/' rata
1
2
3
4
5t
6</pre>
<p>En este caso, el texto hallado es un "5" por lo que el amperstand contiene este mismo valor. Así, el reemplazar con "&amp;t" equivale a reemplazar con "5t". Esto realmente tiene utilidad cuando se utiliza una expresión regular:</p>
<pre>$ sed 's/[2-5]/&amp;t/' rata
1
2t
3t
4t
5t
6</pre>
<p>En este caso el "texto hallado" toma respectivamente los valores "2", "3", "4" y "5", el cual es asumido por el amperstand, con lo que el reemplazo real es respectivamente "2t", "3t", "4t" y "5t".</p>
<p>Otro ejemplo muy similar:</p>
<pre>$ sed 's/.*/&amp;00/' rata
100
200
300
400
500
600</pre>
</div>
</div>
</div>
<div title="Conociendo la operación de sed">
<div>
<div>
<div>
<h2><a name="id2507311"></a> Conociendo la operación de <code>sed</code></h2>
</div>
</div>
</div>
<div title="Ejecutar un &quot;script&quot; de sed: opción -f">
<div>
<div>
<div>
<h3><a name="id2507326"></a> Ejecutar un "script" de <code>sed</code>: opción -f</h3>
</div>
</div>
</div>
<p>En todos los ejemplos anteriores, hemos proporcionado un argumento en la línea de comandos que especificaba lo que deseábamos que <code>sed</code> realice ("los comandos <code>sed</code>".) En casos más sofisticados es usual utilizar un archivo de "script <code>sed</code>" que contenga los "comandos <code>sed</code>" a ejecutarse (especificado con la opción "-f".) Por ejemplo, en lugar de:</p>
<pre>$ cat rata
1
2
3
4
5
6
$ sed -n '2p' rata
2</pre>
<p>Podemos emplear un archivo auxiliar de "script":</p>
<pre>$ cat prueba1.sed
2p
$ sed -n -f prueba1.sed rata
2</pre>
</div>
<div title="Cómo opera sed internamente">
<div>
<div>
<div>
<h3><a name="id2509402"></a> Cómo opera <code>sed</code> internamente</h3>
</div>
</div>
</div>
<p>Se utilizan dos buffers en memoria: el "espacio de patrones" y el "espacio hold". Ambos inicialmente están vacíos.</p>
<p>El programa <code>sed</code> lee una línea de texto de la entrada y la deposita en el "espacio de patrones" (sin el "fin de línea" final.) A continuación se ejecutan los "comandos <code>sed</code>" que correspondan (que satisfacen ciertas condiciones) y finalmente el texto del "espacio de patrones" se envía a la salida estándar seguido por un "fin de línea" (excepto si se utiliza la opción "-n".) Este proceso se repite para todas las líneas de la entrada.</p>
<p>Como se aprecia, el contenido del "espacio de patrones" se pierde entre línea y línea de la entrada; por el contrario, el "espacio hold" se mantiene.</p>
</div>
<div title="Condiciones para ejecución de comandos sed">
<div>
<div>
<div>
<h3><a name="id2509463"></a> Condiciones para ejecución de comandos <code>sed</code></h3>
</div>
</div>
</div>
<div title="Direccionar líneas">
<div>
<div>
<div>
<h4><a name="id2509478"></a> Direccionar líneas</h4>
</div>
</div>
</div>
<p>Existen dos métodos estándar:</p>
<div>
<ul type="disc">
<li>NUMERO: Un número corresponde a la línea de la entrada cuya posición corresponde al mismo ("$" significa la última línea)</li>
<li>/REGEXP/: Corresponde a las líneas que satisfacen la expresión regular especificada</li>
</ul>
</div>
<p>Si no se especifica una dirección, se asume que el comando aplicará sobre todas las líneas.</p>
</div>
<div title="Rangos">
<div>
<div>
<div>
<h4><a name="id2509524"></a> Rangos</h4>
</div>
</div>
</div>
<p>Tienen la forma:</p>
<pre>dirección1,dirección2</pre>
<p>Corresponde a aquellas líneas que se inician apenas se satisfaga la "dirección1" y termina apenas se satisfaga "dirección2".</p>
<p>Ejemplo:</p>
<pre>$ cat rata
1
2
3
4
5
6
$ sed -n '/[23]/,/[56]/p' rata
2
3
4
5</pre>
</div>
</div>
<div title="Comandos de sed">
<div>
<div>
<div>
<h3><a name="id2509563"></a> Comandos de <code>sed</code></h3>
</div>
</div>
</div>
<div title="Comentario: #">
<div>
<div>
<div>
<h4><a name="id2509577"></a> Comentario: #</h4>
</div>
</div>
</div>
<p>Este comando se debería emplear sólo en la primera línea de un script de sed (por portabilidad):</p>
<pre>$ cat prueba2.sed
# Un ejemplo sed
/[23]/,/[56]/p
$ sed -n -f prueba2.sed rata
2
3
4
5</pre>
<p>Este comando no acepta condiciones de línea.</p>
</div>
<div title="Terminar: q">
<div>
<div>
<div>
<h4><a name="id2509609"></a> Terminar: q</h4>
</div>
</div>
</div>
<p>Este comando termina el script en la línea cuya condición se  satisface. Opcionalmente recibe un argumento numérico correspondiente al valor de retorno (por omisión es cero.)</p>
<pre>$ cat prueba3.sed
# Un ejemplo sed
/[23]/,/[56]/p
4q 10
$ sed -n -f prueba3.sed rata
2
3
4
$ echo $?
10</pre>
</div>
<div title="Borrar espacio de patrones: d">
<div>
<div>
<div>
<h4><a name="id2507648"></a> Borrar espacio de patrones: d</h4>
</div>
</div>
</div>
<p>Este comando borra el espacio de patrones e inmediatamente pasa a la siguiente línea de entrada.</p>
<pre>$ cat prueba4.sed
# Un ejemplo sed
/[23]/,/[56]/d
diego@rat:~/escritos/sed$ sed -f prueba4.sed rata
1
6</pre>
</div>
<div title="Imprimir el espacio de patrones: p">
<div>
<div>
<div>
<h4><a name="id2507672"></a> Imprimir el espacio de patrones: p</h4>
</div>
</div>
</div>
<p>Generalmente se usa con la opción "-n". Se ha mostrado en gran cantidad de ejemplos.</p>
</div>
<div title="Agrupar comandos: { ... }">
<div>
<div>
<div>
<h4><a name="id2507688"></a> Agrupar comandos: { ... }</h4>
</div>
</div>
</div>
<p>Esto permite ejecutar un conjunto de comandos en relación a una misma condición de línea:</p>
<pre>$ cat prueba5.sed
# Un ejemplo sed
/[23]/,/[56]/{
p
p
}
$ sed -n -f prueba5.sed rata
2
2
3
3
4
4
5
5</pre>
</div>
<div title="Hacer substituciones: s/regexp/reemplazo/[opciones]">
<div>
<div>
<div>
<h4><a name="id2507715"></a> Hacer substituciones: s/regexp/reemplazo/[opciones]</h4>
</div>
</div>
</div>
<p>El "espacio de patrones" es analizado en búsqueda de la expresión regular "<code>regexp</code>". De ocurrir, ésta es reemplazada con "<code>reemplazo</code>". Si se proporciona la opción "g", este proceso se repite con todas las ocurrencias de "<code>regexp</code>" en el "espacio de patrones" (en caso contrario, sólo ocurre un reemplazo.) Finalmente, la opción "p" envía el "espacio de patrones" resultante a la salida estándar siempre que haya ocurrido reemplazo.</p>
<p>El caracter "&amp;" en "<code>reemplazo</code>" equivale al texto de entrada que ha encajado con la expresión regular.</p>
<p>Ejemplo:</p>
<pre>$ cat prueba6.sed
# Un ejemplo sed
/[23]/,/[56]/s/.*/x/p
1s/.*/a&amp;b/p
$ sed -n -f prueba6.sed rata
a1b
x
x
x
x</pre>
<p>Ejemplo:</p>
<pre>$ cat raton
estaba la rana cantando
debajo del agua
diego@rat:~/escritos/sed$ cat prueba7.sed
# Un ejemplo sed
1s/a/x/g
2s/a/x/
diego@rat:~/escritos/sed$ sed -f prueba7.sed raton
estxbx lx rxnx cxntxndo
debxjo del agua</pre>
</div>
<div title="Grabar en archivo: w">
<div>
<div>
<div>
<h4><a name="id2507803"></a> Grabar en archivo: w</h4>
</div>
</div>
</div>
<p>Este comando graba el contenido del "espacio de patrones" en el archivo especificado. En la primera ejecución el archivo es truncado (en el ejemplo, apreciar que el contenido original de <code>salida.txt</code> desaparece.)</p>
<pre>$ cat salida.txt
xxx
$ cat prueba8.sed
# Un ejemplo sed
/[23]/,/[56]/{p
w salida.txt
}
$ sed -n -f prueba8.sed rata
2
3
4
5
$ cat salida.txt
2
3
4
5</pre>
</div>
<div title="El &quot;espacio hold&quot;">
<div>
<div>
<div>
<h4><a name="id2507840"></a> El "espacio hold"</h4>
</div>
</div>
</div>
<p>Estos comandos son algo extraños. Ver los ejemplos más adelante.</p>
<div>
<dl>
<dt>x </dt>
<dd>Intercambiar el contenido del "espacio hold" con el del "espacio de patrones"</p>
</dd>
<dt>g </dt>
<dd>Transferir el contenido del "espacio hold" hacia el del "espacio de patrones"</p>
</dd>
<dt>h </dt>
<dd>Transferir el contenido del "espacio de patrones" hacia el del "espacio hold"</p>
</dd>
<dt>G </dt>
<dd>Agregar un "fin de línea" al contenido del "espacio de patrones" y a continuación agregarle el contenido del "espacio hold"</p>
</dd>
<dt>H </dt>
<dd>Agregar un "fin de línea" al contenido del "espacio hold" y a continuación agregarle el contenido del "espacio de patrones"</p>
</dd>
</dl>
</div>
</div>
<div title="Otros comandos">
<div>
<div>
<div>
<h4><a name="id2507919"></a> Otros comandos</h4>
</div>
</div>
</div>
<div>
<dl>
<dt>P </dt>
<dd>Imprimir el contenido del "espacio de patrones" hasta antes del primer "fin de línea"</p>
</dd>
<dt>N </dt>
<dd>Agregar un "fin de línea" al "espacio de patrones" y a continuación agregar el contenido de la siguiente línea de la entrada</p>
</dd>
<dt>D </dt>
<dd>Borrar caracteres en el "espacio de patrones" hasta el primer "fin de  línea". Si no queda ningún contenido, reiniciar un ciclo normal; de lo  contrario, el ciclo se reinicia con el contenido actual</p>
</dd>
<dt>: etiq </dt>
<dd>Permite especificar una "etiqueta" a continuación del ":"</p>
</dd>
<dt>b etiq </dt>
<dd>Genera un salto en la ejecución del script hacia la etiqueta especificada</p>
</dd>
<dt>t etiq </dt>
<dd>Genera un salto sólo si ha ocurrido una substitución exitosa en la última línea leída</p>
</dd>
<dt>y/s1/s2/ </dt>
<dd>Traduce los caracteres listados en 's1' a los listados en 's2'. Estos conjuntos de caracteres deben ser del mismo tamaño</p>
</dd>
</dl>
</div>
</div>
</div>
</div>
<div title="Ejemplos de Sed">
<div>
<div>
<div>
<h2><a name="id2559028"></a> Ejemplos de <code>Sed</code></h2>
</div>
</div>
</div>
<div title="Substituciones simples: Cambiar Ajos por Frijoles">
<div>
<div>
<div>
<h3><a name="id2559042"></a> Substituciones simples: Cambiar Ajos por Frijoles</h3>
</div>
</div>
</div>
<p>Pretendemos intercambiar los ajos por frijoles en el siguiente texto:</p>
<pre>$ cat ajos.txt
El trabajo dignifica al hombre
Las semillas del ajo tienen un fuerte olor a ajo
Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos</pre>
<p>La substitución simple obviamente no funciona:</p>
<pre>$ cat ajos1.sed
$ sed -f ajos1.sed ajos.txt
El trabfrijol dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrfrijolsa, el pueblo de Doña Perfecta
Le rebfrijol el kilo de frijols</pre>
<p>Para ubicar "ajo" como una palabra independiente, podemos auxiliarnos de los espacios en blanco separadores:</p>
<pre>$ cat ajos2.sed
s/ ajo / frijol /g
$ sed -f ajos2.sed ajos.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a ajo
Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos</pre>
<p>El resultado es mejor, pero se puede mejorar. Por ejemplo, el "ajo" de la segunda línea no es intercambiado por no tener un espacio en blanco a continuación. El patrón " ajo$" podría ubicarlo, y de forma complementaria, deberíamos incluir el patrón "^ajo ":</p>
<pre>$ cat ajos3.sed
s/ ajo / frijol /g
s/ ajo$/ frijol/
s/^ajo /frijol /
$ sed -f ajos3.sed ajos.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos</pre>
<p>Observar que en estos casos no es necesario el sufijo "g" en el comando "s".</p>
<p>El "Ajo" de la cuarta línea no ha sido reemplazado por inicarse con una "A" mayúscula. Podemos corregirlo con facilidad:</p>
<pre>$ cat ajos4.sed
s/ ajo / frijol /g
s/ ajo$/ frijol/
s/^ajo /frijol /
s/ Ajo / Frijol /g
s/ Ajo$/ Frijol/
s/^Ajo /Frijol /
$ sed -f ajos4.sed ajos.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Frijol para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos</pre>
<p>Los "ajos" en plural de la última línea se pueden procesar de un modo similar:</p>
<pre>$ cat ajos5.sed
s/ ajo / frijol /g
s/ ajo$/ frijol/
s/^ajo /frijol /
s/ Ajo / Frijol /g
s/ Ajo$/ Frijol/
s/^Ajo /Frijol /
s/ ajos / frijoles /g
s/ ajos$/ frijoles/
s/^ajos /frijoles /
s/ Ajos / Frijoles /g
s/ Ajos$/ Frijoles/
s/^Ajos /Frijoles /
$ sed -f ajos5.sed ajos.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Frijol para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de frijoles</pre>
</div>
<div title="Usando comandos avanzados">
<div>
<div>
<div>
<h3><a name="id2559187"></a> Usando comandos avanzados</h3>
</div>
</div>
</div>
<div title="Saltos">
<div>
<div>
<div>
<h4><a name="id2559195"></a> Saltos</h4>
</div>
</div>
</div>
<p>El siguiente script permite invertir el orden de los caracteres de cada línea (en el ejemplo, provenientes de la entrada estándar.)</p>
<pre>$ sed -f rever.sed
123456
654321
abracadabra
arbadacarba
$ cat rever.sed
s/^.*$/&amp;\n/
:n
s/^<span class='MathJax_Preview'>\([^\n]\)</span><span class='MathJax_Preview'>\(.*\)</span>\n<span class='MathJax_Preview'>\(.*\)</span>$/\2\n\1\3/
tn
s/\n//</pre>
<p>El script hace uso de expresiones regulares agregando un separador artificial (un salto de línea) al final de cada una de éstas; luego se crea un "loop" entre el ":n" (etiqueta) y el "tn" (saltar a etiqueta "n" si la substitución fue exitosa); cada substitución lleva un caracter del inicio hacia después del salto de línea; este caracter del inicio debe ser distinto del salto de línea a fin de que la substitución falle cuando cuando se hayan desplazado todos los caracteres.</p>
<p>Tras salir del loop, una última substitución elimina el salto de línea agregado.</p>
</div>
<div title="Unir líneas de entrada">
<div>
<div>
<div>
<h4><a name="id2559244"></a> Unir líneas de entrada</h4>
</div>
</div>
</div>
<p>Tenemos un archivo correspondiente a un catálogo de libros:</p>
<pre>cat libros.txt
Archivo de Libros

--------------

La abeja Maya

Un cuento de insectos y arácnidos

--------------

Los perros hambrientos
Un clásico de Ciro alegría
--------------

Cien años de soledad
Quién no lo conoce?
La mejor época de GGM
con Macondo, Melquiades, y otros</pre>
<p>Como se aprecia, la estructura corresponde a un grupo de guiones que separan cada entrada; luego de los guiones hay una línea en blanco, y la siguiente línea contiene el título de cada libro. El siguiente script extrae los títulos:</p>
<pre>$ cat libros.sed
/^-------/{
N
N
s/<span class='MathJax_Preview'>\(.*\)</span>\n<span class='MathJax_Preview'>\(.*\)</span>\n<span class='MathJax_Preview'>\(.*\)</span>/\3/
p
}
$ sed -n -f libros.sed libros.txt
La abeja Maya
Los perros hambrientos
Cien años de soledad</pre>
<p>La primera línea busca líneas con guiones; para cada una de éstas, se procede a agregar (al buffer de patrones) el contenido de las dos líneas que siguen (con un salto de línea intermedio) mediante el comando <code>N</code>. Finalmente, la substitución separa el buffer de patrones en tres expresiones regulares separadas por saltos de línea y lo substituye por el tercero de éstos (la última línea leída, el título.) Finalmente, el resultado se imprime con 'p' (que a la sazón agrega un conveniente salto de línea.)</p>
</div>
<div title="Mostrar la antepenúltima línea de un archivo">
<div>
<div>
<div>
<h4><a name="id2559316"></a> Mostrar la antepenúltima línea de un archivo</h4>
</div>
</div>
</div>
<p>Como primer paso, el script que se muestra a continuación se limita a imprimir las últimas tres líneas de un archivo:</p>
<pre>$ sed -n -f ultimos.sed libros.txt
Quién no lo conoce?
La mejor época de GGM
con Macondo, Melquiades, y otros
$ cat ultimos.sed
H
g
3,${ s/[^\n]*\n// ; h }
$p</pre>
<p>Los comandos "H" y "g" se ejecutan para todas las líneas. En el primer caso, el espacio "hold" va acumulando las líneas leídas (el espacio de patrones) separadas por saltos de línea; a continuación, el comando "g" transfiere esta acumulación al espacio de patrones. Para las primeras tres lineas no se hace nada más.</p>
<p>En las subsiguientes líneas, la substitución elimina la línea más "antigua" que se encuentra al principio del espacio de patrones, y es copiada nuevamente al espacio hold con "h". En otras palabras, el espacio hold va acumulando una "ventana" de tres líneas a través del archivo. Al procesarse a la última línea, el contenido del buffer de patrones (que coincide con el de hold) se imprime.</p>
<p>Con una ligera variación obtedremos la antepenúltima línea buscada:</p>
<pre>$ sed -n -f antepenultimo.sed libros.txt
Quién no lo conoce?
$ cat antepenultimo.sed
H
g
3,${ s/[^\n]*\n// ; h }
${ s/<span class='MathJax_Preview'>\([^\n]*\)</span>.*/\1/ ; p }</pre>
<p>La única diferencia radica en que al procesarse la última línea, la substitución deja únicamente la primera línea de la "ventana" en el buffer de patrones; esta coincide con la antepenúltima.</p>
</div>
<div title="Subrayar la primera línea de un archivo">
<div>
<div>
<div>
<h4><a name="id2559400"></a> Subrayar la primera línea de un archivo</h4>
</div>
</div>
</div>
<p>Cierto comando produce el siguiente listado (no importa el comando, sólo tome en cuenta la salida):</p>
<pre>$ echo "show databases" | mysql -u pafuser
Database
information_schema
ktest
mysql
paftest
sugarcrm
superapof</pre>
<p>Como debe sospechar, se trata de un listado de "bases de datos", lo cual es indicado en la primera línea de la salida con la palabra "Database"; es evidente que esta primera línea corresponde al "título" de dicha salida, y podríamos "subrayarlo" para hacerlo notar mejor:</p>
<pre>$ echo "show databases" | mysql -u pafuser | sed -f subrayado.sed
Database
--------
information_schema
ktest
mysql
paftest
sugarcrm
superapof</pre>
<p>El script <code>sed</code> es muy sencillo:</p>
<pre>cat subrayado.sed
# subrayar la primera linea
1{h
s/./-/g
H
g
}</pre>
<p>Todo ocurre exclusivamente al leer la primera línea (y sólo la primera.) La línea leída (en el espacio de patrones) se copia al buffer "hold" con el comando 'h'; luego cada caracter del buffer de patrones es reemplazado por un guión o dash ("-") de modo tal que el subrayado encaje perfectamente con la longitud del título. Después agregamos "el subrayado" del espacio de patrones a la primera línea (en el buffer hold) mediante el comando "H" (ahora el espacio hold contiene la primera línea subrayada); finalmente transferimos el espacio hold al espacio de patrones con el comando "g" (también se pudo usar "x" puesto que el espacio hold ya no se va a utilizar.)</p>
</div>
<div title="Dos columnas">
<div>
<div>
<div>
<h4><a name="id2559465"></a> Dos columnas</h4>
</div>
</div>
</div>
<p>Asumiendo que en ejemplo anterior tuviesemos muchas filas en el resultado, podríamos desear obtener una salida a dos columnas (exceptuando el título.) El siguiente script realiza el efecto:</p>
<pre>$ cat 2col.sed
# subrayar la primera linea
1{h
s/./-/g
H
g
}
2,${s/.*/&amp;\t/
N
s/\n//
}</pre>
<p>Como se aprecia, para las líneas (empezando de la segunda) se agrega un tabulador y luego se fuerza la lectura de una línea adicional (comando "N"); lamentablemente, de forma automática se introduce un "salto de línea" el cual debe ser eliminado o se perdería el efecto deseado, para lo cual se hace la última substitución.</p>
<p>El resultado es:</p>
<pre>$ echo "show databases" | mysql -u pafuser | sed -f 2col.sed
Database
--------
information_schema      ktest
mysql   paftest
sugarcrm        superapof</pre>
<p>El tabulador funciona como separador, pero la salida no tiene buena apariencia. El siguiente script es una variación del anterior en el que se fuerza la primera columna a 20 caracteres completados con espacios:</p>
<pre>$ cat 2colnotab.sed
# subrayar la primera linea
1{h
s/./-/g
H
g
}
2,${s/.*/&amp;                    /
s/<span class='MathJax_Preview'>\(.\{20\}\)</span>.*/\1/
N
s/\n//
}</pre>
<p>La salida ahora luce más legible:</p>
<pre>$ echo "show databases" | mysql -u pafuser | sed -f 2colnotab.sed
Database
--------
information_schema  ktest
mysql               paftest
sugarcrm            superapof</pre>
</div>
</div>
</div>
<div>
<hr />
<div>
<p><sup>[<a name="ftn.id2507096">1</a>] </sup> Como de costumbre, de no especificarse el "archivo", se lee desde <code>stdin</code>.</p>
</div>
</div>
</div>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D538&amp;t=Tutorial%20y%20Gu%C3%ADa%20Breve%20del%20Comando%20Sed%20para%20Unix%20y%20Linux" id="facebook_share_button_538" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_538') || document.getElementById('facebook_share_icon_538') || document.getElementById('facebook_share_both_538') || document.getElementById('facebook_share_button_538');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_538') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=538</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Versión Móvil de AMERICATI.COM</title>
		<link>http://americati.com/blog/?p=534</link>
		<comments>http://americati.com/blog/?p=534#comments</comments>
		<pubDate>Wed, 22 Sep 2010 04:47:50 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Miscelánea]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=534</guid>
		<description><![CDATA[El día de hoy se ha puesto en funcionamiento una página experimental para dispositivos móviles. Esta página muestra dos párrafos genéricos y el logo de AMERICATI. Es accesible ingresando con cualquier celular que soporta WAP 2.0 a http://americati.com. Asimismo, se puede forzar ingresando directamente a http://americati.com/mobile.php Share]]></description>
			<content:encoded><![CDATA[<p>El día de hoy se ha puesto en funcionamiento una página experimental para dispositivos móviles. Esta página muestra dos párrafos genéricos y el logo de AMERICATI. Es accesible ingresando con cualquier celular que soporta WAP 2.0 a http://americati.com. Asimismo, se puede forzar ingresando directamente a http://americati.com/mobile.php</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D534&amp;t=Versi%C3%B3n%20M%C3%B3vil%20de%20AMERICATI.COM" id="facebook_share_button_534" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_534') || document.getElementById('facebook_share_icon_534') || document.getElementById('facebook_share_both_534') || document.getElementById('facebook_share_button_534');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_534') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=534</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Informix Network connection is broken - dbaccess</title>
		<link>http://americati.com/blog/?p=532</link>
		<comments>http://americati.com/blog/?p=532#comments</comments>
		<pubDate>Thu, 16 Sep 2010 19:48:39 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[informix]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=532</guid>
		<description><![CDATA[Esto me ocurre en un Ubuntu 9.04. Informix Dynamic Server Version 11.50. Al parecer esto se debe a que mi conexión a Informix es exclusivamente un socket TCP y a que la red presenta algunos problemas (los que yo atribuyo al driver de la tarjeta de red wireless el cual es un driver Windows emulado.) [...]]]></description>
			<content:encoded><![CDATA[<p>Esto me ocurre en un Ubuntu 9.04. Informix Dynamic Server Version 11.50.</p>
<p><span id="more-532"></span></p>
<p>Al parecer esto se debe a que mi conexión a Informix es exclusivamente un socket TCP y a que la red presenta algunos problemas (los que yo atribuyo al driver de la tarjeta de red wireless el cual es un driver Windows emulado.) Al parecer la conexión dbaccess es muy sensible a estos fallos (a diferencia de la conexión JDBC que al parecer sí reintenta con éxito.)</p>
<p>Solución propuesta: habilitar la conexión IPC  vía shared memory para el dbaccess. Para esto, según:</p>
<p>http://www.tek-tips.com/viewthread.cfm?qid=726357&#038;page=18</p>
<p>Agregaremos otro "alias" al servername:<br />
/opt/informix/etc/sqlhosts:<br />
instance1  onipcshm  127.0.0.1  dummy        # For shared mem conn.<br />
instance2  onsoctcp  127.0.0.1  informix_lop # For network conn.</p>
<p>/etc/services:<br />
informix_lop  1545/tcp</p>
<p>/etc/hosts<br />
127.0.0.1    localhost</p>
<p>/opt/informix/etc/onconfig<br />
DBSERVERNAME      instance1<br />
DBSERVERALIASES   instance2<br />
NETTYPE           ipcshm,1,50,CPU</p>
<p>Hasta el momento, funciona.</p>
<p>informix&gt; INFORMIXSERVER=instance1 dbaccess</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D532&amp;t=Informix%20Network%20connection%20is%20broken%20-%20dbaccess" id="facebook_share_button_532" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_532') || document.getElementById('facebook_share_icon_532') || document.getElementById('facebook_share_both_532') || document.getElementById('facebook_share_button_532');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_532') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=532</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Respaldando archivos en cinta a través de la red en Tru64 Unix</title>
		<link>http://americati.com/blog/?p=523</link>
		<comments>http://americati.com/blog/?p=523#comments</comments>
		<pubDate>Thu, 26 Aug 2010 00:17:46 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tru64]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=523</guid>
		<description><![CDATA[Se quiere sacar backup en tapes de archivos en otro computador utilizando herramientas propias del sistema operativo. I Introducción Con relativa frecuencia es menester efectuar copias voluminosas de estructuras de directorios o filesystems entre sistemas Unix. El presente documento intenta describir algunas alternativas que han resultado exitosas para servidores Alpha. De no ser posible aplicar [...]]]></description>
			<content:encoded><![CDATA[<p>Se quiere sacar backup en tapes de archivos en otro computador utilizando herramientas propias del sistema operativo.</p>
<p><span id="more-523"></span></p>
<p><!-- 		@page { margin: 0.79in } 		H2 { margin-top: 0in; margin-bottom: 0in } 		H2.western { font-family: "Times New Roman", serif; font-size: 10pt } 		H2.cjk { font-family: "DejaVu Sans"; font-size: 10pt } 		H2.ctl { font-family: "DejaVu Sans"; font-size: 12pt } 		P { margin-bottom: 0in } 		P.western { font-size: 10pt } 		P.cjk { font-size: 10pt } --></p>
<h2><span style="font-family: Arial,sans-serif;">I Introducción</span></h2>
<p><span style="font-family: Arial,sans-serif;">Con relativa frecuencia es menester efectuar copias voluminosas de estructuras de directorios o filesystems entre sistemas Unix. El presente documento intenta describir algunas alternativas que han resultado exitosas para servidores Alpha.</span></p>
<p><span style="font-family: Arial,sans-serif;">De no ser posible aplicar estos procedimientos por cuestiones de red, siempre se tiene la alternativa de efectuar las copias a unidades de tape, o incluso el movimiento físico de discos duros internos.</span></p>
<p><span style="font-family: Arial,sans-serif;"><br />
Los procedimientos en general son los mismos para las versiones 4.0 y 5.0 de Tru64 Unix.</span></p>
<p><span style="font-family: Arial,sans-serif;">A lo largo del texto supondremos que se copiará la información desde el computador “server_origen” hacia el computador “server_destino”.</span></p>
<h2><span style="font-family: Arial,sans-serif;">I Activación de relaciones de confianza</span></h2>
<p><span style="font-family: Arial,sans-serif;">En tanto las copias reportan ejecutar comandos en computadores remotos, la forma más sencilla consiste en establecer relaciones de confianza. Una manera consiste en definir como “confiable” al computador de origen en el computador de destino, lo cual se tiene que hacer en este último:</span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">login 	en server_destino</span></span></li>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Inscribir 	al server_origen en /etc/hosts añadiendo una entrada:</span></span></li>
</ol>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_destino# vi /etc/hosts</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">...</span></span></p>
<p lang="fr-FR"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">172.19.x.x  server_origen</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">...</span></span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Activar 	la relación de confianza en /.rhosts añadiendo una entrada (no hay 	espacios en /.rhosts):</span></span></li>
</ol>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_destino# vi /.rhosts</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">...</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">server_origen</span></span></p>
<p><span style="font-family: Courier New,monospace;">...</span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">En 	caso de que el servidor de origen esté en cluster, recomiendo 	inscribir adicionalmente en el /etc/hosts y en el /.rhosts los ip 	físicos, el ip default alias, y el ip del servicio de cluster. 	Particularmente el ip default alias es crítico en la versión 5.</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Es 	necesario tener en cuenta que esto activa relaciones de confianza 	para el usuario “root” por lo que se debe tomar las previsiones 	del caso. Al terminar las copias, eliminar la entrada añadida en el 	archivo </span></span><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><strong>.rhosts</strong></span></span><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">.</span></span></span></li>
</ol>
<h2><span style="font-family: Arial,sans-serif;">II Probar la relación de confianza</span></h2>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">login 	en server_origen</span></span></li>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Inscribir 	el server_destino en el archivo /etc/hosts si se desea (no es 	imprescindible.)</span></span></li>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Ejecutar 	un comando rsh con root:</span></span></li>
</ol>
<p lang="en-US"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">server_origen# rsh server_destino ls</span></span></p>
<p lang="en-US">
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">(usar la dirección ip si no se ha efectuado el paso “b”.)</span></span></p>
<p><span style="font-family: Arial,sans-serif;">En caso de obtener “permission denied”, recapitular el procedimiento anterior (especialmente ver punto “d”) y ver el manual de rshd (que jamás me ha ayudado.) En caso de éxito (se obtiene la salida de “ls”) se puede seguir.</span></p>
<p><span style="font-family: Arial,sans-serif;"><strong>III Copiar un filesystem completo del computador local hacia un directorio del computador remoto</strong></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Ejecutar:</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen#  vdump –0f - /punto_de_montaje | rsh server_destino \</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">/sbin/vrestore –xf - -D /directorio_destino</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Nota: el /sbin de vrestore es imprescindible.</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><strong>IV Copiar un directorio completo del computador local hacia un directorio del computador remoto</strong></span></p>
<p><span style="font-family: Arial,sans-serif;">Asumimos que se va a copiar el subdirectorio “/xxx/yyy/zzz” hacia el directorio /www/qqq. Esto creará el directorio /www/qqq/zzz y todo el interior.</span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# cd /xxx/yyy</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# tar cf – zzz | rsh server_destino '(cd /www/qqq ; tar xvf - )'</span></span></p>
<p><span style="font-family: Arial,sans-serif;">Si lo que se desea es copiar sólo el interior de “/xxx/yyy/zzz” hacia el directorio /www/qqq (sin crear el subdirectorio “zzz”) entonces:</span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# cd /xxx/yyy/zzz</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# tar cf – * | rsh server_destino '(cd /www/qqq ; tar xvf - )'</span></span></p>
<p><span style="font-family: Arial,sans-serif;">Esto último es menos confiable en tanto no copia los archivos ocultos del directorio /xxx/yyy/zzz (aunque sí los que estuvieran al interior.)</span></p>
<p><span style="font-family: Arial,sans-serif;"><strong>V Hacer un backup a tape en un computador que no tiene unidad de tape</strong></span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;">Suponemos 	que “server_destino” tiene unidad de tape, mas no 	“server_origen”. Entonces, tras establecer la relación de 	confianza:</span></li>
<li><span style="font-family: Arial,sans-serif;">Averiguar 	el nombre del dispositivo de tape en “server_destino” (le 	llamamos /dev/cinta.)</span></li>
</ol>
<p><span style="font-family: Arial,sans-serif;"><span style="text-decoration: underline;">Versión 5:</span></span></p>
<p><span style="font-family: Arial,sans-serif;">Server_destino# hwmgr –v d</span></p>
<p><span style="font-family: Arial,sans-serif;">(buscar “tape”...)</span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="text-decoration: underline;">Versión 4:</span></span></p>
<p><span style="font-family: Arial,sans-serif;">Server_destino# file /dev/rmt*h</span></p>
<p><span style="font-family: Arial,sans-serif;">(buscar el que responda algún status)</span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Para 	sacar un backup de fileset, clonar si es necesario y luego aplicar:</span></span></li>
</ol>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen#  vdump –0f - /punto_de_montaje | rsh server_destino \</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">/sbin/vrestore –xf /dev/cinta</span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Otra forma documentada equivalente:</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# rvdump –0 –f server_destino:/dev/cinta /punto_de_montaje</span></span></p>
<ol>
<li><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">Para 	copiar una estructura de directorios arbitraria:</span></span></li>
</ol>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# cd /xxx/yyy</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Server_origen# tar cf – zzz | rsh server_destino '(cd /www/qqq ; tar xvf /dev/cinta )'</span></span></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D523&amp;t=Respaldando%20archivos%20en%20cinta%20a%20trav%C3%A9s%20de%20la%20red%20en%20Tru64%20Unix" id="facebook_share_button_523" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_523') || document.getElementById('facebook_share_icon_523') || document.getElementById('facebook_share_both_523') || document.getElementById('facebook_share_button_523');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_523') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=523</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resolución de discrepancias entre configuración de dominios y directorio fdmns</title>
		<link>http://americati.com/blog/?p=520</link>
		<comments>http://americati.com/blog/?p=520#comments</comments>
		<pubDate>Thu, 26 Aug 2010 00:15:09 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tru64]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=520</guid>
		<description><![CDATA[El Advfs es potente pero enredado en su configuración, especialmente cuando las cosas se desconfiguran. Sistemas Afectados Todos los sistemas Tru64 UNIX V4x y V5x. Consideraciones Se requiere tener conocimiento previo acerca de si en el sistema en cuestión se usan raw devices para alguna aplicación (por ejemplo Oracle.) Detalle 1.Obtener un listado de los [...]]]></description>
			<content:encoded><![CDATA[<p>El Advfs es potente pero enredado en su configuración, especialmente cuando las cosas se desconfiguran.</p>
<p><span id="more-520"></span></p>
<p><!-- 		@page { margin: 0.79in } 		H3 { margin-top: 0in; margin-bottom: 0in; text-decoration: underline } 		H3.western { font-family: "Futura Bk", "Century Gothic", sans-serif; font-size: 11pt; so-language: es-PE; font-weight: normal } 		H3.cjk { font-family: "DejaVu Sans"; font-size: 11pt; font-weight: normal } 		H3.ctl { font-family: "Arial", sans-serif; font-size: 11pt } 		P { margin-bottom: 0.08in } --></p>
<p lang="es-PE">
<h3 lang="es-PE">Sistemas Afectados</h3>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Todos los sistemas Tru64 UNIX V4x y V5x.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"><span style="text-decoration: underline;">Consideraciones</span></span></span></p>
<p><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"> </span></span><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Se requiere tener conocimiento previo acerca de si en el sistema en cuestión se usan raw devices para alguna aplicación (por ejemplo Oracle.)</span></span></p>
<p lang="es-PE">
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"><span style="text-decoration: underline;">Detalle</span></span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">1.Obtener un listado de los dominios y filesets activos en el sistema. Esto se puede obtener con el comando df (en multiuser) o a partir del archivo /etc/fstab. Lo ideal es que ambos proporcionen la misma información, caso contrario esto debe ser corregido previamente.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">2.Para cada dominio así obtenido debe existir un directorio dentro de /etc/fdmns. Pueden presentarse dos posibilidades:</span></span></p>
<ol>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Dominios 	activos que no están reflejados en directorios de /etc/fdmns (ver 	paso 3)</span></span></p>
</li>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Directorios 	de /etc/fdmns que no están reflejados en dominios activos (ver paso 	4)</span></span></p>
</li>
</ol>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3.Este caso se puede deber a una incorrecta eliminación del directorio en cuestión. Asumiendo que el dominio se llama “DOM”, es imprescindible recrear el directorio /etc/fdmns/DOM de acuerdo a los escenarios 3.1, 3.2, 3.3. Sin embargo es muy recomendable hacer una copia previa de la información contenida en los filesets comprendidos en el dominio a un lugar seguro mientras sean accesibles.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3.1. Se dispone de un backup reciente fácilmente accesible del filesystem / de este computador que supuestamente contiene el contenido del directorio DOM.</span></span></p>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">En este caso lo más conveniente consiste en restaurarlo en cualquier lugar adecuado y copiar el directorio DOM recién restaurado a /etc/fdmns. La prueba final consiste en desmontar los filesets asociados y volverlos a montar.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3.2. No se dispone de un backup reciente pero se tiene información acerca de qué dispositivos correspondían al dominio DOM.</span></span></p>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Asumiremos que el dominio estaba asociado a los dispositivos físicos /dev/disk/dskx y /dev/disk/dsky. Como se sabe, cada dominio está asociado siempre a uno o más dispositivos. En este caso el procedimiento es:</span></span></p>
<p lang="fr-FR">
<p lang="fr-FR"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># cd /etc/fdmns</span></span></p>
<p lang="fr-FR"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># mkdir DOM</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># cd DOM</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># ln –s /dev/disk/dskx dskx</span></span></p>
<p lang="es-PE"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># ln –s /dev/disk/dsky dsky (hacer lo mismo con el resto de dispositivos)</span></span></p>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Finalmente probar a desmontar y remontar los filesets.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3.3 No se dispone de ninguna información acerca de qué dispositivos comprendían el dominio DOM</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Usar el comando showfdmn:</span></span></p>
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: xx-small;"># showfdmn DOM</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: xx-small;">Id              Date Created  LogPgs  Version  Domain Name</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: xx-small;">3c6bf0e3.00015960  Thu Feb 14 12:16:19 2002     512        4  DOM</span></span></p>
<p lang="en-GB">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: xx-small;">Vol   512-Blks        Free  % Used  Cmode  Rblks  Wblks  Vol Name</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: xx-small;">1L   12889184     2599360     80%     on    512    512  /dev/disk/dsk5c</span></span></p>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">El cual nos proporciona el(los) dispositivo(s) asociado(s) en la última columna. Con esta información podemos ejecutar el procedimiento del paso 3.2.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">4 Supongamos que existe un directorio “sobrante” en /etc/fdmns llamado “DIR_EXTRA” (/etc/fdmns/DIR_EXTRA) conteniendo un enlace al dispositivo /dev/disk/dskX. Este directorio sobrante existe como producto de:</span></span></p>
<p lang="es-PE">
<ul>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Alguien 	creó un dominio llamado DIR_EXTRA para uso temporal y olvidó 	registrarlo en el /etc/fstab.</span></span></p>
</li>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">El 	contenido de este dominio fue movido a otro lugar (quizá otro 	servidor u otro storage) y el dominio no se eliminó a fin de poder 	retroceder en la operación.</span></span></p>
</li>
</ul>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Es necesario verificar que este dominio no esté apuntando a dispositivos reutilizados con otros fines (posiblemente otros dominios.) En ese sentido, debemos contrastar /dev/disk/dskX contra:</span></span></p>
<p lang="es-PE">
<ul>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Dispositivos 	raw devices en uso por alguna aplicación</span></span></p>
</li>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Dispositivo 	usado como swap (swapon –s)</span></span></p>
</li>
<li>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Dispositivos 	usados por otros dominios (ls –lR /etc/fdmns)</span></span></p>
</li>
</ul>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">4.1 De haber alguna coincidencia, entonces el dispositivo dskX ya tiene otro uso y el antiguo dominio ya está destruido. En este caso se debe eliminar este directorio:</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># rm –rf /etc/fdmns/DIR_EXTRA</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">4.2 De no haber ninguna coincidencia el dispositivo dskX podría contener información importante. En este caso debemos averiguar qué filesets están creados en éste:</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"># showfsets DIR_EXTRA</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">De producirse un error entonces no hay información disponible y se debe eliminar el directorio como en el paso 4.1.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">De obtenerse un resultado semejante al que se muestra a continuación, entonces es menester intentar acceder a la información señalada:</span></span></p>
<p lang="es-PE">
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># showfsets DIR_EXTRA</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">oracle</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Id           : 3d373c3c.0003b599.1.8001</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Files        :     7299,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Blocks (512) : 19337414,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Quota Status : user=off group=off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Object Safety: off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Fragging     : on</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">DMAPI        : off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">ppstat</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Id           : 3d373c3c.0003b599.2.8001</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Files        :       68,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Blocks (512) : 20573344,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Quota Status : user=off group=off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Object Safety: off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Fragging     : on</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">DMAPI        : off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">ppwork</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Id           : 3d373c3c.0003b599.3.8001</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Files        :     1828,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Blocks (512) : 24757778,  SLim=        0,  HLim=        0</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Quota Status : user=off group=off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Object Safety: off</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">Fragging     : on</span></span></p>
<p><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">DMAPI        : off</span></span></p>
<p lang="es-PE"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;">#</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Siguiendo el ejemplo, apreciamos la existencia de tres filesets para el dominio DIR_EXTRA. En ese sentido crearemos tres puntos de montaje /x1, /x2, /x3 e intentaremos el montaje:</span></span></p>
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># mount DIR_EXTRA#oracle /x1</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># mount DIR_EXTRA#ppstat /x2</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># mount DIR_EXTRA#ppwork /x3</span></span></p>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Se analizará a continuación si la información contenida en /x1, /x2, /x3 es útil. De ser así, es conveniente configurar los filesets adecuadamente en el archivo /etc/fstab. Si nada de esta información es útil, entonces debemos eliminar el dominio (previamente debemos desmontar los filesets:)</span></span></p>
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># umount /x1</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># umount /x2</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># umount /x3</span></span></p>
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># rmfdmn DIR_EXTRA</span></span></p>
<p lang="en-GB">
<p lang="en-GB">
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D520&amp;t=Resoluci%C3%B3n%20de%20discrepancias%20entre%20configuraci%C3%B3n%20de%20dominios%20y%20directorio%20fdmns" id="facebook_share_button_520" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_520') || document.getElementById('facebook_share_icon_520') || document.getElementById('facebook_share_both_520') || document.getElementById('facebook_share_button_520');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_520') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=520</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedimiento de creación de dominios Advfs</title>
		<link>http://americati.com/blog/?p=518</link>
		<comments>http://americati.com/blog/?p=518#comments</comments>
		<pubDate>Thu, 26 Aug 2010 00:13:08 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tru64]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=518</guid>
		<description><![CDATA[Esto podría servir para algún administrador a cargo de un legendario Tru64... Sistemas Afectados Todos los sistemas Tru64UNIX V4x y V5x. Consideraciones Se requiere tener conocimiento previo acerca del volumen máximo aproximado de archivos que se almacenarán en el dominio. Detalle 1.Conocido el valor aproximado de la máxima cantidad de archivos que se almacenarán en [...]]]></description>
			<content:encoded><![CDATA[<p>Esto podría servir para algún administrador a cargo de un legendario Tru64...</p>
<p><span id="more-518"></span></p>
<p><!-- 		@page { margin: 0.79in } 		H3 { margin-top: 0in; margin-bottom: 0in; text-decoration: underline } 		H3.western { font-family: "Futura Bk", "Century Gothic", sans-serif; font-size: 11pt; so-language: es-PE; font-weight: normal } 		H3.cjk { font-family: "DejaVu Sans"; font-size: 11pt; font-weight: normal } 		H3.ctl { font-family: "Arial", sans-serif; font-size: 11pt } 		P { margin-bottom: 0.08in } --></p>
<h3 lang="es-PE">Sistemas Afectados</h3>
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Todos los sistemas Tru64UNIX V4x y V5x.</span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"><span style="text-decoration: underline;">Consideraciones</span></span></span></p>
<p><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"> </span></span><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Se requiere tener conocimiento previo acerca del volumen máximo aproximado de archivos que se almacenarán en el dominio.</span></span></p>
<p lang="es-PE">
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;"><span style="text-decoration: underline;">Detalle</span></span></span></p>
<p lang="es-PE">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">1.Conocido el valor aproximado de la máxima cantidad de archivos que se almacenarán en el nuevo dominio (en todos los filesets) es necesario obtener los valores recomendados para BMT Growth Size y BMT Prealloc Size de acuerdo a la tabla siguiente. Esto es especialmente crítico si el número de archivos a almacenarse es muy elevado:</span></span></p>
<p lang="es-PE">
<table border="1" cellspacing="0" cellpadding="5" width="577" bordercolor="#000000">
<col width="181"></col>
<col width="182"></col>
<col width="182"></col>
<tbody>
<tr valign="TOP">
<td width="181">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">Número 			de archivos en el dominio</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">BMT 			Growth Size</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">BMT 			Prealloc Size</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">&lt; 			50000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">128 			(default)</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3600</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">100000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">256</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">7200</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">200000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">512</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">14400</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">300000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">768</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">21600</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">400000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">1024</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">28800</span></span></p>
</td>
</tr>
<tr valign="TOP">
<td width="181">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">800000</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">2048</span></span></p>
</td>
<td width="182">
<p lang="en-GB"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">57600</span></span></p>
</td>
</tr>
</tbody>
</table>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">2. Crear el dominio usando las opciones –x y –p para designar el Growth Size y el BMT Prealloc Size respectivamente. Por ejemplo para un dominio que contendrá un millón de archivos podemos usar:</span></span></p>
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># mkfdmn –t advfs –x 2048 –p 57600 /dev/disk/dsk?? DOMAIN_NAME</span></span></p>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">3. De igual modo, si se añaden volúmenes al dominio debemos emplear los parámetros –x y –p:</span></span></p>
<p lang="es-PE">
<p lang="en-GB"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"># addvol –x 2048 –p 57600 /dev/disk/dsk?? DOMAIN_NAME</span></span></p>
<p lang="en-GB">
<p lang="es-PE"><span style="font-family: Futura Bk,Century Gothic,sans-serif;"><span style="font-size: x-small;">4. A fin de analizar con qué parámetros ha sido creado un dominio se puede usar el comando /sbin/advfs/vbmtpg.</span></span></p>
<p lang="es-PE">
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D518&amp;t=Procedimiento%20de%20creaci%C3%B3n%20de%20dominios%20Advfs" id="facebook_share_button_518" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_518') || document.getElementById('facebook_share_icon_518') || document.getElementById('facebook_share_both_518') || document.getElementById('facebook_share_button_518');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_518') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=518</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Examen final Administración de redes con Linux</title>
		<link>http://americati.com/blog/?p=516</link>
		<comments>http://americati.com/blog/?p=516#comments</comments>
		<pubDate>Thu, 26 Aug 2010 00:11:48 +0000</pubDate>
		<dc:creator>diego</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tru64]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://americati.com/blog/?p=516</guid>
		<description><![CDATA[Este examen fue tomado el año 2003 o 2004; quizá le sea útil al interesado en el tema. 1 Cuando Ud. envía un mensaje de email a un destinatario cuya cuenta está en el servidor de correo local (el que Ud. emplea para el envío), el mensaje es enrutado usando: El registro MX correspondiente a [...]]]></description>
			<content:encoded><![CDATA[<p>Este examen fue tomado el año 2003 o 2004; quizá le sea útil al interesado en el tema.</p>
<p><span id="more-516"></span></p>
<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { color: #0000ff } --></p>
<p><span style="font-family: Avant Garde Gothic;"><strong>1</strong> Cuando Ud. envía un mensaje de email a un destinatario cuya cuenta está en el servidor de correo local (el que Ud. emplea para el envío), el mensaje es enrutado usando:</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">El 	registro MX correspondiente a la parte de host de la dirección de 	destino</span></li>
<li><span style="font-family: Avant Garde Gothic;">El 	archivo /etc/aliases o en su defecto el archivo 	/etc/mail/mailertables</span></li>
<li><span style="font-family: Avant Garde Gothic;">No 	es enrutado pues queda en el servidor local hasta ser recogido por 	el usuario destinatario</span></li>
<li><span style="font-family: Avant Garde Gothic;">El 	registro A correspondiente al mailserver al que apunta el registro 	MX</span></li>
<li><span style="font-family: Avant Garde Gothic;">El 	registro A en el DNS correspondiente a la estación de trabajo donde 	está conectado el usuario destinatario</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>2</strong> Si su computador Linux tiene una interfaz de red ethernet con un IP asignado por el administrador, así como una máscara definida, y asumiendo que está directamente conectado al Internet, qué es necesario además configurar (en su computador) para conectarse vía telnet a un servidor ubicado en Finlandia con dirección IP 67.38.12.123?</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">El 	ip del servidor DNS primario</span></li>
<li><span style="font-family: Avant Garde Gothic;">El 	ip del default gateway</span></li>
<li><span style="font-family: Avant Garde Gothic;">El 	archivo /etc/hosts</span></li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">La 	MAC address de la interfaz ethernet</span></p>
</li>
<li><span style="font-family: Avant Garde Gothic;">El 	demonio xinetd vía el comando setup</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>3</strong> El guión (-) usado como archivo tar (tarfile) indica a este comando que debe emplear la salida o entrada estándar en lugar de una cinta o un archivo regular. Se quiere copiar el contenido del directorio /opt1 (con sus subdirectorios) hacia el directorio /mktu usando sólo este comando. ¿Cómo lo haría?</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">tar 	cvf - /mktu | tar xvf /opt1</span></li>
<li><span style="font-family: Avant Garde Gothic;">(cd 	/opt1 ; tar cvf - . ) | (cd /mktu ; tar 	xvf - )</span></li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">tar 	cvf - /opt1  |  tar xvf - </span></p>
</li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">tar 	cvf - /opt1  |  tar xvf /mktu</span></p>
</li>
<li><span style="font-family: Avant Garde Gothic;">N.A.</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>4</strong> ¿En qué puerto “escucha” el servidor Web con que opera WEBMIN?</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">80</span></li>
<li><span style="font-family: Avant Garde Gothic;">8000</span></li>
<li><span style="font-family: Avant Garde Gothic;">1000</span></li>
<li><span style="font-family: Avant Garde Gothic;">10000</span></li>
<li><span style="font-family: Avant Garde Gothic;">752</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>5</strong> Cuál es el tiempo de vida de los registros DNS?</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">1 	día</span></li>
<li><span style="font-family: Avant Garde Gothic;">1 	minuto</span></li>
<li><span style="font-family: Avant Garde Gothic;">2 	minutos</span></li>
<li><span style="font-family: Avant Garde Gothic;">1 	hora</span></li>
<li><span style="font-family: Avant Garde Gothic;">Es 	configurable en cada zona y registro</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>6</strong> El protocolo usado por sendmail en trasmisiones TCP/IP:</span></p>
<ol>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">POP</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">IMAP</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">SMTP</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">SNMP</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">UDP</span></p>
</li>
</ol>
<p lang="en-GB">
<p><span style="font-family: Avant Garde Gothic;"><strong>7</strong> El mejor motivo para emplear la última versión de BIND (9.2.x) es:</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">Configuración 	simplificada</span></li>
<li><span style="font-family: Avant Garde Gothic;">Seguridad 	mejorada</span></li>
<li><span style="font-family: Avant Garde Gothic;">Performance 	elevada</span></li>
<li><span style="font-family: Avant Garde Gothic;">Modesto 	consumo de recursos</span></li>
<li><span style="font-family: Avant Garde Gothic;">Todas 	las anteriores</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>8</strong> Para usar Virtual Hosting en Apache usando una sola dirección IP al que apuntan diversos dominios de modo simultáneo haciendo la diferenciación por el nombre del dominio, es necesario:</span></p>
<ol>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">Web 	Browsers con HTTP 1.1</span></p>
</li>
<li><span style="font-family: Avant Garde Gothic;">Crear 	alias para la interfaz de red por cada dominio</span></li>
<li><span style="font-family: Avant Garde Gothic;">Usar 	un número de puerto distinto por cada dominio</span></li>
<li><span style="font-family: Avant Garde Gothic;">Instalar 	APACHE desde la fuente</span></li>
<li><span style="font-family: Avant Garde Gothic;">Usar 	NAT</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>9</strong> Los directorios compartidos vía NFS se especifican en el archivo:</span></p>
<ol>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">/etc/networks</span></p>
</li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">/etc/nfsd.conf</span></p>
</li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">/etc/nfs.conf</span></p>
</li>
<li>
<p lang="fr-FR"><span style="font-family: Avant Garde Gothic;">/etc/exports</span></p>
</li>
<li><span style="font-family: Avant Garde Gothic;">/etc/mtab</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;"><strong>10</strong> ¿Cuál de los siguientes tipos de registros DNS no es normalmente empleado? (sug. Ver archivos de zonas creados por bindconf.)</span></p>
<ol>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">SOA</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">NS</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">PTR</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">HINFO</span></p>
</li>
<li>
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">MX</span></p>
</li>
</ol>
<p lang="en-GB">
<p><span style="font-family: Avant Garde Gothic;"><strong>11</strong></span><span style="font-family: Avant Garde Gothic;"> Si las direcciones de correo electrónico de su organización son de la forma: </span><span style="color: #0000ff;"><span style="text-decoration: underline;"><a href="mailto:usuario@correo.oligoceno.macrobio.tg"><span style="font-family: Avant Garde Gothic;">usuario@correo.oligoceno.macrobio.tg</span></a></span></span><span style="font-family: Avant Garde Gothic;">, y el servidor se llama ikarius.oligoceno.macrobio.tg, entonces debemos inscribir:</span></p>
<ol>
<li><span style="font-family: Avant Garde Gothic;">correo.oligoceno.macrobio.tg 	en /etc/mail/local-host-names</span></li>
<li><span style="font-family: Avant Garde Gothic;">oligoceno.macrobio.tg 	en /etc/mail/local-host-names</span></li>
<li><span style="font-family: Avant Garde Gothic;">macrobio.tg 	en /etc/mail/local-host-names</span></li>
<li><span style="font-family: Avant Garde Gothic;">correo.oligoceno.macrobio.tg 	en /etc/aliases</span></li>
<li><span style="font-family: Avant Garde Gothic;">oligoceno.macrobio.tg 	en /etc/aliases</span></li>
</ol>
<p><span style="font-family: Avant Garde Gothic;">Resuelva uno de los siguientes problemas. Ud. sólo debe escoger uno de ellos (10 puntos)</span></p>
<p><span style="font-family: Avant Garde Gothic;">A En una organización se dispone de un conjunto de desarrolladores HTML, PERL y JAVA que desarrollan portales a publicarse en el servidor WEB apache de la misma. Estos usuarios han sido asignados al grupo webdevel a fin de facilitar la compartición de la información entre ellos.</span></p>
<p><span style="font-family: Avant Garde Gothic;">Se desea que todos los usuarios pertenecientes al grupo webdevel puedan modificar los documentos servidos por Apache. Asuma que los usuarios ya existen y son muchos. Asuma que también existe el grupo webdevel. Asuma que Apache ha sido instalado de modo estándar desde un RPM en RedHat. Escriba todos los comandos necesarios para lograr esto, justificando cada uno de estos. Ud. puede realizar diversas asunciones (si no contradicen el presente enunciado), las cuales deberán indicarse.</span></p>
<p><span style="font-family: Avant Garde Gothic;">B Se dispone de un conjunto de sistemas con espacio reducido de disco. Se desea aprovechar NFS para montar remotamente el directorio /usr al momento de boot. Un sistema (llamado server-01) contiene una instalación full de Linux. Los otros fueron instalados en forma normal, sin embargo la partición asignada a /usr se reasignará al filesystem /oracle para almacenar información local, por lo que se empleará el /usr de server-01 en todos los casos.</span></p>
<p><span style="font-family: Avant Garde Gothic;">En el servidor ya está compartido el directorio /usr para toda la red. Ud. debe escribir <span style="text-decoration: underline;">todos los pasos necesarios</span> a realizarse <span style="text-decoration: underline;">en los clientes</span> para lograr este cometido. Asuma que el cliente todavía tiene la partición del futuro filesystem /oracle asignada a /usr. Los sistemas cliente no se reparticionarán (se mantienen los tamaños de las particiones.) El esquema actual en los clientes es:</span></p>
<table border="1" cellspacing="0" cellpadding="5" width="599" bordercolor="#000000">
<col width="188"></col>
<col width="190"></col>
<col width="189"></col>
<tbody>
<tr valign="TOP">
<td width="188">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">/</span></p>
</td>
<td width="190">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">Hda1</span></p>
</td>
<td width="189">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">300M</span></p>
</td>
</tr>
<tr valign="TOP">
<td width="188">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">/boot</span></p>
</td>
<td width="190"><span style="font-family: Avant Garde Gothic;">Hda2</span></td>
<td width="189"><span style="font-family: Avant Garde Gothic;">40M</span></td>
</tr>
<tr valign="TOP">
<td width="188"><span style="font-family: Avant Garde Gothic;">/usr (cambiar a oracle)</span></td>
<td width="190"><span style="font-family: Avant Garde Gothic;">Hda3</span></td>
<td width="189"><span style="font-family: Avant Garde Gothic;">2G</span></td>
</tr>
<tr valign="TOP">
<td width="188"><span style="font-family: Avant Garde Gothic;">/var</span></td>
<td width="190">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">Hda5</span></p>
</td>
<td width="189">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">200M</span></p>
</td>
</tr>
<tr valign="TOP">
<td width="188">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">swap</span></p>
</td>
<td width="190">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">Hda6</span></p>
</td>
<td width="189">
<p lang="en-GB"><span style="font-family: Avant Garde Gothic;">1G</span></p>
</td>
</tr>
</tbody>
</table>
<p lang="en-GB">
<p lang="en-GB">
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Famericati.com%2Fblog%2F%3Fp%3D516&amp;t=Examen%20final%20Administraci%C3%B3n%20de%20redes%20con%20Linux" id="facebook_share_button_516" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_516') || document.getElementById('facebook_share_icon_516') || document.getElementById('facebook_share_both_516') || document.getElementById('facebook_share_button_516');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_516') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://americati.com/blog/?feed=rss2&#038;p=516</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

