31 julio, 2014

Compresión de archivos en linux

Usando la linea de comandos podemos comprimir y descomprimir:
Archivos .tar.gz:
Comprimir: tar -czvf empaquetado.tar.gz /carpeta/a/empaquetar/
Descomprimir: tar -xzvf archivo.tar.gz
Archivos .tar:
Empaquetar: tar -cvf paquete.tar /dir/a/comprimir/
Desempaquetar: tar -xvf paquete.tar
Archivos .gz:
Comprimir: gzip -9 archivo.java
Descomprimir: gzip -d archivo.java.gz
Archivos .zip:
Comprimir: zip archivo.zip carpeta
Descomprimir: unzip archivo.zip

16 julio, 2014

Alfresco JavaScript API

Una API (Application Programming Interface) es una interface implementada y ofrecida por un programa de software que habilita a otras aplicaciones para interactuar con esta, o habilitar a los desarrolladores para escribir otras aplicaciones sobre esta. Una API puede ser expuesta en muchas formas diferentes, tales como clases de modelo interno e implementación-uso con el cual tu puedes escribir tu programa, o como diferentes servicios, por ejemplo, servicios web (web services). Como un desarrollador de soluciones de un Enterprise framework, tu necesitas ser competente sobre las APIs ofrecidas y expuestas por el framework.

Alfresco, como cualquier otro framework, expone un numero de APIs incluyendo Alfresco SDK (software development kit) un conjunto de herramientas de desarrollo que permiten la creacion de una aplicacion para un paquete de software exacto o framework y JavaScript API.

La JavaScript API es un unico modelo para escribir programas y servicios usando JavaScript. La API habilita a desarrolladores para escribir scripts que pueden acceder, modificar, o crear varios objetos del repositorio de Alfresco tales como usuarios, nodos, grupos, tags, categorias, etc.

JavaScript APIs disponibles

Alfresco JavaScript API expone todos los objetos importantes del repositorio como objetos JavaScript que pueden ser usados en un archivo de Script. La API sigue el modelo de programacion orientada a objetos para los bien conocidos conceptos de Alfresco como Nodos, Propiedades, Asociaciones, y Aspectos.

La JavaScript API es capaz de realizar varias funciones esenciales para el desarrollador del script, tales como:

  • Create Node, Update Node: Puedes crear, actualizar nodos o actualizar archivos usando estos.
  • Check In, Check Out: Puedes programaticamente revisar y escribir contenido.
  • Access Rights Management Permissioning: Puedes manejar los aspectos de seguridad del contenido.
  • Transformation: Puedes transformar tu contenido usando esto. Por ejemplo puedes generar una version PDF de tu documento MS-Office
  • Tagging: La Tagging API te ayudara a etiquetar tus contenidos.
  • Classifying: Puedes categorizar o clasificar tu contenido usando esto.
  • People: Usando estas APIs, puedes manipular todas las operaciones relacionadas con usuarios y grupos en tu script; tales como crear un nuevo usuario, cambiar el password de un usuario, etc.
  • Searching: Uno de los mas importantes y poderosas APIs expuestas. Puedes buscar tu contenido usando estas APIs. Puedes realizar busquedas basadas en Lucene o XPath usando estas APIs
  • Workflow: Puedes manejar las tareas y flujos de trabajo en tu sistema usando estas APIs y servicios.
  • Thumbnail: Expone APIs para manejar las operaciones de thumbnail varios items de contenido.
  • Node operations: Puedes usar estas API para realizar varias funciones relacionadas con nodos tales como manejar propiedades, manejar aspectos, copiar, borrar, mover, etc.
Asi, como vemos, bastante mas cosas pueden realizarse en un archivo JavaScript usando estas APIs.

El modelo de JavaScript API

Alfresco provee un numero de objetos en la JavaScript API - estos son mas usualmente llamados Root Scope Objects. Estos objetos son el punto de entrada en el repositorio. Cada uno de los objetos de nivel de raiz referencia a una entidad particular o punto funcional en el repositorio. Por ejemplo, userhome referencia al nodo del espacio home del usuario actual. Cada uno de estos objetos presenta un numero de propiedades y funcionalidades, asi habilitando al escritor de script para implementar muchos requerimientos diferentes. Por ejemplo, la sentencia userhome.name retornará el nombre de la carpeta root del usuario actual.

Algunos objetos de raiz importantes y mas frecuentemente usados son:
  • Companyhome: Retorna el objeto de nodo de company home
  • Userhome: Retorna el nodo de carpeta home del usuario actual
  • Person: Representa el objeto de persona del usuario actual
  • Space: El objeto de espacio actual
  • Document: Retorna el documento seleccionado actualmente
  • Search: Ofrece APIs totalmente funcionales para busquedas
  • People: Encapsula todas las funcionalidades relacionadas a usuarios, grupos, roles, permisos, etc.
  • Sites: Expone las funcionalidades de sevicio de sitio
  • Actions: Provee metodos de invocacion para registrar acciones
  • Workflow: Manipula todas las funcionalidades relacionadas con implementacion de flujos de trabajo con el repositorio
Entre estos objetos, companyhome, userhome, person, space, y document, representan objetos de nodo de Alfresco y permiten acceder a las propiedades y aspectos del objeto de nodo correspondiente. Cada uno de los objetos de nodo provee un numero de APIs las cuales son denominadas ScriptNode API.

Las otras - search, people, sites, workflow, y actions- exponen muchos metodos que podrian ayudar a implementar requerimientos especificos de negocio. Por ejemplo, si tu quieres escribir un script que busque algunos documentos y contenidos, podrias usar la API search. Si quieres crear un nuevo usuario - la API people, te ayudará-

12 julio, 2014

Template Models en FreeMarker y Alfresco

Alfresco ofrece un modelo por defecto que expone un numero de objetos de raiz (root objects) que estan disponibles en un archivo de template. Este trabaja como los objetos de raiz disponibles en archivos JavaScript en Alfresco.

Puedes usar estos objetos de nivel de raiz en tus templates de FreeMarker en Alfresco e implementar varias vistas o archivos de salida.

Algunos de estos objetos de nivel de raiz son:
  • companyhome: El nodo de plantilla de Company Home
  • userhome: El nodo de plantilla del espacio home del usuario actual
  • person: El nodo de plantilla del usuario actual
  • document: El nodo de plantilla del documento actual sobre el cual el template está corriendo
  • space: El nodo de plantilla del espacio actual sobre el cual el template está corriendo
  • session: Provee un ticket de la sesión actual como el valor de session.ticket
  • url: Renderiza el context path actual del servidor web de Alfresco como url.context
  • workflow: Ofrece varias funcionalidades relacionadas con los flujos de trabajo
Estos objetos vienen con todas las propiedades que puedes usar en los archivos de template.

Cada uno de los nodos de plantilla brindan acceso a los conceptos comunes de Alfresco, tales como propiedades, asociaciones, y aspectos - estos son conocidos como Template API (similar a la JavaScript API).
  • properties: Provee el arreglo de propiedades del nodo; por ejemplo, document.properties.name
  • children: Brinda un arreglo de nodos hijos del nodo del espacio actual
    • url, downloadUrl,displayPath, qnamePath
    • isContainer, isDocument, isCategory, isLocked
    • mimetype, size, type, typeShort
    • permissions, inheritsPermissions, hasPermission
    • childByNamePath, childByXPath
    • versionHistory
El Template API ofrece una API de versiones que incluye propiedades como:
  • id, nodeRef, name
  • createdDate, creator, versionLabel, description, url
  • assignedTasks, pooledTasks, completedTasks
  • getTaskById

OJO: Se observan las similaridades entre los objetos de las API expuestas en JavaScript API y Template API, pero es importante notar que estas dos son diferentes. Si una sintaxis o propiedad trabaja bien en una de estas APIs, esto no garantiza que funcionará de la misma manera en otra la otra.

Antes de comenzar a escribir tus propias plantillas con FreeMarker, necesitas entender la sintaxis de FreeMarker. El manual de FreeMarker tiene documentación bien organizada para ayudar a entender esto. Por favor dale un vistazo http://freemarker.org/docs/

FreeMarker ofrece un rico conjunto de funciones incorporadas que puedes utilizar en tus plantillas - para ver la lista de funciones integradas de FreeMarker, consulta en http://freemarker.org/docs/ref_builtins.html

Es tambien importante familiarizarnos con algunos directivas estandares de programación - para ver la lista de directivas disponibles de FreeMarker, por favor mira http://freemarker.org/docs/ref_directives.html