viernes, julio 25, 2008

Evernote

Que cosa mas útil resulto esto!

Contaré la historia desde el punto de vista de la experiencia.

El lunes tengo una cita con un cliente nuevo y cuando me pasaron la dirección y cómo llegar, aun tenía mis dudas. Así que fui a Google Maps a buscar una ruta para llegar.

Listo, ya vi por donde llego y los detalles de las calles para llegar a la oficina del cliente.

Mi primer impulso fue tomar un papel y escribir las indicaciones y dibujar un croquis del mapa para llegar. Pero para que me sirve el iPhone?

OK, lo anoto en el iPhone pero no tengo acceso 3G y no se si pueda encontrar un wifi abierto por allá para checar Google Maps.

Acabo de instalar algunos programas del App Store para el iPhone y recordé que el Evernote permite crear notas en varios formatos, tanto en el iPhone como en mi computadora de escritorio y luego sincronizar los datos entre los dos.

Aun no pruebo bien ambos programas y decidí tomar esta oportunidad para ponerlos a trabajar.

En el sitio del programa (http://evernote.com/) hay que darse de alta y obtener una cuenta gratuita con una capacidad de 40 MB al mes. A pesar de parecer poca esta cantidad, son notas las que van a existir ahí, y como cualquier nota su vida útil es reducida.



Al crear las notas, estas se guardan de modo centralizado en el servidor de Evernote, y después son accesibles a través del iPhone, una interfaz de web (tipo webmail) o una Mac o PC.



En mi Mac puedo generar notas de texto y fotos, tomar foto con la cámara integrada, consultar las notas y mandar por email una nota.



En el iPhone puedo generar notas de texto, notas con fotos (fotos archivadas o tomar foto en el instante) o notas de voz (grabar al instante).



En el web puedo crear notas de texto y mandar por email cualquier nota guardada.



En mi Mac cree una nota con el texto de cómo llegar (que me enviaron via chat) y una foto de Google Maps del detalle de las calles cercanas a mi destino.

Guardé esa nota y sincronicé las notas. En mi iPhone abrí el programa Evernote y automáticamente sincronizó las notas del servidor. Y ahí estaba mi nota.



El lunes al acercarme al lugar de mi cita, la nota será accesible aun sin conexión wifi. Y en el iPhone las fotos pueden ampliarse "pellizcándolas", para no perder detalle.

Es posible crear mas de una "libreta" de notas, puediendo crear libretas de notas públicas que son accesibles via web por cualquier persona:

Evernote ericrkl público

La próxima ves que esté en junta con un cliente, tomaré "notas" con Evernote (en cualquiera de los formatos disponibles desde mi iPhone) y al llegar a la oficina (o cualquier lugar con wifi) solo sincronizo y las notas estarán disponibles en mi Mac.

Y con un iPhone 3G la disponibilidad de las notas es INSTANTANEA.

"May you live in interesting times"

UPDATE:
Multimedia iPhone notes: YouNote and Evernote

jueves, julio 24, 2008

Entretenida historia de ficción #1

Estoy aburrido, qué hago?

Ya sé! Voy a escribir un cuento! SI SI SI!

"Ya me inscribí al App Store de mi país y todo OK. Acá solo hay aplicaciones para el iPhone, nada de música. Ya bajé varios programas gratuitos, para probarlos. Unos los conservé y otros los borre.

Buscando reseñas para decidir qué bajar, y más importante: qué comprar, me enteré que hay algunos programas que no están disponibles en todo el mundo.

Un ejemplo típico son los programas que accesan estaciones de radio, por restricciones de distribución y pago de derechos.

Una reseña inicial (ya casi no la actualizan) está en Gizmodo, y ahí fue donde comprobé la falta de algunas aplicaciones en mi país.

Me di a la tarea de tratar de probar algunas de ellas.

Lo primero fue accesar la tienda de la "casa matriz". Buscándole encontré un método para hacer esto, sin poner tarjeta de crédito.

Una ves dentro, con el uso de un certificado de promoción, fui a la sección de programas para iPhone y bajé algunos gratuitos, sobre todo de los que accesan estaciones de radio en internet. Todo OK.

Abandoné la tienda de la "casa matriz" (logout), regresé a la tienda de mi pais y conecté el iPhone. Sincronicé y VOILA!

Ahora puedo usar algunas aplicaciones gratuitas en mi iPhone que no están en la tienda de mi país."

Pero no creas nada, ya que esto fue solo una alucinación que decidí convertir en un entretenido cuento de FICCION (hasta crees!).

Schaste!

martes, julio 22, 2008

Personalizar 'sonidos' en iPhone 2.0 (y 1.1.4)

En la versión 1.1.4 averigüé como cambiar algunos sonidos en mi iPhone, como el sonido de email nuevo (New Mail) y de MSM nuevo (New Text Message).

Cuando instalé la versión 2.0 a mi iPhone "2G", comprobé que los sonidos "originales" se encuentran en la misma ubicación y pude cambiarlos nuevamente.

Ahora que "mucha" gente está comprando iPhone 3G, la personalización hace la diferencia entre el que puede y el que sabe, jejeje.

Aquí van las instrucciones, paso a paso (para que "sepas").

ADVERTENCIA (WARNING): no soy responsable de lo que le pueda pasar a tu iPhone. TU haces esto bajo tu propio riesgo y RESPONSABILIDAD. (Proceed At Your Own Risk)

I- AL GRANO para los que realmente saben: los sonidos se encuentran en /System/Library/Audio/UISounds/, son AIFF pero tienen terminación .caf

II- Paso a paso para los nOOb's:

1- Vas a necesitar un programa para accesar el "disco duro" del iPhone y así sustituir los sonidos existentes por los nuevos. Los dos programas para Mac que encontré no requieren que el iPhone esté "jailbroken" (o sea, jalan sin hacer una sola modificación a tu iPhone, OTB). Recomiendo DiskAid, por ser freeware (al menos escribe a los autores agradeciendo su esfuerzo). (winusers: busquen en Google, hay programas para ustedes también)

2- Prepara los sonidos que quieras reemplazar. Un sonido que reemplacé es el de los email nuevos. Los sonidos deben estar en formato AIFF. Yo los preparé a 8 bits, mono y cortos de duración para ahorrar espacio. Por el momento bautizalos como tu quieras. PRUEBALO (escuchalo).



3- Conecta tu iPhone. No importa si el iTunes arranca, dejalo así.

4- Abre el programa DiskAid (no estaba abierto antes, VERDAD?). Espera a que reconozca tu iPhone.

5- En la esquina inferior izquierda, oprime "Media Folder", para seleccionar "Root Folder".



6- Aparece una ventana de confirmación. DE AQUI EN ADELANTE ES DONDE LAS COSAS PUEDEN PONERSE MUY FEAS, ASI QUE SEGUIRÁS MIS PASOS AL PIE DE LA LETRA, O TU iPhone KAPUT!!! Oprime "Go Ahead".



7- En la ventana principal, oprime los siguientes folders, en este órden: "System", luego "Library", luego "Audio" y finalmente "UISounds".



8- Ahora puedes arrastrar los sonidos del iPhone a tu Mac, o de tu Mac al iPhone. Para saber cuales sonidos vas a reemplazar, PRIMERO arrastralos a tu Mac y ESCUCHALOS.

9- ANTES de arrastrar los sonidos nuevos, hay que renombrarlos para que reemplazen a los originales con su mismo nombre. Y hay que cambiar la terminación de ".aif" a ".caf" (IMPORTANTE HACER ESTO)

10- Arrastra de tu Mac al iPhone y sustituye el archivo. Oprime "Replace". Si al arrastrarlo no aparece la ventana que dice que ya existe el archivo y que si deseas sustituirlo, YA LA CAJETEASTE! (en serio).



11- Cierra el programa DiskAid.

12- Ve a las preferencias del iPhone ("Settings") opción "Sounds" y selecciona un sonido para "New Text Message" (los nombres que aparecen en la lista no cambian, pero el sonido si), o apaga y prende las opciones "New Voicemail" o "New Mail", o lo que hayas cambiado.



13- Presume la personalización a tus amigos, o si no te funcionó (o peor aún, tronaste tu iPhone) ponte a llorar.


Happy Trails!

UPDATE:
Este procedimiento funciona sin necesidad de hacer jailbreak al iPhone, y funciona con cualquier modelo y cualquier versión de software a la fecha.

lunes, julio 21, 2008

iPhone 2.0

El mismo domingo en la madrugada actualicé mi iPhone al OS versión 2.0

Después de un par de intentos fallidos y un horrible "error 6" en el iTunes, todo salió bien.

A bajar apps del iTunes store!

El cel sigue funcionando bien con la ficha Amigo, a pesar de una actualización posterior que iTunes pedía instalar (quesque para actualizar los servicios de mi carrier). Alejandra me dijo que en su iPhone 3G ya comenzó a funcionar el "visual voicemail", de repente, sin hacerle nada al cel. Aun no pruebo esto en mi iPhone "2G".

Realmente extraño pocos programas de la versión anterior y me he adaptado bien con los que hay disponibles, que al momento solo he instalado y probado los gratuitos :)

Los programas para las redes sociales están muy bien y hay variedad (para usar con tweeter, facebook, etc).

A pesar que el iPhone "2G" no tiene un GPS "real", los programas que usan "geotaggin" reportan mi ubicación bastante bien (unos 20~50 metros de diferencia).

Seguiré reportando lo que valga la pena reportar.

1, 2, 3 probando...

LifeCast


Geolocate this post

Posted with LifeCast

viernes, julio 18, 2008

El juego del gato, 4 (flash game)

Lista con los nombres de los objetos que pueden caer:
var ap:Array = ["", "crok1", "bolsa1", "bull1", "crok2", "bolsa2", 
"cocker1", "crok3", "pastor1", "crok4", "bull1-2", "crok5", "pastor1-2"];


Estos objetos son los nombres de las figuras que están en la biblioteca (library), con la opción "Export for ActionScript". "crok1" a "crok5" son las croquetas (comida), 2 bolsas de croquetas y los demás son los perros.


Lista de las 7 posiciones:
var al1:Array = [0, 0, 0, 0, 0, 0, 0];


Al inicio todas las posiciones están vacías (tienen un "cero"). Cuando se ocupen, contendrán un "1". Usé también una lista donde están las coordenadas de cada posición (pixeles en el eje "x"):

var al2:Array = [85, 190, 295, 400, 505, 615, 715];



Para la rutina de los "volados", comenté con León el asunto y me dijo: "Acá tengo un libro de Director que tiene una rutina para eso". Y aunque estaba en "Lingo" la rutina, era muy fácil de entender, y más sencilla de lo que pensé. Después de prueba y error llegué a los números que usé finalmente:

// esto va al principio del código
var vel:Number = 30;

// dentro de la rutina juego va esto, 
// después de decrementar el cronómetro
// rutina para crear otro objeto que cae
if (randRange(1, home.vel) == 5) {
  crea_ll(); // aquí creo otro objeto
}


Genero un número aleatorio entre 1 y 30, y si ese número es "5", dejo caer otro objeto. Esta rutina se encuentra dentro de la rutina "juego", justo al terminar de decrementar el cronómetro.

La rutina "crea_ll" será la encargada de dejar caer otro objeto.

So far, so good.

La rutina que deja caer otro objeto debe buscar una posición vacía, y si la hay, seleccionar un objeto al azar de la lista de objetos.

Mi primer intento "rastreaba" la lista de posiciones vacías de "izquierda a derecha", pero después decidí variar un poco. Aquí echo otro volado para decidir si busco de izquierda a derecha o de derecha a izquierda.

// esto va al principio del código
var llenos:Number = 0;
var nper:Number = 0;

// esta función NO va dentro de la rutina "juego"
function crea_ll() {
// obtengo nueva coordenada para lluvia de objetos
pn = 7;
if (randRange(0, 1) == 1) {
// de izquierda a derecha
  for (jcl=0; jcl<7; jcl++) {
    pn = jcl;
    if (home.al1[pn] == 0) {
      break;
    }
  }
} else {
// de derecha a izquierda
  for (jcl=6; jcl>=0; jcl--) {
    pn = jcl;
    if (home.al1[pn] == 0) {
      break;
    }
  }
}
// una ves obtenido un lugar vacío, selecciono un objeto al azar 
// y lo dibujo en la coordenada "x" de ese lugar vacío
if (pn<=6) {
  s = personaje(); // aquí selecciono un objeto 
  // de la lista de objetos que caen
  home.al1[pn] = home.nper;
  home.llenos++;
  if (home.llenos>6) {
    home.llenos = 6;
  }
  px = home.al2[pn];
  home.attachMovie(s,"mc"+pn+"_mc",100+pn);
  home["mc"+pn+"_mc"]._x = px-(home["mc"+pn+"_mc"]._width/2);
  home["mc"+pn+"_mc"]._y = home.ytop;
  home.nmc++;
  } else {
    // todas las posiciones llenas, no creo personaje nuevo
  }
}

// esta función NO va dentro de la rutina "juego"
// selecciono un objeto al azar
function personaje():String {
  i = randRange(1, 12);
  home.nper = i;
  return home.ap[i];
}


OK, una ves dibujado el objeto, en un lugar disponible, hay que comenzar a "bajarlo", aumentando su coordenada "y" cada determinado tiempo. Y al llegar al fondo, borrar el objeto. Checar si al llegar abajo le "pega" al gato. Si el objeto es una croqueta, aumentar 1 punto al score. Si el objeto es una bolsa de comida, aumentar 5 puntos. Si es un perro, restar puntos: cocker 3 puntos, bull 4 puntos, pastor alemán 5 puntos.

Pero una cosa a la vez: bajar el objeto y desaparecerlo al llegar al fondo. Justo debajo de la rutina para crear otro objeto que cae.

// esto va al principio del código
var vel2:Number = 3;

// dentro de la rutina juego va esto
// justo debajo de la rutina que crea otro objeto que cae
for (j=0; j<7; j++) { // checo cada una de las 7 posiciones
  if (home.al1[j] != 0) {  // si esta llena la posición...
    with (home["mc"+j+"_mc"]) {
      _y += home.vel2; //... bajo el objeto
      // aqui desaparezco el objeto si llega al fondo
      if (_y>=home.ymax) {
        removeMovieClip(home["mc"+j+"_mc"]);
        home.al1[j] = 0;  // libero la posición
        home.llenos--; // cantidad de posiciones llenas
        if (home.llenos<0) {
          home.llenos = 0;
        }
      }
    }
  }
}


UF!!!!!

A probar a ver si funciona todo este choro mareador...

miércoles, julio 16, 2008

Mis aventuras por las indias, parte 3G

Primer escenario: disponible el iPhone 3G en méxico (con Telcel) y disponible el iPhone OS 2.0

Primera intención: actualizar al OS 2.0 mi iPhone "classic" (primera generación)

Se que aun no salían herramientas para desbloquear los teléfonos, pero recordé que en la primera generación, si activaban un iPhone en ATT, y le ponían el SIMM a uno sin activar, se desbloqueaba. Y como ahora Telcel es un carrier autorizado me dije a mi mismo:

"Instalas el OS 2.0, consigues un 3G ya activado, le cambias el SIMM y asi desbloqueas el tuyo. Una ves desbloqueado, regreso el SIMM y como es de Telcel, debe jalar".

Pues conseguí un 3G activado con una amiga, y me dijo que sí podíamos hacer pruebas. Me lancé a su casa y comenzaron las pruebas.

Después como de 1 hora aquí están los resultados que importan:

1- iPhone de 1a generación con OS 2.0 (ya sea iPhone1,1_2.0_5A347 ó iPhone1,2_2.0_5A347) no hay manera de activarlo con un SIMM de un 3G

2- iPhone 3G funciona PERFECTO con un SIMM de Amigo Kit

3- A seguir esperando el pwnagetool 2.0



Segundo escenario: comprar un iPhone 3G

Segunda intención: obtener información para evaluar costos y decidir que plan contratar

Con la seguridad que el iPhone 3G funciona de pelox con un SIMM Amigo Kit, mi plan quedó así:

Adquirir un iPhone 3G con el plan mas económico, pasar el SIMM del 3G al iPhone "classic" y en el 3G seguir usando el SIMM Amigo Kit (debido a lo costoso de los planes de datos, por el momento renuncio a la conectividad 3G, ademas de ya estar acostumbrado a usar siempre WiFi en mi iPhone actual).

El iPhone "classic" lo usará Liz, que ella si consume mas llamadas al mes.

Voy a un distribuidor Telcel que vende los iPhones. Digo que quiero comprar uno y me pasan con el gerente de la sucursal.

Alejandra (mi amiga del 3G de las pruebas) me había comentado que le dijeron que podía contratar CUALQUIER PLAN para el iPhone, no solo los que aparecen en la página de internet.

Pregunté cual era el plan mas económico que podía contratar con el iPhone, sin datos, y después de revisar su computadora y unos libros de tarifas me dijo que el mas económico es uno de $189 pesos al mes, solo voz. Me dio los detalles (SMS, minutos, etc).

El resumen de todo esto queda así:

1- Plan mas económico para el iPhone 3G: $189 al mes, solo voz, por 2 años

2- Costo del iPhone 3G 8GB con este plan: $7,599

3- El plan de datos ilimitado se puede contratar y descontratar en cualquier momento, sin penalización, con un costo extra de $579 por cada mes de servicio

(todos estos costos contemplan los 2 años de renta mandatorios para la adquisición de un iPhone)

Costo total (sin datos) del iPhone 3G 8GB con este plan: $12,135
Costo total con el plan mas bajo del internet iPhone 3G 8GB: $14,435
Costo total con el plan mas alto del internet iPhone 3G 8GB: $20,065

Costo total con el plan mas bajo del internet iPhone 3G 8GB + paquete ilimitado de datos: $28,331
Costo total (datos ilimitados) del iPhone 3G 8GB con el plan de voz más bajo: $26,031

UPDATE: Telcel ya puso en las tarifas del iPhone un plan de datos ilimitado.
Costo total (datos ilimitados) del iPhone 3G 8GB con el plan telcel de la página web: $34,225

Sigue siendo una LANA, sobretodo acostumbrado a lo que costó el iPhone "classic" (que no están ustedes para saberlo ni yo para contarlo: me lo regalaron) y a lo que pago por el consumo (fichas Amigo y WiFi).


Conclusiones

1- Esperar el pwnagetool 2.0 y pasar el iPhone "classic" a la versión 2.0

2- Esperar a que vendan iPhones 3G en el mercado "negro" y evaluar el costo

3- Esperar, esperar.... ESPERAR!!!!

Tan Tan

viernes, julio 04, 2008

El juego del gato, 3 (flash game)

El gato ya se mueve, pero aun no cae nada del cielo: ni maná ni guaguá. Así que el siguiente paso es implementar la lluvia de objetos que caen.

Hacer caer objetos es simple, solo basta definir su posición inicial (coordenadas "x" y "y" en la pantalla) y comenzar a aumentar la coordenada "y" (en Flash las coordenadas "y" comienzan en la parte alta de la pantalla y "crecen" hacia abajo. nunca he sabido la razón de esto).

Después de unas pruebas, ya tengo los datos de la coordenada "y" inicial, para que los objetos comiencen a caer desde un área libre de la parte superior de la pantalla (librando el encabezado, cronómetro y score). Y otras pruebas mas para obtener la coordenada "y" donde deben desaparecer en la parte inferior de la pantalla (en caso de no pegarle al gato).

var ytop:Number = 125;
var ymax:Number = 470;


Una prueba "a mano" animando una croqueta indica que el código funciona.

OK.

Ahora debo decidir cómo calcular la coordenada "x", para que los objetos aparezcan en diferentes posiciones a lo ancho de la pantalla.

Una primera idea es calcular un número aleatorio (al azar) entre los límites de la coordenada "x" (0 y 800 pixeles). Asi cada objeto nuevo que comience a caer aparecerá en un lugar relativamente aleatorio en la parte superior de la pantalla.

Necesito un generador de números aleatorios, con un limite mínimo y uno máximo. Eso ya lo he hecho antes. Busco en mis proyectos anteriores y desempolvo una rutina que saqué de la gran nube de datos del internet, y que sirve muy bien.

function randRange(min:Number, max:Number):Number {
  var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
  return randomNum;
}


Pero ¿Cada cuanto tiempo debo de generar un nuevo objeto cayendo? ¿Y si se empalman? ¿O se generan muy cercanos unos a otros?

Después de una primera prueba, generando objetos cada 2 o 3 segundos (auxiliandome con el contador de segundos del cronómetro) noto que se generan objetos de manera muy "desordenada" y a veces muy cercanos unos a otros, o demasiado lejanos, o en grupos a uno u otro costado de la pantalla. A veces un objeto sale casi detrás de otro que ya va cayendo.

La idea original del juego es que con el paso del tiempo se ponga mas difícil. Eso implica dejar caer objetos mas rápidamente y a mayor velocidad. La velocidad de caída no me preocupa, ya que es fácil aumentarla agregando un factor (aumentando la distancia de traslado en el eje "y").

Otra opción que se me ocurre es fijar columnas predeterminadas para dejar caer objetos siempre sobre las mismas líneas imaginarias en la pantalla (posiciones fijas). Eso facilita las cosas, ya que no hay que calcular coordenadas "x" al azar. Decido sobre 7 posiciones fijas sobre el eje "x", basado en las lineas guía que Victor dejó al crear las croquetas y perros en su diseño muestra.

Pero surgen nuevos retos:

- ¿Cómo calculo la posición de el "siguiente objeto" que cae? (dentro de alguna de las 7 posiciones fijas)
- ¿Espero a que el objeto caiga hasta el fondo para crear otro en la misma posición o dejo caer varios en la misma posición?
- Si espero a que caigan los objetos, ¿cómo sé cuando puedo utilizar nuevamente una posición que estaba llena?
- ¿Cómo sé cuando una posición esta libre o llena?
- ¿Cómo distribuyo la periodicidad de croquetas, bolsas de alimento y perros? No puedo dejar caer siempre el mismo tipo de objetos, ni siempre en las mismas posiciones.

Si tuviera mas tiempo, probaría las alternativas y decidiría cual adoptar. Así que debo decidir usando mas mi imaginación que mi mente racional. Cierro los ojos y me imagino como se podría ver cada opción, basandome en todos los juegos parecidos que he visto/jugado en mi vida. Esto es otro grifo del gran tinaco que es el universo: mis recuerdos de experiencias pasadas.

- Esperaré a que caiga un objeto para volver a usar el mismo espacio con otro objeto

- Si tuviera que hacerlo a "mano", en la vida real, para seleccionar qué objeto es el que sigue, haría una lista con los nombres de los objetos. Para seleccionar el siguiente de la lista usaría el método "de tin marín, de do pingüé...". Para disminuir la probabilidad de repeticiones, haría la lista mas larga, intercalando los nombres de los objetos, usándolos mas de una ves.

- Si tuviera que hacerlo a "mano", en la vida real, para saber cuando una posición está llena o vacía, haría una lista de las 7 posiciones y pondría una "tacha" en las que están ocupadas, y borraría la tacha de las que se liberen al llegar el objeto al fondo de la pantalla.

- Si tuviera que hacerlo a "mano", en la vida real, para saber cada cuando genero un objeto nuevo que va a caer, echaría un "volado" (flip a coin) y cada que cayera "águila" dejaría caer un nuevo objeto, en alguna posición libre. O cada 2 de 3 águilas, para que no sea tan seguido.

Manos a la obra.