lunes, 26 de octubre de 2015

La Vida Es Una Maratón, No Una Carrera de 100 Metros

'Lo difícil no es llegar, es mantenerse' es un dicho muy conocido del fútbol, y se refiere a lo complicado que es poder mantenerse al nivel más alto del deporte. A las personas nos cuesta muchísimo armar planes a largo plazo porque nos enfocamos demasiado en obtener resultados a corto plazo. Miles de metas tienen una fórmula simple para cumplirlas, como por ejemplo adelgazar. Simplemente hay que consumir menos calorías de las que consumimos, o en otras palabras: hay que comer menos y hacer más ejercicio. Uno pensaría que con lo simple que es este método, sería fácil de logarlo, pero todos sabemos que no es así. Nos gusta ver resultados, pero no nos gusta el proceso para obtener los mismos.

Personalmente, muchas veces me pasa que empiezo una actividad y si no tengo un plan, la dejo a los diez días. Me pasó recientemente con una clase online de algoritmos. Me re interesa el tema pero no quiero estar dedicándole el tiempo porque se que no me va a dar resultados de inmediato. Dejar una actividad o un proyecto no está mal en si, el problema resulta cuando uno se toma la vida de esta manera. 

La vida no es una carrera de 100 metros llanos, son 42 kilómetros con vallas. Casi todos podemos correr 100 metros sin problema, pero conozco pocas personas que pueden terminar una maratón. Para correr semejante distancia, se necesita mucha preparación, tanto física como mental. Lo mismo, por lo menos para mí, aplica a la vida. Si bien eso de vivir cada momento como si fuera el último, y lo de enfocarse en el presente tiene sus puntos válidos, no creo que sea un gran consejo cuando pensamos a mayor escala. 

Preparación

Como los corredores se preparan para una maratón, nosotros tenemos que prepararnos para algunas cosas en la vida. Tomando la universidad como ejemplo, si nos dijeran que tenemos que ser ingenieros en cuatro años y no nos dieran ninguna otra instrucción, a la mayoría se nos complicaría lograrlo, pero dividiendo esta meta en cuatrimestres, y esos cuatrimestres en un par de materias, se hace mucho más factible terminar una carrera. 

A mí me gusta dividir metas en objetivos más chicos, me ayuda mucho a organizarme, y también puedo ver progreso más rápido. Volviendo al ejemplo de la universidad, rendir bien una materia me acerca a mi objetivo de terminar la carrera. Saber que uno está progresando es la clave para mantenerse motivado. Si dependemos solamente de fuerza de voluntad, hasta la persona más voluntariosa termina sufriendo muchas veces. 

Tener un plan para mí es importantísimo, y es el método que aplico a todo lo que hago. A veces escribo los pasos en un papel, muchas veces tengo una idea general en la cabeza, pero la constante es que por lo menos soy consciente de que tengo que romper un gran objetivo en pedacitos. Pedacitos que no siempre se dan como me los había imaginado, pero es normal, no se puede pretender ir cumpliendo todo al pie de la letra, porque cosas inesperadas pasan todo el tiempo. 

El objetivo más grande que tengo empezó hace casi tres años, y yo pensé que lo alcanzaría en dos, pero así es la vida de inesperada, y hay que saber adaptarse. La constante, fue que siempre fui progresando, aunque fuera algo mínimo, y eso me mantenía motivado, me ayudaba a seguir dando el siguiente paso. 

Conclusiones

Todavía no cumplí mi gran objetivo, por ende no quiero decir nada para no quemarlo, pero creo estar muy cerca, y los que me conocen saben qué es. Haberme hecho un plan me ayudó a aguantar hasta en los peores momentos, y ver progreso continuo me ayudó a mantenerme motivado todo este tiempo.

No veo la hora de cumplirlo.

miércoles, 11 de marzo de 2015

rubyquest - Day Fourteen

We have come to the end of the second week coding RubyQuest and it's been a roller coaster ride.
The first four days were lost as previously noted, other than some experience and some graphics that we carried over. 

We finally implemented the AJAX post requests to check the player's answers against our database. It took a bit of time to get it just right, but it wasn't too complicated overall. The problem we were having was that we had the function inside our update, which runs at 60 frames per second. The problem this caused was that we would end up sending over 200 post requests every minute. This would have been a problem, having many users playing the game at the same time.

Fortunately, we realized we could have the function defined in our create, and just send it once from update, and we got to only send one post request now.

We also added collisions to the world map. It took a lot of time to do the graphics, doing an RPG was always going to be a very ambitious project, but we really wanted to do more and more every day, so we really had to get to the point where we said 'okay, this is more than enough for two weeks' and put an end to our world expansion. We have three layers of tiles, and we collide against the middle one. It is not quite pixel perfect yet because of some bounding box issues, but it gets the job done.

Pitching!

We have to now record a video of our play through to have for our pitch. We want to have it playing with a nice trailer for our audience. 

We are freezing the code Sunday night and we are right on schedule.

martes, 3 de marzo de 2015

rubyquest - Day Eleven

Last wednesday we had asked if we could demo our game live at Waffle Wednesdays, a weekly morning event where people from the Miami tech scene get together to eat waffles and discuss all matters tech. Sometimes, people do presentations so Team RubyQuest thought this would be a great opportunity to get some early feedback on how we were doing.

The only problem was that while we thought we would be just showing our game and getting feedback on that aspect, the expectations were that we would be actually pitching our entire application as if it were the official Pitch Day that's happening on March 12th, 2015. 

We only found out about those expectations today, Tuesday, at 10am, so that gave us less than 24 hours to prepare a slideshow, rehearse it and have a presentation ready. That would have been enough time except for the fact that we also have class and we also have to keep working on our project, so that was much less time.  

Where to Begin?

We asked a TA to help us and we had no idea were to begin. Our first ideas were really bad and we got negative feedback, but that helped us notice that we were approaching this pitch from the wrong angle. We started brainstorming and liked some ideas, and started putting things together at around 4:00pm. 

A key question asked by almost everybody was: 'why are you making an HTML5 game while everyone else is making a Rails application?' which seemed obvious to us, but obviously was not to everybody else. We realized that we needed to really show why we are making this game and what we hope to accomplish, which is to give back to the tech community that we are now a part of and that's been great to us, by preparing the next generation of coders in a very fun and immersive way. 

Here's were the concept of gamification comes in. We want to complement the user experience by offering a very engaging environment. Getting deep into a story to us is one way to achieve this and that's why we are making RubyQuest.

In Other News

We are almost done with incorporating the Puzzle functionality which is a big part of our game. After speaking to the 'guru' of our game, we get taught a lesson on Ruby, and an input box appears on our screen. The user needs to input a response to the challenge posted, and that input gets sent to our server, which checks our database, and comes back with either a successful or erroneous response.

We have the AJAX post request working on our server side, we just need to finish implementing it on our game.

After eleven days, we have really learned a lot, and every day we keep learning more and more, we feel very confident that we will be ready to take on the next challenge as soon as Wyncode ends, and the junior developer quest begins.

lunes, 2 de marzo de 2015

rubyquest - Day Eight

After a full week and a day since having started our project, we are finally at the point where we can focus on adding content without worrying about the basics of the game such as walking, animation and dialogue.

We decided to manipulate DOM elements in game and we are using jQuery for that. For example, our menu covers the entire screen and it pops into view if we press the 'M' key on our keyboard. Pressing M toggles it on and off for now, but we'll probably just show and have to click exit to toggle it off or something, we are still deciding. 

Dialogue works when our character is within a certain distance of a non-playable character and we press the spacebar. We are planning on adding a mini-game as well, and some easter eggs that will add flavor to the game. Even though for our pitch day we can only demo a couple of minutes of the game, we want to be as thorough as we can.

AJAX

A feature we still have to implement to our game is the puzzle challenge. Basically, we'll pop up an input box on our game and we have to type the challenge as is being described on our dialogue box. The challenge for us is going to be sending an AJAX post request to our server, to check against our database, and then get that get request back to keep going with the game. 

We are not sure how to do this yet, but I'm confident we can get it working by the end of the day.

Pair Programming

On Friday night, we implemented pair-programming for the first time, with one person driving and somebody else watching and helping out. It was a great learning experience as I had not done it personally and learned a lot from it. There are some pictures of that day that we will be posting later.

jueves, 26 de febrero de 2015

rubyquest - Day Four

So after four days of using LimeJS and the Google Closure Library to code our game, we realized that moving forward, it would bring us more problems than solutions and made a decision that should almost never be done: we switched frameworks. In our case, I believe that it actually made a lot of sense. LimeJS is very good for what we were trying to accomplish, but unfortunately, it's a framework that's not actively developed. We chose Phaser because it's the most popular JavaScript framework for games and it has a very nice and active community. 

So, after four days of coding, we decided to scratch everything and start from zero. Our biggest problem with LimeJS was doing animation and movement, and we were able to solve that with Phaser in about 4 hours. 

But No Framework Is Perfect

The problems with frameworks is that not one will cover everything that you need. While movement and animation is a lot easier with Phaser, transitioning from scene to scene is harder. Also, doing dialogue and inserting labels onto the screen can be hard. The way we are approaching that is by manipulating the DOM rather than the Canvas element of HTML only. 

We have jQuery code that toggles on/off our dialogue boxes, and also our main menu. This way, we call it from our game with the press of a button, and then it'll just show up on top of our game.
This approach might not be the tidiest but it works for what we are trying to do and it's pretty simple to implement. It'll also be good practice for when we have to implement our puzzles which will send an AJAX request to our server from an input box.

Our demo is almost done and we really need it for tomorrow as we need to present it for us to keep the project alive. 

domingo, 22 de febrero de 2015

rubyquest - Day One

After assembling the team on Friday, this past Saturday, February 21st, we finally sat down with team !Fer (pronounced 'not fair') to start coding. For our Pitch Day we are creating an Educational RPG, which may actually be the first of its kind. We decided to go very JavaScript heavy for our final project as it's not our strongest language and we really want to learn it. Also, HTML5 games are the future in gaming as it supports many different platforms. We are aiming for web and mobile support for our game.

The Framework


Our first board on what we are going to need for the game.
We chose LimeJS as the framework we'll use to run our game as it provides us with the best tools for what we are trying to accomplish. It uses the Google Closure Library, which was used to create Gmail for example. It's a very powerful library, but from what we've seen so far it can be quite tricky as it's pretty much a new language itself. 

We decided to take Friday night and Saturday morning as our 'learn the basics' day. That meant that we would watch tutorials, read documentation and look at source code to get a feeling of what we were getting into.  I can say that Mario, Travis and I went through this cycle of 'what am I doing!?!?' to 'I got this!!' and back to 'what am I doing!?!?' many times throughout the day.

The Coding


Since we need an actual website to run our game, we also decided to use Rails to power it up. We are going to need a database to store some information for our game, and we also want to have some features such as a Forum where players can interact, post questions, get help, etc. We also want to implement a Reviews section so we can get feedback on our game. Lastly, the website is going to have a Log In system that we will build from scratch instead of using Devise as it will not only be a great learning experience, but it will also let us customize it as we please.


             Second board on game functionality.


After quite a few hours of coding, we were able to accomplish quite a few things but we are having some problems using the keyboard to run our game. So far we've only been able to use the mouse which is not ideal but at least it works for now. We've reached out to different developers who have used LimeJS in the past to see if they can help us with this issue.



Going Forward



We really would like to solve the issue of using the keyboard for input, we are really going to need it for our puzzles, but so far we've created a mousepad that we can use to move our character around. We are using free art that we found online so far and we have not yet implemented animation to our walking but we will get there eventually I am sure. We'd like to have a five minute playable demo by Friday, so then we have another two weeks to really polish the game.



viernes, 19 de diciembre de 2014

Dios Me Odia (Por lo Menos a Nivel Deportivo)

Estoy convencido de que Dios me odia. No sé si me odia por completo, o solo un poco, pero estoy seguro de que como sabe que soy fanático del deporte, me castiga por ese lado. Si bien lo que estoy diciendo suena blasfemo, tengo suficiente evidencia como para comprobarlo.

Sabían que desde mediados del 2010: los Celtics perdieron la final contra los Lakers cuando Kendrick Perkins se rompió la rodilla en el ante último partido, en el 2011 tuve doble operación de hernias y aductor, la cual me relegó al banco de suplentes de Libertador FC y a estar a la sombra de Darío Gigante, en el 2012 en meses consecutivos los Patriots perdieron la final contra los Giants en el último minuto, LSU perdió la final contra Alabama (archirival) y Boca perdió la final de la Libertadores contra el Corinthians, nuevamente me tuve que operar, pero esta vez el labrum, en el 2013 Boca caería tan bajo que quedó 19no en el campeonato, y en el 2014 la selección llego a la final del Mundial solo para perder contra Alemania (otro archirival!) de la manera mas dolorosa posible?

Todo eso debería ser más que suficiente para demostrar que tengo razón, pero si necesitan más evidencia: desde el 2013 estoy 0-7 en Ping Pong contra Domi Blaquier, me abrí la ceja y me tuvieron que dar puntos, sufrí por una fascitis plantar unos ocho meses, San Lorenzo ganó la Libertadores por primera vez, y a fines de noviembre perdí en arco y flecha, beer pong y flip cup contra Trini Apellaniz. Y por si fuera poco, parece que me rompí el labrum otra vez (espero los resultados del lunes para confirmar). Las únicas alegrías fueron pocas: un torneo de fútbol, salir mejor arquero de otro, y ganar una carrera en Busch Gardens con Fede Ramos (nuestro competidor más cercano de edad tenía 11).

Mi relación con dios no siempre fue así. Yo creo que hasta el 2009/2010 me quería, pero en ese entonces algo cambió. Todavía no me decido si fue cuando choqué a 140km/h en junio del 2009 y perdí el auto, o cuando en mayo del 2010 decidí no hacer un MBA en una Ivy League (Harvard/Stanford) y me salí del camino que tenía planeado para mí. Espero poder reinvindicarme algún día y que todo vuelva a la normalidad, extraño esas Libertadores y esos Super Bowls. 

Si bien un equipo puede perder o no, la manera en la que mis equipos vienen perdiendo desde ese entonces deja muchas dudas. Los Celtics perdieron porque Kendrick Perkins se rompió los cruzados caminando solo. LSU perdió contra Alabama sin meter ni siquiera un punto (21-0) y sin haber pasado de mitad de cancha. Los Patriots perdieron contra los Giants al final del partido por la lesión de Rob Gronwkowski. Le ponía todas las fichas a Boca, pero después de haber dominado el primer partido, nos embocaron al final. La vuelta arrancó de terror, se lesionó el arquero Orión (había atajado varios penales, y había estado varios partidos sin que le hicieran goles) y desde ahí todo se vino abajo. 

Con el 2013 pensé que la mala suerte se iría, pero me desgarré por primera vez justo una semana antes de jugar Copa Latina, volvió Bianchi a Boca e hizo papelones, y en el 2014 nada mejoró. Del mundial no hablo porque todavía no lo superé nunca lo voy a superar. Pensé que la semi-final contra River sería el momento que todo cambiaría, pero no, otra vez esa mala suerte, y esa manera horrible de perder. Al minuto de juego, penal para Boca y obviamente que lo erramos. Dios siempre me genera ilusión solo para después pegarme una piña en el estómago y burlarse.

Así que Dios, ya sabes, soy consciente de que en algún momento nuestra relación se rompió, y acá te estoy demostrando que quiero hacer las paces, así que si pudieras hacer que los resultados del lunes salgan bien te lo re, re, reeee agradecería. Que Boca gane la Libertadores no estaría mal tampoco.


Preguntas, dudas, comentarios:


aca abajo en el blog,
ferchiincarranza@gmail.com, 
@efecarranza