OWarux

martes, abril 25, 2006

Nueva distro de Linspire: freespire

freespire
Escrito por Salva de Castro
 
Linspire es una compañía que distribuye una distro Linux con licencia comercial al igual que tienen otros sistemas operativos como Windows y Mac OS X. Sus clientes confían en tener un sistema estable, seguro y con soporte por parte de Linspire. Una de las principales ventajas es que integra una tecnología llamada CNR (Click’N'Run) que hace tremendamente más fácil la instalación de aplicaciones en Linux y que se va actualizando constantemente.

Pues la gente de Linspire está en vías de sacar una nueva distribución Linux basada en Debian con fines no comerciales, o más bien maticemos: con fines no comerciales “a priori” llamada freespire. Decía lo de “a priori” porque ofrecen la libertad de escoger a los usuarios de su distro: pueden escoger tener una distro 100% open source o bien incluir paquetes comerciales como la laureada CNR.

Podéis conocer más de este proyecto consultando la extensa FAQ de que disponen o bien podéis suscribiros a la lista de correo o los foros de la comunidad ya que de momento no hay ninguna beta pública para descargar :(

Update: podéis ver un fantástico tour de capturas de freespire en esta galería.


Copiado total e impúdicamente de bitelia.com

Cerebro de cucaracha

"Robot Móvil Controlado por Cucaracha" es un mecanismo experimental que usa una cucaracha de Madagascar viva sobre un trackball modificado para controlar un robot de tres ruedas. Si la cucaracha se mueve a la izquierda, el robot se mueve a la izquierda. Unos sensores infra-rojos proveen una retroalimentación para la navegación a la cucaracha. De tal manera que crean un sistema seudo-inteligente con la cucaracha como CPU.Por Garnet Hertz (2005)
 
Si esto sigue así, espero que no pongan una cucaracha dentro de un exterminador, las desgraciadas tomarian venganza contra la inocente raza humana.

La cucaracha ya no puede caminar....

viernes, abril 21, 2006

Eso de ser geek...

Para aquellas que dudan de que un geek sea la mejor opción aquí están las 10 razones del por que tener un novio geek es lo mejor que les puede pasar.


  1. Los geeks son útiles: pueden arreglar tu computadora, tu laptop, etc. Esas habilidades son muy útiles y pueden hacer que tu vida vaya sobre ruedas.
  2. Son más románticos de lo que la gente se piensa. Su idea del romanticismo puede consistir en hacer una página web sobre ti. Pero vamos, las webs duran más que las flores y se las puedes enseñar a tus amigas.
  3. Tienen cerebro y suelen ser muy cultos.
  4. Requieren poco mantimiento, así que no habrá necesidad de cenas muy elaboradas. Y si no eres la mejor cocinera, siempre puedes pedir una pizza.
  5. No tienes que preocuparte de qué estará haciendo. Lo más normal es que lo encuentres delante de la computadora.
  6. Él confía en ti, así que puedes ser tú misma cuando estés a su lado. ¿Quieres andar por casa con una camiseta vieja para estar más cómoda? A él no le importará. No le molestará que no te maquilles o que pases de arreglarte el pelo.
  7. Te hará estar radiante allá donde vayas. No importa lo cutre que sea tu forma de vestir, no importa que no tengas don de gentes: parecerás una modelo sofisticada y una elegante diplomática al lado de tu geek. Hará que estés tan bien, que te enamorarás de ti misma.
  8. OK: no entiendes de computadoras, televisión ni DVD’s; tampoco te importa ser popular o elegante. ¿Qué me dices de los últimos gadgets tecnológicos? Serás la orgullosa poseedora de los aparatitos más modernos si te decides por salir con un geek.
  9. No te va a poner los cuernos. Toma a la mujer más sexy del mundo (Angelina Jolie, por ejemplo) y ponla en la misma habitación que un geek. En un rincón, pon un una computadora último modelo. Apuesto a que a tu geek le apetece más jugar con la computadora que empezar a conocer a Angelina Jolie. De hecho, puede que ni siquiera la vea si la computadora dispone de conexión a Internet. ¡Venga, vamos! Tiene que descargar su e-mail, navegar por la web y escribir un post en su blog contando que está en la misma habitación que Angelina Jolie…
  10. Y esta es la razón definitiva: realmente le importas. No tu apariencia (aunque eso es un plus), ni lo delgada que estés, ni todo el maquillaje que te pongas encima. Le gustas porque eres tú.

jueves, abril 13, 2006

I Hate SPAM

Hoy tuvimos unos problemillas con nuestras cuentas de correo, primero no salían y después dejó de recibir, al hablar con nuestro proveedor, el checo y dijo que aparentemente funcionaban, pero de todas formas iba a darles un chequeo general, después de un rato, seguía haciendo lo mismo, y en el mensaje de error al rebotar el correo mostraba el siguiente texto:

This is an automatically generated Delivery Status Notification
 
Delivery to the following recipient failed permanently:
 
 
Technical details of permanent failure:
PERM_FAILURE: SMTP Error (state 9): 553 Relaying is not supported
 
   ----- Original message -----
 
Received: by 10.xx.xx.x with SMTP id l7mrxxxx76wxl;
        Thu, 13 Apr 2006 11:22:29 -0700 (PDT)
Return-Path: <
mimailpersonal@gmail.com>
Received: from ?10.xxx.xx.xx? ( [200.xx.xxx.x])
        by mx.gmail.com with ESMTP id h8smxxxx85wxd.2006.04.13.11.22.28;
        Thu, 13 Apr 2006 11:22:28 -0700 (PDT)
Message-ID: <
443Exxx3.3060700@gmail.com>
Date: Thu, 13 Apr 2006 13:22:11 -0600
From: =?ISO-8859-1?Q?Omar_Mir=F3n?= <
mimailpersonal@gmail.com>
User-Agent: Thunderbird 1.5 (Windows/20051201)
MIME-Version: 1.0
To: 
dictamen@miservidor.comestado@miservidor.com,
 
policia@miservidor.comdeportes@miservidor.com,
 
sociales@miservidor.com
Subject: Probando correos
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
 
Probando correos
 

   ----- End of message -----
 
Como la persona encargada de las cuentas decía que a él no le marcaba error y que según él ya habia sido solucionado el problema, decidí investigar por mi cuenta el mentado error SMTP 553.
Encontre en un foro (benditos foros) lo siguiente respecto al puto error ese...

7. I'm getting error 553: "To send mail, first check your mail with a valid POP3 account".

Error 553 is a "feature" of your SMTP server. It will not let you send mail unless you check for mail first. This is designed to prevent others from sending spam through your account. In Gammadyne Mailer, check the "Login to POP3 server" box on the "SMTP" branch, and fill in the name, user, and password for the POP3 server.


AJA!!!!!
Conque eso es... bueno, esa era una razón para sospechar, lo notan?, ¿No?, bueno, les digo entonces mis sospechas.... Si revisan el texto de error al rebotar el mensaje, notaran que en un solo mensaje inclui varias direcciones al mismo servidor para probarlo, lo que el sistema supondria que es SPAM!!!!
Así que como buen programador decidí hacer una variante en el algoritmo, o sea cambiar la forma de enviar el mensaje, de tal forma que mande el mismo mensaje uno por uno a cada direccion y listo, ya no me rebotó ninguno, fueron recibidos e incluso dos me los contestaron.
OJO: Esto no fue lo que soluciono el problema de las cuentas del correo, les hacia falta una revision y mantenimiento, pero de todas formas es uno de esos tips que se aprenden sobre la marcha, no hay que enviar un mensaje a varias cuentas en el mismo servidor, puede provocar el pinche error SMTP 553 (donde SMTP puede ser Su Mail Ta Pinche, pero no me hagan caso)

Hay que entender a los Ingenieros

Un Ingeniero no es que sea prepotente... ¡Es que está rodeado de inútiles!
Un Ingeniero no tiene el ego muy grande...¡Es que el cuarto es muy chiquito!

No es que quieran tener la razón siempre... ¡Es que los otros siempre se equivocan! Un Ingeniero no es que carezca de sentimientos... ¡Es que los otros
son unas nenas lloronas!

Un Ingeniero no tiene vida desorganizada... ¡Es sólo que tiene un ritmo de vida particular!
Un Ingeniero no ve el mundo... ¡Lo cambia!
Un Ingeniero no es que sea un crecido... ¡Es que los simples mortales no lo comprenden!
Un Ingeniero no es un ser calculador y frío... Simplemente, le parece divertido pasar por encima de la gente común.
Un Ingeniero no es un enredador...¡Es que los usuarios no entienden nada!
Un Ingeniero no es un crítico... ¡Es que los errores de la gente son muy evidentes!
No es que el trabajo los absorba es que... ¿De qué carajos estaba hablando?
Un Ingeniero no comete errores... ¡Sólo prueba si los demás estaban prestando atención!
No es que se crean la gran cosa... ¡¡¡ ES QUE LO SON !!!
Pero recuerden: ser tan cercano a la perfección tiene sus problemas, así que los que no son ingenieros entiendan a estas tristes almas torturadas entre la genialidad y la incomprensión.

domingo, abril 09, 2006

Intel en Mac

¿Que pasa cuando metes un chip Intel dentro de un Mac?, pues según que es más poderosa y compatible, mmmm ¿Compatible? Entonces si tiene Intel puedo tener Windows XP con la tecnologia de Mac (que viene siendo lo mismo, porque ahora la tecnologia de Mac se basa en Intel, o sea para que tanto pedo). Ya se, lo instalo el XP en Mac y correra como el demonio, si ya lo veo...


Maldito windows!!!

sábado, abril 08, 2006

PROYECTO=$InCopy_Parser_[4];

Continuando con este proyecto, una vez hecho el código para poder entrar al archivo INCD y extraer el texto, hemos de diseñar un programa en PHP que recorra un directorio donde se almacenan los documentos INCD y extraiga de cada uno el texto correspondiente, es decir, que lo "parsee".
En este capitulo del proyecto, haremos la programación para recorrer el directorio donde se encuentra el mismo script, en futuros capitulos haremos que lo haga para diversos directorios, sin necesidad de que el archivo php se encuentre dentro, entonces la finalidad de este programa, por lo pronto, es que lea todos los archivos del directorio y extraiga el texto de cada uno, lo guarde en dos variables (como vimos en el capitulo anterior) que son $text y $screen, y que nos muestre en pantalla el contenido de $screen, la variable $text será la que se guarda en la base de datos MySQL, pero sera en otro capitulo, por lo pronto sólo usaremos $screen.
Bien, antes que nada necesitamos que nuestro archivo PHP comienze con una definición de documento HTML, que será la siguiente:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Parseando Documentos de Incopy</title>
</head>
 
Esto se hace para definir que usaremos como base la codificación iso-8859-1, de lo contrario podemos tener problemas con los resultados de nuestro texto extraido.
Ya dentro de los tags <body> </body> de nuestro archivo, es donde pondremos nuestra codificacion PHP, dentro de sus respectivos tags <php? ?> por supuesto.
Entrando de lleno al código, primero utilizamos el código del capitulo anterior, pero esta vez lo definiremos como una función, para poder utilizarlo mejor, la codificación será la siguiente:
 
function parseame($el_file) {
 $text=$screen="";
 $XMLDoc = DOMDocument::load($el_file);
 $root = $XMLDoc->documentElement;
 $children = $root->childNodes;
 for ($child = $root->firstChild;
 $child;
 $child = $child->nextSibling){
 if  ($child->nodeName=="aic:story") {
     $text=str_replace("
","\n\r",$child->nodeValue);
  $screen=str_replace("
","<br>",$child->nodeValue);
  $text=utf8_decode($text);
  $screen=utf8_decode($screen);
  }
   }
   echo $screen;
}
 
Pro si no lo notan, le he agragado la inicialización de las variables $text y $screen, de lo contrario, PHP puede mostrarles un error y no darles ninguna salida. Nuestra función de llama parseame, y tiene como argumento la variable $el_file. Los resultados de esto estan en el capitulo anterior de la serie.
Ahora vamos a lo nuevo, como exploramos nuestro directorio. para esto primero debemos saber que en cada directorio puede haber subdirectorios y que dicho directorio puede tener un directorio padre (el cual en consola puede verse como .. dos puntos). Por esto creamos una funcion que determine si un item en el directorio es o no un directorio (ya sea subdirectorio o directorio padre), dicha función es la siguiente:
 
function es_directorio($un_dir,$un_item) {
 if ($un_dir=='/') {
  $fich_a_preguntar="/$un_item";
  }
 else {
  $fich_a_preguntar="$un_dir/$un_item";
  }
 return (is_dir("$fich_a_preguntar"));
 }
 
En esta función pasamos como argumentos las variables $un_dir y $un_item, que son el directorio actual donde nos encontramos y el item es un elemento de dicho directorio. Primero checamos si estamos en la raiz del arbol de directorios, si es asi, $fich_a_preguntar esta en la raiz, si no, el $item se encuentra en un directorio que no es el raiz, una vez establecido donde esta el $item, preguntamos si es un directorio y regresamos el resultado.
 
Ahora el código que utiliza las dos funciones anteriores es el siguiente:
 
$nuevo_dir=getcwd();
echo "<h2>Carpeta: <i>$nuevo_dir</i></h2>";
 
if (!$df_dir=opendir($nuevo_dir))
 die("<h3>*** ERROR: No se ha podido entrar en ($nuevo_dir)</h3>");
 
while (($item=readdir($df_dir)) !== false) {
 if ($item==".") continue;
 if (!es_directorio($nuevo_dir, $item)) {
  echo "$item<br>";
  parseame($item);
  echo "<hr>";
  }
 }
closedir($df_dir);
 
Con este código lo que hacemos es lo siguiente, en $nuevo_dir guardamos la ruta de nuestro actual directorio (cwd - current working directory), en este ejemplo, a manera informativa en pantalla mostramos la ruta actual de trabajo, esta línea se debe omitir cuando el sistema ya este en producción.
Despues probamos que el directorio donde estamos trabajando pueda ser evaluado por nuestro script (lógicamente en este ejemplo no habrá problema, pero se debe dejar la validación para cuando específiquemos una ruta de trabajo diferente a donde se encuentra el archivo PHP), ejecutamos la función opendir() y el resultado, que es un descriptor del directorio, lo guardamos en $df_dir, si no se puede nos marcará error.
Después con un bucle while recorremos todo el directorio, en cada ciclo leemos un objeto del descriptor y lo guardamos en $item, si el valor del $item es ".", continuamos, este punto es el directorio mismo, por eso no lo evaluamos; si $item tiene otro valor, determinamos si es un directorio o un archivo, con la función es_directorio(), si el $item es un archivo, mandamos a pantalla su nombre y ejecutamos la funcion parseame() y obtenemos el texto del archivo INCD y despues ponemos una linea para diferenciar del siguiente archivo si es que lo hay (nótese que este script evaluará TODOS los archivos, no importa si son INCD o no).
Después de leer todo el directorio, cerramos el descriptor con la función closerdir().
Bueno, eso es todo por este capítulo, en el próximo veremos la creacion de nuestra tabla en MySQL y la(s) tabla(s) que manejaremos con sus respectivos campos, además de ver como guardariamos nuestro texto generado en dicha base de datos.
 
[owar@owarux ~]$echo "Goodnight!!!"

miércoles, abril 05, 2006

Microsoft soportará GNU+Linux en su "Virtual Server 2005 R2"


Autor: Germán Isaac
 
Microsoft no quiere quedarse fuera de ningún mercado, es así que, aunque suene disparatado, la empresa del hombre más rico del mundo dará soporte a su rival en el mundo de los sistemas operativos: GNU+Linux.
 
Esto fue informado recientemente en News.com. Virtual Server 2005 R2 es un software que sirve para correr muchos sistemas operativos dentro de una sólo máquina.
 
Otro dato "increíble": luego de cobrar en el pasado $99 por cada licencia de Virtual Server para máquinas con hasta cuatro CPU y $199 para máquinas con ilimitado número de CPUs, ahora Microsoft informó el pasado lunes que el programa estará disponible para la descarga de modo gratuito.
 
Por ahora, se sabe que soportará versiones de Red Hat GNU+Linux server y Suse GNU+Linux de Novell. Los anuncios se hicieron en conjunción con la conferencia LinuxWorld en Boston en esta semana, los mantendremos informados.
 

Nueva versión Mandriva Live

Mandriva lanza distribución Live instalable desde el mismo CD. Una distribución Live permite probar Linux sin tener que instalar en disco duro, y con esta versión de Mandriva permite instalarlo directamente y desde el mismo CD si nos gusta.
 
Lo habitual hasta ahora en las grandes distribuciones como Ubuntu o SuSE es diferenciar por un lado el o los CDs de instalación de la distro, y por otro un Live CD demostrativo de sus capacidades. A diferencia de estas, existen algunas pocas distribuciones que aúnan en el mismo CD las funcionalidades de la versión Live y la de instalación.
 
Una de las últimas a apuntarse a este carro ha sido Mandriva, que con su nueva Mandriva One 2006.0 lanzada recientemente permite probar primero y, si interesa, instalar después desde el mismo CD. La instalación se realiza de una forma muy simple desde el asistente incluido al cual se accede desde un icono situado en el escritorio.
 
Una funcionalidad que puede ser ciertamente apreciada es que los archivos creados durante la ejecución live de la distro son copiados a disco duro si el usuario decide instalar. De esta forma, por ejemplo, un documento creado con OpenOffice será transferido al disco duro y guardado debidamente en nuestra cuenta de usuario.
 
Junto a esta nueva versión, la compañía fabricante ha anunciado la próxima disponibilidad de un repositorio de aplicaciones para sus usuarios similar al CNR de Linspire y que permitirá la instalación de software mediante un sólo click de ratón, algo que se está poniendo muy de moda últimamente entre las distribuciones Linux comerciales orientadas al usuario final. Este servicio, basado en la Web, recibirá el nombre de Mandriva Kiosk. Dicho servicio será de pago por suscripción.
 
Mandriva One 2006.0 está solamente disponible por el momento para los miembros del Club Mandriva, pero más adelante será liberada para su descarga y uso gratuitos por parte de cualquier internauta. En total, hay cuatro versiones de esta distro, localizadas en los idiomas de otras tantas regiones: América y Europa Occidental, Europa Central, Europa del Este y Asia/África, cubriendo un total de 70 lenguas.

lunes, abril 03, 2006

PROYECTO=$InCopy_Parser_[3];

Continuando con este proyecto, primero debemos de analizar como esta constituido un documento INCD de InCopy. Abajo se muestra el arbol de documento XML que lo compone:
 
Comienza documento INCD
 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

 <aic:document name="mi_iso" ver="2.0" page="0 0 0 0 40832000 0 4088c000 0">

 <aic:swatchlist>
<aic:color name="C=100 M=0 Y=0 K=0" cspace="cmyk" type="process" vals="3ff00000 0,0 0,0 0,0 0"/>
<aic:color name="C=0 M=100 Y=0 K=0" cspace="cmyk" type="process" vals="0 0,3ff00000 0,0 0,0 0"/>
<aic:color name="C=0 M=0 Y=100 K=0" cspace="cmyk" type="process" vals="0 0,0 0,3ff00000 0,0 0"/>
<aic:color name="C=15 M=100 Y=100 K=0" cspace="cmyk" type="process" vals="3fc33333 33333333,3ff00000 0,3ff00000 0,0 0"/>
<aic:color name="C=75 M=5 Y=100 K=0" cspace="cmyk" type="process" vals="3fe80000 0,3fa99999 9999999a,3ff00000 0,0 0"/>
<aic:color name="C=100 M=90 Y=10 K=0" cspace="cmyk" type="process" vals="3ff00000 0,3feccccc cccccccd,3fb99999 9999999a,0 0"/>
</aic:swatchlist>

 <aic:taglist>
<aic:tag name="Root" clr="0"/>
</aic:taglist>


 <aic:story xml:space="preserve" track="0" dFont="Times New Roman" optalign="0" optsize="40280000 0">
<aic:pstyle name="[No paragraph style]"/>
<aic:cstyle name="[No character style]"/>
<aic:clang lang="Spanish: Castilian"/>
Este es contenido de un documento de Incopy en UTF-8

</aic:story>

 <aic:userlist>
<aic:user name="Unknown User Name" note="7" tc="2"/>
</aic:userlist>

 
          <?aicxpack
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
 xmlns:iX='http://ns.adobe.com/iX/1.0/'>

 <rdf:Description about=''
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
  <pdf:CreationDate>2006-04-03T03:45:28Z</pdf:CreationDate>
  <pdf:ModDate>2006-04-03T03:47:37Z</pdf:ModDate>
  <pdf:Title>mi_iso</pdf:Title>
 </rdf:Description>

 <rdf:Description about=''
  xmlns:xap='http://ns.adobe.com/xap/1.0/'>
  <xap:CreateDate>2006-04-03T03:45:28Z</xap:CreateDate>
  <xap:ModifyDate>2006-04-03T03:47:37Z</xap:ModifyDate>
  <xap:Format>application/x-indesign</xap:Format>
  <xap:Title>
   <rdf:Alt>
    <rdf:li xml:lang='x-default'>mi_iso</rdf:li>
   </rdf:Alt>
  </xap:Title>
 </rdf:Description>

 <rdf:Description about=''
  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>
  <xapMM:DocumentID>adobe:docid:incd:3e38bca5-c2f6-11da-8af1-cb2a45f45358</xapMM:DocumentID>
  <xapMM:VersionID>1</xapMM:VersionID>
  <xapMM:RenditionClass>default</xapMM:RenditionClass>
 </rdf:Description>

 <rdf:Description about=''
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
  <dc:format>application/x-indesign</dc:format>
  <dc:title>mi_iso</dc:title>
 </rdf:Description>

</rdf:RDF>
?>

 <aic:prefs>
<aic:charopts supsize="5.8300000e+001" suppos="3.3300000e+001" subsize="5.8300000e+001" subpos="3.3300000e+001" smcap="7.0000000e+001"/>
<aic:typeopts optsize="1"/>
</aic:prefs>
</aic:document>

 
Termina documento INCD
 
Este es un documento de prueba, ya que solo contiene el texto "Este es contenido de un documento de Incopy en UTF-8", y haciendo obvio esto, todo el documento esta codificado en UTF-8. De todo este arbol de documento XML solo nos interesa el bloque en rojo, que contiene el tag aic:story  .Este tag es el que nos indica en todo el arbol cual es el contenido del documento, aparte de los estilos de formato de texto.
 
En el post anterior de este proyecto vimos la implementación para parsear completamente este tipo de documentos, pero con dicho modelo de programación tenemos un problema, el cual es que tenemos que especificar cuando usar la función utf8_decode(), que se necesita solamente para los documentos codificados en iso-8859-1 y no es necesaria para los UTF-8. Por lo tanto desarrolle un nuevo codigo de parseo.
 
$XMLDoc = DOMDocument::load('mi_nota.incd');
$root = $XMLDoc->documentElement;
$children = $root->childNodes;
for ($child = $root->firstChild;$child;$child = $child->nextSibling){
if  ($child->nodeName=="aic:story") {
    $text=str_replace("
","\n\r",$child->nodeValue);
    $screen=str_replace("
","<br>",$child->nodeValue);
    $text=utf8_decode($text);
    $screen=utf8_decode($screen);
    echo "Variable \$text Contiene ... ".$text."<br><hr>";
    echo "Variable \$screen Contiene ... ".$screen."<br><hr>";
 }
echo "<br />";
 
Lo explicare brevemente. Creo un nuevo objeto DomDocument llamado $XMLDoc y cargo el contenido del archivo 'mi_nota.incd' en él. Después en la variable $root almaceno el nodo raíz del árbol que representa al documento .
En la variable $children guardo la lista de nodos hijos del nodo actual (en este caso root). Para después con un bucle for recorrer dicha lista iniciando con $child = primer nodo del arbol, ejecutandose mientras exista un nodo, y cambiando al siguiente nodo mientras exista uno.
En dicho blucle y para cada nodo evaluaremos su nombre, en este caso buscamos los nodos aic:story, que es donde esta el texto que nos interesa, si encontramos un nodo de este tipo, reemplazamos en su contenido (nodeValue) los caracteres 
 (en caso de que existan, depende de la codificacion, si es UTF-8 aparecerán estos caracteres sustituyendo a los saltos de línea) por los caracteres "\n\r" que equivalen a un salto de linea en el archivo, no asi en la pantalla del browser y lo guardamos en la variable $text. Para este ejemplo creamos de la misma manera una variable $screen que sera para verlo en la pantalla del browser, no para guardarse en archivo, la diferencia esta en sustituir los caracteres â€© por "<br>" que representa un salto de linea en el browser, no en el archivo.
Una vez reemplazados estos caracteres decodificamos la variable con la funcion utf8_decode(). Esto sirve para ambas codificaciones ISO y UTF.
En el codigo de ejemplo las mostramos en pantalla y se verian asi (use otro archivo con más contenido para apreciar mejor esto):
 
Variable $text Contiene ... CORR... Jaque Mate LOS BANQUEROS Sergio Sarmiento "Un banquero es un señor que te presta su paraguas cuando hace sol pero que quiere se lo devuelvas en el momento en que empieza a llover". Mark Twain Acapulco, GRO.- En otros tiempos, el gran tema de preocupación en las convenciones bancarias eran las pérdidas. Hoy parecería que el problema son las utilidades. Apenas unas 600 personas participan en la 69ª Convención Bancaria que se está llevando a cabo en Acapulco...
 
Variable $screen Contiene ...
CORR...
Jaque Mate
LOS BANQUEROS
Sergio Sarmiento
"Un banquero es un señor que te presta su paraguas cuando hace sol pero que quiere se lo devuelvas en el momento en que empieza a llover".
Mark Twain
Acapulco, GRO.- En otros tiempos, el gran tema de preocupación en las convenciones bancarias eran las pérdidas. Hoy parecería que el problema son las utilidades.
Apenas unas 600 personas participan en la 69ª Convención Bancaria que se está llevando a cabo en Acapulco...
 
Las diferencias saltan a la vista, pero internamente las cosas son muy diferentes, y ahora lo veran, este es el codigo fuente generado:
 
Variable $text Contiene ...   CORR...  Jaque Mate  LOS BANQUEROS  Sergio Sarmiento  "Un banquero es un señor que te presta su paraguas cuando hace sol pero que quiere se lo devuelvas en el momento en que empieza a llover".   Mark Twain  Acapulco, GRO.- En otros tiempos, el gran tema de preocupación en las convenciones bancarias eran las pérdidas. Hoy parecería que el problema son las utilidades.   Apenas unas 600 personas participan en la 69ª Convención Bancaria que se está llevando a cabo en Acapulco.
 
Variable $screen Contiene ... <br>CORR...<br>Jaque Mate<br>LOS BANQUEROS<br>Sergio Sarmiento<br>"Un banquero es un señor que te presta su paraguas cuando hace sol pero que quiere se lo devuelvas en el momento en que empieza a llover". <br>Mark Twain<br>Acapulco, GRO.- En otros tiempos, el gran tema de preocupación en las convenciones bancarias eran las pérdidas. Hoy parecería que el problema son las utilidades. <br>Apenas unas 600 personas participan en la 69ª Convención Bancaria que se está llevando a cabo en Acapulco.

 

Completamente diferentes ambos valores, el primero nos sirve para guardarlo ya sea en una base de datos (que es lo que queremos en este proyecto) o para mostrarlo en pantalla, para una mejor visualización.

El siguiente paso del proyecto es hacer que el scrip recorra un directorio determinado y ejecute el parseo para cada archivo INCD en ese directorio. Pero ese será en el próximo post. Hoy ha sido un día productivo.

 
[owar@owarux ~]$goto sleep > zzzzz.txt

domingo, abril 02, 2006

¿Navegas seguro?

¿Que tantos datos crees que se puedan obtener de tu computadora cuando andas navegando tranquilamente por la red? El ip, el navegador que usas, el sistema operativo... ¿Qué más se te ocurre?

Pues bien, te pueden leer hasta el contenido del portapapeles (cuando usas las funciones de copiar, solo en Windows con Internet Explorer, otra buena razón para usar Firefox), tu resolución de pantalla, si aceptas cookies, etc. Pero para que te lo cuento, mejor averigualo tu mismo entrando en esta dirección

Histórico

¿Como Funciona una computadora.... en 1971? o la edición revisada de 1979.

Buena manera para ver que tanto hemos avanzado en tecnología. Yo en lo particular naci entre estas dos fechas, mas cerca de la segunda. Buena referencia histórica. Me refiero a un libro por supuesto, son capturas de dicho libro, en inglés. Para poder verlo este es el enlace.

sábado, abril 01, 2006

¿Vale la pena Adsense?

El valor de los ingresos de AdSense en países 'en vías de desarrollo'

Hace casi un año, contábamos el caso de una persona que había abandonado su trabajo para poder vivir exclusivamente de gestionar su sitio web, y obtener ingresos económicos con 'Google AdSense'.

Cada vez son más numerosos estos casos, debido al aumento del tráfico de muchos sitios web, y también al aumento del coste de cada click, gracias al creciente número de anunciantes que ven el sistema publicitario de Google como una forma efectiva de conseguir visibilidad para sus negocios.

Estos anunciantes pagan la misma cantidad a Google, independientemente del lugar de origen del webmaster. Y Google, a su vez, paga los mismos dólares a un webmaster de EEUU que a otro de Filipinas, si ambos tienen el mismo 'atractivo publicitario' para estos anunciantes.

Sin embargo, el webmaster de EEUU vive en una sociedad donde obtener 6.000 dólares en un año (500 al mes) supone el 14% de la renta per cápita, pero la misma cantidad ingresada por un webmaster de Filipinas supondría exactamente la renta per cápita en este país, lo que le cambiaría completamente el planteamiento de la vida profesional.

Estos casos son de los que menciona este post del blog oficial de Google, haciéndose eco de este artículo de 'USA Today' que recoge diversas historias de webmasters de India o de Filipinas, cuya vida ha cambiado gracias a dedicar unas horas diarias al mantenimiento de sus sitios web, y recibir a cambio cada mes unos cientos de dólares de Google para gastarlos en un país donde la calidad de vida es menor y los precios son mucho más bajos que en la mayoría de los países occidentales.

Un responsable de AdSense asegura que les ilusiona la idea de estar ayudando a pequeños emprendedores de estos países 'en vías de desarrollo' para que puedan escribir sobre lo que a ellos les gusta, y recibir dinero por ello. Cuando nació AdSense, en junio de 2003, el objetivo de Google era garantizar una WWW llena de contenidos que pudiera ofrecer información al buscador, gracias a los ingresos publicitarios a los webmasters, en un momento en el que se vivían los efectos de la crisis 'punto com'.

Estas historias también deberían hacer reflexionar a todos aquellos que están enfocando sus modelos de negocio en obtener ingresos económicos de AdSense a través de sitios web de contenidos, sabiendo que a muchos kilómetros de distancia puede haber otra persona que, con menos necesidades económicas, pueda ofrecer servicios parecidos.

Texto original aquí --> http://google.dirson.com/noticias.new/2509/

Modding


Definitivamente quiero una mesa con PC integrada, como esta. Posted by Picasa