Semana 3 y 4

Semana 3

Parece que la idea educativa de la semana es hacer que el estudiante pueda convivir con niveles de frustración en extremo elevados sin caer en el abismo de la depresión… ¿cómo lo logran? Simple, evitando que haya tan siquiera un solo respiro. Mejor dicho, la semana tres del entrenamiento intensivo invernal empezó todos los días a las 9 y terminó a las doce , una. En ese intervalo nunca logré terminar ninguno de los programas del día porque… comenzamos con rails… los famosos rieles donde Ruby va, Ruby on Rails.

Rails es un [gem] que básicamente crea por default los controladores, views, modelos y routes de un proyecto, más que todo aplicaciones para celulares e internet. Cosa maravillosa que en un principio me encantó. Todavía lo sigue haciendo, pero soy consciente que tiene un ligero problema… Cualquier errorcito de sintaxis por pequeño que sea lo bloquea, así pues, el trabajo de toda la semana consistió en debugging intensivo, que lo que más hizo fue crecer mi frustración hasta cotas inesperadas. A Nhi, uno de los dueños de la academia, le pareció maravilloso que yo andara tan frustrado; al parecer eso es bueno para mi proceso educativo. A mi, por el contrario, me parecería más sabroso caminar por la vida feliz y sin preocupaciones, que andar bloqueado por la cantidad de letreros rojos que el developer me muestra y del importantísimo [pry] que siempre me muestra que voy como bien, pero no del todo.

En fin, ya sé como hacer un blog, como hacer apps sencillas que cumplen con todos los requisitos para acceder a bases de datos, procesar información y transmitirla entre módulos.

La semana entera se fue en hacer diferentes aplicativos que en sí, solo representaban el mismo modelo. La idea es que de repetirlos tanto, en algún momento podremos entenderlos y manejarlos a nuestro antojo. Por ahora esto está lejos de mi control y conocimiento, pero cómo la próxima semana tendremos lecciones de debugging, es posible que mi felicidad aumente.

El viernes tuve mi primer app en grupo. Me tocó con Alex, quien tiene mi mismo nivel y con compañero que no sabe ni forro. Lo triste de caso fue que haciendo el primer modulo el viernes por la tarde, nos quedamos bloqueados desde el principio. Normalmente yo logro en una tarde conectar tres módulos. El viernes no pudimos ni con el primero. Por eso el sábado nos vimos de nuevo las caras y hoy domingo, logré terminar de hacer el tercero. Debíamos además hacer el styling con Materialize. Yo nunca lo había manejado, pero no toma mucho tiempo en hacer cosas básicas con él. Eso sí, se ve bastante rígido pues usamos los templates estándares que Materialize provee. Queda la sorpresa de ver con qué nos salenuestro compañero, el cual quedó encargado de hacer el estilo del primer modulo y al cual no quisimos llamar el sábado (ni el domingo) porque de seguro nos frenaba un proyecto que de por sí, ya andaba atrasado desde el principio. (No entregó nada)

 

Semana 4

Esta semana continuó con el mismísimo Rails. En esta ocasión, lo visto requería el mismo proyecto que tantos dolores de cabeza nos había dado.

En orden de aparición, vimos la [gem] de [devise] para hacer autenticaciones de usuarios; lo que en castellano para no programadores serían las casillas donde uno se registra en un aplicativo común y silvestre. Login, Logout.

De paso aprendimos a conectar en este registro facebook, gmail, github o lo que sea, es decir, preguntarle al usuario si quiere hacer el proceso de registro y poner su propia password o por el contrario acceder a nuestra app con su cuenta de gmail o facebook. La cosa suena sencilla pero no lo es tanto. Todo se complica cuando uno tiene que autenticar ese usuario en los demás módulos del aplicativo para que los datos solamente le pertenezcan a él y que en su vista solo aparezca lo que a él le interesa.

Después pasamos a otros tipos de módulos con atributos llamados [has_many_through] y [accepts_nested_attributes_for]. Atributos que son facilísimos de manejar cuando se sigue el ejemplo del profesor pero que, una vez el alumno es dejado a su libre albedrío, este comienza a patinar por todos los lados. En fin, todos los días se creaba uno o dos apps por la mañana y por la tarde se seguía mejorando el grupal que venía de la semana anterior.

Usamos otras [gem] como [populator] y [faker] para llenar bases de datos con datos ficticios (para poder ver como funciona la propia app llena de datos); otras como [annotate] para tener los datos del [schema] dentro de los modelos, y otras como [paperclip] para que el usuario pueda subir fotos a sus cosas. Todo esto se ve muy bacano pero, el infaltable pero, después cuando se sube todo a [heroku], este no guarda las imágenes, entonces hay que armar una cuenta en [cloudinary] y la vida del programador principiante se vuelve un bololoi.

Tuvimos como todas las semanas un Brain Teaser, en esta ocasión, hacer un miniprogramita en Ruby que reconociera cuando una palabra o frase era un “palindrome”, me tocó ir a wikipedia para ver que era eso… en fin, hacer un programita que reconociera si una palabra o frase se podía leer de igual manera por delante o por detrás, algo como: kayak. o más complicado aún, “Was it a car or a cat I saw?”; en estas había que hacer que ruby ignorara los espacios y signos de puntuación. Como es obvio, estaban prohibidos los [helpers] tipo [.reverse]. Lo logré hacer en media hora. Quedé muy contento, hasta ASCCI art le puse (un totoro y no me pregunten por qué).

Vimos también como cuadrar los [backgroud jobs], para enviar mails, newsletters y cosas así, programadas de antemano.

Y por último, vimos como subir apps a Heroku, donde cualquier celular o computador los puede ver e interactuar con él.

La semana no terminó en viernes, sino en sábado, como en la anterior. Tuvimos nuestra primera hackathon. Aunque no gané, quedé contentísimo con el resultado. Era una especie de menú de restaurante con registro incluido muy montadita en heroku. La parte del front end quedó mas bien feíta, pero la del back end me dejó muy contento porque aunque sencilla, fue hecha en tan solo ocho horas y funcionaba tal como debía.

Anuncios

Surroundings and Park City

No lo había publicado en el blog, pero por fin tengo tiempo así que sin preámbulo alguno les cuento que hace como dos semanas salí de Salt Lake city hacia sus alrededores, para mayor precisión, las montañas tutelares de la ciudad y la parte de atrás de ellas, que contienen a Park City, un pueblito de esquiadores que por esta época no tiene pero que en un mes estará retaquiada. Cómo todo lo de estados unidos requiere un carro, en este paseo nos fuimos Dorje y yo en la camioneta que Rob, muy querido, nos prestó y con ella comenzó el paseo.

La primera escala fue un lugar que tiene un nombre bastante divertido para ser un sitio turístico: This is the place. Lugar donde se exhiben unas casitas campesinas de hace doscientos años donde vivieron los primeros mormones. El lugar tiene una vista muy buena hacia el valle de Salt Lake y aparte de las casas tiene monumentos a los pioneros en los que los personajes hacen una sola cosa, rezar.

suroundings_20161105_170522

suroundings_20161105_171022

suroundings_20161105_171050

suroundings_20161105_170957Vista del valle de Salt Lake City

 

 

suroundings_20161105_171618

Granja

 

suroundings_20161105_171626

Casas de hace doscientos años

 

Después atravesamos las montañas para llegar a una planicie donde se encuentra Park City, eso sí, primero paramos en un outlet para que yo me pudiera comprar una chaquetica para tener con qué sobrevivir el invierno que se nos viene, que al parecer es duro.

Park City es pequeñita, de city no tiene sino el nombre, es una especie de pueblito lleno de condominios para esquiadores y eso es todo. Desde el valle se pueden ver las instalaciones de salto largo y bobsleigh, de las cuales solo se encuentra en funcionamiento la última, pues funciona como un parque de atracciones.

suroundings_20161105_190006

Vista de las rampas de salto larog

 

suroundings_20161105_190029

El valle y sus montañas

 

suroundings_20161105_191424

Park City

 

Siguiendo el camino intentamos tomar una ruta llamada Aspen Grove, la cual pasa por Sundance, donde hacen el festival de cine independiente y es una carreterita lo mas de linda y entretenida. No vimos más. Un chica en una garita nos hizo devolver porque la vía estaba cerrada, así pues, volvimos a Salt Lake city por el sur y eso fue todo.

Entretenido por un día. Si se es esquiador es una especie de paraíso, pero para nosotros solo valió pasar por ellos y mirarlos.

suroundings_20161105_200410

Bajando a los lagos

 

suroundings_20161105_201224

Las montañas que en una semana serán blancas

 

suroundings_20161105_204442

Granja en el medio del camino

 

suroundings_20161105_204837

Fijarse en la vegetación de las montañas!

 

suroundings_20161105_204902

Linda panorámica de las montañas más altas, mount timpanogos

 

suroundings_20161105_205055

Otra linda vista

 

Semana 1 & 2

Semana 1

Empezó el curso de una forma bastante dura. Todo el lúnes, desde las 9 am hasta las 6pm estuvimos instalando los cinco mil programas necesarios para el curso… bueno, exagero, solo eran 14, de los cuales tres o cuatro me hicieron la vida bien difícil. Por la mañana hicimos las presentaciones de cada uno con juegos típicamente gringos y más tarde hicimos las presentaciones de nuestras páginas web. La mía resultó ser la más titina de todas… por muuucho.

La semana entera fue una revisión y clases sobre el trabajo preparatorio previo que sobre Ruby debíamos haber hecho.

En un principio fue fácil. Me deja muy contento notar que mi nivel de inglés es suficiente para entender todos los tecnisísmos del caso; así que no me siento en desventaja. Me he salido del tema, perdón. En un principio fue fácil pero para el jueves [arrays y hash] ya la vida se me había complicado, pues de estos temas más bien pocón… eso que son importantísimos ya que se trata de nada más y nada menos que de listas, sean temporales o permanentes, pero que al fin y al cabo guardan toda la informacion de los usuarios. El viernes, la vida, la alegría y la calma mental se me acabó cuando vimos las [class]. De esas no entiendo ni forro y resultan que son importantísimas.

Cada día debíamos hacer un programa y cada programa tenía sus objetivos y unos bonus.

El primer día, sin nada de anestesia nos pusieron a hacer una lista interactiva donde se podían agregar nuevos miembros, borrarlos, editarlos, verlos o acceder a ellos. Me quedó perfecta, cumpliento con todos los bonus y de remate, antes de las 5:30!

El segundo día, tuvimos que hacer un programita con un listados de comandos del command line que al seleccionarlos nos imprimian el la pantalla los manuales de uso de cada uno. Se debía tener la opcion de borrarlos y añadir nuevos. Yo de ñoño le agregé la opción de exportarlos a un archivo .txt que se creaba automáticamente con el nombre del comando. Dejé a todo el mundo viendo un chispero.

El tercer debí construír una calculadora. Esta resultó ser mucho más complicada de lo pensado porque el resultado de la operación debía a su vez convertirse en primer término para una nueva. Además debía tener historicos de operaciones y reset. La mía cumplía con todos los requisitos, la llamé la EggAdder 2000 y cómo tenía tiempo de sobra, hice la DigitalEggAdder 3000… logré que se pudiera escribir la operacion de una (mientras todos los demás debían pedir numero por numero y aclarar de entrada que operacion se queria) y que las suboperaciones se pudieran escribir de una tambien. Bastante problemas me dio hacer un botón de memoria que pudiera ser utilizado en una operacion posterior. El ejercicio tenía como bonus hacer que la calculadora operara con seno y coseno y lo logré, además hice que sacara potencias y raices cuadradas. Otra vez vi los ojos de envidia de los demás.

El jueves nos encargaron de hacer una bola mágica, de esas que uno hace una pregunta cualquiera y ella devuelve respuestas genéricas al azar.

Había que hacer [arrays] con las respuestas y esto me dio durísimo… me cuesta bastante acceder a estas listas y hacer [loops] con ellas. Al final fue un trabajo bueno. A este [array] había que poderle meter nuevas respuestas, pero que se pudiera tambien resetear para que siguiera con las de default, tanto, que al final quede con un [array] principal y dos temporales para una misma cosa. Funcionó todo y completé todos lo bonus (a media noche) pero logré incluirle la despedida mas fastidiosa del mundo por tandas. La cabeza al final de este ejercicio me quedó echando humo… nadie tuvo envidia de mi obviamente.

El viernes fue el acabose. De entrada nos hicieron un brain teaser… un quiebra cabezas en teoría simple. De un [array] numérico sacar el valor máximo y mínimo y como bonus entrarlos como un ARGV. Teníamos una hora y no logré en ella ni siquiera hacer que de los ARGV me saliera un [array] con numeros enteros utilizables. Estaba prohibido usar helpers tipo array.sort, array.min o cosas así. Lo terminé el sabado (y eso que Jake sapeó la respuesta).

Seguido el teaser se nos vino encima una clase de [class] y yo muy juiciocito en mi puesto vi a un gringo muy blanco hablar en chino fluido. Nos han pedido hacer un menu de restaurante donde se podían hacer el pedido, repetir cosas, pagar la cuenta y contar las calorías de los platos pedidos, pero había que usar [classes]! Me negué a hacerlo… si ni siquiera era capaz de escribir la primera línea. Desesperado acudí a los [hash] que tampoco sé acceder y para colmos de la desgracia hice [hash] dentro de un [hash] dentro de un [hash] y en teoría a eso le debía hacer un [loop]… a las 5:00 acepté mi derrota… de mi restaurante no iba a salir un solo pedido. Frustrado a más no poder, vi que alguien hizo un [hash] dentro de un [array] y le copié. Que diferencia que hacía!

@main = [

{item: 'Hamburger', price: 12.50, description: 'Quarterpound beef', calories: 2000},

]

Pude por fin hacer el [loop] que tanto necesitaba:

def options

@main.each { |x, i| puts "#{x[:item]} $#{x[:price]} #{x[:description]} #{x[:calories]}"}

end

Feliz con mi loop me pude ir a la casa a empezar el trabajo… todo esto era solo el menú, faltaba comprar, repetir, pagar y ser despedido… A la 1 am por fin funcionó algo. Terminé el sábado.

 

Semana 2

Ok, semana dos; aquí vamos.

Nos recibió el lunes con el primer trabajo en grupo: hacer un casino, recomendado (obligatorio) con [class]. No me tenía tan traumatizada la idea porque había cuadrado hacer el casino con Rob y Daniel, pues como vivimos juntos podíamos continuar el trabajo en la casa sin ningún problema… pues no. Nuestros nombres en un array son escogidos por un computador y este con su simple algoritmo, o para ser más específico aún, su helper [.sample] decidió que yo debía trabajar con Marisa y William. Jake nos dio un empujoncito mostrándonos como comenzar el casino. Fue realmente lo que necesitabamos, con ese pedacito comencé a trabajar y para el final del primer día ya tenía al casino con dos juegos, seleccion de jugadores, memoria de puntuacion y billetera; en fin, los objetivos de los dos días ya cumplidos y la mitad de los bonus también.

el martes se fue todo en la construcción de una ruleta, los dados (que en realidad eran casi que lo mismo y además yo ya los había adelantado por la noche) y el acabose… BlackJack! Tenía que crear una baraja con pintas y otro monton de cosas que se podían hacer con un [loop] dentro de un [loop] pero que igual lo dejaba a uno jodido sin poderle dar valores numericos a la J, Q, K y al As. En fin, fregando con los T.A y peleando yo contra Ruby logré dar con una línea dentro del [loop]… la línea de value

 

def generate_deck

   @suits.each do |suit|

     @ranks.size.times do |i|

       value = @value[i]

       color = (i % 2 == 0) ? 'Black' : 'Red'

       @cards << Card.new(@ranks[i], suit, color, value)

     end

   end

   deal

  end

 

Aquí el resultado en pry

 

[1] pry(#<Deck>)> @cards

=> [#<Card:0x007fcafb942118 @color="Black", @rank="A", @suit="Spades", @value=11>]

 

En fin, con esto cuadrado y dos litros de café encima logré terminar el juego de BlackJack. La presentación de los casinos fue triste ya que fuimos humillados por Josh y Cael, quienes cuentan con cierta experiencia en programación y por lo tanto hicieron un casino que nos rebajaba a los demás a ser amateurs vergonzantes frente a semejante presentación.

Pasado el casino, el día siguiente solo se concentró en bases de datos. [SQL] a dos manos… acá (y me imagino en el mundo programador) llamado sequel. Con este lenguaje debíamos hacer nuevas bases de datos en servidores locales creados en [PgAdmin], además de editarlos directamente con [Postgres] o en el mismo. Después, para rematar la sesión, se nos vino una tanda grande de búsqueda de datos y edición de los mismos desde [Postman]. Todo lo hice muy bien, todo me funcionó, pero aún me falta alguna clase que nos enseñe a conectar las bases de datos con los mismos inputs de nuestros usuarios desde una front end. Me imagino que en semanas entrantes eso entrará al temario.

El jueves nos recibió con otro brain teaser. En esta ocasión, un jueguito en el que había que contar letras de los nombres de los números y al final llegar al magic four. Parecía dificilísimo y yo por mi cuenta comencé de entrada con un [loop] dentro de otro como el ejemplo de las cartas… rápido lo dejé del lado pues me encontré una GEM que escribía en letras los números de entrada. Con esta GEM se hizo en tan solo 19 líneas el programita entero.

Aquí lo que verdaderamente importa…

 

def process

  @name = @user_input.to_name

  long = @name.length

  if @name == 'four'

    puts "Four is the magic number"

    exit

  end

  puts "#{@name} is #{long.to_name}"

  @user_input = long

  process

end

 

Pasado el teaser (solo había una hora para hacerlo), debíamos copiar dos páginas web bastantes sencillas. No nos dieron ninguna clase de HTML o CSS porque en teoría eso ya lo debíamos saber… Los que no dominaban estos temas se quedaron viendo un chispero. Cómo las páginas a copiar eran bastante cagaditas, me gasté un montón de tiempo tratando de hacerlas ver tan feas como las originales.

El fin de la semana comenzó con un examen de conocimientos en el que saqué una nota más bien mediocre aunque esto no me bajó los ánimos… los errores se debieron más que todo a problemas idiomáticos relativos al inglés, que a errores sintácticos relativos al SQL, HTML, CSS o el mismísimo Ruby.

Hecho el examen, debimos aprender [Sinatra], una especie de lenguaje que conecta Ruby con el HTML y que, en teoría, hace fácil la conexión entre el front-end y el back-end. Me constó bastante. Eso sí, para el sábado ya estaba lista la reconstrucción del la CheatSheet con página funcional y la del la Magic Eight Ball, también. En ambos casos logré conectar todas las características básicas pero todo lo demás, los bonus y detallitos que hacen los programas más agradables aún no se encuentran conectados.

screen-shot-2016-11-06-at-16-41-30 screen-shot-2016-11-06-at-16-43-21

Provo

La única turisteada que se puede hacer por estos lados sin alquilar un carro es ir a Provo, la ciudad universitaria de los mormones. No fue que no quise hacer mas cosas por pereza de alquilar un carro, de hecho me pegué tremenda patoneada para hacerlo, nada más que resultó que todos mis innumerables pasos me llevaron al lugar equivocado. La pataleta que le siguió al descubrimiento de este hecho fue el término de la busqueda de alquiladero y el comienzo del regreso a casa con la cola entre las patas. En fin, al día siguiente, para enmendar las penas, intenté tomar un tren. El primero lo perdí y debí esperar al siguiente una hora más tarde, para viajar a la maravillosa ciudad de Provo. En el camino no se ve nada diferente a los típicos suburbios del país en los que únicamente se pueden observar unos barrios,con casas de madera, que nunca acaban; aunque cuando se ven estas edificaciones en proceso de construcción, parecen más de cartón que de cualquier otro material. Pasada la ciudad de Salt Lake city comienzan otras ciudades con otros nombres (aunque uno siempre ve lo mismo) y en algún momento aparece al famoso Salt Lake, que es bien grande pero, al menos lo que yo vi, se encontraba completamente vacío, sin ningún barquito surcándolo y las montañas de atrás, peladas como las que más, acompañaban su soledad con su auscencia de árboles en ellas. En fin, vista una esquina del lago, el tren continuó su camino hacia una ciudad llamada Lehi, como la supuesta ciudad israelita de Nephi, el jesús mormon. En este lugar se encuentran las oficinas de Adobe. Dato que solo es importante para los diseñadores gráficos.

De Lehi sigue algo y después aparece algo que podríamos llamar “campo”, una especie de barrio residencial con casas con pastizales y 5 vacas y 7 caballos. Después… Provo.

El camino turístico de Provo consistió en caminar por la vía principal media hora hacia la universidad (que queda en el otro extremo de la ciudad (que no es pueblo, pero tampoco ciudad… es simplemente un barrio residencial del tamaño de un pueblo), llegado a la universidad, media vuelta y por vías secundarias volver a la estación del tren para ver la cola de berraquito desaparecer de nuevo frente a mis ojos. Una hora de lectura después en otro tren me siento y a Salt Lake city regreso…

provo_20161022_210048

El lago de salt lake

provo_20161022_210358

Casas de cartón

provo_20161022_211905

El tren que solo pasa cada hora y me dejó las dos veces

provo_20161022_212310

Casa de un mecánico en Provo

provo_20161022_212655

Concurridas calles de Provo

provo_20161022_212753

Aviso

provo_20161022_213042

Típica venta de carros

provo_20161022_213642

Iglesia mormona

provo_20161022_213822

Nephi con su trompeta llamando a (ya se me olvidó)

provo_20161022_213902

Concurrido centro de Provo y las montañas de atrás

provo_20161022_213928

La casa del señor

provo_20161022_213956

Creo que es la alcaldía o donde trabaja un senador

provo_20161022_214236

Centro de Provo

provo_20161022_214550

Una iglesia

provo_20161022_214748

Otra

provo_20161022_215123

Calles de Provo

provo_20161022_220051

John Birgham, el discipulo de Joseph Smith que terminó la travesía de los mormones en utah

provo_20161022_220454

Llegando a la universidad

provo_20161022_225739

Edificio de startup y centro donde yo estaba considerando estudia

provo_20161023_000025

Paisaje desde el tren de devuelta