domingo, 5 de febrero de 2012

Pizza de molleja

   Ayer después de bastante tiempo volví a hacer pizza casera. Para agasajar a un@s amig@s y compenzar que no pudimos comer pizza de molleja en Rosario (hogar de la pizza de molleja) decidí hacer mi versión de semejante delicia.

   No voy a explicar como se hace la masa de pizza, eso abunda por inet y sino quieren hacerla, prepizza.

   Para una pizza:

    1 molleja
    3 cebollitas de verdeo
    1cda de queso blanco
    1 vasito de whiskey o ron
    Aceite 

    Desgrasar la molleja (Muy importante, como la vamos a saltar toda la grasa que quede va a ir a la pizza. Y es mucha grasa)
    Cortar la molleja en pedacitos chiquitos de entre medio centimetro y un centimetro.
    Cortar en juliana las cebollitas de verdeo.
    Poner en una sartén o wok aceite y poner a calentar
    Saltar primero la cebollita de verdeo, después de haya largado toda la humedad, agregar la molleja. Saltarla hasta que este dorada. Agregar el vasito de whiskey o ron (si te cabe acercale un fosforo y divertie flambeando)
     Una vez que haya reducido el whiskey o ron agregarle la cucharada de queso blanco. Revolve hasta que quede bien diluido. Apagá y dejá que se enfríe.

     Listo, a la prepizza le pones una buena salsa de tomate bastante queso y arriba la molleja. Guarda que es pesadísima esta pizza.

Polvora Negra

Les dejo aca una copia de la receta de la conocida polvora negra.

Sepan que hagan lo que hagan con esta información es bajo su estricta responsabilidad.

Antes de comprar los ingredientes les recomiendo mucho que inviertan en seguridad: Guantes gruesos, antiparras que no dejen pasar aire, barbijo o respirador con filtro para orgánicos, un overol de algun material grueso resistente y que cueste encender.


Ingredientes para 100 gramos de polvora negra:

Nitrato de sodio o de potasio (75 g.)
Azufre (10 g)
Carbón vegetal (15 g)
Agua destilada

Equipo
Bolsas de plástico
Plato hondo de barro o madera
Un matraz de 300 a 500 ml
Fuente de calor (mechero bunsen)

1. Coloca una pequeña cantidad del nitrato sódico o potásico en el plato hondo y
muélelo a un muy fino polvo. Haz esto a todo el nitrato de sodio o de potasio, y
almacénalo en una de las bolsas de plástico.
2. Has lo mismo con el azufre y el carbono, almacenando cada producto químico en
bolsas separadas.
3. Coloca todo el nitrato de sodio o de potasio ya molido en el matraz, y agrégale
suficiente agua hervida para que todo se humedezca.
4. Agrega el contenido de las demás bolsas de plástico al nitrato de sodio o de potasio,
y mézclalos bien durante 15 minutos por lo menos. Has esto hasta que ya no haya más
azufre ni carbono a la vista, o hasta que la mezcla quede completamente negra.
5. Coloca el matraz a la luz directa del sol. La luz del sol es la mejor manera para secar
la pólvora negra, debido a que éste nunca la sobrecalienta como para hacerlo arder, solo
la caliente lo necesario para evaporar el agua.
6. Raspa la pólvora negra fuera del matraz, y almacénala en un contenedor seguro. Un
contenedor de plástico seria realmente seguro. Nunca guardes pólvora negra en una
bolsa de plástico debido a que las bolsas de plástico están propensas a generar
electricidad electrostática, lo que podría hacer estallar la pólvora negra.



En la semana les digo donde conseguir nitrato de potásio, que en teoria se consigue casas de botánica.

No sean boludos, no hagan huevadas de las que se puedan arrepentir, tengan mucho cuidado cuando hacen esto, diviertanse y aprendan.

Sobre IDEs y Herramientas

   Hace poco tuve una discusión bastante pelotuda con un amigo sobre si Vim es mejor que Eclipse o no, discusión que terminó en boludeces retóricas y cero aporte a algo, como medirse la pija pero con IDE's (Super triste, super foreveralone).
 
  Eso me lleva a analizar sobre las discusiones sobre IDEs y sobre los IDEs mismos.

  ¿Qué es un IDE?
   IDE es una sigla que significa Integrated Development Environment. O sea, Entorno integrado de desarrollo.

  ¿Cuál es su función? 
   Las tecnologías no evolucionan y aparecen de una manera realmente sistémica. Aparecen mas bien cuando son necesarias (sobre todo en el ámbito industrial). Eso hace que no tengan mucha consistencia las distintas herramientas que se utilizar para el desarrollo de software. Eso hace necesario que haya herramientas que integren estos mundos muchas veces distintos y faciliten tareas repetitivas y tediosas y disminuyan considerablemente la curva de aprendizaje a cubrir necesaria para comenzar a utilizar una tecnología. Un ejemplo icónico es Maven en el mundo de Java o derivados (groovy, scala, etc)
 
 ¿Cómo elegir un IDE? 
   Es muy importante no ponerse ninguna camiseta. Si se puede nunca ponerse una camiseta, excelente, sino por lo menos cuando se usa el sombrero crítico. No hay un Microsoft es una garcha, java es una mierda, o lisp es una genialidad o aguanten las db relacionales.

  Hay dos tipos de criterio a satisfacer para elegir: lo colectivo y lo individual.

  Lo colectivo
    No hay que olvidarse que el software contemporaneo es en general muy grande para que lo desarrolle una sola persona. Así que se suele trabajar en equipo.
   En los distintos lenguajes hay distintas convenciones, cada persona tiene distintos gustos en la forma de codear y cada proyecto tiene distintas herramientas para el control de versión.
   En este aspecto entonces, yo, tengo muy en cuenta el auto formateo de código y la capacidad del IDE para dejarme configurar el formateo de código como definimos con el equípo. De esta manera yo programo como se me cante a mi. Despues auto formateo como se convino y listo.
   También influye bastante para mí el saber que cosas cambie y poder hacer comparativas rapidas con versiones anteriores para los momentos de duda. Me es imperativo switchear lo minimo posible por que pierdo la concentración y me pongo a boludear.

En lo individual
 
   En lo individual me interesan varias cosas que puedo diferenciar entre funcionales y técnicas

   Funcionales  (que me gustaría que haga por mí)

       Lo mas importante para mí en este caso es lo que mas suelo hacer: browsear código. No me gusta perder tiempo buscando en que archivo esta cierta clase o cierto tipo o cierta función. Bastante con convivir con el hecho de que estoy programando en archivos.

     Después me importa en casi igual medida la integración con los tests dado que suelo programar usando la idea de TDD, para mí es muy importante esta forma de integración.  Poder correr los tests, saber donde falla cada test y por que y que relación tiene cada test con cada parte del código sin tener que recordar de memoria todo lo que hice hace una semana (ni hablar de un mes o dos años).

     Después me importa en casi igual medída tambien la capacidad de refactor y generación de código automático (esto es muy cierto para mi en java, y en menor medida en lenguajes menos burocráticos). Necesito poder generar esqueletos de código a partir de mis tests hechos antes que la funcionalidad, eso me permite mantenerme en la misma linea de pensamiento sin tener que pensar en cosas como 'tengo que crear un archivo'.

     Después en menor medida la predicción de código (la listita de mensaje aparece cuando ponés punto, o el token de mensaje pertinente). Esto tiene bastante importancia, permite que uno se abstraiga de implementaciones y de largas documentaciones. Sobre todo cuando los nombres de mensajes están bien puestos.

    Después la integración de herramientas terceras como software de gestión y construcción de proyectos , editores copados de xml, integración con servidores, tanto para deployment como para monitoreo. Muchos de estos softwares son no triviales para empezar a usar, y es una cagada perder el tiempo aprendiendo a usar maven por ejemplo, cuando podría uno sacarselo de encima y preocuparse por lo importante: las reglas de negocio. Es cierto que uno no puede evitar para siempre aprender estas tecnologías, pero al menos puede distribuir el aprendizaje en el tiempo.

   Después en menor medida snipets típicos de código, como un for, una clase, un html, etc.

   Todo esto, claramente tiene que estar resuelto agilmente, eso implica shortcuts. Es muy importante que haya shortcuts, mas intensivos sobre los primeros items de la lista y en el resto pueden ser en menor medida.

  Ténicos

    Bueno, en este caso, es de mayor importancia no mear afuera del tarro. Tiene que funcionar todo lo necesario dentro de la misma computadora, por lo que dependiendo de los recursos disponibles, lo que podamos elegir y lo que se pueda explotar.



  Entonces

    Es muy importante saber que dependiendo de los lenguajes que uno use, cuan nuevos y poderosos sean, cuanta metadata proporcionen, etc, se puede pensar en distintos niveles de herramientas. Así, mientras para lenguajes tipados el refactor automático puede ser trivial, para otros lenguajes como python, un rename de por sí ya es un desafío realmente complicado. Lo interesante es que se compensa en la versatilidad  y sencillez del lenguaje.

   Otros lenguajes como Scala o Haskell, son sencillos, versatiles y tienen una gran cantidad de metadata, pero son o muy nuevos o muy poco usados, por lo que hay menos herramientas. Y otros lenguajes como Smalltalk no tienen mucha meta data par dar, pero por las caracteristicas de la forma de ejecución esto es mas sencillo o no.


  Cual es la papa

    Creo que lo mas importante es que te sientas cómodo con lo que usas. Si no te sentís comodo, probá otra herramienta y así. Cada tecnología puede hacer que necesites otro IDE.
    Por razones obvias, no te pongas la camiseta. Hay que tener muy en cuenta que si no fuese por Visual Basic, ese horrendo producto de esa horrenda compañía, hoy por hoy tal vez no habría IDEs.
   
   Yo mientras codée en Java, Scala, Javascript con GAE o Android voy a seguir con eclipse por que me dá la maquina y por que pese a que el soporte de Javascript es una garcha, en los otros es sobresaliente en todos los aspectos que a mi me importan.

   Al final, elegir un IDE es como elegir cualquier otra cosa. Comodidad y sentido común. 

lunes, 30 de enero de 2012

Pechuguitas rellenas agridulces

  Hace tiempo que no las hago por el calor. Pero es algo que mas o menos estandarice ya como para pasarlo como receta.

   Me gusta mucho probar distintas mezclas a la hora de hacer pollo. Sobre todo cosas con limón (pese a no ser este el caso). El tema es que alguna vuelta vine a casa del laburo y pensé 'que ganas de comer yakitori', pero claro, es un quilombo, tenía que buscar una receta y después ir al supermercado y rogar encontrar todos los ingredientes cerca de casa (que casualmente esta lejos de cualquier barrio chino). Entonces pensé, 'ya fué, hago la mía, en definitiva quiero algo de pollo agridulce o algo así'. Así me fui al super y compré

Miel,
Salsa de soja,
Salsa picante (Tabasco puede hacer el truco)
Tomates secos
Queso fresco
Cebollita de verdeo
Papel aluminio
Supermas de pollo.


Primero y antes que nada hay que hidratar los tomates secos. Yo suelo ponerlos en agua caliente con un poco de vinagre así  se hidratan rapido y quedan acidos. Pero haganlo como les guste mas.

Después hay que hacer la salsa. Es bastante sencilla, en una cacerolita ponés bastante salsa de soja, ponele un quinto o un cuarto de botellita de esas medianas. Cuando levanta un poco de temperatura mandas una buena cucharada de miel y tanta salsa picante como te guste. Revolves hasta que la miel quede bien disuelta. Sacas la olla del fuego.


Abris las supremas  (te recomiendo que la abras y le saques un poco de su relleno de pollo como si fueses a hacer un sanwich y le sacases la miga al pan). Lo que te queda de pollo en la mano lo saltas en aceite con la cebollita de verdeo picada y los tomates secos tambien cortados. (Vale agregar lo que quieras, como panceta, espinaca saltada, brocoli, etc)

Ahora extendé un buen corte de papel aluminio, ponele la salsa, pones arriba la suprema abierta. Poné el relleno y mezclalo con queso fresco. Cerras la suprema, le pones mas salsa arriba y cerras todo bien con el papel aluminio. Eso lo mandas al horno moderado unos 30 - 40'. Cuando este cocido, abris el paquete de aluminio y lo dejas dorar un rato si te gusta dorado.

Presentación :P: Lo ponés en un plato (obvio no?), con el resto de la salsa y algo verde, ensalada de rucula, brocoli, esparragos, ensalada de espinaca cruda, de lechuga con cebolla y mostaza, etc etc.

Si bien tiene su preparación, no es tan complicado como suena, de trabajo real seran 20' y el resto es poner una alarma e irse a duchar o a ver un capitulo de algo.

Como ya dije antes, no se atengan a la receta, es una idea, muten todo y disfruten de una buena comida :)

domingo, 29 de enero de 2012

Bootstrapping languages

 Ya me estoy sintiendo incomodo por que vengo citando bootstrapping hace varios posts o en un comentario y en general no es un termino conocido. Así que voy a agregarlo al blog como reseña para que se terminen de entender las huevadas que diga. Así que voy a tirar dos versiones, una explicativa onda charla de bar nerd  y otra para tu vieja. Les debo la formal, no encontré ninguna digna de mención, y toda la paja hacerla yo.

Acá entre nos

En terminos generales en lo que es computación asociamos bootstrap o boot o bootstrapping con el inicio del sistema operativo. Hablamos tranquilamente de 'esta booteando' a veces sin saber bien por que.

La metasfora esta relacionada con las botas, por eso boot. Parece que las botas largas (yo nunca use botas, así que no se si se seguira usando) tenían 'bootstraps' un cacho de tela o simil que servia para hacer mas fuerza y poder calzar la bota. O sea, un punto en el que hacer fuerza para poder empezar a usar las botas! Un punto de arranque :).

Tiempo despues la idea se extendio a procesos autocontenidos, despues de todo el bootstrap de la bota tiene algo muy particular: es parte de la bota.

   Bla bla. Al final, en la jerga de compiladores se tomó como la idea de punto de arranque hablando de empezar un lenguaje a partir de otro lenguaje.

   En principio el siginificado era crear un lenguaje de alto nivel a partir de otro de alto nivel. El unico lenguaje considerado de bajo nivel real es el lenguaje de maquina (PLC, assembler, etc).

   Luego paso a incluir que el compilador este escrito en el mismo lenguaje self-hosting compiler, lo cual es una generalización. Yo en general lo cito cuando hablo de un lenguaje nuevo con poca personalidad o trayectoria y basado en otro lenguaje de alto nivel, o bien cuando uso un lenguaje demasiado técnico (cosa que trato de no hacer).



Para tu vieja

A tu vieja decile que se trata de hacer mejores pinzas usando pinzas.
Aca les dejo un link a uhc-js. Se trata de una implementación de haskell sobre javascript. Es una alternativa copada a coffee script y otras ideas de lenguajes funcionales booteados desde javascript, pero me animo a decir que si es haskell posta va a ser la gloria.

Aca les dejo un link mas direccionado donde hacen un analisis muy interesante de los problemas core de javascript, como la falta de orden y el problema del sistema de tipos (algo de lo que hablaba en algun post anterior) y habla de algunas implementaciones (como uhc o ghcjs :3)

Mirenlo de este modo, en un sitio no hay necesidades de abstracciones locas que entender para empezar, por lo que se puede usar sin saber conceptos avanzados de funcional :).

El futuro

Aca les dejo otro video que es sobre la evolución de haskell y por que funcional, bajo la concepción de haskell, es necesariamente el futuro.

Excelente presentación y explicación de nociones básicas de haskell y del paradigma.