2008/10/22

¿Crisis?, que no panda el cúnico

Archenemy me ha señalado con un meme y, aunque no estoy a favor de asignar memes a mano me ha parecido majete, así que lo hago.

El tema es buscar las cosas buenas que nos puede traer este “periodo de crecimiento no-positivo”. Así que allá voy, por que hay un montonazo:

  • Aprende.

Apabullante, ¿verdad?, el caso es que ahí caben un puñado de cosas para las que no es necesario gastar más dinero del que necesita, digamos, una conexión a internet. Por ejemplo:

  • Aprende Inglés. Seguro que diste algo de inglés en el colegio o en el instituto, así que la base ya la tienes y, en realidad no tienes que aprender mucho más, principalmente vocabulario y mejorar la capacidad de entender cosas. Para eso nada mejor que una inmersión, pero como el tema es gastarse lo menos posible, y una estancia en el extranjero puede salirnos por un pico, nos queda la opción de la red: La mayor parte de cosas de la red están en inglés, así que no hay que ir muy lejos para encontrar material (películas y series [subtituladas o no], libros, blogs, periódicos, audiolibros, podcasts y videopodcasts, etc...).
  • Si tienes que usar el coche aprende Hypermiling. El hypermiling vendría a ser un conjunto de técnicas para conducir gastando menos que un escocés (el tópico con los catalanes está muy visto en España, así que pongo al escocés por variar). En la red hay bastantes recursos y artículos sobre el tema como para decidirse en caso de que no puedas prescindir del coche y quieras, al menos, hacerlo afectando lo menos posible al monedero. El recordman en esto se saca unas 59mpg (millas por galón), que vendrían a ser unos 25Km/l, o 3,9 litros cada 100Km. Mi media está entre 15Km/l y 18Km/l con picos de 30Km/l, sin usar las técnicas más peligrosas como colear camiones, o apagar el motor en marcha. Como ves, no es muy difícil.
  • Aprende la materia de esa carrera que no pudiste acabar o tal vez ni siquiera empezar. Y ojo, por que para aprender no hace falta pagar (pagar sólo te hará falta si quieres examinarte para obtener el título, y el contacto con los profesores), ya que hay algunas universidades que ponen en internet, no sólo para los alumnos sino para cualquiera, bastantes materiales de las asignaturas, por ejemplo Berkeley o el MIT. Si usas iTunes en la sección iTunesU tienes unificados y clasificados por temas y universidades un puñado de lecciones en formato audio y video. Si a pesar del primer consejo el inglés no es tu fuerte, puedes probar con la UNED, o con alguna otra que también esté en la plataforma Open Course Ware (sin contar que las bibliotecas públicas suelen ser gratuitas... o muy baratas).
  • Aprende a programar. Citaré a Cory Doctorow en esto:

    Si nunca has programado un ordenador deberías. No hay nada en el mundo que se le pueda comparar. Cuando programas en el ordenador, hace exactamente lo que le dices que haga. Es como diseñar una máquina (cualquier máquina, como un coche, como un grifo, como la bisagra hidráulica de una puerta) usando matemáticas e instrucciones. Es impresionante en su sentido más básico: causa impresión.

    Un ordenador es la máquina más complicada que usarás jamás. Está hecho de miles de millones de transistores micro-miniaturizados que se pueden configurar para ejecutar cualquier programa que puedas imaginar. Pero cuando te sientas en el teclado y escribes una linea de código, esos transistores hacen lo que tu les dices que hagan.

    La mayor parte de la gente nunca construirá un coche. Casi ninguno de nosotros nunca creará un sistema aviónico. Ni diseñarán edificios. Ni planificarán una ciudad.

    Todo eso son máquinas complicadas, esas cosas, y están fuera del alcance de la gente normal como tu y yo. Pero un ordenador es como, diez veces más complicado, y bailará cualquier melodía que toques. Cualquiera puede aprender a escribir código sencillo en una tarde.

    -- Little Brother, Cory Doctorow.

    Lo pone en boca de uno de sus personajes, pero me parece que Cory es lo suficientemente tecnófilo como para poder aplicarselo a él mismo :)

  • Aprende bricolaje. A parte de McGyver y Scofield cualquiera puede beneficiarse, especialmente al hilo de la crisis, de tener la capacidad de reutilizar cosas que, aparentemente, ya han cumplido su misión. Y definitivamente, un paseo a la ferretería por unos clavos y tornillos para apañar ese mueble que ha tirado el vecino pero que a nosotros nos puede valer, seguro que sale más barato que acercarse al IKEA. También, si tienes alguna carpintería o tienda de maderas cerca, puedes hacer tus propios muebles desde 0 (programas como google sketch up pueden servirte para hacer la planificación y un prototipo virtual antes de ensuciarte las manos... y la habitación). En las páginas del Makezine, e Instructables hay un buen puñado de instrucciones paso a paso para hacer casi cualquier cosa, y no se limitan a muebles, sino a cualquier cosa que entre en el ámbito del "Hágalo usted mismo" (electrónica, domótica, maquillaje, cocina, etc...).

Y creo que voy a parar aquí, que me está quedando muy largo y Lord Zoltan también ha sido bastante exhaustivo y ya tenéis telita para rato.

2008/10/21

Cómo NO calcular el mínimo común múltiplo con JavaScript

Esto es un descargo de ignorancia. Básicamente me escarmiento públicamente a mi mismo para ver si no vuelvo a repetir algo que he hecho y que no me gusta por que no está bien.

Antes de continuar, la excusa es que tengo las mates tan olvidadas, que podrían darme de palos y no me iban a sacar nada de nada. De hecho me saltó la alarma "YOU'RE DOING IT WRONG!!!" cuando vi lo que empezaba a tardar el tema, pero entre las (pocas) mates y el sueño no mejoré demasiado el asunto.

Ahora el delito, que es calcular el MCM (de los números del 1 al 20 en este caso) tal que así:

const LIMIT = 20;
var store = [1];
var test = 0;
while( store.join('')!=0 ){
    store = [];
    test++ ;
    for(var i=2; i< LIMIT; i++){
        store.push( test%i );
        if( test%i!=0 ) break;
    }
}

El problema, principalmente, es el rato que tarda en pasearse por los números hasta que encuentra el resultado. A parte de la caminata desde el 0 hasta algo después del 232*10^6 calculando restos de división (que no es una operación precisamente de las más ágiles), tiene un par de tonterías por el medio:

  • el doble casting en el while: de array a string con el join, y de string a numérico en la comparación (y tiro por que me toca);
  • y la linea del break: que por un lado intenta ahorrarse unas pocas iteraciones precisamente en el bucle menos significativo, y por otro lado vuelve a gastar recursos calculando el mismo resto de la linea que está justo arriba.

Aunque puestos a ver el lado bueno de las cosas, al menos no es mucho código (y el número del resultado es el correcto).

Por si alguien quiere probarlo en su navegador, le recomiendo que desactive el aviso sobre scripts atascados (creo que en firefox está en el about:config por max_script_runtime; en safari se desactiva desde el menú de debug [que no es visible por defecto pero en la red hay sobradas instrucciones para hacerlo]).

PD: Ya podría JavaScript tener alguna función matemática más, que el objeto global Math es más escaso que el guardarropa de tarzán (apenas tiene un puñado de constantes y no muchas más funciones a parte de las trignométricas, se le ve escaso)

PPD: El MCM es un problema de la página del proyecto Euler, que tiene un puñado gordo de problemas para repasar mates y programación.

2008/10/20

2008/10/18

2008/10/17

el blog post con la tabla de rayas 2

Segundas partes nunca fueron buenas, dicen... veamos

               
               
               
               
               
               
               
               

Estoy de un prolífico últimamente...

Reconozco que hubo problemas durante la producción (uno de los trabajadores no se identificó correctamente, pero ya está todo solucionado).

el blog post con la tabla de rayas

inspirado por el libro...

       
       
       
       
       
       
       
       

(Creo que en el feed no se apreciará, recomiendo visita)

2008/10/15

Java y Flash. Mi reniego.

En el feed de planet webdev me encuentro con esta nota de Cerebro en la Sombra sobre emitir de una webcam en vivo desde linux y en formato flv.

Al empezar a comentarle me quedó bastante largo, algo marginal y demasiado reniego como para 'mancharle' el blog, así que corto de allí la parte más fuera de tiesto y lo pego para publicarlo aquí (y así le doy algo de vidilla a esto).

Bueno, al lío, Osus dice:

El reto consistía, por tanto, en transmitir las cámaras en un formato que se pudiese reproducir fácilmente y que se pudiese integrar en una página web, sin programas de terceros para visualizarlas.
El formato que hemos escogido para el flujo de vídeo será flv, con lo que con una sencilla aplicación Flash podremos visualizar cada una de nuestras cámaras evitando, de paso, los applets Java.

Énfasis añadido.

Y digo yo, ¿por qué regla de tres se considera a los applets Java como "programas de terceros" y a Flash no?, la última vez que lo miré, Adobe no formaba parte del equipo de desarrollo de MS, ni de la Fundación Mozilla, ni de Apple o WebKit, ni de Google, etc... exactamente igual que Sun. Puesto de otra forma ¿por qué usar un applet Flash no sería usar un programa de terceros?.

¿O es por que el applet suele estar en un servidor de terceros?, bueno podemos distribuir el reproductor nosotros también, ¿no? (en ambas tecnologías, de hecho).

Y luego ¿qué pasa?, ¿que los applets Java ya no están de moda?, ¿que no son web2.0?, ¿y qué?, joder cuanto snob ¿no?, ¿es que acaso Flash no se comporta respecto al navegador y al navegante exactamente igual que un applet Java?, pero si los 2 son un rectángulo en medio del navegador (con el permiso de Joel Spolsky). ¿En qué hemos avanzado al cambiarle el collar al perro si sigue siendo un perro?. Ah, no espera, que Flash tiene una ventanita para dibujar y una linea temporal para hacer animaciones, bueno, aceptaremos barco como animal acuático, que más adelante comento que Java es un coñazo de aprender, y la ventanita para dibujar de Flash es realmente un incentivo bastante valioso (pero a la hora de ejecutar un applet/objeto en el navegador, que era la premisa inicial, esto es bastante irrelevante).

Para terminar, que quede constancia que no soy especialmente fan de Java ni de Flash, ni tampoco es que los odie a muerte, pero de hecho ninguno de los 2 son santos de mi devoción: Java por estar demasiado asociado al mundo de los negocios, por intentar ser una pócima milagrosa para todos los problemas y por que me resulta un lenguaje terriblemente aburrido de aprender (en comparación con otros como JavaScript, PHP, Perl, o Python por decir algunos que no me han parecido tan coñazo); y a Flash por que pretende ser algo diferente cuando en realidad es el mismo perro con otro collar y otra correa, léase: es un rectángulo en medio del navegador exactamente igual que el de Java; y una implementación propia de ECMA-262 exactamente igual que cualquier navegador moderno lleva la suya propia (Javascript; y ojo, no estoy diciendo que con el ECMA262 de Flash y del browser se trabaje igual, estoy diciendo que los 2 son una implementación del mismo estandar y nada más).

2008/10/13