“Steve Jobs” 1955-2011

“Steve Jobs” 1955-2011

“Stay Hungry, Stay Foolish”


Core Data tutorial for IOs (by Albert Mata)

Nuestro compañero Albert Mata comparte con nosotros sus notas sobre Core Data, claras y directas al grano, para que no tengamos tan complicado nuestras primeras incursiones con la persistencia de datos en la plataforma de Apple ;)   Descargar: Core Data Tutorial for IOs.pdf (mirror1)

 

Cuando comenzamos a desarrollar aplicaciones iOS llega un momento en que queremos utilizar funciones de persistencia para guardar ciertos datos entre distintas ejecuciones de la aplicación. De entre los distintos modos que tenemos disponibles para hacerlo, uno de los más recomendables es la utilización del framework Core Data.

Entre la documentación propia de Apple se encuentra el tutorial introductorio ‘Core Data Tutorial for iOS’. El documento adjunto es un simple resumen de dos páginas con los conceptos más importantes de dicho tutorial.

(by Albert Mata, @almata)

 

Gracias Albert!

Nace el NSPodcast

Nace el NSPodcast

Tenemos nuevo bebe en la Asociación, nos hemos liado la manta a la cabeza y metido en un nuevo fregao. Os presentamos el “NSPodcast: el podcast de los NSCoders” en su primera edición.

NSCoders Apple Conference 2011

NSCoders Apple Conference 2011

NSCoders Apple Conference 2011

Llega el evento más relevante del año para desarrolladores y aficionados a los dispositivos móviles de Apple. Los próximos 29 y 30 de octubre tendrá lugar en Neàpolis Vilanova i la Geltrú la NSCoders Conference 2011.

De la mano de la Asociación NSCoders España llega un evento de dos días apto para todos los públicos, desde personas interesadas o apasionadas por los Iphone e Ipad que quieran iniciarse en este mundo, hasta profesionales del sector que quieran ampliar sus conocimientos o intercambiar experiencias y establecer contactos con empresas.

El formato elegido ofrecerá dos líneas de contenido simultáneas: una dirigida al público menos experimentado, con talleres de iniciación y contenidos elementales para dar los primeros pasos y otra con contenidos más especializados dirigida a aquellos que quieran explorar a fondo la arquitectura y posibilidades de estas tecnologías.

La calidad de las ponencias está asegurada por auténticos gurús del desarrollo como el consultor en accesibilidad Jonathan Chacón, que mostrará como estos dispositivos son grandes aliados de las personas con discapacidades o desarrolladores de referencia como Diego Freniche e Imanol Prados.

Asimismo se contará con la presencia de empresas, que nos mostrarán las claves de sus tecnologías y algún ponente sorpresa que dejará a los asistentes con la boca abierta de par en par…

Toda la información del evento está disponible en la web del evento: nsconf.nscoders.org

Homebrew

Una de las herramientas que como desarrolladores, sysadmins, o simplemente usuarios adeptos debemos conocer es la línea de comandos. MacOS X es un Unix de pura cepa, y como tal, puede ejecutar una amplia gama de herramientas pensadas para llevar a cabo toda clase de tareas.

Sin embargo, pocas de estas herramientas se encuentran disponibles de serie en nuestros sistemas. Para poder utilizarlas, debemos instalarlas manualmente, lo cual es cuando menos engorroso, y cuando más, puede significar horas y horas perdidas tratando de resolver dependencias de las herramientas que utilizamos.

Para solucionar este problema, nacieron los gestores de paquetes. Del mismo modo que en linux disponemos de rpm y dpkg (o yum y apt), en MacOS X existen también varios sistemas de gestión de paquetes. En este artículo me centraré en el que considero más avanzado y más útil de ellos, Homebrew, ya que las alternativas, mayormente Macports (inspirado en el sistema de ports de FreeBSD) y fink (inspirado a su vez en apt), han ido poco a poco quedándose atrás en cuanto a frecuencia de actualización y catálogo de software disponible. Homebrew es obra del prolífico Max Howell, autor entre otras herramientas de las versiones Android e iOS de TweetDeck, y de los clientes de last.fm.

Homebrew es un sistema que goza de las simpatías de muchos desarrolladores y, por tanto, de un ímpetu, que lo ha convertido rápidamente en una elección muy popular entre los usuarios más técnicos. No en vano es el proyecto con mayor número de forks en GitHub (hecho que, al contrario de lo que pueda parecer, no es un indicativo de fragmentación, si no de participación popular, ya que cada persona que quiere añadir un paquete, o actualizarlo, simplemente crea un fork, añade su receta, y envía una solicitud de pull al mantenedor para que lo incorpore al proyecto principal).

Una de las principales características que tiene homebrew frente a otros gestores de proyectos, es que no necesitas ser root para instalar un paquete. Homebrew normalmente instala los ejecutables en /usr/local/, nada de /opt/, /sw/ ni tonterías similares. Y por tanto, espera que ese directorio sea escribible sin permisos de root. Al respecto ha habido cierta controversia, a mi al menos al principio no me parecía del todo correcto. Pero si nos ponemos a mirar, veremos que casi cualquier aplicación que bajamos de internet, y que se instale a pelo, es decir sin instalador, la copiamos tranquilamente a /Applications/ sin pensárnoslo dos veces. Y al contrario, cuando ejecutamos un script con sudo, estamos corriendo más riesgo del que pensamos.

Para instalar homebrew, simplemente vamos a https://github.com/mxcl/homebrew y vemos que hay que ejecutar un pequeño script en ruby:

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Si ejecutar un script obtenido a partir de una URL te pone los pelos de punta (debería), puedes echar un vistazo primero.

Una vez hecho esto, ya tenemos homebrew listo para instalar paquetes. Podemos probarlo de la siguiente manera:

brew install wget

Esto instruirá a brew a descargarse el código fuente de la utilidad wget, compilarlo, e instalarlo en /usr/local/. Homebrew en este sentido, es más parecido a los ports o al emerge de Gentoo. No lo he mencionado, dado que doy por sentado que todos tenemos Xcode, pero evidentemente necesitaremos las herramientas de desarrollo, no necesariamente Xcode al completo, pero si los paquetes de compiladores y demás.

Por cierto, por algún extraño motivo, en MacOS X, /usr/local/bin no está antes en el $PATH que /usr/local/, con lo cual, si instalamos alguna herramienta de las que vengan con el sistema o con Xcode, nos vamos a encontrar que la del sistema tiene prioridad sobre la versión que nosotros hemos instalado explícitamente (con lo cual, es como si no hubieramos hecho nada). En cualquier otro sistema UNIX (o linux), lo normal es que las customizaciones tomen prioridad, así que no acabo de entender muy bien esta política. Podemos solucionar esto de dos maneras, editando nuestro fichero ~/.bash_profile para modificar la variable de entorno $PATH, o bien cambiando el orden en /etc/paths (lo cual va a requerir permisos de root, al aplicarse a todo el sistema).

Las definiciones de los paquetes en homebrew siguen la metáfora de una cervecera. Cada paquete es una receta o fórmula para elaborar un… bueno, en castellano no tenemos una buena traducción para brew, en el sentido cervecero. Brebaje suena parecido pero es algo completamente distinto. Podríamos abusar del lenguaje y usar la palabra caldo, que los vinateros usan, pero lo dejaremos como brew. To brew en inglés es también un verbo, que es lo que representa el comando que usamos.

En fin, después de esta digresión, paso a enumerar los comandos más habituales de que disponemos para gestionar los paquetes. Lo mejor es que echemos un vistazo al manual de brew y los veamos cuando tengamos dudas:

brew search paquete

Este comando buscará un match en los nombres de los paquetes y nos listará los que coincidan (si el nombre de paquete está cerrado entre barras, se interpretará como una expresión regular). Una vez creemos haber encontrado el que nos puede interesar, lo podemos comprobar con

brew home paquete

Esto nos abrirá el navegador por defecto que tengamos en el sistema, en la página web del producto en cuestión. Estamos en el s. XXI y usamos Macs, así que no hay excusa para andarnos con cosas que recuerden a gnu info. Cualquier producto debería tener un website canónico.

brew install paquete

Este comando instalará el paquete, bajándose el código fuente si no está cacheado, y compilándolo. Del mismo modo,

brew remove paquete

lo eliminará del sistema. Si necesitamos saber qué fórmulas tenemos instaladas, pediremos un listado:

brew list

Si a este comando le añadimos además el nombre de una fórmula, lo que veremos son los ficheros instalados por esa fórmula.

Cuando queramos actualizar los paquetes, primero ejecutaremos

brew update

que actualizará brew y sus fórmulas, y luego podemos hacer algo como

brew install $(brew outdated)

para que nos instale las fórmulas nuevas de las que tengamos instaladas. Normalmente, al actualizar una fórmula nos instala la versión nueva pero no retira las antiguas, que siguen instaladas (aunque fuera del $PATH). Para limpiar estas versiones antiguas, el comando que necesitamos es

brew cleanup

Bueno, hasta aquí esta breve introducción. Hay unos cuantos comandos más, pero son menos frecuentemente utilizados, así que dad un vistazo a man brew para dar con ellos.

Proxima Conferencia – Hello NSCoder 2

Aprovechamos la inauguración de nuestro blog para invitaros a la proxima conferencia de nuestra “Hello NSCoder” serie.

La conferencia se realiza el sábado 16 de Julio en el CINC Barcelona, manteniendo la linea argumental iniciado en la edición anterior. Mostraremos más temas de desarrollo de aplicaciones para iOS.

En esta segunda edición continuaremos desarrollando la App iniciado en la primera conferencia “Hello NSCoder I”. A parte del formato de ponencias de 90 y 45 minutos se expondrá un formato nuevo de micro sesiones de 15 minutos llamados “Recipes” en cuales se explica temas mas cortos y muy específicos.


Agenda:

9:00 – Geolocalización & MapKit (Alfonso @setfilesl / Guillem @gfernandezg / Andreas @aquarioverde)

10:30 – Pausa

10:45 – Introducción a Git & GitHub (Victor @jalencas)

11:30 – Debug y Analisis de Aplicaciones (Jose Juan @minyunmen)

12:15 – Pausa

12:30 – Solid (Pedro @pedromsantos)

12:45 – Mecadotecnia (Leo @Leo1098R)

13:00 – Lazy Loading (Ricardo @risalba)

13:15 – Pausa

13:30 – Bloack (Alfonso @setfilesl / Guillem @gfernandezg)

13:45 – Efecto Lupa (Ivan @ileider)

14:00 – Streaming Audio (Jose Juan @minyunmen)

 

Don’t miss it!!!!

Subscribe now:

http://hellonscoder2.eventbrite.com/

And see you soon!

 

 

Por cierto, para los que no sabeis porque nos llamamos NSCoders y los que dudáis de donde viene el NS:

NS == NEXT STEP == sistema operativo de los ordenadores NeXT, que tenia Objective-C como lenguaje de programación

Pues, solo querría aclararlo porque algunos me preguntaron hoy …

 



Cuánto vale nuestro trabajo?

Tras la lectura últimamente de distintos artículos acerca de la profesión de programador en los que nos preguntamos constantemente si debemos abandonar nuestra pasión como programadores sacrificándola en pro de una mejora económica, siempre necesaria en los tiempos que corren, se nos plantea el dilema de cuánto vale nuestro trabajo.
Me contaba un gran profesional hace tiempo una historia acerca de un taller de fresadores en el que el jefe del taller estaba a punto de jubilarse y decidió buscar un substituto entre los fresadores que gestionaba en el taller. De todos ellos pensó en el que más tiempo llevaba en el taller y que disponía de un grado de maestría excepcional y que había demostrado pasión por su trabajo y un afán de mejora continua, era capaz de hacer una pieza como nadie en un tiempo inigualable. Finalmente así lo hizo y consiguió dos cosas, perder a su mejor fresador y tener un mal responsable de taller.
A todos nos llega un momento en la vida en el que tenemos que tomar una decisión importante, esos momentos que llaman encrucijada en los que has de tomar el camino de la derecha o el de la izquierda y nunca sabrás lo que hubiese ocurrido si hubieses tomado el otro camino, como las píldoras de Morfeo en Matrix. Puedes decidir hacer lo que de verdad te apasiona intentando convertir tu pasión en tu trabajo o decidir hacer aquello que te va a proporcionar mayores ingresos de forma más fácil y rápida aunque no disfrutes de ello.
Yo soy de los que tras caminar mucho tiempo por el camino de los ingresos he decidido que tengo que hacer de mi pasión mi medio de vida. Cuando he contado mis intenciones a compañeros de profesión he escuchado frases como: ” Y te vas a poner como simple programador?, con la experiencia que tienes?‚Äô Pues sí, porque necesito disfrutar con mi trabajo.
Una vez tomada la decisión nos planteamos cuánto vale nuestro trabajo. Debo ir a precio para poder empezar a tener una cartera de proyectos? Total si no me bajo los pantalones yo, se los bajará otro y perderé seguro el proyecto. Esto, como se suele decir, es pan para hoy y hambre para mañana, si has aceptado un precio miserable por un proyecto cual es el argumento para pedir más por el siguiente. El argumento de “ahora ya me conoces y sabes lo que soy capaz de hacer‚Äô acostumbra a ser poco convincente ya que quién te contrató la primera vez pensará en buscar a otro buen programador que tenga la necesidad de demostrar que tú tenias al principio. Pero, pongamos las cifras sobre la mesa.
Nos solicitan un proyecto del cual en el 75% de los casos la información que nos proporcionan es vaga, imprecisa y no se corresponde con la mayoría de deseos de todos los usuarios finales o incluso no refleja ni siquiera la realidad de las necesidades.
Lo primero que haremos es indicar que debemos realizar un estudio y una toma de requerimientos para realizar el trabajo, pero, por qué la mayoría de clientes consideran que eso no tienen que pagarlo? Es que el tiempo empleado en elaborar un pliego de requerimientos no es trabajo? Pedirían a un Arquitecto que no les cobrase los planos de la obra? O a una consultora que no les cobrase los informes? Invertimos una semana de reuniones y elaboración de una propuesta de proyecto, cuarenta horas.
Una vez consensuado el documento de proyecto, elaboramos el análisis técnico del mismo y presentamos las pantallas y funcionalidades, labor que nos lleva otras dos semanas, suma ochenta horas más. Y finalmente nos ponemos en el desarrollo que nos lleva un mes de trabajo para una aplicación media sin demasiadas florituras, otras 200 horas en las que no contamos las reuniones improductivas, los tiempos empleados en desarrollos que dependen de otros desarrollos y que luego cambian y por …, etc …
El final nos arroja la bonita cifra de trescientas veinte horas invertidas.
Si por un trabajo de este tipo, como se oye muy habitualmente se presupuestan 2.500€ hagamos el cálculo de coste/hora:
2.500€/320 = 7.82€/hora
Pero eso no es todo, de los 2.500€, siendo benévolos nos van a practicar una retención del 15% lo cual representará que de 7.82€/hora pasamos a 6,65€/hora y además, como probablemente nos van a pagar a 60 días en el mejor de los casos, si hemos facturado a mediados de trimestre, nos va a tocar adelantar el IVA, es decir 450€ y los 250€ de autónomo como mínimo que vamos a pagar por facturar.
El resultado es que empezamos pagando 700€ para, en el mejor de los casos recibir 2.500€ pasados sesenta días. Teniendo un ingreso final de 1875€ que entre las horas invertidas representarán a 5.86€/hora.
Alguien conoce un mecánico, fontanero, asistenta del hogar, etc … que cobre esos precios por hora? Porque yo le pago más a la canguro de mis hijas que es una chica que está estudiando.
Debemos aprender a valorar más nuestro trabajo y a pedir por él lo que realmente vale. A cambio deberemos comprometernos a realizar un trabajo óptimo, a dar una asistencia post venta correcta, a atender todas las necesidades de nuestros clientes y a estar dispuestos a escuchar, pero en ningún caso a vendernos por 5.86€/hora.
Quizá estos cálculos hagan a más de uno plantearse las cosas de otro modo ya que lo que inicialmente suena a un buen sueldo por un mes de trabajo finalmente resulta una miseria ya que no hemos tenido en cuenta los costes del material necesario para realizar nuestra labor, desplazamientos, etc … y nunca serán ocho las horas invertidas al día en trabajar en ese proyecto.
Este artículo pretende ser únicamente una reflexión de como debe enfocar un Indie sus ofertas económicas teniendo en cuenta que nadie nos asegura un proyecto cada mes y que debemos hacer una estimación anual de nuestras necesidades.