Mariano Guerra: Om.next with devcards how to

Simple step by step guide to try om.next with devcards.

This assumes you have leiningen installed if not, go to http://leiningen.org/ and follow the instructions there.

Let's start by creating the basic devcards environment using the devcards template:

lein new devcards omnom
cd omnom
lein figwheel

The output should look something like this:

Figwheel: Starting server at http://localhost:3449
Focusing on build ids: devcards
Compiling "resources/public/js/compiled/omnom_devcards.js" from ["src"]...
Successfully compiled "resources/public/js/compiled/omnom_devcards.js" in 15.476 seconds.
Started Figwheel autobuilder

Launching ClojureScript REPL for build: devcards
Figwheel Controls:

    ...

  Switch REPL build focus:
          :cljs/quit                      ;; allows you to switch REPL to another build
    Docs: (doc function-name-here)
    Exit: Control+C or :cljs/quit
 Results: Stored in vars *1, *2, *3, *e holds last exception object
Prompt will show when figwheel connects to your application
To quit, type: :cljs/quit
cljs.user=>

then after it does all it's thing open http://localhost:3449/cards.html

it should look something like this:

../galleries/dev/omnom-1.png

click the omnom.core link, you should see this:

../galleries/dev/omnom-2.png

now we have to install the latest development snapshot for om to try om.next, in some folder outside your project run:

git clone https://github.com/omcljs/om.git
cd om
lein install

Now let's add the dependencies to our project, open project.clj and make the :dependencies section look like this:

:dependencies [[org.clojure/clojure "1.7.0"]
               [org.clojure/clojurescript "1.7.122"]
               [devcards "0.2.0-3"]
               [sablono "0.3.4"]
               [org.omcljs/om "0.9.0-SNAPSHOT"]
               [datascript "0.13.1"]]

Now restart fighwheel (press Ctrl + d) and run it again:

lein figwheel

reload the page.

open the file src/omnom/core.cljs and replace its content with this:

(ns omnom.core
  (:require
   [cljs.test :refer-macros [is async]]
   [goog.dom :as gdom]
   [om.next :as om :refer-macros [defui]]
   [om.dom :as dom]
   [datascript.core :as d]
   [sablono.core :as sab :include-macros true])
  (:require-macros
   [devcards.core :as dc :refer [defcard deftest]]))

(enable-console-print!)

(defcard first-card
  (sab/html [:div
             [:h1 "This is your first devcard!"]]))

(defui Hello
  Object
  (render [this]
    (dom/p nil (-> this om/props :text))))

(def hello (om/factory Hello))

(defcard simple-component
  "Test that Om Next component work as regular React components."
  (hello {:text "Hello, world!"}))

(def p
  (om/parser
    {:read   (fn [_ _ _] {:quote true})
     :mutate (fn [_ _ _] {:quote true})}))

(def r
  (om/reconciler
    {:parser p
     :ui->ref (fn [c] (-> c om/props :id))}))

(defui Binder
  Object
  (componentDidMount [this]
    (let [indexes @(get-in (-> this om/props :reconciler) [:config :indexer])]
      (om/update-state! this assoc :indexes indexes)))
  (render [this]
    (binding [om/*reconciler* (-> this om/props :reconciler)]
      (apply dom/div nil
        (hello {:id 0 :text "Goodbye, world!"})
        (when-let [indexes (get-in (om/get-state this)
                             [:indexes :ref->components])]
          [(dom/p nil (pr-str indexes))])))))

(def binder (om/factory Binder))

(defcard basic-nested-component
  "Test that component nesting works"
  (binder {:reconciler r}))

(deftest test-indexer
  "Test indexer"
  (let [idxr (get-in r [:config :indexer])]
    (is (not (nil? idxr)) "Indexer is not nil in the reconciler")
    (is (not (nil? @idxr)) "Indexer is IDeref")))


(defn main []
  ;; conditionally start the app based on wether the #main-app-area
  ;; node is on the page
  (if-let [node (.getElementById js/document "main-app-area")]
    (js/React.render (sab/html [:div "This is working"]) node)))

(main)

;; remember to run lein figwheel and then browse to
;; http://localhost:3449/cards.html

it should display the om cards if not try reloading the page.

now just keep adding cards!

Facundo Batista: Pico de segundo semestre


Ah, ¡qué semanas!

Vengo a recontrafull, pero fue un pico de un par de meses, ya se tranquiliza el segundo semestre. Bah, en un par de semanas se tranquiliza...

Se juntaron muchas cosas...

Estoy dando un curso de Python en Mercadolibre (bah, tres cursos) y eso me tiene ocupado los anocheceres de un día de la semana, o incluso de dos.

Pasó la charla que doy siempre en el postgrado para científicos en La Plata (de la mano de Manuel), y el PyDay en Junín (organizado por Juan), donde dí un taller de Intro a Python y además estrené una charla de programación asincrónica en Python 3.

Y el fin de semana pasado fue el cumpleaños de Felipe, que no sólo es que el sábado sea movidito (almuerzo con mi vieja, salón a la tarde para toda la familia y amigos con niños, más compañeritos del jardín, y cena con el resto de la familia), sino que hay mucha preparación los días anteriores.

Cumple 6 de Felu

Además, estuve corriendo para renovar la visa de USA, que me había expirado, y de repente pasé a necesitarla.

Todo eso teniendo en cuenta también que estoy bastante activo en varios proyectos de software libre.

  • CDPedia: Salió una nueva versión, la 0.8.3, principalmente con contenido actualizado y un par de fixes
  • fades: Con Nico sacamos la beta de la versión 4, con un montón de cambios! en breve sale el release final, una versión para no perderse!
  • Magicicada: seguimos laburando a full con Nati dandole forma para que sea ampliamente usable; estamos a un 80% de una gran beta inicial.
  • Encuentro: más allá de algunas acciones de mantenimiento que tuve que hacer, voy a tratar de incorporarle los videos de TED de Argentina...
  • Launcherposta: una nueva release, sólo en PyPI, con un par de fixes pequeños que fuí agregándole en algún momento.

En fin. Para ir cerrando ahora el año solamente (?!) me queda un viaje por laburo, más la PyCon Argentina en Noviembre (para la cual todavía tengo que preparar una charla con Joac).

Juanjo Conti: Fotos de la charla de Docker en RubyLit

Este jueves hubo meetup de RubyLit, el grupo de usuarios de Ruby del Litoral, y como tenía la cámara encima, saqué algunas fotos. Las comprto y aprovecho que tengo su atención para hacer una aclaracion: Ruby es la excusa (de los 15 que eramos, más de 10 no estábamos usando Ruby actualmente, pero no importa). La idea es juntarse con pares y discutir temas que nos interesan mientras comemos pizza.

De hecho, la charla que hubo no fue de Ruby, fue de Docker.

https://github.com/ggerman/pandora/tree/master/containers

Así que si no viniste a esta por que "no sabés Ruby", la próxima vení! o buscate una mejor excusa.

http://www.meetup.com/rubylit/

Juanjo Conti: La explicación (tarea de esta semana para el taller)

El enunciado era hacer un relato con un final divertido usando una situación de cuatro o cinco que había para elegir. Mi resultado:

(leer en forma ceremoniosa, con campanadas y aleteos de palomas de fondo)

Ayer por la tarde aconteció un hecho que, luego de que se difundiera de boca del capellán y de la encargada de recolectar las ofrendas, escandalizó a muchos hermanos de nuestra comunidad, y es por eso que como pastor de esta me veo en la obligación de robarle algunos minutos a la homilía para arrojar luz sobre ello.

Cómo sabrán, todos los sábados por la mañana dejo la parroquia muy temprano para dirigirme a alguna de las villas de la periferia a hacer trabajo pastoral, ya sea visita de enfermos, consuelo de afligidos o dispensación de la extremaunciones.

Como recorro a pie todos los puntos, ya que la colecta para el auto parroquial no alcanzó aún los objetivos esperados, termino a horas de la tarde y bastante cansado.

Sabrán también, y esto no es ningún secreto, que durante mis años de seminario desarrollé afición a las películas de La guerra de las galaxias, ya que eran las únicas que Monseñor Archundia nos permitía ver.

Cuando terminé con mi última visita, caí en la cuenta de que me encontraba a pocas cuadras del cine del barrio. Caminé hasta allí con el doble propósito de entrar a refrescarme con el aire acondicionado y averiguar si ya estaban dando La guerra de las galaxias 7. Doble también fue la Gracia: el aire acondicionado estaba puesto en veinte grados y la película se proyectaba en diez minutos. Compré mi entrada y me senté en una de las butacas del fondo a esperar. La película empezó a horario y no debió ser tan buena como sus antecesoras porque promediando, calculo yo, los tres cuartos de la misma, caí en un profundo sueño consecuencia de las horas de agobiante trabajo y del excelente sistema de aclimatación de la sala.

El hecho en cuestionamiento se debió a que cuando desperté, la película ya había terminado; La guerra de las galaxias 7 había sido reemplazada por una película condicionada. Erótica, si nos atenemos a lo que decía su ficha técnica.

Esa es, queridos hermanos, la razón por la cual se comenta que fui sorprendido mirando una película de alto voltaje. Ya escucharon mi explicación.

...

Ahora, si se me permite, me gustaría saber, me queda la duda, ¿cómo se enteraron de esto el capellán y la encargada de la recolección de las ofrendas?

Juanjo Conti: Idea/proyecto: poemario para programadores

Hace más o menos un año tengo una idea en la cabeza: crear un libro de poemas para programadores.

¿Qué es un "poema para programador"? La definición puede ser discutida, pero en este contexto sería un poema (¿común?) con algún condimente que hace que un programador le encuentre una vuelta más de rosca/lo entienda en otro sentido.

El "formato" de los poemas que contendría el libro es bastante variado, desde el verso libre hasta la métrica dura. Dejo dos ejemplos.

El programador:

Me desvela en la noche,
oscuro programa.
Códigos malévolos,
indescifrable anagrama.

Escribir instrucciones,
malditas sentencias.
Quien en un lugar programa,
en otro es ausencia.

Combinar comandos,
pensar algoritmos.
Manipular datos,
tipear a buen ritmo.

Exprime el cerebro,
modelando futuros.
La poesía se forma
de letras y números.

La noche no termina
hasta no verlo andando.
Máquina a cafeína
que sigue tipeando.

¡Error de sintaxis!:

La computadora nos grita en la cara.
¡Error de sintaxis!
Demasiados paréntesis.
¡Error de sintaxis!
Falta un punto y coma.
¡Error de sintaxis!
Carácter inválido en el nombre de la variable.
¡Error de sintaxis!
Llave no cerrada.
¡Error de sintaxis!
No se puede compilar el poema.

El libro, además de los poemas contendría:

  • Un prólogo titulado "¿Cómo leer un poema?" que hable sobre cómo leer en voz alta un poema, acaso la única forma de leerlo realmente.
  • Porciones de código que son poemas (tanto por contenido por lo que manifestaron). Por ejemplo, el primer ping.c.
  • Citas (no tan fidedignas) de algunos "padres" de la programación.
  • Un enlace al repositorio con todo el contenido del libro, listo para ser forkeado.

Distribución

Mi idea es que el libro sea financiado por empresas del sector informático. A cambio estas obtendrían publicidad: su logo estaría en la contratapa y se enviarían ejemplares (muchos) a conferencias para ser regalados entre los asistentes.

¿Habrá empresas interesadas en esta idea? ¿Habrá programadores interesados en el libro?

Update: el monto para las empresas rondaría los $3000. Con eso, asegurando 3 o 4 empresas aspiro a hacer una tirada inicial de 500 ejemplares.

Juanjo Conti: Audio de Desde el bunker

Esta semana estuve paseando por el programa Desde el bunker (Radio Continental Santa Fe, FM 102.5) de Martín Ferratto visitando la columna sobre literatura de mi amigo Gonzalo Vega. Gracias a la amabilidad del operador Raúl, aquí los recortes en donde aparezo (el primer es del martes y los otros dos del miércoles).

Juanjo Conti: Nocturnos (una tarea del taller)

El enunciado de la tarea de esta semana era algo así: escribir un cuento cuya temática sea libre, pero en el que aparezcan incluidos los ingredientes que la Reina Grimhilde usó para crear el conjuro de la fealdad en Blancanieves:

  • Polvo de momia
  • El negro de la noche
  • La risa de una vieja bruja
  • Un grito de terror
  • Una ráfaga de viento
  • Un rayo potente

Como me quedé algo bastante redondo, a pesar de haberlo hecho un par de horas antes de la clase, subo el audio.

Extra: al final de la clase Marilina leyó un cuento genial, El cuentista, de Saki.