Ir al contenido principal

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

charla de efene en erlang factory lite brussels 2012

los slides están temporalmente acá:

http://marianoguerra.com.ar/efene/talks/efene-efl-brussels-2012.html

hechos con rst2html5 obviamente ;)

supongo que van a estar definitivamente acá en unos días:

http://www.erlang-factory.com/conference/Brussels/speakers/MarianoGuerra

el evento en general muy bueno, charlas interesantes, gente copada

lo negativo... me entere que fosdem es este finde acá en bruselas y yo ya tengo pasaje de vuelta :S

crossquote

estaba leyendo El retrato de Dorian Gray 

y leo

En los días que corren la gente conoce el precio de todo y sabe el valor de nada

lo que me recordó a

"LISP programmers know the value of everything, but the cost of nothing" - Alan Perlis

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 :)

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 :)

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:



ah! me olvidaba <: es agrega headers al request o.o>

les dejo una para el camino:


>/ es

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

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

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"
)