lunes, diciembre 26, 2011

revolucionando paradigmas

un amigo me paso esta nota:

http://www.comercioyjusticia.com.ar/2011/08/09/crea-software-sin-programar-y-en-la-mitad-de-tiempo/

es de una herramienta que ese amigo ya me había contado pero que nunca pude conseguir información concreta como ejemplos concretos.

leyendo el articulo se me prendió el detector de buzzwords muchas veces así que como me siento quejoso hoy voy a hacer un análisis del mismo.

si quieren sacar sus cartones de buzzword bingo :D

http://en.wikipedia.org/wiki/Buzzword_bingo

disclaimer

me encantan las tecnologías nuevas, innovadoras, que prueban cosas distintas.

no creo que el desarrollo de software este en su punto máximo, pero a veces algunas tecnológicas nuevas vienen con mucho discurso de relaciones publicas y pocos ejemplos concretos.

si bien al final explica que ya tiene implementaciones concretas me voy a centrar en la promesa de "hacer software sin programar" que predica el titulo.

hago muchas preguntas y algunas cosas que digo son muy genéricas o pueden ser falacias, solicito a los guardianes de la argumentación que sean cariñosos con migo :D

empecemos

Un nuevo paradigma revoluciona la tradicional forma de desarrollar programas.
http://images3.wikia.nocookie.net/__cb20090909220405/en.futurama/images/thumb/8/8b/ThatGuy.jpg/727px-ThatGuy.jpg

"that guy" en futurama ya lo dijo
"I'll handle this, Fry. You get back to the farm, shift some paradigms, revolutionize outside the box"
luego
OMP es una calculadora que “modela” implementando operaciones.
calculadora podría ser sinónimo de interprete, "modela" podría ser sinónimo de interpreta, implementando operaciones podría ser sinónimo de método/función etc. (muchas asunciones por supuesto)

pareciera que usara sinónimos para que no parezca algún lenguaje de programación o herramienta 4GL tradicional (http://en.wikipedia.org/wiki/Fourth-generation_programming_language)
Resuelve por medio de metamodelos la solución con base en los requerimientos del cliente.
mmm meta (http://en.wikipedia.org/wiki/Metacrap)

osea que son modelos sobre los modelos, simplemente un modelo de indireccion mas?
A famous aphorism of David Wheeler goes: "All problems in computer science can be solved by another level of indirection"; this is often deliberately mis-quoted with "abstraction layer" substituted for "level of indirection". Kevlin Henney's corollary to this is, "...except for the problem of too many layers of indirection."

sigamos

Consultores Pyme se asoció a la firma Onirus, de Tandil,
un poco de publicidad gratis
para promover el uso del Paradigma Semántico de Modelado de Software,
me encanto la conjunción de paradigma y semántico para hacerlo parecer mas cool.

se referirá simplemente a programación declarativa con palabras mas difíciles?

http://en.wikipedia.org/wiki/Declarative_programming
una solución que revolucionará el concepto de construcción de software en las empresas que programan con tecnologías tradicionales.


Se trata de una herramienta innovadora creada por la ingeniera en sistemas Nadia Huebra y su equipo, fundadores de Onirus, una empresa con presencia en Buenos Aires y Mendoza.
mas publicidad
Sobre la base de un paradigma conceptual denominado MORE®
antes era un paradigma semántico, ahora es conceptual.
(propiedad intelectual de Nadia Huebra), se creó una herramienta denominada OMP® (Onirus Modeling Platform) capaz de modelar software sin programar, es decir sin generar código procedural, tal como se conoce.
desde cuando programas "es decir" sin generar código procedural?

podes generar DSLs, programación declarativa, interpretarlo directamente etc.

prolog define hechos y pregunta cosas y sin embargo es un lenguaje de programación y es considerado programar.
“Funciona como una calculadora de procesos funcionales. OMP implementa axiomas, operaciones y argumentos MORE para resolver mediante metamodelos la creación del software. Esto conlleva la mitad del tiempo que se tarda en desarrollar un programa común”, explicó su creadora, quien patentó la idea.
los axiomas no se implementan se definen (creo :D)

se refiere a axiomas como un "fact" en prolog o en un sistema experto?

http://en.wikipedia.org/wiki/Expert_system
Para la creación del software, el profesional responsable de la captura del requerimiento (equiparado al programador en la tecnología tradicional)
osea que cambiaste el nombre del programador-analista.
imparte -en lenguaje natural-, una especificación funcional a partir de la cual se modela el problema funcional.
si se imparte en languaje natural y no un lenguaje formal, como resuelve el requerimiento:

"cuando el valor es entre 1 y 5..."

1 y 5 inclusivo? exclusivo?

si eso se tiene que especificar o esta formalizado que significa entonces no es lenguaje natural, es simplemente un lenguaje de muy alto nivel.

por ejemplo, esto es lisp:

(loop for i from 1 to 10 sum i)

parece lenguaje natural, salvo que si lo cambio un poco ya no anda, entonces
es un lenguaje de muy alto nivel nomas.

otro ejemplo (entre tantos), cucumber: http://cukes.info/ aunque parezca ingles es ruby, o un interprete sobre ruby
La calculadora cuenta con una cantidad definida de modelos y N cantidad de ensambladores, que combinan los modelos con base en las especificaciones de los requerimientos solicitados por el cliente.
cuenta con una cantidad definida de modelos, osea que serian como bibliotecas o patrones prediseniados?

ensambladores como linkers o como glue code entre los modelos? osea que son como bibliotecas?
Luego, los testers funcionales validan las especificaciones del software resultante. “Aquí una de las máximas ventajas es que, no habiendo errores en la calculadora, no hay posibilidad de error de programa, sólo pueden surgir ajustes funcionales”, añadió Huebra.
osea que los testers hacen de compiladores?

si no hay errores en la calculadora es como decir que no haya errores en el interprete de python.

si no hay posibilidad de error en el programa, no importa lo que escriba va a andar bien? para que lo escribo?

un quote de un tal Babbage
On two occasions I have been asked, 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.

Read more: http://www.brainyquote.com/quotes/quotes/c/charlesbab141832.html#ixzz1hfJ779dD
por "ajustes funcionales" se refiere a debugging/bug fixing?
“Es un cambio absoluto de paradigma, se trata de un metalenguaje de máximo nivel de abstracción de la semántica del requerimiento funcional”, explicó Huebra, segura de que éste modelo revolucionará el tradicional método de desarrollar software.
otra vez revolucionando los paradigmas

porque metalenguaje y no lenguaje? osea que si es un lenguaje de programacion?

máximo nivel de abstracción? osea que no hay nada mas abstracto? no puedo decir "resolve este problema"?

empiezo a detectar abuso de vocabulario.

ventajas

De lo cambios: OMP incorpora el cambio como variable endógena, es decir, los sistemas son evolutivos y pueden ser oportunos.
ah? sistemas evolutivos? como el software actual basado en metodologías ágiles? o programación evolutiva/genética?

http://en.wikipedia.org/wiki/Evolutionary_programming

menos mal que no son inoportunos :P
Las modificaciones se pueden realizar en los momentos que se necesiten, adecuando los tiempos a la madurez conceptual de los usuarios del negocio; no se requiere compilación.
no se requiere compilación, como un lenguaje dinámico digamos.
Del conocimiento: esta tecnología hace portable el conocimiento del negocio en formato dato. Los modelos de negocios (que serían los módulos si los comparamos con el software tradicionales) son independientes y capaces de funcionar juntos o separados.
conocimiento en formato dato, me suena a homoiconicidad, algo que lisp hace bastante bien desde digamos... 1958

http://en.wikipedia.org/wiki/Homoiconicity

ya que estamos, portable a que otra plataforma?
Del tiempo: en relación con la programación de un software tradicional, la modelación permite reducir los tiempos de un proyecto en 50%.
citation needed, que estudio de campo muestra estos resultados? paper?
Del requerimiento: Huebra asegura que MORE permite captar con alta precisión el requerimiento del cliente, y encarar la solución a su “exacta medida”.
como nos prometieron los de UML con la especificación de casos de uso?
Múltiple Son grandes empresas nacionales las que confían en Onirus. Enarsa, para sus 65 plantas, utiliza un sistema para el procesamiento de datos de despacho térmico. Hidroeléctrica Piedra del Águila, Centrales Térmicas Mendoza, Central Puerto y La Plata Cogeneración lo emplean para facturación de energía eléctrica del mercado a término. “Es aplicable a cualquier tipo de industria; algunas pymes usan sistemas con esta tecnología para administración contable, soluciones agrícolas, trazabilidad vitivinícolas, sanidad equina, entre otros”, agregó la especialista.
osea que es un lenguaje turing completo http://en.wikipedia.org/wiki/Turing_completeness

que bueno que tenga casos de éxito, osea que no es vaporware al menos, pero el lenguaje del articulo le resta bastante credibilidad.

veremos que sale de esto, espero ser probado incorrecto, a nadie le gusta hacer ABMs :)

jueves, diciembre 08, 2011

rst2html5 se mueve

una de las ideas cuando empece rst2html5 era tener la posibilidad de transformar el documento generado despues de transformarlo a html.

recien acabo de empujar los cambios para tener post processors en rst2html5

un ejemplo?

dado el siguiente archivo:

https://raw.github.com/marianoguerra/rst2html5/master/examples/slides.rst

corriendo el comando:

./rst2html5 --deck-js --pretty-print-code examples/slides.rst  > slides.html

se obtiene lo siguiente (hint, apreta enter, la barra espaciadora o las fechitas):

http://marianoguerra.com.ar/rst2html5/slides.html

hacer un post processor no es mas que manipular el elementtree resultante, escucho ideas para mas postprocessors :)

jueves, diciembre 01, 2011

mozilla rhino 1.7R3 javadocs apidocs mirror

hasta que los muchachos de mozilla arreglen sus links rotos y suban de nuevo los javadocs de mozilla rhino este humilde servidor las postea aca

http://marianoguerra.com.ar/docs/rhino-1-7R3/index.html

PD: SEO friendly title :P

jueves, noviembre 10, 2011

simbolitis en scala

hace un tiempo estoy desarrollando un proyecto en scala.

de los lenguajes estaticamente tipados es el mejor que he usado hasta ahora, pero hay algo que no me gusta hasta ahora...

algunos desarrolladores parecen nenes que nunca los dejaron hacer nada y a la primera oportunidad se mandan cualquiera.

resulta que en scala los metodos pueden tener cualquier nombre, letras, simbolos, unicode etc.

y eso lleva a cosas como lo siguiente:

<< es POST (yo: .... ok ....)
<<< es PUT (no notas la diferencia? es obvio)
ah! me olvidaba <:< es agrega headers al request (yo: O.O)

les dejo una para el camino:

>/ es 

Set the default character set to be used when processing 
the request in <<, <<<, Handler#>> and derived operations
 >~, as_str, etc.
diviertanse

patea la arenita y dice bajito "explicit is better than implicit"

viernes, septiembre 23, 2011

lift 2.4-M4, scala 2.9.1, sbt 0.11.0-RC0, jetty 7.3 and xsbt-web-plugin 0.1.1

installing sbt 0.11.0-RC0

run the following commands:
# go to your home directory
cd

# create a bin folder there (if you don't have it yet)
mkdir bin

# download the latest sbt
wget http://repo.typesafe.com/typesafe/ivy-snapshots/org.scala-tools.sbt/sbt-launch/0.11.0-RC1/sbt-launch.jar
now we need to create a launcher for sbt, create a file called sbt in the bin directory you just created and put the following inside:
java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"
now run the following commands:
# give execution permissions to the file
chmod u+x sbt
if you don't have $HOME/bin in your path variable you should add it, for this do the following:
# open $HOME/.bashrc in your favorite text editor
vim $HOME/.bashrc
and add the following line at the end of it:
export PATH=$PATH:$HOME/bin
save and close and run the shell again so it loads the new definitions:
bash
you can check that the path was updated by running:
echo $PATH
you should see something similar to this:
/sbin:/bin:/usr/sbin:/usr/bin:/home/test/bin
see that the last one is $HOME/bin (with $HOME expanded to my current home location)

installing scala 2.9.1

if your operating system has this in the package manager then install it from there but since the release is new and some distributions are a little behing we will install it from the download section of the scala site.
run the following commands:
# download the latest version of scala
wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final.tgz

# unpack it
tar -xzf scala-2.9.1.final.tgz

# move the folder to the standard place
sudo mv scala-2.9.1.final /usr/share/scala

# create links so the commands are visible
sudo ln -s /usr/share/scala/bin/scala /usr/bin/scala
sudo ln -s /usr/share/scala/bin/scalac /usr/bin/scalac
sudo ln -s /usr/share/scala/bin/fsc /usr/bin/fsc
sudo ln -s /usr/share/scala/bin/sbaz /usr/bin/sbaz
sudo ln -s /usr/share/scala/bin/sbaz-setup /usr/bin/sbaz-setup
sudo ln -s /usr/share/scala/bin/scaladoc /usr/bin/scaladoc
sudo ln -s /usr/share/scala/bin/scalap /usr/bin/scalap

installing the rest

first create the project folder and setup the structure:
# define the name of the project
PROJNAME=demo

# create the direcotry where our project will be
mkdir $PROJNAME

# get the latest lift with sbt support
wget https://nodeload.github.com/lift/lift_24_sbt/tarball/master

# extract lift
tar -xzf master

# remove the downloaded file
rm master

# copy the basic example to our project directory
cp -r lift-lift_24_sbt-*/scala_29/lift_basic/* $PROJNAME

# move to our project folder
cd $PROJNAME

# remove older sbt versions
rm sbt sbt.bat sbt-launcher.jar

# remove the project structure
rm -r project/

# create the new project structure
mkdir -p project/project
the change in the project directory structure is because it changed in sbt 0.11, see more about this here:
https://groups.google.com/forum/#!searchin/simple-build-tool/plugins/simple-build-tool/ep_63fA_Gzk/32xiPzGkCqAJ
create a file at $PROJNAME/build.sbt:
vim build.sbt
with the following content:
seq(webSettings :_*)

scalaVersion := "2.9.1"

libraryDependencies ++= Seq(
        "net.liftweb" %% "lift-webkit" % "2.4-M4" % "compile",
        "net.liftweb" %% "lift-mapper" % "2.4-M4" % "compile",
        "org.eclipse.jetty" % "jetty-webapp" % "7.5.1.v20110908" % "jetty",
        "junit" % "junit" % "4.8" % "test",
        "ch.qos.logback" % "logback-classic" % "0.9.26",
        "org.scala-tools.testing" %% "specs" % "1.6.9" % "test",
        "com.h2database" % "h2" % "1.3.160"
)
create a file at $PROJNAME/project/plugins.sbt:
vim project/plugins.sbt
with the following content:
resolvers ++= Seq(
        "Web plugin repo" at "http://siasia.github.com/maven2",
        Resolver.url("Typesafe repository", new java.net.URL("http://typesafe.artifactoryonline.com/typesafe/ivy-releases/"))(Resolver.defaultIvyPatterns)
)

addSbtPlugin("com.github.siasia" % "xsbt-web-plugin" % "0.1.1")
now run:
sbt
when you get to the console write:
jetty-run
note that the first time it will take a while, that's because it's downloading lot of stuff and compiling some other things, after the first run everything becomes faster.
after a moment some information will appear, after that navigate to:
http://localhost:8080
and play with the app.

generating a war file to deploy in web containers

just run:
sbt package-war
to test you can run:
sbt test
note that the new version of jetty changed namespace from org.mortbay.* to org.eclipse.* so some code may be broken.

some extra packages

here are some other packages you may want to have, copy the lines your are interested in and add them to $PROJNAME/build.sbt:
libraryDependencies ++= Seq(
    "com.novocode" % "junit-interface" % "0.6" % "test->default",
    "org.scalatest" % "scalatest_2.9.0" % "1.6.1",
    "com.sun.jersey" % "jersey-server" % "1.9",
    "com.sun.jersey" % "jersey-client" % "1.9",
    "com.sun.jersey" % "jersey-core" % "1.9",
    "com.sun.jersey" % "jersey-json" % "1.9",
    "javax.ws.rs" % "jsr311-api" % "1.1.1",
    "javax.xml.bind" % "jaxb-api" % "2.2"
)

martes, agosto 16, 2011

500 posts intrascendentes...

...de un blog intrascendente.

si seniores, pensar que hace varios anios cree este blog cuando mi hermano se compro su primera camara compacta para postear fotos*.

el experimento no duro mucho  y empece a variar entre informacion interesante, rants de odio hacia el software :P, la etapa de postear screenshots de mi desktop, la etapa de quotear y repostear cosas y ahora que es simplemente un log de lo que considero vale la pena eternizar para cuando este viejo y solo y ya me haya leido todos los mails y chats de gmail en orden cronologico (?) y me ponga a ver que pavadas decia "cuando era joven".

al menos vino ian curtis y nos tomamos una pepsi


* mi hermano ahora labura de fotografo en berlin, para que se den una idea del paso del tiempo, pasen y vean que bonitas fotografias: http://kaig-hu-arg.com/

...then you win...

recien leo esto:

http://www.zdnet.com/blog/open-source/linux-snickers-at-microsofts-victory-declaration/9405

habla de que exceptuando desktops, linux es la fuerza mayoritaria en cloud, servers, mobile y 2da en tablets.

y que como el desktop esta en salida* linux es la fuerza dominante o el segundo en casi todos los segmentos.

esto me hizo acordar dos cosas:



y que por estas epocas hace 10 anios instalaba por primera vez linux en mi maquina :)

feliz decada linux

ahora hay que ponerse a ver cual es el sistema operativo que destrone a linux, no vaya a ser que se quede dormido en los laureles

a la espera del proximo rey**, viva la diversidad :)

* si ya se, tiene para rato
** que el nuevo rey sea libre

sábado, agosto 13, 2011

me gane una mochila un libro y un titulo de ingeniero en sistemas

dia de regalos, se anunciaron los ganadores del spawnfest y gane en la categoria "" por qrly

el premio es una mochila de erlang solutions y un libro de Erlang OTP in action (IRL!)

la UTN por haber aguantado 6 anios asistiendo a sus aulas le entrego a mi viejo por cuestiones geograficas (el E5 no llega hasta Inglaterra todavia) un titulo de ingeniero en sistemas de informacion.

demasiados premios para un dia

lista de lecturas 06/08/11

viernes, agosto 12, 2011

mlog, logging for human beings

siempre empiezo un modulo y empiezo a poner prints, pienso "tendría que usar logging", pero el hecho de no poder recordar como se configura un logger y tanta verbositud hace que siempre termine usando prints.

peor cuando tengo que cambiar a logging tengo que leer la documentación y termino haciendo copy paste del código de los ejemplos.

para eso cree un wrapper que me hace la vida mas simple en mis casos de uso simples.

pego acá parte del readme del modulo (en ingles por fiaca a traducirlo).

si les gusta el código esta acá:

https://github.com/marianoguerra/doodles/tree/master/python

si ven algún error, problema o tienen alguna observación para hacer son bienvenidos, nunca termino de entender el modelo de logging ya sea en python o en java (el único que entiendo es console.log y console.error de js :D)

acá va un ejemplo de uso:



import time
import mlog

# create a logger for the console with default logging level, default format
# and default everything (but nice defaults)
log = mlog.console()
# log some stuff
log.info("hey!")
log.warn("warning...")
log.error("something went wrong! (no it didn't just testing log.error)")

# add a file handler to the logger we where using (see how I pass the logger?)
# if I don't pass the logger instance I get a brand new logger that is
# unrelated to the last one, but in this case I add a handler to the one I have
mlog.file("mlog.log", logger=log)

# log some more stuff
log.debug("I'm on a file now!")
log.info("of course I'm on both")

# who wants file loggers without rotation?
# I give you a nice notation to specify the rotation policy
# add this handler to the logger I already have
mlog.file("every-minute.log", when=mlog.every(1, mlog.MINUTE), logger=log)

log.info("im on a file that rotates every minute")

# give time so it rotates
time.sleep(65)

log.info("65 seconds passed!")

# this is a new logger not related with the others
# change the module name so it's not in the same hierarchy
# as the other ones
other_log = mlog.file("unrelated.log", name="test_mlog_1")

# log something
other_log.info("unrelated logger is unrelated")
running it produces the following output (and files):

$ python test_mlog.py
[2011-08-12 11:44:30,491] test_mlog INFO: hey!
[2011-08-12 11:44:30,491] test_mlog WARNING: warning...
[2011-08-12 11:44:30,491] test_mlog ERROR: something went wrong! (no it didn't just testing log.error)
[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ ls
README.rst                              mlog.log                                test_mlog.py
every-minute.log                        mlog.py                                 unrelated.log
every-minute.log.2011-08-12_11-44       mlog.pyc

$ cat mlog.log
[2011-08-12 11:44:30,491] test_mlog DEBUG: I'm on a file now!
[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ cat every-minute.log
[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!

$ cat every-minute.log.2011-08-12_11-44
[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute

$ cat unrelated.log
[2011-08-12 11:45:35,495] test_mlog_1 INFO: unrelated logger is unrelated

miércoles, agosto 10, 2011

csv table to rst table -- python <3

update: roberto alsina sabe! :D hay una directiva no muy conocida en reST que permite hacer lo que hice (csv-table), y anda muy bonito en el wiki de github, dejo el codigo abajo porque es codigo python muy bonito :P

problema, documentar estructura de tablas sql en algun lado

preferiblemente:

  * formato editable con editor de texto
  * versionable
  * facil de escribir y bonito de leer

la forma mas facil de escribir es algo asi como un csv, pero la forma mas facil de leer es algun formato tabular, el wiki de github soporta varios markup pero el markup para tablas siempre es un perno, asi que elegi escribir un conversor de csv a tablas restructured text.

el resultado esta aca



ejemplo:

$ cat personas.csv                                           
dni, nombre, apellido, observacion
1, bob, esponja, vive en una pinia debajo del mar
2, patricio, estrella, amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?
$ python csv2table.py personas.csv > tablas.rst                                    
$ echo >> tablas.rst
$ python csv2table.py personas.csv "Personas con titulo (la tabla no las personas)" >> tablas.rst
$ rst2html tablas.rst > tablas.html

resultado rst (si, rompi todos los estilos de la tierra):

=== ========= ========= ========================================================================================= 
dni  nombre    apellido  observacion                                                                              
=== ========= ========= ========================================================================================= 
1    bob       esponja   vive en una pinia debajo del mar                                                         
2    patricio  estrella  amigo de bob que perno seria tener que escribir el markup para una columna tan larga no? 
=== ========= ========= ========================================================================================= 

Personas con titulo (la tabla no las personas)
==============================================

=== ========= ========= ========================================================================================= 
dni  nombre    apellido  observacion                                                                              
=== ========= ========= ========================================================================================= 
1    bob       esponja   vive en una pinia debajo del mar                                                         
2    patricio  estrella  amigo de bob que perno seria tener que escribir el markup para una columna tan larga no? 
=== ========= ========= ========================================================================================= 


resultado html:

dni nombre apellido observacion
1 bob esponja vive en una pinia debajo del mar
2 patricio estrella amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?

Personas con titulo (la tabla no las personas)

dni nombre apellido observacion
1 bob esponja vive en una pinia debajo del mar
2 patricio estrella amigo de bob que perno seria tener que escribir el markup para una columna tan larga no?

martes, agosto 02, 2011

llego el momento

si seniores, basta de intentar evitar lo inevitable, hoy me voy a aprender de memoria los shorthands de CSS.

parece que la cosa es como un reloj, empezando en las doce y girando en sentido horario (como va a girar un reloj sino).

osea que es: top, right, bottom, left.

si se especifican 3 simplemente el segundo se refiere a left y right: top, right - left, bottom.

si se ponen dos se aplican de a pares: top - bottom, right - left.

espero habermelos aprendido bien porque ahora me quedaron grabados con lo del reloj :D

solo me tomo como 5 anios de consultar w3schools cada vez que necesitaba recordarlo.

PD: te conte que la documentacion de mozilla le pasa el trapo a la de w3schools y que tendrias que linkear a MDC CSS Docs cuantas veces puedas asi rankea arriba de w3schools en google y todos somos felices?

miércoles, julio 27, 2011

Portishead - Nick Cave - I'll Be Your Mirror

pasteo un mail que mande con una descripcion por que da fiaca contar dos veces la misma cosa.


gentes, como algunos sabran y otros no (creo los mas que no que los
que si) hoy fui a ver ATP - I'll be your mirror, un festival hecho con
musica elegida por portishead.


la cosa es que de los que conocia que tocaban estaban PJ Harvey,
Portishead y oh sorpresa nick cave tocando con su banda grinderman (no
soy muy nicolas cuevanero como para saber que tenia esa banda).

las malas noticias primero: PJ Harvey tocaba ayer nomas asi que me la perdi :S

las buenas despues: vi a nick cave en vivo y obviamente a portishead

como algunos sabran y otros no (creo los mas que si, que los que no)
no conozco mucho de nick cave pero resulto que en vivo es una locura,
los vagos tienen una potencia terrible, el primer violero esta de la
cabeza, toca el violin con distorsion y cry baby, las maracas que
eventualmente golpea contra unos platillos que tiene cerca, la
guitarra electrica con un arco. El batero vestido de saco rosa tocando
una bateria rosa. Nick Cave yendo por todos lados, siempre arrojando
por los aires el instrumento que deja de usar (guitarra, piano,
microfono), el unico que parece ser normalito es el bajista, muy
ubicado el tocando muy bien en una esquina. Todo esto sin contar las
barbas epicas que clavan el violero y el baterista.



en el segundo tema nick cave tira la guitarra a la bosta y se tira
sobre las primeras files gritando la cancion y haciendo cantar a la
gente, una locura.

como nota de color, grindman fue la banda que mas fuerte sono que haya
visto en mi vida, literalmente me dolian los oidos cuando termino y en
un momento me tuve que ir para atras porque el primer violero metia un
chirrido en las canciones (el chirrido era deseado, ya que lo activaba
en una consola al costado) que era dificil de aguantar.




por ultimo vi a portishead, la puesta en escena muy grosa, los videos
que usan de fondo estan muy copados (muy larescos diria :P) suenan
terriblemente bien en vivo y te quedas sorprendido como le sacan esos
sonidos a los instrumentos (fuera de dos teclados y unas bandejas no
usan nada raro), el tema fue que suenan tan bien que te pones a pensar
en cualquier cosa y cuando caes en que te estas yendo por las ramas y
que no estas prestando mucha atencion se te pasa a mil (al menos eso
me pasa a mi). Para recontra rescatar, tenian camaritas tipo de
vigilancia por todo el escenario apuntando desde angulos chiflados a
los musicos y a veces lo proyectaban al fondo y en dos pantallas
laterales, lo que permite notar la habilidad y tecnica jazzera del
batero, lo groso que es el violero y la cara de tristeza que tiene
beth gibbons durante todo el recital.



para cerrar, vi algunas otras bandas interesantes cuyos nombres
buscare maniana y vi algunas que realmente o yo soy muy convencional o
ellos haciendo ruido son peores que yo haciendo ruido.



para rescatar lo que me acuerdo ahora, una banda que hizo la banda
sonora de la pelicula muda de juana de arco y la toca en vivo con la
pelicula de fondo, la banda es una mezcla de orquesta, coro y
instrumentos electricos y suena muy groso. Otro, una banda media jam
con un saxo al frente haciendo cualquier fruta que suena muy bien, mas
menos cero para una banda llamada anika o similar, la banda suena muy
bien pero la cantante tiene menos onda que flequillo de coreano.



PD: nick cave les manda esta foto


y un beso en el pupo a todos


viernes, julio 15, 2011

escribir un libro, plantar un arbol, tener un hijo y mandar un parche al kelmer... wait what?

si seniores, por razones que desconozco uno de los objetivos de mi vida es mandar un parche al kernel y que lo acepten.

imaginemos la siguiente situación:


* mujer atractiva en un bar sostiene un smartphone
* hombre menos que standard (aka yo) al otro lado del bar nota la interacción humano maquina y decide acercarse.

- hola, ese es un HTC no?
- mmmh, si

rota 45 grados intentando darle la espalda al hombre menos que standard

- sabias que si:

a) me aceptan el parche
b) los drivers de comedi pasan de staging al mainline kernel
c) y resulta que vos usas los drivers comedi (que no se ni que son)
d) estas usando una linea de código que yo toque?

la dama rota en dirección opuesta a la anterior operación rotacional, levanta su mirada, mira a los ojos al hombre menos que standard y lo besa apasionadamente.

disclaimer: los hechos o personas aquí expuestos son solo ficción, cualquier coincidencia con la realidad es pura ficción.

asi es seniores, luego de ver este video:



y seguir esta guiá

https://github.com/gregkh/kernel-tutorial/blob/master/lxf_article/write_kernel_patch.txt

hice esto:

http://driverdev.linuxdriverproject.org/pipermail/devel/2011-July/018472.html

obviamente vendrán mas parches cuando me acepten o rechacen este y entienda el proceso bien como para ponerme a mandar mas parches/cambios

por ahora a la espera de ser rechazado olímpicamente, los mantendré informados (?)

lunes, julio 11, 2011

Qrly - selectores a lo jquery para XML y HTML en erlang

este fin de semana fue el spawnfest, un evento en el que tenes dos días para hacer una aplicación en erlang que sera juzgada por grosos del lenguaje y de yapa con interesantes premios.

estaba inscripto hace como 5 meses pero coincidio con un viaje a praga.

si bien era viaje de trabajo y ya estuve en praga dos veces antes, da un poco de cosita pasarse el finde encerrado en lugar de salir a pasear.

así que hice un equilibrio y le dedique el tiempo que consideraba que de todas formas estaba al pedo/cansado (aka a la maniana y a la tardecita) y salio qrly.

el proyecto esta en github aca:

https://github.com/marianoguerra/qrly

si bien no lo termine completamente quedo bastante util, los filtros que faltan son mas avanzados y ya tendre tiempo de agregarlos.

en resumen y siendo esta mi tercera aplicación útil en erlang (efene, fnt y qrly) continuo pensando que es un lenguaje muy copado y potente, me sorprende lo mucho que se logra con pocas lineas de codigo.

en lo malo, si bien la sintaxis ya no me molesta y hasta podria decir que me gusta, lo que me sigue molestando es los 3 tipos de puntuación para delimitar sentencias, el problema no es usarlos sino tener que cambiarlas cuando uno mueve o agrega codigo. Por ultimo, TDD se hace un poco molesto si uno agrega el paso de compilar (python me maleduco en esto ;)

sobre el final, me quedaban unos minutos asi que hice un ejemplo muy simple de como usarlo llamado oliver, que es un parser de atom.



por ultimo, no podia irme sin presentarles a la mascota del projecto "Qrly the bird"


como siempre, ayuda mas que bienvenida, la licencia es BSD.

esto fue qrly para sega genesis, espero que les haya gustado

ACTION!

martes, julio 05, 2011

un twitter personal en tu server usando git (?)

en tu server preferido:

[galaxy]$ git init --bare me.git
Initialized empty Git repository in /home/marianoguerra/marianoguerra.com.ar/me.git/

[galaxy]$ cat me.git.php 

<?
header("Content-type: text/plain");
system("git log --pretty=format:\"%aD %an: %s%n%b%n\"");
?>


[galaxy]$ cp me.git.php me.git/index.php


en tu maquina:

[mariano@ganesha ~]$ git clone ssh://marianoguerra@marianoguerra.com.ar/home/marianoguerra/marianoguerra.com.ar/me.git/         
Cloning into me...
marianoguerra@marianoguerra.com.ar's password: 
warning: You appear to have cloned an empty repository. 
 
[mariano@ganesha ~]$ cd me 
 
[mariano@ganesha me]$ git commit --allow-empty -m "hello world"
[master (root-commit) 5bce037] hello world 
 
[mariano@ganesha me]$ git push origin master 
marianoguerra@marianoguerra.com.ar's password: 
Counting objects: 2, done.
Writing objects: 100% (2/2), 171 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
To ssh://marianoguerra@marianoguerra.com.ar/home/marianoguerra/marianoguerra.com.ar/me.git/
 * [new branch]      master -> master
 
[mariano@ganesha me]$ curl http://marianoguerra.com.ar/me.git/
Tue, 5 Jul 2011 12:46:17 +0100 Mariano Guerra: hello world

se aceptan mejoras de todo tipo :D

jueves, junio 30, 2011

salio efene 0.9 noma'

el release estaba listo hace bastante, pero faltaba un poco de documentacion y queria mejorar la "presencia" de efene.

asi que escribi un quickstart guide y compre el dominio efenelang.org

como con emesene (emesene.org) centralize website y blog en un mismo lugar para evitar tener todo desparramado.

la release esta bastante cerca de 1.0, me gustaria que este release genere un poco de impulso asi me justifica seguir laburando en el proyecto con mas pilas.

el tiempo lo dira..

lunes, junio 27, 2011

cosas que aprendi hoy

git add -p        # add changes interactively
git diff --staged # diff of stuff already added to the index but not commited (aka last commit vs index)
git branch -v     # Show branches and the commits they point to
git add .         # add the content of this directory and anything underneat it

de Mastering Git Basics by Tom Preston-Werner

y que tmux esta muy bueno, adios screen tu codigo no mantenido desde 2005 y el formato de la configuracion fueron las razones <3

sábado, junio 25, 2011

Roger Waters - The Wall

como vimos en el episodio anterior (?) fui a berlin a visitar a mi hermano, llevarle algunas cosas que se había dejado en Inglaterra, llevarle algunas cosas que le había traído e ir al recital de roger waters.


llegamos y acampamos en el depto de el con pato


al otro día fuimos a un parque a tomar mate y comer pan con dulce de leche con war y falco (un berlines del este muy copado)


nota: no es que sea un melancólico crónico, justo se dio que yo le llevaba mate y el había encontrado un lugar donde vendían dulce de leche habana :D


a la noche partimos para el o2 arena para ver a nuestro amigo rogelio aguas dando su recital sobre la pared


con solo decir que la primera vez que escuche the wall fue cuando tenia algo así como 6 anios debido a que mi viejo es fanático de pink floyd desde cuando pink floyd grababa los discos :D


o que la primera vez que vi la película de wall cuando tenia algo así como 8 y no entendí que mierda era tanta psicodelia


te iras dando una idea de hace cuanto escucho pink floyd y el hecho que se me había puesto en la cabeza que nunca los iba a ver en vivo (bue, no vi a pink floyd sino a roger waters pero no es para quejarse ;)


aprovecho para aclarar que yo soy del bando David Gilmour filial Colinas del Cerro (?)


sobre el recital, es una cosa increíble, es una obra de arte visual completa, la música es solo una parte de la puesta en escena que incluye la construcción gradual del muro mientras van tocando hasta que quedan completamente tapados, actuación en escenario, proyecciones sobre el muro y sobre una pantalla circular enorme. Roger Waters disparando una ametralladora con un sonido sincronizado espectacular, el famoso cerdo de pink floyd y el final con el muro cayendo, todo esto increíble.


para cerrar dos cosas, sera por mi ubicación, pero el sonido (que para estandar de banda internacional estaba muy bien), esperaba que pink floyd estuviera un paso mas arriba, pero por momentos sentí algunas cosas que podrían mejorarse (nota, soy medio enfermo en cuanto al sonido).

otra cosa para notar es el nivel de transgresion o "palos" que el show tiene, muchos de ellos agiornados con respecto al show original.

algunos que recuerdo, en "Goodbye Blue Skies" los bombarderos abren sus compuertas y empiezan a tirar cruces cristianas, despues de eso tiran estrellas de david, la luna musulmana luego de lo cual tiran simbolos de la empresa Shell, momento en el cual los alemanes empiezan a aplaudir como locos luego de lo cual empieza a tirar logos de mercedes benz con lo que los aplausos amainan :D

montones de consignas anti gobierno y anti consumo que son demasiadas para enumerar (o recordar)

pero algunas de ellas:

En "Mother" cuando dice "Mother should I trust the government?" lo escriben en la pared y contestan con un No enorme escrito con sangre.

el cerdo con la inscripcion "everything will be alright, just keep consuming"

la cantidad de imagenes publicitarias al estilo de ipod pero con inscripciones contra el consumismo.

imagenes del video publicado por wikileaks donde soldados estadounidenses matan a periodistas  y luego escriben "we won't forget" o algo asi

y mas que no me acuerdo.

con mi hermano hablabamos de que por una parte waters no tiene la necesidad de arriesgarse con estas cosas pero que a su vez por ser quien es tampoco tiene mucho que perder.

de lo cual terminamos hablando sobre la falta de bandas con un mensaje transgresor en la ultima decada, cosas como pink floyd, rage against the machine, SKA-P etc.

pero bue, ya me fui de tema :D

Copenhagen, Berlin, Roger Waters The Wall, Stuttgart, Garmish Partenkirchen, Rotterdam+ferry

largo viaje de dos semanas...


pato me vino a visitar y aprovechamos para viajar, visitar amigos/mi hermano, ir a un recital (*el* recital).


empezo esperando hace dos semanas en londres a pato, llego a la tarde, fuimos al hotel a dejar las cosas y nos fuimos a dos pubs a comer fish and chips (al parecer la unica comida inglesa).


a la maniana siguiente nos levantamos temprano y fuimos al aeropuerto para ir a copenhagen.



Llegamos tipo 11, fuimos al hotel a dejar las cosas y salimos a pasear, estuvimos 1 dia y medio ahi, paseando a pata y en bicicleta (copenhagen es una ciudad hecha para andar en bicicleta).



al otro dia a la tarde salimos para berlin y lo fuimos a visitar a mi hermano que cedio un colchon en su casa.


con el fuimos a ver The Wall en berlin a 21 anios del recital original.



El mejor recital que vi (y creo que vere) en mi vida, merece un post aparte...


despues de eso fuimos a stuttgart y pfortzheim a visitar amigos, coincidio con cumpleanios y anuncio de casamiento de amigos asi que de fiesta.



nos hicimos una escapada al sur del estado de Bayern en alemania a un lugar llamado Garmish Partenkirchen que queda al lado de la montania mas alta de alemania (no sera tan alta, menos de 3000 metros :P)



paseamos un dia y medio por ahi y volvimos a stuttgart, nos quedamos un poco mas y salimos para rotterdam en un tren norcturno.







al llegar nos dimos cuenta que nuestros planes tenían una falla, el ferry de rotterdam a inglaterra demoraba 9 horas en lugar de "un par de horas" que nosotros creíamos, asi que nos tuvimos que ir al puerto a tomarnos el ferry el día que llegamos y como andábamos re contra cortos de plata y llevábamos bolsos no pudimos pasear mucho por rotterdam.


el ferry lo imaginabamos como una platafroma con autos y algunas sillas, muy lejos de la realidad, es un hotel flotante, incluso tiene casino.


asi que disfrutamos las intalaciones del ferry, dormimos y al dia siguiente despertamos en inglaterra, tomamos un tren a londres y estuvimos dando vueltas todo el dia hasta que pato tomo el vuelo de vuelta.



en resumen, conocimos bocha de lugares, visitamos bocha de gente y dormi en sillones y trenes mas que toda mi vida en suma :D





idea: filtro del mundo real en (cuasi) real time

estas frente a una estanteria llena de productos, estas buscando un producto que en su nombre tiene la palabra "riBer", no lo podes encontrar en el mar de productos.

sacas tu celular, abris la aplicacion* escribis "riBer" y enfocas a la estanteria.

la aplicación te muestra lo que esta viendo y highlightea la palabra que buscas

un paso mas:

le decis: subrayame lo que salga menos de 5 pesos, busca los numeros y busca cuales cumplen la relacion.

selling point para gente como yo.

estas frente a un libro o manual y pensas "ojala existiera grep para libros"

bueno, aca lo tenes ;)

* cuando la termines pasame una copia.

PS: seguro existe, no lo busque porque ni celular para correr esa cosa tengo, pero estaria bueno :D

miércoles, junio 08, 2011

idea: JITed relational database

si existen Just In Time compilers para lenguajes porque no hacer lo mismo para bases de datos relacionales?

la idea es que yo mando inserts de algo simil a json y la base de datos en un principio las mete en una bolsa de objetos como mongodb, pero a medida que los objetos van entrando busca patrones de atributos/tipos/relaciones y empieza a construir el schema para esos valores y los mete ahi.

la base de datos soporta sql pero duck typed, no digo el from, busca los objetos que matchean con la descripcion del where, quizas le puedo tirar hints para habilitar optimizaciones.

alguien lo hace por mi?

lunes, junio 06, 2011

hack de unos minutos

ayer estaba intentando recordar si google +1 ya había salido, mientras buscaba (no lo habrán anunciado tan bien)

se me ocurrió una idea.

dado que google +1 es para "gustar" urls, porque no hacer un simple reddit, pensé, el tema se corto rápido cuando leí los términos de servicio que impiden publicar quien gusta que, ademas estaba terco en la idea de no usar backend, ademas iba a tener que escribir autenticacion y comentarios.... o no?

en un rato salio un hack muy simple denominado "interesante"

la idea es que ves una pagina o recurso y querés charlas/comentar sobre eso o "+1'earlo", con un simple bookmarklet o entrando a la pagina, pones la url y bam! listo para comentar y todo sin ningún backend usando google +1, disqus, jquery y un css reset desde cdns, lo unico que tuve que hacer es una html muy básico con algo de css y js.

el resultado esta aca:

http://marianoguerra.com.ar/interesante/

si quieren discutir sobre interesante:

http://marianoguerra.com.ar/interesante/?url=http://marianoguerra.com.ar/interesante/

me quedo pensando que otro servicio tercerizado podría usar...

me gustaría de alguna forma listar los contenidos creados pero sin backend, ideas se aceptan

viernes, junio 03, 2011

FQL - Flight Query Langage

SELECT FLIGHT 
FROM "London" TO ("Stuttgart", "Berlin") 
WHERE departure IN (12/06/2011, 13/06/2011) 
      AND PRICE < 60 

un hombre puede soniar...

jueves, junio 02, 2011

Londres - Dover - Helsinki

 el finde logre coordinar con unos amigos que andan dando la vuelta a europa en una motorhome para encontrarnos en londres, el hecho coincidía con el cumpleaños de uno de los pichis (fideo, tambien conocido como enrique iglesias), asi que emprendi viaje el viernes despues del almuerzo.

campus de nokia en espoo

en el tren aproveche para justificar mi dia laboral y logre commitear algunas cosas.

dos finlandeces, un portugues y una inglesa tomando ferne con coca :D


a la llegada nos encontramos en el british museum, paseamos un rato y nos fuimos al super a comprar algo e ir a las motorhomes que estaban cerca de greenwich park, aproveche para poner mi reloj en hora (?) y despues de unos aperitivos emprendimos viaje para el centro de londres.


22:30

tomamos la precaucion de salir con horarios argentinos en europa por lo que la gente ya se estaba volviendo, logramos encontrar un pub que estaba abierto hasta las locas 3 de la maniana.



despues de ver a una docena de especimenes argentos intentado sus argentas estrategias con especimenes europeos salimos en busca de algo que nos depositara en greenwich park.



el día siguiente paseamos hasta que se hizo la hora de ir a ver la final de la champions league en un pub con publico catalan y manchesteroso.



luego de lo cual emprendimos vuelta para las motorhomes, comimos algo y emprendimos viaje en las motorhome hacia dover donde al día siguiente los muchachos iban a cruzar para francia.



ahí pegue la vuelta para londres y me fui al aeropuerto y partí para helsinki.






llegue el domingo a la tarde, llovía y estaba hoshible, fui al hotel, me acomode y sali en busca de comida.



volvi, me banie y me acoste a dormir.


al otro día fui a buscar a mi jefe al aeropuerto y fuimos al campus de nokia en espoo a una reunión que teniamos.


despues de la reunión fuimos a un bar en helsinki a beber y comer.


salimos a las 22:30 y todavía era pleno día, fuimos al hotel y despues de boludear un rato al sobre de nuevo.



al otro día me levante a las 7 y salí a pasear, camine mucho y saque fotos hasta las 16 que me fui para el aeropuerto.

El día estaba de diez (al igual que el día anterior) así que las fotos quedaron buenas.

la ciudad no es tan grande y es bastante sobria, tiene un aire del este de alemania.

publiquese, archivese y hagase conocer a los interesados

PS: no estoy muy inspirado para escribir

PPS: en londres/dover no saque ni una foto, así que todas las fotos son de helsinki

Seguidores

Archivo del Blog