Concurso de C “a pelo”

Recientemente surgió en una newsletter de O’Reilly un concurso que me pareció bastante curioso. Las bases eran las siguientes:

It seems like a new language is spawned every day, but the old tried-and-true warriors of the code world continue to soldier on. This week, the specification for C++ version 14 was frozen, and it includes such features as enhanced lambda expressions (because all the cool languages are doing it). In honor of this momentous event, we’re running a little contest to test your chops with the bare C. Sure, anyone can create awesome code using all the libraries that modern operating systems come with, but what can you do close to the metal?

Your challenge is to create a nontrivially useful application that will compile on a Linux system using the following command:

 gcc -nostdlib -o sample sample.c startstub.S

startstub.S is an i386 assembler file that can call main() without the standard libraries and can be downloaded here. You need to have a function main defined as “int main()” that can return a value, which will end up in $?. Only C is allowed, no assembler or other funny business. Entries will be judged on two criteria: binary size and functionality of the program. For reference, a program that does nothing weighs in at 1502 bytes.

Básicamente dice que hay que hacer un programa en C, que no va a poder enlazar con biblioteca de funciones alguna (no hay libc) y que no se puede hacer uso de ensamblador. Esto último es importante, porque con esta restricción se pierde la capacidad de hacer llamadas al sistema: no se puede reservar memoria con malloc, ni leer ni escribir en disco, etc. Eso sí, el programa debe tener alguna utilidad y te dicen que puede devolver un valor que será podrá ser consultado con $? (variable de la shell con el resultado del último programa ejecutado). Eso sí, el startstub.S que suministran no permite dicho uso (¿despiste quizá?).

Estas premisas tan restrictivas me animaron a tratar de crear algo para el concurso. Tras varias ideas descartadas decidí hacer una aplicación que devolviese la posición de una palabra en una lista de palabras (no parece muy útil) y que con una opción permitiese devolver la palabra de la lista más parecida a la buscada (puede resultar algo más útil).

El problema es que con lo suministrado por la gente de O’Reilly, la función main no recibe argumentos. Así que no tenemos un mecanismo sencillo para comprobar los parámetros.

La solución al problema anterior es tener en cuenta que Linux, cuando ejecuta un programa y pasa le pasa el control deja en la cima de la pila argc, luego argv y después env. Como la función _start suministrada no mueve los punteros de la pila, main tendrá esos mismos datos. Así que sólo hay que buscar un mecanismo para obtener un puntero a la cima de la pila.

En la arquitectura i386, los argumentos de las funciones se pasan por pila. Así, si tenemos una función que sólo acepta un parámetro, en el momento en que entramos en la función nos encontraremos esto en la cima de la pila:

0x000000 Dirección de Retorno
0x000004 Parámetro

Por tanto, la dirección de memoria del primer parámetro será una posición en la pila. En este caso sabemos que se correspondería con argc.

El problema es que en las arquitecturas de 64 bits, no se comporta de este modo: los 6 primeros parámetros son registros de procesador. En este caso, si es una arquitectura de este tipo, creamos una función que acepta 7 parámetros. Los seis primeros que serán registros (y los ignoramos) y el séptimo que ya se encuentra en la pila.

El resto del programa ya no tiene más misterios y lo podéis ver a continuación:

Curiosidades de C++

Ayer trasteando con el compilador de C++ descubrí una cosa nueva sobre cómo funciona por dentro.

Si compilamos el siguiente programa y lo ejecutamos veremos que falla con un bonito SIGSEGV:

El motivo es que, para empezar, hay dos estructuras que son diferentes pero se llaman igual. El constructor de dichas estructuras no deja de ser una función, por lo que en cada fichero objeto se generará una función para construir la estructura. Sí, la función se llamará igual en ambos objetos.

Cuando enlazamos se queda con la primera función que encuentre (en este caso con la de a.cpp). Así que cuando desde run_example_b se trata de instanciar la estructura lo hace con el constructor de a.cpp.

Hasta ayer por la tarde no caí en porque esto funciona así, pero es bastante lógico. Hay muchas clases en las bibliotecas estándar (y de terceros) cuyos constructores están implementados en la propia cabecera. Esto significa que cada fuente que tengamos tendrá su propia implementación del constructor y luego, al enlazar, se reduce a sólo uno.

Si el ejemplo anterior lo compilamos todo con ‘-O2’, el constructor lo convierte en inline para optimizar y funciona correctamente.

Nota mental: hay que mejorar los nombres de funciones in clases según su utilidad y contexto (debe ser más semántico).

Creación de paquetes Debian (1 de 3)

Como prometí en mi anterior entrada, voy a tratar el tema de creación de paquetes para distribuciones de tipo Debian. La explicación va a estar dividida en tres partes:

  1. Motivación de la creación de paquetes
  2. Creación de paquetes
  3. Distribución de paquetes

Motivación

Mucha gente que usa Linux por primera vez se da cuanta enseguida de la gran cantidad de aplicaciones que hay a golpe de una pulsación de ratón. No son necesarios los números de serie, ni los típicos cracks. De hecho, en una distribución como Debian puede encontrarse cerca de 30.000 paquetes preparados para instalar.

Por desgracia no siempre está la herramienta que buscamos o la versión que hay es muy vieja y le faltan características. En ese momento es cuando se complica la cosa y toca preparar el programa por nosotros mismos. Esto suele suponer la ejecución de alguna secuencia de comandos terminada en “make ; make install”. Cuando hacemos esto último corremos el riesgo de sobrescribir configuraciones, bibliotecas o programas si  querer. Muchas veces esto no tiene porque ser importante, pero si, por ejemplo, estamos instalando algo en un servidor esto puede suponer un grave problema en el futuro.

Por el motivo anterior en las distribuciones de Linux se utiliza una cosa llamada paquete. Un paquete es un fichero que contiene información sobre los requisitos para instalar su contenido, acciones a ejecutar durante la instalación y los ficheros a instalar. Toda esta información facilita la eliminación y/o sustitución del paquete y comprobación de posibles conflictos con otros paquetes.

Finalmente, utilizando un sistema de distribución de paquetes conseguiremos que al tratar de instalar el sistema sea capaz descargar las dependencias (de otro modo solo comprobaría si hay o no problemas).

En las siguientes entradas veremos el proceso de creación de un paquete y su posterior distribución.

Heartbeat

Pensabais que me había olvidado del blog, que me había vendido a las redes sociales mass-media, pues no. ¡Ojalá! Simplemente que no ando ni bien de tiempo y que el poco que tengo no lo organizo bien.

Desde la última vez que escribí han pasado muchas cosas, tanto en lo laboral como lo personal, y, lo más importante, tengo cosas técnicas para contar.

La semana que viene espero publicar un par de cosillas sobre creación de repositorios debian (no es que sepa mucho, pero me ha tocado hace poco hacer alguna cosilla sobre ésto).

Divagando propuestas para los políticos

A estas alturas doy por hecho que todo el mundo sabe qué es democracia real ya, 15m, la acampada de Sol (web de la asamblea de Sol y la acampada) y, con suerte, las asambleas de barrios y pueblos que se han formado por gran parte de Madrid y otras provincias y comunidades autónomas.

También salió hace un tiempo el hastag de twitter #propuestasconcretas para hacer propuestas políticas y me gustaría hacer un listado de todas aquellas que a mi se me ocurren para dejar constancia de las mismas y por si pudieran ser de interés a alguien (advierto que es bastante largo y aburrido):

  1. Toda persona que esté en posesión de un escaño en cualquiera de los órganos de gobierno (senado, congreso, alcaldía, etc.) no podrá realizar actos públicos de inauguración tanto en tiempo de campaña electoral como fuera del mismo. Para enterarnos de que obras se hacen ya tenemos a los medios de comunicación.
  2. Igualmente, no podrán hacer acto de presencia para la promoción de acuerdos con empresas o instituciones, públicas o privadas. El objetivo es eliminar el efecto foto, que solo sirve para hacer publicidad, pero desvía la atención de cosas más importantes.
  3. El sueldo máximo de un cargo político será 3 veces el salario mínimo interprofesional. No se trata de que controlemos su sueldo, sino de que este sea justo. Si quieren subírselo, ya saben lo que toca.
  4. Un cargo político sólo podrá percibir un sueldo de la administración y en caso de ser éste una pensión vitalicia, ésta se terminará en el momento en que cobre otro sueldo público o privado. Se debe evitar a toda costa que se acumule dinero público cuando ya no lo necesiten.
  5. El sueldo de un político será proporcional a las veces que asista a los plenos. Si no hace su trabajo, no cobra. Si solo hace la mitad, cobrará la mitad.
  6. Durante el periodo electoral, todos los partidos dispondrán del mismo tiempo para realizar publicidad por televisión y por radio y el mismo espacio en medios escritos. Se evita que los partidos mayoritarios se queden con el espacio. Todos deben ser iguales en tiempo de campaña.
  7. La circunscripción será única a la hora de repartir el voto y no habrá un mínimo de votos para optar a escaño. Igualmente, el voto en blanco se contabilizará como válido y contará para el reparto de escaños de modo que podrán quedar asientos libres. Esto pretende forzar a los partidos a hacer bien su trabajo so pena de perder escaños.
  8. En caso de que la representación en escaños no llegue al 50% (hay al menos un 51% de voto en blanco), se deberá constituir una asamblea ciudadana para la gestión del ayuntamiento que podrá gobernar hasta un máximo de 2 años. A diferencia de lo que sucede actualmente, que si no hay gobierno es una comisión nombrada desde fuera, serán los propios ciudadanos quienes tomarán las riendas o podrán proponer elecciones.
  9. Durante la elaboración de cualquier ley, los gobernantes tendrán la obligación de reunirse con una asamblea ciudadana para que esta le exprese su opinión sobre la misma. La opinión de la asamblea computará siempre como un 25% del voto final para la aprobación o no de dicha ley. Este trámite supone ralentizar el proceso de aprobación de leyes, pero permite a los ciudadanos participar en el mismo y que su opinión cuente.
  10. Las fuerzas del orden deberán cumplir estrictamente la ley y dar ejemplo al resto de ciudadanos. En caso de que reciban una orden de un superior y ésta sea contraria a la ley, deberán interponer una denuncia inmediatamente. El castigo por este tipo de orden deberá ser la inhabilitación de 3 meses del cargo correspondiente y de por vida en caso de reincidir. Hay que evitar el abuso de poder por parte de los gobernantes y las fuerzas del orden. Aún así, hay que tener en cuenta que no se puede evitar a veces el uso de la fuerza (imaginad una persona en estado de enajenación lo que podría hacer…).
  11. La banca estará obligada a socializar, al menos, un 5% de sus beneficios antes de impuestos. Dicho de otro modo, los bancos se convertirán en cajas.
  12. En caso de quiebra de un banco o caja, se considerará a sus directivos responsables y deberán pagar con su patrimonio. Por otra parte, el banco no podrá hacer uso del dinero de sus clientes para pagar sus deudas. El estado deberá reconducir las cuentas corrientes a un banco estatal que se encargará de garantizar que los ciudadanos afectados sufran lo mínimo posible la quiebra. A diferencia de lo que se propone muchas veces, no abogo por la nacionalización bancaria, porque eso supone que el estado deberá pagar la deuda del mismo y no es en absoluto justo.
  13. El gobierno de las cajas será independiente y autónomo, y será una asamblea de los trabajadores junto a la directiva la que tomará la decisión de nuevas incorporaciones en la junta. Se elimina el poner puestos a dedo para pagar favores o colocar amigos, lo que ha llevado a la una muy mala situación a muchas cajas.
  14. Los sindicatos solo podrán financiarse con el dinero que obtengan de sus afiliados. Hay que evitar las sangrantes situaciones que vivimos hoy día donde al sindicato le sale mejor firmar EREs que cobrar de los afiliados que pueda tener en la empresa.
  15. Cada año se revisará el sueldo mínimo. Este deberá crecer siempre como mínimo el incremento del IPC o nada en caso de que el IPC sea negativo. Hay que garantizar que los sueldos estén acorde con los precios.
  16. Se debe reducir el número de ayudas a empresas para promocionar nuevas tecnología, debiéndose promocionar el uso de incrementos de impuestos. De este modo, en lugar de dar ayudas para que haya menos emisiones de CO2, se deberán cobrar más impuestos por no adaptarse. En España se da el caso de que las ayudas solo sirven para encarecer las cosas y favorecer amigismos, los impuestos son para todos por igual, así que no habría más discriminación que no hacer bien las cosas.
  17. Los servicios y empresas del estado estarán gestionadas por personal competente para el cargo que, a su vez, serán funcionarios. No se debe permitir cargos a dedo, como hasta ahora. Los políticos deberán usar solo funcionarios para la administración.
  18. Todas las empresas deberán presentar sus cuentas de resultados a sus trabajadores al igual que a hacienda. Muchos empresarios, tanto pequeños como grandes, se abstienen de dar este dato para poder controlar la idea de si va bien o mal la empresa y presionar a los trabajadores.
  19. Cuando una empresa se considera que está a punto de entrar en quiebra y no ha habido una renovación de la junta directiva (en caso de las empresas que la tengan) en al menos 1 año, pasará a control de los empleados. Durante este periodo se podrá abrir una investigación para estudiar las responsabilidades de la junta directiva en la situación de la empresa. En caso de que sea culpable deberá abonar una multa correspondiente a la mitad de sus sueldo en un año y la devolución de cualquier prima que haya podido cobrar. Se trata de eliminar el factor sangrante de las directivas que viven del bote o que les preocupan poco sus empleados.
  20. El estado no podrá financiar directa ni indirectamente a ninguna organización religiosa (esto incluye colegios concertados religiosos, empresas controladas por el Opus Dei, etc.). No se trata de estar contra la religión, pero ésta debe ser sustentada por sus fieles, no por el estado.
  21. Todo servicio que deba ser universal utilizará infraestructuras del estado (tanto telefonía, internet, etc.). En caso de que las empresas no quieran dar el servicio al usuario final, será el estado quien lo de. Esto convertirá a todos los operadores de telefonía en virtuales y garantizaría la calidad de las comunicaciones. Es importante tener en cuenta que es solo para el servicio universal, si por ejemplo queremos ir más allá, habrá que utilizar la infraestructura del operador (por ejemplo, si el servicio universal de internet es de 1Mb, el estado no está obligado a poner más).
  22. Toda persona que sea declarada culpable en un caso de corrupción quedará inhabilitada automáticamente para cualquier cargo público por un periodo de 15 años. Sé que todos quieren que sea eliminado automáticamente, pero todo el mundo tiene derecho a ser perdonado.
  23. Los delitos de corrupción, apropiación indebida, tráfico de influencias no prescribirán. Ahí delitos que pueden dejar en la ruina a cientos o miles de familias directa o indirectamente, no se puede permitir que salgan impunes.
  24. Influir artificialmente sobre los precios de los productos más allá de lo razonable será considerado un delito en el código penal. La ley de la oferta y demanda está razonablemente bien, pero hay muchas fuerzas que pugnan por alterar el funcionamiento de éste sistema.
  25. La apuesta a la baja en bolsa será considerado un delito por el código penal. Este ha sido el sistema utilizado para tirar por tierra la bolsa de Grecia, Irlanda, Portugal o España (fundamentalmente) y de otros países de Europa.
  26. Todos los políticos tendrán que hacer pública su declaración de la renta. Hay que evitar el secretismo en cargos que se supone tienen que rendir cuentas ante nosotros.
  27. Solo habrá educación pública. Evita el problema de que se beneficie (como en Madrid) a colegios privados frente a los públicos.
  28. Los hijos de los políticos deberán ir obligatoriamente a instituciones públicas dentro del país. De este modo se obliga a que se legisle con sentido sobre educación en lugar de seguir haciendo cambios absurdos como hasta ahora.
  29. La educación universitaria será íntegramente en inglés. Hay que empezar a pensar que nos movemos en un entorno internacional.
  30. Todos los departamentos de las universidades deberán tener el menos un 10% de puestos destinados a profesores invitados de otros países. Hay que empezar a importar nuevas ideas y formas de ver las cosas en lugar de tener departamentos cerrados y herméticos.
  31. Cuando un departamento tenga que convocar nuevas plazas, éstas serán gestionadas desde un órgano independiente para evitar favoritismos (generalmente será un órgano dependiente del ministerio de cultura). En la actualidad hay muchos puestos a dedo y eso siempre es perjudicial.
  32. A la hora de optar a un puesto de profesor titular universitario contará tanto su experiencia en docencia, sus publicaciones y las valoraciones que del él se tenga por parte de antiguos alumnos (ninguna de éstas valoraciones podrá tener un peso menor del 20%, ni superior al 40% para la ponderación del candidato). En la actualidad se tiene un sistema de meritocracia donde pesa mucho la investigación, pero para una plaza de profesor también debe contar que éste explique bien y eso solo sus alumnos lo pueden decir.
  33. Los derechos de autor prescribirán a los 10 años de la publicación de la obra y no serán heredables. Se pretende evitar el abuso sobre obras no físicas que existe en la actualidad. No se puede tener a gente viviendo del cuento, que con los políticos ya es bastante.
  34. La administración pública solo hará uso de herramientas que sean software libre y que hayan sido compiladas por expertos de la admisnistración para garantizar la seguridad nacional y la interoperabilidad. Igualmente el servicio de mantenimiento del software estará a cargo de los expertos anteriormente mencionados. De este modo se pretender reducir el gasto en software y los problemas de seguridad que puedan estar derivados del espionaje por parte de otras naciones. No lo elimina del todo, pero nos da más posibilidades de maniobra. Igualmente, garantiza que todos los ciudadanos podrán comunicarse con la administración sin la necesidad de comprar un paquete de software valorado de cientos de euros.
  35. En época de crisis económica se congelaran los sueldos de los políticos, no así las revisiones del sueldo mínimo. Esto pretende animar a las clase política a hacer cosas para realmente salir de la crisis. Aunque sean cosas relativamente puntuales en el tiempo es mejor que haya leyes (o incluso en la propia constitución) que regulen esto.
  36. Se facilitarán los tramites para crear empresas, no pudiendo ser nunca el tiempo necesario para esta labor superior a 2 días. España adolece de graves problemas para la creación de empresas lo que perjudica al entramado económico.
  37. En las universidades de se fomentará la creación de empresas antes que la búsqueda de empleo. No puede ser que gente muy preparada solo vea como opción ser contratados en lugar de utilizar todo su potencial en sacar sus ideas adelante.
  38. Cuando una administración pública deje de pagar alguno de los servicios de los que ella depende será automáticamente intervenida y su gabinete sustituido por una asamblea ciudadana. Se pretende evitar casos como el de los abogados del turno de oficio de Madrid, el de correos y los jugados de Valencia, etc.
  39. El estado deberá hacer pública toda la documentación que vaya generando en un plazo máximo de 2 semanas. Hay que evitar el secretismo.
  40. Los programas electorales tendrán caracter contractual y su redacción deberá ser concisa y medible para controlar su grado de consecución. Igualmente, existen causas por las que no puedan cumplirse los puntos propuestos y deberán tratarse como sigue:
    • Cuando por cuestión de votos no se alcance la mayoría necesaria, y siempre que se haya negociado con todas las partes, no se tendrá en cuenta. No siempre salen adelante todas las leyes.
    • Cuando los cambios sociales o econímicos conviertan en inservible la propuesta y siempre que esté debidamente documentada la razón de no llevarla a cabo.
  41. No se realizará ningún tipo de discriminación, ni siguiera la discriminación positiva. Es habitual que cuando se hace discriminación positiva el grupo discriminado pueda realizar abusos sobre el resto. Este tipo de discriminación se puede evitar realizando las adecuadas políticas de educación. Esto supone años hasta la adaptación, pero son cambios más profundos y duraderos.
  42. Los partidos deberán hacer públicas todas sus cuentas y finanzas, además, no se podrá tener más de un 40% de capital en forma de deuda. Hay que evitar la financiación ilegal y evitar el sobreendeudamiento actual de los partidos, lo que les hace esclavos de los bancos.
  43. Los créditos hipotecarios no podrán tener una duración mayor a 20 años en el momento de la firma y solo podrá renegociarse este tiempo en caso de problemas económicos sobre la familia afectada. Los tiempos casi infinitos para pagar los créditos ha permitido que los precios se disparen.
  44. En caso de crisis general no se podrá realizar ejecuciones hipoteacarias sobre familias, por lo que queda paralizado hasta 2 años después de que se considere terminada la crisis y solo si la familia no ha podido continuar pagando en ese momento. En momentos de crisis se debe proteger a los más desprotegidos, por eso se paran las ejecuciones hipotecarias en ciertos casos, pero no se cancelan. Se da un margen de tiempo tras la crisis para retomar los pagos en si no se vuelve, entonces sí podrá realizarse dicha ejecución hipotecaria.
  45. Las empresas que obtengan beneficios no podrán realizar EREs. Más de lo mismo sobre la protección de los más débiles.
  46. Durante las campañas, los partidos no podran dar ningún tipo de regalo a los ciudadanos. Evita comprar el voto con chorradas. Esl voto se debe ganar, no comprar.
  47. El suedo de los directivos de una empresa no podrá ser nunca superior a 22 veces el suendo más bajo dentro de la misma. Creo recordar que esto no es gratuito, sino que más de un experto en economía recomendaba este máximo para evitar grandes desigualdades.
  48. En las empresas con más de 100 trabajadores, éstos deberán tener representación en la junta directiva y su voto pesará un 10% sobre las decisiones a tomar. Esta representación será consensuada en asamblea por los trabajadores. Cuando una empresa es muy grande puede suponer la desconexión entre la directiva y el empleado. Con esto se pretende garantizar que el empleado está siempre presente.
  49. El estado debe intervenir los capitales que se encuentren en paraisos fiscales. Igualmente, se debe impedir el acceso a dichos paraisos fiscales. Se debe evitar ocultar los capitales.
  50. Durante los momentos de crisis puede darse que el único médio de salir adelante de una empresa sea reducir salarios o realizar despidos. En estos casos, la junta directiva siempre deberá dar ejemplo y deberá reducirse el sueldo o el número de personas de forma proporcional. Es bonito cuando los empresarios de la CEOE dicen que hay que apretarse el cinturón, y no niego que sea mentira, pero hay que dar ejemplo, no pueden cargar con todo el peso solo los trabajadores.
  51. No podrá haber becas de ningún tipo fuera las instituciones educativas, por lo que se prohíbe sistemáticamente la contratación de becarios por parte de las empresas o administraciones públicas. En la actualidad se abusa mucho de las becas, por lo que se prohíbe su uso en los casos más sangrantes: las empresas.
  52. No se permitirán las prejubilaciones de excepto para aquellos trabajos que supongan un esfuerzo físico importante, como pueda ser la minería. En la actualidad hay un problema importante con las pensiones y es que muchas empresas prejubilan a gente en perfecta edad para trabajar y es el estado el que carga con ésto. Este tipo de prejubilación debe darse solo en casos especiales y no a discreción.
  53. Se creará un sistema de ahorro e inversión para los momentos de super-habit económico para garantizar que el estado tenga remesas económicas suficientes para futuras crisis. Dicho de otro modo, lo que no hemos hecho aquí cuando iban bien las cosas. El estado no debe ser sólo una máquina de gastar, también debe poder ahorrar para un futuro.
  54. En un plazo de 10 años todos los vehículos que circulen deberán ser híbridos o eléctricos. Hay que empezar a reducir la dependencia con los carburántes fósiles por convertir al sistema financiero muy dependiente de sistemas de especulación.
  55. Se cambiará el sistema de gestión de la red eléctria para garantizar unos precios justos. He leído gran catidad de artículos sobre el tema, pero ya no recuerdo bien como estaba, por lo que no puedo ser ahora más especídigo (puede que una futura revisión).
  56. Se mejorará la gestión del agua, de tal forma que los lugares con gran necesidad de la misma (como Murcia) deberán priorizar el uso de dicho recurso (es más importante el agricultor que un campo de golf). Vamos, evitar toda la movida del trasvase para regar campos de golf mientras se secan los cultivos como se intenta hasta ahora.
  57. Sólo exite la violencia y puede haber atenuantes o agravantes. Con temas como la discriminación positiva se han creado leyes como la mal llamada ley de la violencia de género. La violencia puede darse de muchas formas en familia y fuera de ella, entre parejas, por lo que no puede legislarse solo sobre la que pueda realizar el hombre sobre su pareja o expareja.
  58. Las cárceles deben ser centro para la rehabilitación de los presos. Por este motivo los presos trabajarán y serán educados para poder salir preparados. Igualmente se crearán programas de reinserción para facilitar la incorporación de éstas personas al múndo laboral. Siempre se piensa en la carcel como un castigo, pero su función no debe quedarse ahí y toda persona tiene derecho a arrepentirse y el derecho de ser tratado como una persona normal una vez termine su condena.

Se me ocurren muchas cosas más, pero me van y me vienen constantemente a la cabeza. Yo creo que éstas con las principales y puede que vaya actualizándolo con el tiempo.

Reflexionar

Según la Real Academia Española, reflexionar significa:

1. intr. Considerar nueva o detenidamente algo. U. t. c. tr.

En el caso de la jornada de reflexión que existe en España, se reflexiona sobre las alternativas políticas que van a presentarse. Aún a pesar de que se deje sólo un día para esta importante actividad lo cierto es que es algo que no solo debe realizarse durante el periodo electoral, sino durante todo el tiempo. Desde el mismo momento en que se instarua un gobierno, alcaldía o lo que sea se debe vigilar la actividad de los políticos de cara a preparar el próximo voto. Hay que comprobar si cumplen o no con su programa, si lo intentan (aún no gobernando) y si su actuación es la más adecuada para el conjunto de ciudadanos. También hay que tener en cuenta la situación de cada momento ya que puede estar bien prometer una cosa, pero al cambiar las circunstancias es mejor hacer otras (hay que dar margen, no siempre se puede cumplir, pero habría que justificar fehacientemente la razón del cambio). Hay que pensar en muchas cosas más, porque si uno sale ganando y 100 perdiendo tal vez las cosas no se estén haciendo bien.

Con todo lo anterior no voy a pedir el voto para tal o cual partido, porque no corresponde al día de hoy y porque tampoco me gusta influir (mucho) en los demás, pero sí pido a la gente que piense bien a quién votar, que no vote a uno para que no salga otro, sino que vote al que cree mejor opción. Pido que se vote y que se haga un voto válido y no en blanco, para que todos los partidos tengas opciones, tanto los pequeños como los más grandes. Y pido, sobre todo, que al votar se piense en el interés general y no en el propio ya que los políticos deben gobernarnos a todos y no solo a unos pocos, porque sino solo conseguiremos salir perdiendo.

Por todo ello, votad, votad con cabeza y sobre todo, votad con esperanza.

Jornada de reflexión

Poca gente creo que, a día de hoy, no ha oído hablar del movimiento democracia real ya. Las últimas noticias son que la Junta Electoral ha prohibido las manifestaciones del sábado aún a pesar de que haya sentencia del Tribunal Constitucional que la avala. Hasta aquí nada raro en la vida normal de los Españoles, donde los jueces se tiran constantemente los trastos a la cabeza dependiendo de si sirven más a la ciudadanía y la legalidad o a la clase política.

Lo que más gracia me hace de la situación es como los medios afines al Partido Popular se han volcado a pedir respeto a la decisión de la Junta Electoral para que el sábado se retire todo el mundo de #acampadasol, curiosamente la misma gente que prácticamente llama al boicot del Tribunal Constitucional por su decisión sobre Bildu (que daría para escribir un artículo completo y que por suerte otras personas ya lo han hecho). Es más, mucha de ésta gente, como Pedro J. Ramírez, ya en su momento se saltaron la ley electoral para poner publicidad de campaña durante el día de reflexión de las elecciones generales del año 2004. Sin duda todo una muestra de coherencia lo de decir que a veces hay que respetar las decisiones de los jueces y otras no…

¡Silencio! Se roba

Algún día mis hijos me preguntarán: “Papá, ¿Tú que hiciste por España?” y avergonzado tendré que responderles que nada.

Este fin de semana pasado se realizó una manifestación en pos de una democracia de verdad, en la que los políticos gobiernen para el pueblo y no para sus intereses, donde las personas sean más importantes que las empresas. Este movimiento, conocido como democracia real ya, ha surgido en internet a causa de las dificultades que los  medios de difusión tradicionales pone a la comunicación de toda actividad que no sea favorecer a empresarios o políticos afines.

Hasta el momento, la mejor información sobre las actividades que se han realizado para defender los derechos de los ciudadanos pueden encontrarse en medios extranjeros (como el Washington Post) o en internet, mientras que, tarde y mal, los medios nacionales han empezado una campaña de difamación y politización de los mismos… ¡No tienen interés en ningún cambio a mejor!

Para los que aún no sepan de qué va la cosa, os recomiendo que busquéis en Twitter los hashtags #15mani, #acampadasol y #spanishrevolution.

Podemos ver como medios como El País atacan al PP por tener imputados por casos de corrupción en sus listas, pero olvidan hacer los mismo con el PSOE. Los medios afines al PP hacen tres cuartos de lo mismo. Y todos se olvidan de informar de que la sociedad empieza a organizarse contra esta gente, porque está cansada de que les engañen, pero eso sí, enseguida llaman vándalos a todos porque unos pocos la arman (entre estos pocos había policía infiltrada, lo que da mucho a pensar sobre quién pudo empezar a armar la bronca…).

Bueno, algo podré decirle a mis hijos que hice: votar. Voy a votar a otros, voy a luchar con mi voto por evitar el apoltronamiento de unos parásitos que viven de chupar del bote, de dietas pagadas por todos, pero que no se justifican en absoluto con el trabajo realizado. Voy a votar para evitar programas electorales llenas de promesas por romper. Sin duda estaremos mejor sin PP y sin PSOE (ni CiU en Cataluña, donde ya han empezado a implantar lindenzas como el co-pago de la sanidad cuando ésta ya se paga con los impuestos…).

Ya sabéis, si queréis luchar por vuestros derechos, votad bien, evitad parásitos, salid a la calle, pero siempre respetando a los demás.

Código ofuscado

Muchos de los que leen este blog seguro que ya saben a qué me refiero por código ofuscado. Si es ese el caso, probablemente lo que cuente a continuación ya lo sepas. Para los demás, si os apetece ver las cosas que un friki de la programación puede hacer cuando se aburre, continúa leyendo.

El código ofuscado es, según la Wikipedia el “[..] acto deliberado de realizar un cambio no destructivo, ya sea en el código fuente de un programa informáticocódigo máquinacuando el programa está en forma compilada o binaria, con el fin de que no sea fácil de entender o leer”. De cara al programado que quiere echarse unas risas es hacer un programa correcto pero que no pueda entenderse leyéndolo. ¿Y eso por qué? Porque podemos.

Imaginemos algo sencillo: en C hacer un programa que muestre por pantalla un “Hola, mundo” es algo tan aburrido como lo siguiente:

int main(void)
{
   printf("Hola, mundo");
   return 0;
}

Sin duda algo muy soso, sería más divertido una cosa como la siguiente:

#define __ main
#define ___ printf
int
__(int _, char **b)
{
   return (_ > 0)? ((_==1)?__(_-1, 0):0):___("Hola, mundo");
}

Ahora mismo no sé si funciona, pero como podéis comprobar es muuuucho más clarooooo (entiendase el sarcasmo). Ya lo único que le faltaría es ocultar el mensaje de algún modo estrafalario.

A parte de las connotaciones divertidas que pueda tener la ofuscación de código (hay códigos con forma de avión, círculos, etc.), también sirve para reducir el tamaño del código de ciertos programas. Por ejemplo, en el mundo de la web, los códigos javascript se suelen comprimir utilizando técnicas de sustitución parecidas a las de la ofuscación para que ocupen menos y se transmitan más rápido por la red.

También hay quien utiliza este tipo de códigos para evitar que se copien los algoritmos utilizados y que no se pueda hacer ingeniería inversa.