Juan Cruz MDQ

Anotaciones de un programador

La idea de este post es mostrar los pasos que seguí para incluir  breakpad en un proyecto iOS. Al final del post encontraran un enlace para descargar un proyecto de ejemplo.

Breakpad es un framework open-source que permite acceder a la información contenida en los Crashlogs de aplicaciones en múltiples plataformas, y utilizar esa información para producir seguimientos del Stacktrace de cada subproceso de una app. Después del procesamiento, estos datos se ponen a disposición de los usuarios.

Para mas información sobre breakpad visita https://code.google.com/p/google-breakpad/

continua leyendo…

Estos dias estuve trabajando en un proyecto personal, donde tengo la necesidad de crear colores en diferentes ColorSpaces, y convertir los colores entre estos diferentes espacios

RGB (Red-Green-Blue)
Gray (Escala de grises)
CMYK (Cyan-Magenta-Yellow_black)
HSB (Hue-Saturation-Brightness)

Para eso cree una clase con una serie de métodos que me facilitaron el trabajo con los diferentes colores.

  1. typedef enum
  2. {
  3. LPRGBColorspace = 0,
  4. LPGRAYColorspace = 1,
  5. LPCMYKColorspace = 2,
  6. LPHSBColorspace = 3
  7. } LPColorspaceType;

continua leyendo…

Usando PIL(Python Imaging Library) en Mac OS X10.7.4, me encontre con este error “IOError: encoder jpeg not available” haciendo un resize de una imagen con formato jpeg.
Este error ocurría porque al momento de instalar PIL no tenia instaladas las librerías para dar soporte JPEG.

Lo pude solucionar de la siguiente forma:

# En caso de ser necesario desinstalamos el paquete PIL
sudo pip uninstall PIL

# Instalamos la libreria para trabajar con archivos jpeg
sudo port install jpeg

#Volvemos a instalar el paquete PIL
sudo pip install PIL

Espero que le resulte útil a alguien mas

Instalar postgres


$ sudo port selfupdate
$ sudo port install postgresql92 postgresql92-server

crear directorio para la base de datos

$ sudo mkdir -p /opt/local/var/db/postgresql92/defaultdb
$ sudo chown -R postgres:postgres /opt/local/var/db/postgresql92

Crear directorios para los logs

$ sudo mkdir -p /opt/local/var/log/postgresql92
$ sudo chown -R postgres:postgres /opt/local/var/log/postgresql92

Agegamos la ruta a los binarios de postgres

nano ~/.profile
export PATH=/opt/local/lib/postgresql92/bin:/opt/local/bin:/opt/local/sbin:$PATH


Inicializar una base de datos postgres

asegurarse de detener el servicio de postgres.

$ sudo -u postgres /opt/local/lib/postgresql92/bin/initdb -D /opt/local/var/db/postgresql92/test


Scripts para arrancar y detener una base postgres

$ sudo su - postgres
$ cd test
$ nano ./pg_start

#!/bin/bash
/opt/local/lib/postgresql92/bin/pg_ctl -D /opt/local/var/db/postgresql92/test -l /opt/local/var/log/postgresql92/postgres.log start

$ nano ./pg_stop

#!/bin/bash
/opt/local/lib/postgresql92/bin/pg_ctl -D /opt/local/var/db/postgresql92/test -l /opt/local/var/log/postgresql92/postgres.log stop

$ chmod +x ./pg_start
$ chmod +x ./pg_stop


Ver logs de postgres

$ cat /opt/local/var/log/postgresql92/postgres.log


Crear usuario en postgres

http://www.postgresql.org/docs/9.2/static/app-createuser.html

$ sudo su - postgres
$ /opt/local/lib/postgresql92/bin/createuser user_name -s

con el parametro -s indicamos que es del tipo “superuser”


Crear Base de datos postgres

http://www.postgresql.org/docs/9.2/static/app-createdb.html

$ /opt/local/lib/postgresql92/bin/createdb dbname

Como crear un branch remoto

git push origin master:refs/heads/nuevo-branch
git fetch origin
git checkout --track -b nuevo-branch origin/nuevo-branch


Corregir mensaje del ultimo commit

git commit --amend -m "Nuevo mensaje para el commit"


Eliminar un branch

Con este comando lo eliminamos localmente
git branch -D branch-local

Con esta otra linea eliminamos un branch remoto
git push origin :branch-remoto


Obtener listados de branches

Obtener listado de branches remotos
git remote show origin

obtener listado de branches locales
git branch

¿Qué es Heroku?

Heroku es una Plataforma de aplicaciones en la nube, no posee servidores propios, sino que los contrata de la nube EC2 de Amazon.

A diferencia de los servidores EC2 de Amazon, es Heroku el que decide y gestiona el sistema operativo (Debian) y  sus servidores.

Heroku nos permite habilitar nuevas funcionalidades para nuestras aplicaciones en forma de addons, así como escalar nuestra aplicación de una forma bastante sencilla.

La cuenta básica en Heroku es gratuita. Cada aplicación que se cree dispone de una base PostgrasSQL de 5MB, y 750 horas dyno por mes.

 

Primeros pasos en Heroku

Primero debemos crearnos una cuenta en Heroku, para eso podemos seguir los pasos del siguiente articulo.

continua leyendo…

Por curiosidad hace unos días empece a jugar con el servicio de DotCloud. A modo de prueba se me ocurrió configurar localmente un entorno virtual en python que duplique el stack que tenia en mi instancia de DotCloud ( django-nonrel + mongoDB ), de forma tal que se simplifique el desarrollo y deploy de un proyecto dado . Para eso me propuse generar un entorno con la siguiente estructura de directorios.

  1. |-project_container
  2. |—-project_name_dotcloud
  3. |——-dotcloud.yml
  4. |——-mkadmin.py
  5. |——-nginx.conf
  6. |——-postinstall
  7. |——-requirements.txt
  8. |——-waitfordb.py
  9. |——-wsgi.py
  10. |——-project_name
  11. |———-__init__.py
  12. |———-manage.py
  13. |———-settings.py
  14. |———-urls.py
  15. |—-project_name_env
  16. |——-….

project_container: Raiz del proyecto, contiene mi proyecto de DotCloud, y el entorno virtual de python.

project_name_dotcloud: Contenedor del proyecto DotCloud, incluye los archivos de configuración de mi instancia, y el projecto de django.

project_name: Raíz del proyecto en django-nonrel.

project_name_env: Entorno virtual de python.

 

Acá les dejo el paso a paso.

continua leyendo…

Quiero usar este post para agradecerle a Andrew Schleifer por dos cambios que realizo en el repositorio de OGLogger.

Les copio sus comentarios de github:
1) Add framework target to projectThis commit adds a framework target, so the logger can be used without compiling the classes directly into an application. Rather, you can add the framework to the bundle instead.

2) Enable setting log level when configured from dictionary or fileFor example, you can add the object @”OGLogLevelDebug” with the key @”OGLoggerLogLevel” for a class — like this:

  1. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  2. <plist version="1.0"><dict>
  3.     <key>default</key>
  4.     <dict>
  5.         <key>OGLoggerClass</key>
  6.         <string>OGLogger</string>
  7.         <key>OGLoggerLogLevel</key>
  8.         <string>OGLogLevelDebug</string>
  9.         <key>OGLoggerOutputClass</key>
  10.         <string>OGLoggerOutputConsole</string>
  11.         <key>OGLoggerOutputContext</key>
  12.         <string>Sóltano</string>
  13.     </dict>
  14. </dict>
  15. </plist>

Gracias!!!

OGLogger es una “librería” que desarrollé para simplificar la tarea de loggin y debug de errores en los proyectos en los que trabajo.

Inicialmente hacia uso y abuso de NSLog ( como creo que hicimos la mayoría de los que iniciamos en Objective-c )
Con el tiempo empecé a necesitar un logger más complejo, luego de buscar soluciones ya implementadas y de no encontrar ninguna con los features que estaba buscando, me decidí a desarrollar mi propio método para realizar el log de la aplicación.

Qué me interesa que tenga una Librería de loggin?

  • Diferentes niveles de log (Debug, info, warning, error, entre otros)
  • Configuración independiente para los diferentes módulos que pueda tener una aplicación.
  • Diferentes puntos de salida para la información que se loguea ( Consola, archivo de texto, webservice, etc.)
  • Facilidad para incluir en los proyectos que estoy desarrollando.
  • Poder cambiar la forma en que se comporta el logger cambiando la menor cantidad de código posible.
  • Facilidad para extender.

Tomando como inspiración LOG4J comencé a desarrollar “OGLogger”

continua leyendo…

Es común que en una jerarquía de clases haya algún comportamiento que este presente en todas ellas pero se materialice en forma diferente en cada una.

Una clase abstracta es un tipo especial de clase que no puede ser instanciado, existe para representar un concepto compartido por una serie de entidades. Las características incompletas de una clase abstracta son heredada por un grupo de subclases, que agregan, en diferentes maneras, las piezas faltantes en el padre.

Tipicamente en objective-c las clases son abstractas por convención, si el autor documenta una clase como abstracta, esta no debe instanciarse. Objective-c no posee una instrucción que le indique al compilador que evite su instanciación.

Sin embargo hay algunas técnicas para evitar la instanciación de una clase, o forzar la implementación de ciertos metodos en las subclases.

continua leyendo…