Archivo

Archivo para la categoría ‘Interneteando’

Navegando a través de un tunel SSH

Miércoles, 22 de Febrero de 2012 Gaspar Fernández 2 comentarios

blogtunel

En ocasiones, si queremos navegar de una forma algo más anónima y privada, en el lugar que nos encontramos no tenemos acceso a determinados servicios, o simplemente queremos usar una conexión diferente a la red, podemos intentar esto.
Podemos navegar desde cualquier ordenador que disponga de un servidor SSH, por ejemplo un servidor que tengamos contratado (Dreamhost ofrece además de hosting SSH. Podéis usar el código DFIFTYHOST para tener casi un 50% de descuento el primer año). Para llevar esto a cabo, basta con ejecutar el siguiente comando en la máquina local (no el servidor):

$ ssh -D 8080 usuario@servidor.ext

Donde 8080 será el puerto al que debemos mandar las peticiones (en realidad es el puerto del proxy), y lo demás son los datos del servidor al que nos conectamos. Con esto sólo podemos hacer el tunel para conexiones locales, es decir, sólo podremos utilizarlo en nuestra máquina.

Imagina ahora que queremos compartir la conexión de ese túnel con otros ordenadores, en caso de encontrarte, por poner un ejemplo absurdo, en la sala de ordenadores de la facultad, y un profesor te mande programar un juego tipo arkanoid, pero la página con la documentación la encuentras en un archivo llamado arkanoid.html; el proxy de la facultad bloquea las páginas con ese nombre y por tanto no se puede leer la documentación (era un caso real, en el que hubiera deseado poder hacer esto). En este momento, al encontrarte con varios amigos en la biblioteca y querer acceder todos al mismo recurso, podemos hacer que uno de ellos haga el túnel y comparta el proxy con los demás. Si por ejemplo la IP dentro de la red local (no con la que se conecta a Internet) es 192.168.1.8 , debería hacer:

$ ssh -D 192.168.1.8:8080 usuario@servidor.ext

Con esto, asociamos el puerto a la IP de la red local y no a localhost.

Luego en el navegador debemos configurar la forma en la que conectamos, debemos elegir configuración manual del proxy, y en la casilla de servidor Socks (versión 5) poner la IP: 192.168.1.8 (o localhost si cogemos la primera opción), y en el puerto 8080. En Firefox encontramos esa opción en Editar (Herramientas en Windows) / Preferencias / Avanzado / Red / Configuración

Por supuesto podemos elegir el número de puerto que queramos, siempre que sea mayor a 1024 (para hacerlo como usuario) y no haya nada corriendo en esos puertos.

Para Windows, podemos usar Putty.

Foto: marru-birra (Flickr) Con licencia CC-by-nc a 22/02/2012.

Generar texto e implantarlo en una imagen desde PHP

Viernes, 10 de Febrero de 2012 Gaspar Fernández 1 comentario

En ocasiones, se puede presentar la necesidad de introducir en nuestros proyectos una imagen cuyo contenido sea un texto, y sobre todo necesitamos integrarlo dentro de nuestro contenido, intentando que no se note que es una imagen, a no se que seleccionen el contenido para copiarlo.

Una de las principales utilidades de esto es evitar el SPAM al escribir nuestra dirección de e-mail en una web. Muchos clientes prefieren enviar un e-mail en lugar de utilizar un formulario de contacto y tenemos que satisfacerles, sin arriesgar la seguridad de nuestro sistema, en el sentido de que hay cientos de motores que se dedican a rastrear webs en busca de direcciones de e-mail (lo cual es muy sencillo de hacer con expresiones regulares, por ejemplo).

Tenemos que estudiar bien cómo hacemos el script, ya que la entrada de datos es esencial. Sería improductivo hacer un script cuya llamada fuera:

1
<img src="scriptGenerador.php?texto=midireccion@miservidor.com" />

Ya que un motor se enteraría de que eso es una dirección de correo igualmente. Por lo que yo sugiero algunas opciones:

  • Para simplificar, podemos codificar el texto, por ejemplo, en base 64, el e-mail anterior quedaría así:bWlkaXJlY2Npb25AbWlzZXJ2aWRvci5jb20 y sería más complicado de detectar, aunque es nuestra responsabilidad hacer la conversión. Además, si en cualquier momento queremos identificar el texto que pusimos, en cierto punto del código debemos hacer la conversión inversa. Por otra parte, aunque es difícil que algún motor se dedique a convertir el texto en base64 a binario de nuevo, es posible.
  • Otra posibilidad es, si sólo vamos a escribir un sólo texto de esta forma, implantarlo dentro del archivo php que genera la imagen, como una variable del propio código, así no debemos escribir nada cuando llamemos al script. Si tenemos que cambiar el texto, basta con editar el script
  • Si, por el contrario, vamos a escribir varios mensajes, podemos asignar una clave a cada uno, por ejemplo, un número o una cadena de texto corta, y en nuestro script hacer corresponder ese número con el texto en cuestión.

Aquí vamos a hacer un ejemplo de la tercera opción. Aunque podemos extender el ejemplo usando bases de datos (si tenemos que introducir muchos mensajes, o muchas direcciones de e-mail diferentes), aquí vamos a crear un array en PHP para hacer corresponder la clave introducida con el valor (el texto que de verdad escribimos).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
  // Con esta función calculamos la anchura, altura del texto y dónde está la baseline de nuestro texto
  // con el tipo de letra seleccionado.
function dimensions($ldef, $texto)
{
  // Calcular el ancho
  $box=imagettfbbox ($ldef['size'], 0, $ldef['font'], $texto);
  $width = abs(abs($box[2]) - abs($box[0]));

  // Calcular el alto y la baseline
  $box=imagettfbbox ($ldef['size'], 0, $ldef['font'], 'ILyjgq'); // Tiene caracteres que no terminan en la baseline
  $height = abs($box[7] - $box[1]);
 
  $baseline = abs($box[5]);

  return array($width, $height, $baseline);
}

// Definimos un array con los posibles textos que vamos a presentar
$textArray=array("ejemplo", "de un fragmento de texto", 'gaspy@mi_servidor.com');


// Definimos el tipo de letra y el tamaño
$letra = array ('font'  => './LinLibertine_Bd.ttf',
        'size'  => 12,
        'color' => array(0,0,0),
        );

// Definimos el texto a presentar
$textID  = (isset($_GET['texto']))?$_GET['texto']:0;
$text = $textArray[$textID];

header('Content-Type: image/png');

// Creamos la imagen, calculando primero sus dimensiones dependiendo del tamaño del texto
$box_size=dimensions($letra, $text);
$im = imagecreatetruecolor($box_size[0], $box_size[1]);

// Creamos dos colores, y definimos el color que actuará como transparente
$background = imagecolorallocate($im, 255, 255, 255);
$fontColor  = imagecolorallocate($im, $letra['color'][0], $letra['color'][1], $letra['color'][2]);
imagecolortransparent($im, $background);

// Ponemos el fondo de la imagen transparente
imagefilledrectangle($im, 0, 0, $box_size[0], $box_size[1], $background);


// Creamos el texto
imagettftext($im, $letra['size'], 0, 0, $box_size[2], $fontColor, $letra['font'], $text);

// Generamos la salida
imagepng($im);
imagedestroy($im);
?>

Para el ejemplo he utilizado la fuente Linux Libertine Bold cuyo fichero ttf es LinLibertine_Bd.ttf, en realidad podemos utilizar cualquier fuente de la que dispongamos el fichero TTF.
El script que vemos, si lo llamamos desde el navegador con el parámetro textID=1 mostrará una imagen con el texto “de un fragmento de texto” dibujado dentro con el tipo de letra especificado anteriormente.

Ahora hacemos el siguiente archivo html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Ejemplo de texto</title>
    <style text="text/css">
      <!--
     @font-face {
     font-family: "Linux Libertine";
     src: url(LinLibertine_Bd.ttf);
     }
     body{
     background: #eee;
     font: 12pt Linux Libertine,sans;
     }

     .texto{
     vertical-align:bottom;
     margin: 0;
     padding: 0;
     }
    -->
    </style>
    <meta name="author" content="Gaspar Fernández">
  </head>

  <body>
    <h1>Ejemplo de texto</h1>

    Esto es un ejemplo de inserción <img src="texto.php?textID=1" class="texto"/> incluyendo una imagen en PHP
   
    <hr>
    <address>
      <a href="http://totaki.com/poesiabinaria">Gaspar Fernández</a>,
    </address>
  </body>
</html>

Con la parte CSS:

1
2
3
4
@font-face {
     font-family: "Linux Libertine";
     src: url(LinLibertine_Bd.ttf);
     }

Estamos definiendo el fichero que se descargará para visualizar el tipo de letra, así nos aseguramos de que sea el mismo tipo de letra (el de la imagen y el de nuestro texto). El resultado debería ser algo parecido a esto:
textexample

Guía de supervivencia para disfrutar de Linux Mint Debian Edition XFCE (IV : Soporte de idioma, tipografías y plugins de XFCE, complementos, efectos de escritorio con Compiz Fusion)

Jueves, 29 de Septiembre de 2011 Gaspar Fernández Sin comentarios

Hasta ahora, aunque en la instalación especificamos que queríamos el sistema en idioma español, era sólo para la instalación y algunas aplicaciones que ya instalaban el soporte para varios idiomas. Esto es así porque la instalación no requería de conexión a Internet, y en el DVD de instalación no se incluían los idiomas adicionales. Por ello tendremos que instalarlos.

Este post será largo, quiero incluir detalles de muchas cosas, y pongo aquí el índice:

Instalar paquetes de idioma para varias aplicaciones

A partir de ahora, instalaremos los paquetes de idioma español para Firefox, Thunderbird, LibreOffice y páginas del manual (man):

$ sudo apt-get install firefox-l10n-es thunderbird-l10n-es libreoffice-l10n-es manpages-es

También encontramos paquetes para Chromium o para la plataforma KDESC y muchos más.

Si queremos instalar los soportes de ortografía de Firefox debemos dirigirnos a esta dirección y podremos descargarlo e instalarlo directamente en el navegador.

Configuración de Linux Mint XFCE

Este paquete no viene instalado de serie, aunque estaría bien; a primera vista puede ser parecido a el administrador de configuración de XFCE (menu/Settings o Configuración/Administrador de Configuración; ejecutable: xfce4-settings-manager), aunque tiene algunas cosas más. Nos permite configurar la impresora, dispositivos bluetooth, usuarios, gestor de paquetes, monitor de sistema, diagnóstico de disco, copias de seguridad, etc. En definitiva es un centro de control donde podemos acceder a todo lo que tenemos en menu/Settings o Configuración , pero de una forma organizada.

Cuenta además con un grupo llamado Personalizar que nos permite elegir qué aplicaciones introducimos ahí de forma que tengamos un acceso directo.

xfce4-mintConfig

Para instalarlo,

$ sudo apt-get install mintconfig-xfce

Algo destacable acerca de esta aplicación y de los componentes que instala es que:

  • Permite configurar el sistema para iniciar los efectos de escritorio
  • Tiene herramientas para configurar recursos de red compartidos
  • Editor de configuración avanzada de XFCE.
  • Configuración de NDISwrapper (Controladores inalámbricos de Windows)
  • Copia de seguridad de tu home (mintBackup)
  • Bloqueador de dominios (mintnanny)
  • Soluciones a problemas con tipografías en algunos monitores a un click.

Si te gusta personalizar tu ordenador, es conveniente tenerlo a mano.

Instalar tipografías adicionales

Las tipografías suelen ser una parte importante para todos aquellos que diseñamos, escribimos, compartimos… el tipo de letra en sí expresa ya parte del mensaje. He oído varias veces decir que “instalar tipos de letra en Linux es complicado y que no hay tantas opciones como en otros sistemas”, cuando los formatos para los tipos de letra son los mismos para todos. Aquí instalaremos casi 600 tipografías ttf (TrueType)  sin complicarnos mucho la vida. Y ahora deberemos pasar al menos un par de días mirando todas las fuentes instaladas (muchas de ellas son libres).Tipografías

$ sudo apt-get install ttf-summersby ttf-ubuntu-title ttf-prociono ttf-liberation ttf-linux-libertine ttf-sjfonts ttf-okolaks ttf-opendin ttf-mplus ttf-georgewilliams ttf-femkeklaver ttf-engadget  ttf-dustin ttf-droid  ttf-breip  ttf-century-catalogue  ttf-comfortaa  ttf-baekmuk  ttf-ancient-fonts  ttf-adf-verana  ttf-aenigma  ttf-alee ttf-adf-baskervald  ttf-adf-libris ttf-bitstream-vera ttf-isabella ttf-xfree86-nonfree

Además, si alguien echa de menos los tipos de letra “de toda la vida” de Windows (Arial, Times New Roman, Verdana, Trebuchet), podemos instalarlos de la siguiente manera:

$ sudo apt-get install ttf-mscorefonts-installer

Complementos para el panel de XFCE

Los paneles pueden hacer mucho más de lo que hacen por defecto, por eso vamos a personalizarlos y a añadir complementos nuevos. Empecemos por el panel de arriba donde están los programas, la lista de escritorios y el botón de menú (arriba a la izquierda).

El primer paso, para añadir elementos es hacer click con el botón derecho en el panel > Panel > Añadir nuevos elementos:

PanelTras ello aparecerá una nueva ventana donde seleccionaremos el complemento a instalar, como primer complemento adicional escogeremos un control de volumen.

screenshot-17-09-2011-010935

Vamos a instalar unos cuantos plugins, aunque muchos de ellos los dejo para que cada uno descubra los que más le gustan o le resulten más útiles:

$ sudo apt-get install xfce4-clipman xfce4-clipman-plugin xfce4-cpugraph-plugin xfce4-genmon-plugin xfce4-mount-plugin xfce4-notes-plugin xfce4-notes xfce4-systemload-plugin xfce4-smartbookmark-plugin xfce4-timer-plugin  xfce4-verve-plugin xfce4-wmdock-plugin xfce4-datetime-plugin

Los cambios que diré ahora son algunas propuestas que a mí me resultan útiles:

  • Cambio del plugin por defecto de hora por el plugin “Fecha y hora”. Para ello debemos pulsar sobre el elemento actual de hora y elegimos “Quitar” del menú contextual. Luego añadir el elemento “Fecha y hora”, este elemento nos dará más información y, además, al hacer click con el botón izquierdo, nos mostrará un calendario.
    Calendario XFCE
  • Notas de escritorio. Para ello añadimos el plugin “Notas”
    Notas
  • . Nos permite ver los dispositivos que tenemos montados y desmontarlos a un clic.
    screenshot-17-09-2011-030935_2Aunque la configuración que viene por defecto no me gusta demasiado, propongo una configuración más práctica.
  • Clipman. Este complemento nos permite almacenar lo que vamos copiando en el portapapeles. Imagina que copiamos un texto, lo pegamos y seguimos trabajando, copiamos otro texto, y ahora necesitamos pegar el primer texto que copiamos. Este complemento nos ayuda a llevar a cabo esas acciones.
    Lo podemos ejecutar también como parte de la bandeja de sistema accediendo a menu/Settings o Configuración/Sesión e Inicio/Autoarranque de Aplicaciones y marcando Clipman.

Otras utilidades de XFCE

Ahora instalaremos algunas aplicaciones para XFCE que nos serán útiles en algunas circunstancias

  • xfce4-volumed . Esta aplicación es muy útil para usuarios de portátiles o teclados multimedia, ya que nos permitirá modificar el volumen del sistema con las teclas específicas para ello.
    Lo instalamos de la siguiente manera:
    $ sudo apt-get install xfce4-volumed

    Linux Mint configura este paquete para que se arranque automáticamente al iniciar XFCE.

  • orage . Es un gestor de calendario donde podemos anotar citas, eventos y tareas. Es muy sencillo, rápido y se integra bien con XFCE.
    Lo instalamos de la siguiente manera:
    $ sudo apt-get install orage
  • xfswitch-plugin . Es otro plugin para el panel que nos permite cambiar la sesión gráfica de usuario o identificarnos como un usuario nuevo sin cerrar la sesión actual. Podremos cambiar entre sesiones con Control+Alt+F7/F8/F9…
    Lo instalamos de la siguiente manera:
    $ sudo apt-get install xfswitch-plugin
  • epdfview . Es un visor de pdfs muy ligero. Tiene menos opciones que evince, pero para un visionado rápido nos vale.
  • pcmanfm . Es un administrador de archivos muy ligero, con soporte para pestañas y acceso a sistemas de archivos remotos (ssh/ftp/…)
    pcmanfmPodemos utilizarlo en lugar de Thunar para abrir directorios si nos vamos a Menu/Settings o Configuración/Aplicaciones preferidas > Utilidades y ahí seleccionamos PCMan File Manager:
    Por defecto PCManFM

Efectos de escritorio con Compiz

Seguro que es una de las partes que más llama la atención, y una de esas cosas que utilizaremos para sorprender a las visitas enseñándoles un entorno gráfico del futuro. Aunque, además de tener un entorno gráfico más amigable, si tenemos una tarjeta gráfica decente (Ati/NVIDIA o incluso Intel), y más o menos nueva (por lo menos de 2004/2005), podemos disfrutar de un mejor rendimiento general del sistema y de un entorno mucho más fluído (ya que dejamos algunas tareas más para la GPU) y tendremos un valor añadido en algunos efectos.

Cubo CompizYo no soy muy partidario de efectos elaborados y lentos, aunque el cubo de escritorios es una excepción, aunque lo tengo configurado para que tarde menos de medio segundo. Aunque tenemos otros efectos útiles como por ejemplo hacer Zoom a la pantalla (muy útil para diseñadores en algunas ocaiones, ¿quién no se ha acercado tanto al monitor para saber si dos líneas son paralelas?), o por ejemplo una previsualización de la ventana al pasar el ratón por encima de la barra de tareas.

Para instalar:

$ sudo apt-get install compiz-gtk compiz compizconfig-settings-manager  compiz-fusion-plugins-extra compiz-fusion-plugins-main

Ahora podremos habilitar Compiz desde la configuración de Linux Mint (xfce4-mintconfig), seleccionando Xfce mintDesktop y dentro del nuevo diálogo, en la pestaña Compiz Fusion, habilitando Compiz Fusion.

Configurar CompizAhora, debemos ir a la configuración de Compiz, Compiz Config Settings Manager, o CCSM; podemos hacerlo ejecutando el comando ccsm, o desde la misma pantalla de configuración de Linux Mint pulsando en Configurar Compiz con CompizConfig.

ccsmA partir de aquí os dejo para configurar vuestros efectos de escritorio a medida.

Apéndice I: Configurando el plugin Mount Devices

Configurar esta extensión no es complicado. Si vimos la captura anterior, se mostraban todos los puntos de montaje (yo tengo muchas particiones, para /usr, /var, /boot, etc y no me interesa desmontarlas, es más, no quiero verlas ahí; por otra parte, puede que utilice recursos de red y sí que quiera desmontar estos. Empecemos haciendo clic con el botón derecho del ratón y seleccionando Propiedades:

Mount props1Podemos mostrar un mensaje nada más desmontar el dispositivo, pero mejor desmarcamos esa casilla, ya que vamos a hacer algo más completo en la siguiente pestaña. También podemos seleccionar un icono, eso es a gusto del usuario.

En la siguiente pestaña, Commands, encontramos comandos personalizados a la hora de montar y desmontar volúmenes.

Command Mount pluginEn este punto, marcaremos la casilla “Custom commands“, para indicar comandos para montar/desmontar unidades manualmente. Los parámetros de montaje (Execute after mounting y Mount command) los podemos dejar en blanco, ya que el montaje se reserva para todos los puntos especificados en /etc/fstab y no para los dispositivos que el sistema vaya descubriendo.

Aunque para Unmount command, yo tengo puesto lo siguiente:

pumount %d && notify-send “%d desmontado correctamente” || notify-send “Hubo un problema al desmontar %d”

Es necesario tener pmount instalado. Con esta línea podremos ver un mensaje como notificación ya haya tenido éxito o no la operación. Esta línea no valdrá para ubicaciones de red aunque podemos vincular la operación a un script más complejo.

Por último, en la pestaña File Systems, podemos indicar qué queremos mostrar y qué no queremos mostrar

File Systems Mount devicesEn esta pestaña, podemos seleccionar la opción de  representar sistemas de archivos de red (Display network file systems), expulsar unidades de CD (Eject CD-drives) mostar sólo los puntos de montaje y no el dispositivo o el UUID, lo cual puede llegar a ser incómodo (Display mount points only), y por último excluir algunos sistemas de archivo (Exclude specified file systems), y es en esa opción donde escribimos separados por espacios los puntos de montaje separados por espacios que no queremos mostrar; en mi caso, son los puntos de montaje del sistema.

Limitando el uso de Flash en Firefox

Miércoles, 20 de Julio de 2011 Gaspar Fernández 2 comentarios

Hace dos días leo en Usemos Linux un artículo sobre administrar el uso de Flash desde Firefox, aunque yo estaba preparando una recopilación parecida de extensiones que nos ayudarán para limitar el uso de esta tecnología.

Introducción

Debo destacar que Flash me parece una tecnología muy pesada, que encierra errores del pasado para asegurar retrocompatibilidad y eso se traduce en bajo rendimiento. Es multiplataforma, aunque a duras penas, y beneficia muchas veces a plataformas Windows.

Aunque tenemos alternativas, muchas veces se puede hacer lo mismo utilizando HTML+Javascript / Ajax o HTML5, también tenemos Silverlight / Moonlight (aunque el remedio no sea muy diferente a la enfermedad), a veces, tanto diseñadores como programadores se ponen en contra del mundo creando páginas con bastantes flash empotrados, por ejemplo, dificultando la navegación por la web, consumiendo ancho de banda y, a veces, consumiendo nuestro procesador haciendo que todo nuestro sistema nos vaya más lento.

I. Stop Autoplay

Es mi preferido, me permite, desactivar todos los elementos que se reproduzcan automáticamente, como música, vídeos empotrados, Flash o Silverlight, permitiendo reproducirlos cuando hacemos click sobre ellos.

Permite introducir máscaras para que no haya que pulsar sobre ciertos elementos y se reproduzcan automáticamente, pero yo prefiero hacer click si voy a reproducir.

Es muy útil para el primer caso descrito arriba, webs con muchos elementos flash que nos incomodan, nos permite pasar un poco de todos ellos ganando rendimiento y comodidad; por cierto, también es muy útil para juegos de Facebook donde te pones a aceptar regalos y cada vez que aceptas se carga el juego, con esto se acabaron los problemas.

Tiene cierto parecido con Flashblock, pero me gusta mucho más Stop Autoplay.

Lo podemos descargar desde aquí. Según dice el autor hubo problemas con votos negativos en la página de complementos de Mozilla y tuvo que retirarlo.

II. Low Quality Flash

Esta extensión hace que todos los elementos Flash se reproduzcan en baja resolución. Si tienes un ordenador con algunos años lo agradecerás…

Se puede descargar desde aquí.

Actualización 20/07/2011 10:16 — No funciona en Firefox 5, habrá que esperar un poco, o modificar el plugin a mano, creo que no hace nada que FF5 haya prohibido.

III. Flashtoggle y QuickJava

Nos permiten activar y desactivar Flash globalmente. Podemos desactivar Flash en cualquier momento, aunque para reactivarlo hace falta recargar la página.

QuickJava nos permite activar y desactivar Java / Javascript / Flash / Silverlight / Imágenes / CSS por lo que es mucho más completo.

Podemos bajarlos desde aquí: Flashtoggle / QuickJava

IV. Flash Resizer

Otra joya que nos permite ver un elemento Flash con menor o mayor tamaño del que viene en una web de una forma muy sencilla… redimensionándolo con el ratón.

Lo podemos bajar de su página oficial.

Algo más

Bueno, todo esto está muy bien, pero no podemos olvidarnos de Flash Video Replacer, extensión de la que ya hablé hace un año más o menos, que reemplaza el vídeo flash empotrado por un reproductor del sistema que sin duda irá más rápido y aprovechará mejor la aceleración hardware.

C.I. X: Creando un Framework PHP, Microsoft y Nokia a lo suyo, mejores momentos para publicar, clones libres de juegos

Domingo, 3 de Julio de 2011 Gaspar Fernández Sin comentarios

Una pequeña recopilación de enlaces de estos días:

Índice de soluciones a todos los retos de #tuentiContest

Sábado, 2 de Julio de 2011 Gaspar Fernández Sin comentarios

Aunque se puede acceder a través de las categorías del blog, desechando un poco algunos contenidos, he decidido hacer un índice con las soluciones de todos los Challenges y sus últimas actualizaciones, porque a día de hoy todavía se siguen actualizando y añadiendo nuevas soluciones.
Esto también sirve de referencia para todos aquellos que van a hacer poco a poco y tranquilamente los retos, son y para tener un acceso directo a todos los retos sin necesidad de andar buscando por el blog:

Reto Última actualización Última colaboración
Challenge 1: Super Hard Sum 2011/07/03 @Rosapolis
Challenge 2: TLang 2011/07/08 captain_regex
Challenge 3: Emirps 2011/07/03 @Rosapolis
Challenge 4: Task Duration 2011/07/03 @Rosapolis
Challenge 5: The Milkman Problem 2011/07/03 @Rosapolis
Challenge 6: The Clock 2011/07/03 @Rosapolis
Challenge 7: The Tile Game 2011/07/03 @Rosapolis
Challenge 8: The Biologist Problem 2011/07/03 @Rosapolis
Challenge 9: Christmas Lights 2011/07/04 @lagunex
Challenge 10: Key Combos 2011/07/04 @lagunex
Challenge 11: Gas Stations 2011/07/08 @lagunex
Challenge 12: The Stargate Problem 2011/07/13 @lagunex
Challenge 13: The Other Clock 2011/07/13 @lagunex
Challenge 14: Colors Are Beautiful 2011/07/14 @lagunex
Challenge 15: The Robot 2011/07/19 @lagunex
Challenge 16: The Bus Stations 2011/07/19 @lagunex
Challenge 17: The ¿? Problem 2011/07/03 @Rosapolis
Challenge 18: The Riddle 2011/07/03 @Rosapolis
Challenge 19: The Caesar Salad 2011/07/03 @Rosapolis
Challenge 20: The Clumsy Programmer 2011/07/03 @Rosapolis

Iré actualizando estas páginas a medida que me vayan llegando soluciones. Si has resuelto los retos, ya hayas participado en el concurso o no, puedes enviarme un link con tus soluciones (en pastebin, github, tu blog, etc) en un comentario o un mensaje por twitter (@blakeyed).

Actualización: 2011/07/03 02:40 Añadidas nuevas soluciones a todos, por @frisco82 y @blakeyed
Actualización: 2011/07/03 14:00 Añadidas nuevas soluciones a todos menos el 16, por @Rosapolis
Actualización: 2011/07/04 12:54 Añadida la solución de @lagunex al Challenge 9
Actualización: 2011/07/04 17:35 Añadida la solución de @lagunex al Challenge 10
Actualización: 2011/07/08 12:44 Añadidas soluciones de captain_regex al Challenge 2 y de @lagunex al Challenge 11
Actualización: 2011/07/13 02:49 Añadida solución de @lagunex al Challenge 12
Actualización: 2011/07/13 16:11 Añadida solución de @lagunex al Challenge 13
Actualización: 2011/07/14 14:55 Añadida solución de @lagunex al Challenge 14
Actualización: 2011/07/19 17:55 Añadidas soluciones de @lagunex al Challenge 15 y Challenge 16

Recopilación de soluciones para los retos de #tuentiContest . Challenge #17

Miércoles, 29 de Junio de 2011 Gaspar Fernández Sin comentarios

Últimamente he hablado acerca del I concurso de programación de Tuenti. Un concurso de programación Online que se llevó acabo durante la semana pasada (del 13 al 20 de Junio, muy mala fecha).

Podéis ver los enunciados de todos los problemas, con ejemplos sobre la entrada y salida (aunque a veces no hay que hacerles mucho caso) en la web oficial del concurso, pero en Vidas Concurrentes lo encontramos todo en español.

Challenge #17 : The ¿? Porblem

También conocido como “Just do it.” por las palabras de su enunciado. Lo que no nos decían es que nos mandaban una imagen PNG en base64 por la entrada estándar. Si la abríamos como texto, después de muchos datos binarios podíamos leer un texto: “There is more data in this image than meets the eye“, pensemos ahora en esteganografía, por ahí iban los tiros.
Soluciones:

Si no estás en la lista y quieres plantear tu solución, deja un comentario con tu link !

Actualización 2011/07/03 01:49 : Añadida solución de @frisco82
Actualización 2011/07/03 01:59 : Añadida mi solución (@blakeyed)
Actualización 2011/07/03 13:52 : Añadida solución de @Rosapolis

Recopilación de soluciones para los retos de #tuentiContest . Challenge #16

Martes, 28 de Junio de 2011 Gaspar Fernández 2 comentarios

Últimamente he hablado acerca del I concurso de programación de Tuenti. Un concurso de programación Online que se llevó acabo durante la semana pasada (del 13 al 20 de Junio, muy mala fecha).

Podéis ver los enunciados de todos los problemas, con ejemplos sobre la entrada y salida (aunque a veces no hay que haerles mucho caso) en la web oficial del concurso, pero en Vidas Concurrentes lo encontramos todo en español.

Challenge #16 : The Bus Stations

Nos dan una serie de rutas de autobús entre varias ciudades, con su capacidad de autobuses por día, también nos dicen una ciudad de origen y destino y tenemos que decir cuántos autobuses como máximo podemos poner en marcha cada día.
Soluciones:

Si no estás en la lista y quieres plantear tu solución, deja un comentario con tu link !

Actualización 2011/07/03 01:49 : Añadida solución de @frisco82
Actualización 2011/07/03 13:50 : Añadido mirror a la solución de @Rosapolis
Actualización 2011/07/19 17:55 : Añadida la solución de @lagunex

Recopilación de soluciones para los retos de #tuentiContest . Challenge #12

Sábado, 25 de Junio de 2011 Gaspar Fernández 2 comentarios

Últimamente he hablado acerca del I concurso de programación de Tuenti. Un concurso de programación Online que se llevó acabo durante la semana pasada (del 13 al 20 de Junio, muy mala fecha).

Podéis ver los enunciados de todos los problemas, con ejemplos sobre la entrada y salida (aunque a veces no hay que haerles mucho caso) en la web oficial del concurso, pero en Vidas Concurrentes lo encontramos todo en español.

Challenge #12 : The Stargate Problem

Tenemos que dar saltos entre planetas. Llegar de la Tierra a Atlantis, dando saltos entre planetas a través de Stargates, cada salto tendrá un coste en tiempo, empezaremos en la fecha estelas 25000 y si podemos llegar en el pasado mejor. Eso sí, si no podemos determinar la fecha, tendremos que decir: “BAZINGA”

Soluciones:

Si no estás en la lista y quieres plantear tu solución, deja un comentario con tu link !

Actualización 2011/06/25 13:23 : Añadida solución de @enwillyado
Actualización 2011/06/28 08:30 : Añadida solución de @theom3ga
Actualización 2011/07/03 01:45 : Añadida solución de @frisco82
Actualización 2011/07/03 13:45 : Añadida solución de @Rosapolis
Actualización 2011/07/13 02:48 : Añadida solución de @lagunex

Recopilación de soluciones para los retos de #tuentiContest . Challenge #8

Jueves, 23 de Junio de 2011 Gaspar Fernández 2 comentarios

Últimamente he hablado acerca del I concurso de programación de Tuenti. Un concurso de programación Online que se llevó acabo durante la semana pasada (del 13 al 20 de Junio, muy mala fecha).

Podéis ver los enunciados de todos los problemas, con ejemplos sobre la entrada y salida (aunque a veces no hay que haerles mucho caso) en la web oficial del concurso, pero en Vidas Concurrentes lo encontramos todo en español.

Challenge #8 : The Biologist Problem

Eres un biólogo, y tienes que examinar dos cadenas de ADN. Recibimos las cadenas por la entrada estándar como un conjunto ordenado de bases de nucleótidos, hay que hallar el conjunto ordenado más grande entre ambas cadenas de ADN.

Ejemplo:

ATGTCTTCCTCGA
TGCTTCCTATGAC

Soluciones:

Si no estás en la lista y quieres plantear tu solución, deja un comentario con tu link !

Actualización 2011/06/28 08:25 : Añadida la solución de theom3ga
Actualización 2011/07/01 13:50 : Añadida la solución de @lagunex
Actualización 2011/07/03 01:42 : Añadida solución de @frisco82
Actualización 2011/07/03 13:35 : Añadida solución de @Rosapolis

Visita otras webs de la red