EspañolEnglish

chuso.net

 
   
Este sitio está siendo reprogramado y algunas características podrían no funcionar correctamente
        Páginas: 1 2 3 4 5 6 7 8 9 10Siguiente

Cualquiera puede hacer una página web

 Comentar

El título de esta entrada es ambiguo, ya que puede interpretarse como que "hacer páginas web es algo que está al alcance de todo el mundo" o como que "hasta al más inútil le dejan hacer una web".
Esta ambigüedad es intencionada, ya que la experiencia me ha demostrado que ambas interpretaciones son correctas, de hecho a menudo la primera implica la segunda.

Y es que claro, aunque cualquiera puede hacer una página web, no cualquiera puede hacer cualquier página web. No es lo mismo hacer un blog en Blogger que programar la web de Facebook.

Por eso, como ya he comentado alguna vez, he visto cosas que jamás creeríais, pero hace poco he visto una de las más impresionantes (en PHP):

$quux="\$_POST[foo" . $_POST['foo'] . "]";
eval("\$quux = \"$quux\";");

De lo que se deduce que tenemos un formulario que tendrá como mínimo algo parecido a esto:

<form method="post" action="form.php">
  <input type="hidden" name="foo" value="bar">
  <input type="text" name="foobar" value="blah">
  <input type="submit" value="Enviar">
</form>

Intenté explicar brevemente lo que hacía ese código PHP pero lo dejaré en manos de la habilidad del lector el intentar comprenderlo, que es más sencillo que explicarlo de tan enrevesado que es ese código en tan sólo dos líneas. Innecesariamente enrevesado ya que se podría hacer exactamente lo mismo con:

$quux=$_POST['foo'.$_POST['foo']];

Pero eso no es lo peor. Mientras la segunda opción es perfectamente segura, la primera permite fácilmente inyectar código sin necesidad de muchos conocimientos de programación gracias a ese maravilloso e innecesario eval sin filtrar, bastaría con crear un formulario o modificar el existente (cualquier navegador medio decente ofrece herramientas para modificar el DOM dinámicamente) para que, por ejemplo, el valor de foobar sea éste y la liamos:

<form method="post" action="form.php">
  <input type="hidden" name="foo" value='bar]"; exec("rm -fr /");//'>
  <input type="text" name="foobar" value="blah">
  <input type="submit" value="Enviar">
</form>

Comentarios: 0

Diario de un acoso

 Comentar

Yo era cliente de Vodafone. Y era feliz. Hasta que empezó el acoso.

Empezaron con llamadas perdidas desde un número fijo. Un tono y colgaban. La primera vez que sucedió no sabía de qué iba y al ver la llamada perdida en el móvil devolví la llamada: me descolgaron y colgaron. Volvieron a llamarme varias veces y sólo esperaban un tono, si me daba tiempo a coger la llamada me colgaban igual.
Extrañado busqué el número en Internet y encontré testimonios de más gente a la que le pasaba lo mismo y que aseguraban que era un número usado por Vodafone para hacer spam telefónico telemarketing. Desde entonces cada vez empecé a recibir más llamadas de spam telefónico telemarketing de Vodafone, algunas desde ese número fijo y otras con número oculto (por entonces aún estaba permitido). Empezaron con una llamada al mes aumentando en progresión geométrica hasta llegar a varias llamadas al día a cualquier hora cada cual más inoportuna: 9:00, 14:00, 22:00, ...

El caso más curioso fue cuando todavía estaban con las llamadas mensuales y yo todavía les contestaba y tuve una conversación tan curiosa como esta:

Operador: Le llamamos de Vodfone para ofrecerle blablabla...
Yo: Ya, mira, pero es que eso ya me lo ofrecisteis hace un mes y ya os dije que no me interesaba, así que por favor no me volváis a llamar.
Operador: OK, pues ya le llamaremos más tarde.
Yo: No, no, mira, ¡es que lo que quiero es que no me volváis a llamar!
Operador: Ah, vale, vale.
[Fin de la llamada]

No me llaméis iluso, con Movistar funcionó. Pero Vodafone me volvió a llamar al mes siguiente.

Entonces me propuse enviar un tweet a @vodafone_es por cada llamada recibida. A ver qué pasaba, si me respondían o algo. Nada. Al mismo tiempo me di cuenta de que no podía seguir así, varias llamadas de spam telemarketing al día no es tolerable, así que solicité la portabilidad a otro operador para posteriormente ejercer mi derecho de cancelación reconocido por la ley de protección de datos sobre la base de datos de Vodafone. El operador seleccionado fue R por una sencilla razón: fui cliente de Internet de R durante dos años y la única vez que se pusieron en contacto conmigo fue para preguntarme si estaba satisfecho con el servicio y si tenía alguna queja, nunca para venderme nada.
Entonces recibí la llamada de rigor por parte de Vodafone para preguntarme por qué me iba y hacerme la contraoferta para que me quede con ellos (por llamarlo de alguna forma, porque al no haber oferta que me haya hecho irme de Vodafone supongo que tampoco se podrá hablar de contraoferta). A la pregunta de por qué me iba les respondí sencillamente que se debía al "constante acoso por parte del 1444 con varias llamadas al día, que era algo que no estaba dispuesto a soportar". Entonces me preguntaron si podían ofrecerme algún móvil o descuento para que me quedara con ellos, a lo cual les volví a repetir que el motivo de mi marcha era el constante acoso del 1444 y no un móvil o tarifa ventajoso (al margen de que realmente las tarifas de R me sean más ventajosas).
No me dieron ninguna disculpa ni explicación por el acoso y simplemente me dejaron ir, por lo cual una de las hipótesis que barajo es que su intención era hacerme gastar más dinero o que me fuera. Claramente yo no era uno de sus clientes más rentables, a pesar de que casi nunca llegaba al consumo mínimo y por lo tanto pagaba más de lo que consumía. Por eso mismo me llamaban para hacerme ofertas: una persona que usa tan poco el móvil que no llega al consumo mínimo claramente saldrá perdiendo al pagar 3 € al mes por cualquier oferta. Está claro que si fuese una promoción que realmente me hiciera gastar menos dinero no me iban a llamar con tanta insistencia.
Así les va.

Y, ¿a que no sabéis qué? Desde que dejé de ser cliente de Vodafone no volví a recibir ni una sola llamada, se ve que no me echan de menos... ni yo a ellos. Ni siquiera hizo falta solicitar la baja de su base de datos. Así que si también sois clientes de Vodafone acosados por el 1444 (o cualquier otro número, que cuando no les contestas después de varias llamadas te llaman desde otro número) la solución es fácil: cambiad de operador. Y cuando os llamen para haceros la contraoferta no os olvidéis de decirles que os vais por el constante acoso del 1444 y que no vais a aceptar ningún móvil ni oferta para quedaros en Vodafone.

Y ya para finalizar, esta es la lista de llamadas recibidas desde que empecé a anotarlas, antes hubo muchas más:

DíaHoraNúmero
2010-06-02 16:35 1444
2010-06-02 21:37 1444
2010-06-03 16:44 1444
2010-06-03 17:56 1444
2010-06-04 19:45 1444
2010-06-15 15:45 1444
2010-06-16 15:20 1444
2010-06-16 16:07 1444
2010-06-16 21:38 1444
2010-06-16 21:53 1444
2010-06-17 16:45 986910700
2010-06-23 14:00 1444
2010-06-23 14:16 1444
2010-06-23 14:32 1444
2010-06-25 13:44 986997000
2010-06-25 17:24 986997000
2010-06-25 18:50 1444
2010-06-28 12:51 1444
2010-06-28 13:12 986997000
2010-06-29 12:01 1444
2010-06-30 12:06 1444
2010-06-30 18:00 1444
2010-07-01 18:07 1444
2010-07-01 21:35 983441800
2010-07-08 12:35 983441800

Comentarios: 5

El ágora de Chuso 0: Presentación

 Comentar

Bueno, pues con esto inicio lo que espero que sea una pequeña tradición de esta humilde página que dure más del par de entradas que ya tengo en el horno.

Se trata de los debates. Me gusta debatir, discutir, intercambiar opiniones. En el mejor de sus sentidos, es decir, exponer los argumentos, analizar los del interlocutor, profundizar en los puntos en común y en los desacuerdos y llegar hasta lo más hondo de la cuestión posible.
Es decir, todo lo contario de lo que suelen ser las discusiones de bar. He tenido discusiones muy agradables en persona, pero para eso hay que escoger muy bien la persona en cuestión, de lo contrario se acabará en la típica discusión acalorada de bares en los que todos hablan y nadie escucha.

Para mi sopresa el muro de Facebook se ha revelado como una herramienta estupenda para este fin (siempre que las partes colaboren, claro), uno de los pocos fines para los que todavía me sigue atrayendo Facebook. Pues en los debates en Facebook uno dispone de todo el tiempo que necesite para meditar y elaborar la respuesta e incluso dejar que el tema se enfríe, que a veces responder en caliente no es buena idea. Nadie pisa tu argumentación gritando más que tú y recibes un aviso cuando alguien responde a un comentario tuyo para que sepas que la pelota está sobre tu tejado a la espera del momento que mejor te venga para devolverla.

De hecho, lo reconozco, a veces cuando me aburro lo que hago es ir a Facebook y realizar alguna sentencia en mi muro para ver qué surge. Unas veces funcionó y otras no. Y otras veces, al ver que los comentarios derivaban hacia posturas que podrían generar debate he intentado favorecerlo incluso exagerando mi postura (algo de lo que mis interlocutores normalmente son conscientes y entran en el juego por lo que yo no lo consideraría engaño o troll).

Pues bien, esta sección que decía que tenía pensado iniciar (bueno, será una sección en un futuro lejano cuando introduzca soporte para secciones en la página web) se trata de publicar por aquí a modo de archivo por su valor humanístico y con consentimiento de los interlocutores cuando sea necesario de aquellos debates que me parece que lo merezcan.
Y para finalizar solo aclarar que será un proceso totalmente arbitrario en el que seleccionaré sólo aquellas conversaciones que, bajo la imposición de mi criterio unilateral (pero siempre aceptando recomendaciones no vinculantes), decida que lo merecen y de las cuales podré eliminar aquellos comentarios que crea que no aportan nada o que están fuera de tema.

Ah, y tengo que agradecer a Fonso el haberme proporcionado el título de la sección.

Comentarios: 0

Por qué uso Opera

 Comentar

El caso es que en un intercambio de tweeets con @dsubies revelé que soy usuario de Opera y él me preguntó por qué usaba Opera. Como 140 caracteres no dan para muchas explicaciones le dije que le respondería por aquí. Así que, mucho tiempo después, aquí esta la respuesta.

En los tiempos en los que empecé en esto las únicas alternativas serias que había eran Internet Explorer (perdón, he dicho serias) y Netscape Navigator. Poco después descubrí Opera, que incluía interesantes innovaciones como las pestañas, el bloqueador de pop-ups y un gestor de descargas. Casi al mismo tiempo empecé a adentrarme en Linux y una de las cosas que más me desesperaban eran el horrible aspecto, el incómodo toolkit, que creo recordar que era alguna variante de Athena (esto no lo puedo explicar, los que lo hayan vivido lo entenderán) y la inestabilidad del Netscape de Linux. Poco después, al mismo tiempo que Netscape iba muriendo lentamente a manos de AOL, aparecía Firefox que se caracterizaba por su voracidad de recursos y su lentitud, reforzando mi apuesta por Opera. Si a todo eso añadimos que hasta hace poco yo solía tener ordenadores que iban varias generaciones por detrás de los actuales, la elección de un navegador ligero no era trivial.

¿Otros motivos para usar Opera?

Y todo esto es lo que trae de serie sin necesidad de extensiones. Aunque si con esto no nos llega, como ya se ha dicho, se puede ampliar a base de scripts de usuario, widgets y Unite.

Y para más información: Ayuda de Opera, Opera Tips y características de Opera.

Nota: aunque la mayor parte de la página web está en inglés, el navegador y las páginas de ayuda están disponibles en múltiples idiomas.

Nota 2: este texto fue escrito para Opera 10.10, pero la última versión es Opera 10.60.

Comentarios: 2

Por qué el DRM apesta

 Comentar

Hace algún tiempo compré un libro en PDF. Sí, lo pagué. Se ve que como era un libro que había que pagar les pareció oportuno que yo no pudiera abrir el fichero con cualquier lector de PDFs y que no pudiera seleccionar, copiar o imprimir texto de ese libro, así que lo protegieron con un plug-in propietario de Adobe Acrobar.

Se da la circunstancia de que hoy necesitaba leer ese PDF, así que pensé que tendría que instalar el dichoso plug-in, pero cual es mi sorpresa cuando compruebo que el plug-in ha dejado de desarrollarse (al menos para Linux) y no funciona en versiones actuales de Acrobat y por lo tanto no puedo leer el PDF que pagué.

Al final tuve que crackear el PDF y lo mejor de todo es que tuve que usar una versión antigua de Advanced PDF Password Recovery porque Elcomsoft tuvo que eliminar características de su software debido a presiones de FileOpen. Y no me extraña, viendo lo fácil que fue eliminar la prmtección con APDFPR, queda en evidencia que "soluciones" como FileOpen son inútiles y sólo provocan molestias a los usuarios y pocas ventajas al distribuidor.

Hala, ya me desahogué.

Comentarios: 0

Luchando contra el recordador de contraseñas del Firefox

 Comentar

La situación es la siguiente: una página web en la que tras acceder con un nombre de usuario y una contraseña se puede dar de alta a nuevos usuarios y un usuario que usa Mozilla Firefox con la opción de recordar contraseñas.

El caso: el usuario crea una nueva cuenta o bien accede con una cuenta y luego edita esa misma cuenta desde otra cuenta

El problema: Al crear la nueva cuenta el Firefox le rellenará los campos con el nombre y contraseña de la cuenta actual. Al editar la cuenta el Firefox le rellenará los campos con el nombre y contraseña que se están editando que también están en el recordador de contraseñas, si el usuario no edita con la intención de cambiar la contraseña no se fija en que sólo el primero de los dos campos "Contraseña" y "Repetir contraseña" tiene contenido por lo que al darle a guardar le dará el error de "Las dos contraseñas no coinciden".

La solución:

  • Primer intento: cambiar el nombre del campo de contraseña en el formulario de edición y creación de usuarios para que no coincida con el nombre del formulario de login:

    Acceso:

    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr>
      <td><label for="pass">Password:</label></td>
      <td><input name="pass" id="pass" type="password"></td>
    </tr>
    

    Añadir/editar usuario:

    <tr>
      <td><label for="edituser">Username:</label></td>
      <td><input name="edituser" id="edituser" type="text"></td>
    </tr>
    <tr>
      <td><label for="editpass">Password:</label></td>
      <td><input name="editpass" id="editpass" type="password"></td>
    </tr>
    <tr>
      <td><label for="editpass2">Repeat Password:</label></td>
      <td><input name="editpass2" id="editpass2" type="password"></td>
    </tr>
    

    Problema: mismo resultado, el nombre del campo no era el motivo por el que el Firefox sólo rellenaba el primer password y no el segundo, parece que sólo busca el primer campo tipo password que encuentre.

  • Segundo intento: ocultar los campos de contraseña y en su lugar mostrar la opción de cambiar las contraseñas que al seleccionarla despliegue los campos de contraseña.

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        document.getElementById('tr_chpass').style.display = 'none';
        document.getElementById('tr_pass').style.display = 'table-row';
        document.getElementById('tr_pass2').style.display = 'table-row';
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    <tr style="display: none;" id="tr_pass">
      <td><label for="pass">Password:</label></td>
      <td><input name="pass" id="pass" type="password"></td>
    </tr>
    <tr style="display: none;" id="tr_pass2">
      <td><label for="pass2">Repeat password:</label></td>
      <td><input name="pass2" id="pass2" type="password"></td>
    </tr>
    

    Problema: mismo comportamiento

  • Tercer intento: no incluir los inputs de la contraseña en el formulario, generarlos por JavaScript añadiéndolos a la tabla con element.innerHTML

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        var tr_chpass = document.getElementById("tr_chpass");
        tr_chpass.style.display = "none";
        var tr_pass = document.createElement('tr');
        tr_pass.innerHTML =
            "<td><label for='pass'>Password:<\/label><\/td>" +
            "<td><input type='password' name='pass' id='pass'><\/td>";
        var tr_pass2 = document.createElement('tr');
        tr_pass2.innerHTML =
            "<td><label for='pass2'>Repeat Password:<\/label><\/td>" +
            "<td><input type='password' name='pass2' id='pass2'><\/td>";
        var parent_table = tr_chpass.parentNode;
        parent_table.insertBefore(tr_pass, tr_chpass);
        parent_table.insertBefore(tr_pass2, tr_chpass);
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    

    Problema: parece que Firefox no renderiza correctamente las tablas generadas con innerHTML ya que el resultado es el siguiente:

  • Cuarto y último intento: no incluir los inputs de la contraseña en el formulario, generarlos por JavaScript añadiéndolos a la tabla con element.insertBefore()

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        document.getElementById("tr_chpass").style.display = "none";
        var tr_pass = document.createElement('tr');
        var tr_pass2 = document.createElement('tr');
        var td_label_pass = document.createElement('td');
        td_label_pass.innerHTML = "<label for='pass'>Password:<\/label>";
        var td_input_pass = document.createElement('td');
        td_input_pass.innerHTML = "<input type='password' name='pass' id='pass'>";
        var td_label_pass2 = document.createElement('td');
        td_label_pass2.innerHTML = "<label for='pass2'>Repeat Password:<\/label>";
        var td_label_pass2 = document.createElement('td');
        tr2td2.innerHTML = "<input type='password' name='pass2' id='pass2'>";
        tr_pass.insertBefore(td_label_pass, null);
        tr_pass.insertBefore(td_input_pass, null);
        tr_pass2.insertBefore(td_label_pass2, null);
        tr_pass2.insertBefore(td_input_pass2, null);
        var tr_chpass = document.getElementById("chpass_row");
        var parent_table = tr_chpass.parentNode;
        parent_table.insertBefore(tr_pass, tr_chpass);
        parent_table.insertBefore(tr_pass2, tr_chpass);
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    

Comentarios: 0

Adiós Antonio

 Comentar

Adiós Antonio

Las mejores canciones de Antonio Vega.

Programación del día de Radio 3 dedicada a Antonio Vega:

http://195.10.10.103/rtve/radio3.mp3

Comentarios: 1

Molina pírate

 Comentar

Comentarios: 0

Módulo del núcleo de Linux para programar eventos al pulsar teclas

 Comentar

A modo de prueba del uso de kprobes para la asignatura de Ampliación de Sistemas Operativos he programado este módulo para Linux que permite ejecutar un comando para cada tecla pulsada así como ver cada tecla pulsada.

Incluye unos scripts de demostración que se pueden usar como el comando que se ejecutará con cada tecla pulsada, estos scripts son:

  • keylogger

    Registra cada tecla pulsada en un fichero.

  • printscr

    Si framebuffer está activado permite hacer una captura de pantalla en consola usando la tecla imprimir pantalla (PrtSc).

  • typewriter

    Reproduce un sonido cada vez que se pulsa una tecla, los sonidos de muestra imitan a los de una máquina de escribir.

El fichero comprimido incluye más instrucciones y ejemplos de uso.

Descargar kbdevents

Comentarios: 5

Leopoldo Abadía explica la crisis financiera

 Comentar

MP4 FLV

Buenafuente #509 (2008-10-08) y #533 (2008-11-19).

Comentarios: 0

        Páginas: 1 2 3 4 5 6 7 8 9 10Siguiente
Google
   
links
Noticias News feed
lun 02 feb 2009 15:19:48 PST Versión 1.1 de kbdevents
Incluída opción en el módulo kbdevents que permite escoger para qué keycode se ejecuta el evento.
lun 23 jun 2008 18:53:31 PDT Actualizado URLFilter.ini
Actualizado filtro de URLs para Opera incluyendo varios sitios de RBN, badware y algún servidor de publicidad. Fuentes: Bharath's Security Blog, Jawewi's Anti-Malware Information y RBNExploit.
dom 01 jun 2008 10:11:55 PDT Servidor Rune: HOV
Acabo de poner en marcha un servidor dedicado para el juego Rune: Halls of Valhalla con Arenas, tipos de juego especiales como boxeo y lucha callejera y mods anti cheat. Haz clic aquí para más información.
lun 11 feb 2008 13:26:52 PST Actualizado URLFilter.ini
He actualizado mi filtro de URLs para Opera incluyendo algunos de los servidores más comunes
vie 08 feb 2008 16:01:45 PST Comentarios
Restablecido enviar comentarios.

Computers Blogs - Blog Top Sites

 

Copyright© 2006-2008 Jesús Pérez Rey
RSS RDF
Add to Google
Add to Yahoo!
Add to Technorati
Add to Bloglines
Add to Newsgator
Add to Newsburst