Trabajo Profesional

Facultad de Ingeniería - UBA

ObjetivoS

Ambiente de Desarrollo para Clojure en Clojure

ObjetivoS

Extensibilidad

ObjetivoS

USABILIDAD

Clojure

CLojure

+ SLIME + Clojure-mode

+ Counter-clockwise

+ La Clojure

Ambientes de DEsarrollo

Ambientes de desarrollo

Metodologia

Iteraciones

Reuniones periodicas

Entregables por iteracion

pruebas

PROTOTIPO

Objetivos

  • Investigar disponibilidad de librerías.

  • Explorar herramientas de abstracción.

  • Adaptación al estilo funcional de programación.

  • Identificar principales desafíos.

PROTOTIPO

(defn make-main
  "Creates the main window and all
  its controls."
  [name]
  (ui/init)
  (let [main     (ui/frame name)
        tabs     (ui/tabbed-pane)
        ui-main  {:main main :tabs tabs}
        icons    (map (comp ui/image io/resource) icons-paths)]
        
    (-> main
      (ui/set :icon-images icons)
      (ui/set :j-menu-bar (build-menu ui-main))
      (ui/set :size 800 600)
      (ui/maximize)
      (ui/show)
      (ui/add tabs))

    ui-main))

Interfaz gráfica - SWING

PROTOTIPO

Coloreado sintáctico

PROTOTIPO

Editor de Texto - DESEMPEÑO

Abstracción UI

(attr text-field :text "Hola")

Abstracción UI

Selectores

controles anidados

Manipulación complicada

SELECTORES SImPLIFICAN modificacón

(update window :label attr :text "Last name")

Antes

DESPUéS

Abstracción UI

Selectores - IMPLEMENTACIón

[:#center [:text-editor (partial has-doc? doc)]]

Abstracción UI

Sintáxisis declarativa

(def window [:window {:visible true
                      :size [200 60]
                      :layout :flow}
             [:label {:text "Name"}]
             [:text-field {:text "Enter your name here"}]]
(let [window (ui/window {:visible true 
                         :size [200 60]
                         :layout :flow})
      label  (ui/label {:text "Name"})
      text   (ui/text-field {:text "Enter your name here"})]
   (->> window
    (ui/add label)
    (ui/add text)))

Arquitectura

mvc

Arquitectura

Núcleo + PLugins

Arquitectura

Núcleo - Modelo

Documento

historial

Lenguaje

Configuración

ui

Aplicación

Arquitectura

Núcleo - VISTA

ventana

menú ppal

secciones

Arquitectura

Núcleo - CONTROL

EVENTOS

MANEJADORES

Arquitectura

PLugins

GLobales

LOCALES

  • Ventana Principal + Editor

  • Ir a línea

  • Deshacer / Rehacer

  • Notificador

  • Explorador de Archivos

  • Buscar y Reemplazar

  • Perfil de Código

  • Clojure

  • Markdown

  • Coloreado Sintáctico

  • Autocompletar

  • Resaltado de Delimitadores

  • Delimitadores Arcoiris

  • Paredit

  • Macro expansión

  • Vista Previa (Markdown)

Editor de TExto

Editor de TExto

coloreado sintáctico

Editor de TExto

DESHACER / REHACER

Editor de TExto

MARKDOWN

nREPL

Conexión con una instancia de Clojure a través de la red

network

READ EVAL PRINT LOOP

nREPL

Servidor

nREPL

CLIENTE

AUTO-completar

Contexto Local

Contexto Global

+
+

trabajo futuro

Funcionalidad

Interfaz gráfica

Dependencia entre plugins

Búsqueda del árbol sintáctico

Conclusiones

Inmutabilidad

Conclusiones

POO / PF

Conclusiones

Manipulación código fuente

Conclusiones

Alcance

¡MUCHAS Gracias!

Clojure Lab

By Juan Facorro

Clojure Lab

IDE built for Clojure in Clojure.

  • 481