martes, 10 de junio de 2014

Llista de tareas por hacer (ToDo List) con AngularJS

Código
Demo

La introducción a AngularJS será tema para otra oportunidad, Por ahora vamos a hacer una lista de tareas por hacer (to do list). Lo primero que haremos será incluir una referencia a angular en nuestro poryecto.
 <html lang="en">
  <body>
   <!-- Recuerda usar la librería más reciente disponible (al menos mientras llegue una nueva versión de angular que cambie todo) -->
   <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>
   
  </body>
 </html>

Ahora vamos con el código JavaScript de angular, para esto agregamos lo siguiente tras la referencia al script de angular:

  <script>
   // Declaramos la apliacaión con el nombre 'cosasPorHacer' con un array vacío '[]' y la asociamos a la variable 'aplicacion'
   var aplicacion = angular.module('cosasPorHacer', '[]');

   // Creamos un controlador, para este caso lo llamaremos cosasPorHacer_Ctrl y le inyectaremos '$scope' como dependencia. $scope sirve de puente entre lo que se defina en el controlador y la/s vista/s (HTML) *Explicación breve y poco técnica
   aplicacion.controller('cosasPorHacer_Ctrl', function($scope){

   })
  </script> 
Ahora modificamos las etiquetas <html> y <body> con lo siguiente:

 <html ng-app="cosasPorHacer" >

 <body ng-controller="cosasPorHacer_Ctrl" >

De esta forma indicamos que lo que se encuentra dentro de la etiqueta html es una aplicación AngujarJS y que el controlador "cosasPorHacer_Ctrl" tiene el poder por sobre todo lo que se encuentre dentro del body (la ubicación del controlador puede ser diferente, incluso tal vez un div anidado, en este caso lo pongo en el body porque haré todo desde un solo controlador).
Nuestro archivo HTML debe verse así: ¡Ya tenemos el esqueleto base para empezar crear cualquier aplicación con AngularJS! Ahora creamos la variable que contendrá los elementos de la lista, un array. Para ello simplemente escribimos dentro de la función del controlador:


$scope.listaDeCosas = [];

Ahora una función para agregar elementos a $scope.listaDeCosas

$scope.agregarElemento = function(){
 $scope.listaDeCosas.push($scope.cosaPorHacer);
 $scope.cosaPorHacer = "";
}

¡Y este es todo el código JavaScript que necesitamos para este ejemplo!

Ahora necesitamos trabajar en la vista (HTML) para conectarla con nuestro JavaScript.
AngularJS incluye varias directivas que nos ayudan a hacer la comunicación entre HTML y JavaScript más fácil, usaremos tres de ellas. Aquí una explicación breve y poco técnica:

ng-submit="laFuncion()" : Ejecuta una función de nuestro controlador cuando un formulario se envía. Debe especificarse dentro de un formulario.


ng-model="nombreDeEsteModelo" : Hace visible un elemento HTML de tipo input, textarea o select y lo "puentea" (conecta) al controlador para permitir su posterior tratamiento desde allí.


ng-repeat="cadaElemento in grupoDeVariosElementos" : Crea una instancia de cada elemento dentro de un grupo de elementos en el HTML. Algo así como una iteración que muestra los datos correspondientes a cada elemento de un grupo (suena confuso pero cuando veas la app andando entenderás cómo funciona). ng-repeat no permite que (o mejor, se rompe cuando) existan elementos idénticos repetidos en la lista, para que esto no sea problema simplemente agregamos a la definición de él "track by $index" para que se tome el indice dentro del array como el identificador de cada elemento.

Cuando unimos todo esto tenemos nuestra aplicación funcional versión 1.0:
Esto es todo por ahora, el futuras publicaciones vamos a partir de esta base para extender las funcionalidades de nuestra aplicación.

Ejemplo funcionando:


  • {{cosa}}

miércoles, 30 de abril de 2014

/usr/bin/env: node: No such file or directory


Empezando a trabajar con la popular herramienta para hacer aplicaciones móviles usando tecnologías modernas (HTML, JS, CSS), Phonegap (o Apache Córdova) di con este mensaje de error:
/usr/bin/env: node: No such file or directory
Ya que Phonegap desde hace algún tiempo requiere de NodeJS es normal que lo busque en el sistema para su ejecución, sin embargo yo ya tenía instalado Node para ese entonces. Googleando un poco encontré que al haber instalado Node con el gestor de paquetes de Ubuntu, el archivo de acceso a Node tiene el nombre "nodejs", y PhoneGap busca un archivo con el nombre "node". La solución (vía digitalmediums) es agregar un "symlink" a "node" ejecutando lo siguiente en una Terminal:
ln -s /usr/bin/nodejs /usr/bin/node
¡Y eso es todo!

domingo, 27 de abril de 2014

Sublime Text en Ubuntu 14.04

Después de varios años de dejarlo de lado por trabajar con tecnologías Microsoft vuelvo a Ubuntu, en esta oportunidad en su versión 14.04.

Por ahora me ha sorprendido la velocidad de Unity ya que en las versiones anteriores que intenté usar su lentitud siempre era aburridora.

Estableciendo mi entorno de desarrollo encontré un inconveniente al intentar añadir un acceso directo en la barra lateral de Unity para Sublime Text, no basta con arrastrar el archivo o un acceso directo simple a la barra. Por ello el procedimineto debe hacerse de forma manual, afortunadamente googleando un poco encontré una solución rápida y efectiva.
  • 1 Lo primero es descargar Sublime Text para Linux desde http://www.sublimetext.com/
  • 2 A continuación vamos a extraerlo a una ubicación adecuada. Navega a la carpeta en donde se encuentra el archivo desde una Terminal y ejecuta
    tar xf Sublime\ Text\ *VERSIÓN_DE_SUBLIMETEXT*\ x64.tar.bz2
    Obviamente reemplazando *VERSIÓN_DE_SUBLIMETEXT* por el valor adecuado. Después ejecuta:
    sudo mv Sublime\ Text\ 2 /opt/
  • 3 Ya tenemos Sublime Text extraído, ahora vamos a crear un link simbólico que nos permitirá ejecutarlo desde cualquier Terminal, usa:
    sudo ln -s /opt/Sublime\ Text\ 2/sublime_text /usr/bin/sublime
  • 4 Ahora vamos a crear el archivo que generará el enlace, para ello abrimos una Terminal y ejecutamos lo siguiente:
    sudo sublime /usr/share/applications/sublime.desktop
  • 3 En la ventana de sublime que se abre creamos el acceso directo copiando y pegando lo siguiente:
    [Desktop Entry]
    Version=2.0
    Name=Sublime Text 2
    # Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
    # From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
    GenericName=Text Editor
    
    Exec=sublime
    Terminal=false
    Icon=/opt/Sublime Text 2/Icon/128x128/sublime_text.png
    Type=Application
    Categories=TextEditor;IDE;Development
    X-Ayatana-Desktop-Shortcuts=NewWindow
    
    [NewWindow Shortcut Group]
    Name=Nueva Ventana
    Exec=sublime -n
    TargetEnvironment=Unity
    
  • 5 Guarda el archivo, ahora busca Sublime Text en el menú de Unity (puedes acceder con la "tecla Windows") y arrastra el icono a la barra lateral.
  • 6 Finalmente es probable que como yo desees establecer a Sublime Text como tu editor de texto predeterminado, para ello ejecuta en una terminal
    sudo sublime /usr/share/applications/defaults.list
    Presiona las teclas Ctrl + H y desde la opción de reemplazar que se abre reemplaza las ocurrencias de gedit.desktop (en la caja de texto de arriba) por sublime.desktop (en la caja de texto de abajo), haz clic sobre Replace All (o presiona Ctrl + Alt + Enter).
¡Y eso es todo!

Hello World!

Publicaré mis experiencias programando en JavaScript (principalmente) para ahorrarle tiempo a aquellos emprendedores que se adentran en este mundo y que no entiendan muy bien el idioma inglés (ya que prácticamente todos los recursos están en este idioma por ahora... Hasta que salga oficialmente el Stack Overflow en español)