miércoles, 31 de agosto de 2016

Programación para los No-Matemáticos


Estaría mintiendo si dijera que la programación no tiene nada que ver con las matemáticas, es un proceso lógico y la computación en sí está basada en matemáticas, pero la mayoría del tiempo veo matemáticas innecesarias en problemas introductorios de programación.

Tengo la teoría de que hay una élite de gente insegura que se quiere sentir superior manteniendo el status quo de que "programar es difícil" así que pone un montón de problemas difíciles con ejemplos que usan sólo letras para seguir así.

Muchos de los ejercicios iniciales de programación son cosas como:
  • Sacar un promedio
  • Sacar un factorial
  • Convertir grados centígrados a Farenheit
  • series de fibonacci
  • números primos
Y esos fueron sencillos que se me ocurrieron, he visto otros sumamente complicados con números en bases raras y demás.

Una simple búsqueda en Google me dio esto:

La gente no se atora porque no sepa programar, se atora porque no sabe cómo resolver el problema en sí. A los que estudiemos ingeniería puede que se nos haga bien simple distinguir cuales son los números primos, pero hay gente que no, y si bien no van a dedicarse a ser desarrolladores profesionales, no me gusta que se queden con una idea confusa de que la programación es difícil porque las matemáticas eran difíciles.

No puedes programar una solución si no sabes la solución en primer lugar.

Así que empecemos a tratar de explicar programación sin usar problemas matemáticos confusos.*

ALGORITMOS

¿Qué es un algoritmo? Se oye super de nerds porque se confunde con la palabra "logaritmo" pero no es más que una serie de pasos para resolver un problema.
Ejemplos!

Vida real: Algoritmo para quitarte la sed en tu casa
1: Te levantas
2: Vas a la cocina
3: Tomas un vaso de la alacena
4: Lo pones bajo el garrafón
5: Lo llenas de agua
6: Te tomas el agua

Ejercicio común de matemáticas: Obtener el área de un triángulo
1: Obtienes la base del triángulo
2: Obtienes la altura del triángulo
3: Multiplicas base por altura
4: Lo divides entre dos
Aquí es donde mucha gente se atora, quizá todos nos sabemos el área del triángulo, pero ¿qué tal si dijera "convierte de coordenadas polares a coordenadas cartesianas? Tendrías que hacer una investigación extra para acordarte de qué son, y nadie te garantiza que vas a entender.

En un sistema común: Verificar las credenciales de inicio de sesión
1: Obtener usuario
2: Obtener contraseña
3: Buscar en la base de datos el usuario
4: Comparar si la contraseña dada es la misma que la que se tiene guardada
5: Otorgar o no acceso

En computación hay muchos problemas que se dan seguido, cómo por ejemplo hacer una búsqueda, y para ellos ya existen varios algoritmos predefinidos, pero no los veremos aquí.

Programar es darle instrucciones a la computadora, para llegar a una solución tienes que tener claro que instrucciones darás (aunque ya con práctica las vas inventando en el camino).

VARIABLES
La manera más fácil de explicar qué es una variable es como "un contenedor que contiene un valor".
Por ejemplo, la variable nombre puede valer "Thannia", pero también podría valer "Martha", "José" o "Alejandra". El valor puede ser desconocido y puede cambiar, he ahí el nombre de "variable".

Por ejemplo:

var nombre = "Thannia";
var apellido = "Blanchet";
var nombreCompleto = nombre + apellido;

print(nombreCompleto);

Aquí si imprimimos la variable nombreCompleto dirá "Thannia Blanchet", pero si cambiamos el nombre a Abraham y el apellido a Lincoln dirá otra cosa ;)

CONDICIONES 

Claro que no todo es lineal, a veces, dependiendo de lo que suceda, debe ejecutarse una acción o la otra. Por ejemplo, una niña tiene varias mascotas, dependiendo de la mascota a la que alimentará es la comida que va a usar:

var mascota;

if(mascota == "perro") {
    print("croquetas");
} else if (mascota == "gato") {
    print("atún");
} else if (mascota == "perico") {
   print("semillas");
} else if (mascota == "boa") {
   print("ratón");
} else {
    print("no hay comida para esa mascota");
}

Aquí primero compara el valor de "mascota" con algún animal, y dependiendo del que sea te dice la comida que ha de usarse, si no es ninguno de los anteriores, te dice que no tienes comida para esa mascota.

CICLOS
A veces hay cosas que tienen que repetirse mucho, y pues, es un poco impráctico tener que estarlo escribiendo una y otra vez, para eso existen los ciclos. Por ejemplo, un sujeto está a dieta y todos los días de la semana cena avena, puedes hacer esto:

print("cena avena");
print("cena avena");
print("cena avena");
print("cena avena");
print("cena avena");
print("cena avena");
print("cena avena");

O, en vez de escribirlo 7 veces, sólo escribirlo 1 y hacer que se repita 7:

for(int x=0; x < 7; x++) {
    print("cena avena");
}

Todo esto se puede combinar para crear cosas más complicadas ¿Qué tal si el sujeto de la dieta puede cenar tacos una vez al mes?

for(int día=1; día <= 31; día++){ 
    if(día == 31) {
        print("cena tacos");
    } else {
        print("cena avena");
}

Ahí hay un ciclo que se repite 31 veces (una por cada día del mes), y si es el día 31, te dice que cenes tacos, sino, te dice que cenes avena.

Obviamente todo esto es lo más básico de lo básico, pero espero ayude a aclarar de que se trata todo este rollo de "programar", sin que se mezcle la dificultad con la dificultad de los programas en sí.


*Todo el código es pseudocódigo


Llanteras de Hermosillo

Si estás aquí es porque te ponchaste (en Hermosillo), no sabes que hacer, y estás tan desesperado como para ignorar las otras páginas que aparecen y seguir buscando. O quizá nadie te contestó o no sabes si son confiables. No te preocupes, me he ponchado mucho, demasiado, y ya tengo una colección de números de llanteras móviles que compartiré a continuación:

Servicio Llantero Armenta - 6622 81 70 15
Este es el mejor llantero, es muy amable y hará lo que sea necesario por dejar tu llanta en el mejor estado posible.

Sergio el Llantero - 6621 73 94 77
A este señor no se le entiende mucho cuando habla pero hace el trabajo y su ventaja es que responde en la noche cuando ya los demás llanteros dejaron de trabajar.

Llantera Movil Vip Vip 6621 69 79 72
Este señor es amable y no tarda mucho en llegar.

Número de llantera móvil que saqué del costado de un camión de una foto de Google 6621 89 79 19
Esta llantera está a finales del Progreso y Morelos por lo que sólo atienden esa área, pero sí contestan!

Llantera cuyo nombre no conozco - 6623 59 2421
Muy lenta y muchas veces no contestan, pero pues, existe.

Hubo una vez un llantero que se portó muy grosero conmigo y no me quiso atender, dejé su número en mi viejo celular, tenía un nombre común, pero no lo recuerdo, cuando lo haga, lo postearé para que LO EVITEN

Casi todos cobran $200 o $250, tenlos en efectivo.

Si eres como yo de seguro no tienes extra (o tu extra está ponchada como la mía LOL!), entonces pueden pasar 2 cosas: Que tu llanta sólo esté desinflada y sea de fácil reparación, tenía alguna fuga y se puede arreglar ahí mismo, en ese caso sólo tienes que esperar a que el llantero la arregle y la vuelva a poner. Lo otro es que tu llanta esté completamente destrozada, ahí no podrá hacer nada el llantero, la puede quitar de tu carro, dejar el carro detenido con algo, tú tendrás que llevarla (en el carro de alguien más) a que te la cambien en algún lugar de venta de llantas, rezar porque no tarden todo el día en Econollantas porque ahí tienes la garantía, luego regresar a tu carro y llamar al llantero de nuevo para que la ponga (o a algún amigo pro). Suerte!

sábado, 13 de agosto de 2016

El No-Video-Tutorial de Unity

Si eres como yo, odias los video-tutoriales, tienes que poner pausa para seguirlos y regresar el video si te perdiste de algo, a veces sin atinarle hasta donde era, y tienes que pasar un tiempo predefinido viéndolo para completarlo, algo que sería mucho más rápido si sólo leyeras.

Desafortunadamente la comunidad de Unity al parecer los ama, incluso la página oficial tiene puros videos, existen los tutoriales escritos, obviamente, pero *gasp* casi tienes que llegar a la segunda página de Google para encontrar uno.

Así que, para facilitarles la vida a ustedes, he decidido compilar algunos de los conceptos básicos que he encontrado o aprendido escarbando el internet (o los proyectos de mis amigos), no me meteré con código y me enfocaré solamente al 2D.

Esto no es un video.
Esto no es un tutorial.
Es una guía para que se den una idea rápida y fácil de cómo trabajar en Unity.

Lo más básico es: hacer que un mono se mueva.
(btw, esto es en 2D)

1.- Consigue el spritesheet del personaje en cuestión, impórtalo a los assets, también consigue un sprite que sea el piso (e impórtalo).
Basta con arrastrar las imágenes a la sección de assets de Unity para que se importen.

2.- Haz click en el spritesheet del personaje y en el inspector cambia el spritemode a multiple:

3.- Abre el sprite editor y slicea los sprites!

4.- Selecciona todas las partes de la animación y arrástralas a la escena, esto creará la animación automáticamente.

5.- Si das play, deberás de ver al personaje moverse en su lugar sin hacer nada realmente productivo (como tú)

6.- Selecciona al personaje, ve al inspector y ponle un nombre bonito, sigue algo importante.
7.- Ahorita si pones al personaje muy por arriba del piso se queda flotando, hay que hacerlo que interactúe, para eso, ve a dónde dice "Add Component" > Physics 2D > selecciona "Rigid Body". 
8.- Ahora igual, Add Component > Physics 2D > Box Collider 2D. TANTO PARA EL PERSONAJE COMO PARA EL PISO. Puedes editar la caja de colisión después :)
9.- Si das play ahora el personaje debe de caer sobre el piso y quedarse ahí.
10.- Ahora, para poder mover un personaje, necesitamos...
11.- Crea un nuevo script de C#

12.- El script ya trae unas cositas default sin traer mucha basura, ya importa el framework de Unity y crea dos métodos: start y update. En Start va lo que se carga al inicio y en Update lo que se cambia cada frame. También existe FixedUpdate que es por tiempo y no por frame, pero no lo veremos ahora.

13.- Hay que agregar el script al objeto, Add Component > Script > el nombre de tu script.
14.- Vamos a crear una variable speed que sea pública para que puedas manejar la velocidad desde el editor.
También puedes acceder a los diferentes componentes del objeto con el método GetComponent<>();
Settealo a algo como 5. Si tu personaje al final no se mueve, recuerda checar que no sea 0.

15.- Ahora, para que el personaje se mueva cuando presionas las teclas hay que hacer varias cosas:
  • Checar a qué dirección está volteando
  • Checar qué tecla está siendo presionada
  • Sumar la velocidad a la posición del personaje para que se mueva
El script quedaría algo así:


Unity ya tiene botones predefinidos, estos funcionan tanto con teclado como con control. Puedes verlos en Edit > Project Settings > Input. En este caso "Horizontal" se refiere a las flechas horizontales.

Listo! Ya con esto creo que te puedes dar una idea de cómo son las cosas en Unity, el resto es experimentar, ya que no sé qué juego tengas en mente hacer. Ve y pide trabajo en Valve.

Si ocupas un tutorial más completo y sin video, este está cool: http://pixelnest.io/tutorials/2d-game-unity/player-and-enemies/




viernes, 12 de agosto de 2016

Steven Universe

Steven Universe es la mejor caricatura que ha existido.

Oye Arnold es muy buena, El Laboratorio de Dexter es muy buena, La Vida Moderna de Rocko, con su increíble sátira social, es muy buena. Avatar, tanto la leyenda de Aang como la de Korra son buenísimas. Regular Show es muy buena. A lo largo de la historia, han existido muchas caricaturas excelentes.

Todas tienen una o varias de estas características: comedia, una historia interesante, un buen mensaje para los niños, un lore, personajes secundarios bien desarrollados, acción, buenas canciones. Steven Universe las tiene todas, y además ternura y feels.

Desde el primer capítulo puedes sentir el amor y la pérdida de Rose Quartz.

All hail Steven Universe.


domingo, 31 de julio de 2016

):

Siempre he dicho que soy persona de perros, nunca tuve un odio particular por los gatos, ver uno me parecía lindo, pero no como un perro que me volvía loca. En mi casa siempre ha habido perros, cuando iba a casas de amigos con gatos pues los gatos no te pelan como los perros, así que decía que si me quedaba solterona yo sería una señora loca de los perros.

No tenía un perro por mi situación de casa, pero decía que en cuanto tuviera casa propia adoptaría uno.

Pero a veces la vida te da lo que necesitas y no lo que quieres, y ni cuenta te das hasta que sucede.

Hace como un año mi abuelito adoptó una gata, me pareció cool porque así él no estaría solo y me encantan los animalitos, quería más cerca de mí. Pero en cuanto la susodicha alcanzó la madurez sexual regresó un día a casa con premio.

Tuvo dos gatitas, una completamente negra que supongo más tarde se pondría gris como su mamá y una negra con patitas blancas. Todos amaban a la negra con patitas blancas por sus patitas blancas, aparte que estaba más loca (mi mamá tiende a siempre escoger el cachorro más "activo"). Yo quería pelar a la otra por ser el underdog, pero al final me convencieron de quedarme con la de patitas blancas.

Ya había pensado en llevarme yo una, mi roomie una vez intentó adoptar un gatito que se escapó y hay un gato que siempre duerme en la cochera, así que pensé que no había mucho problema. No quise decir nada sin embargo, hasta que mi familia me lo propuso. Y como mamá expectante fui a comprarle cositas para esperar a la bebé.

Tengo una lista larga de nombres para mis posibles perros del futuro, el único problema se que, con la posible excepción de Amaterasu, todos son nombres de macho. La única idea de hembra que tenía era ponerle Sakura. Cuando tuve que pensar cómo ponerle a la gatita no quería "gastar" el nombre de Sakura, pero a falta de que se me ocurriera otra y considerando que mi abuelito la cuidaría un tiempo y debía ser algo fácil de pronunciar, acepté ponerle así. Se me ocurriría algo más en el futuro.

Cuando la subí al camión el chofer me dijo que si no dejaba de llorar la iba a echar al monte porque los animales no lo dejan dormir y me asusté, fue alivio llegar y que siguiera viva, no está chilo viajar en el equipaje de un TAP. Ese mismo día se me perdió durante horas en la casa y yo estaba en pánico de que me habían confiado un animal y lo arruinaría el primer día. Al final salió a comer, pero me tenía miedo.

Al principio huía de mí y yo tampoco la quería mucho, no me hubiera molestado dejársela a la chica que la cuidó un fin de semana que me fui de viaje y que a ella claramente sí le encantan los gatos.

Con el tiempo creció en mí, tuvimos muchas aventuras, llegué a entenderla cuando me hablaba y a aceptarla como mi nuevo animal companion. Ya la veía en mi futura casa odiando a mis futuros perros.

Dije que lograría que un gato me amara y terminé amándola yo a ella.

Pero así como llegó se fue. Fue un accidente, pudo haber pasado en cualquier momento y no había manera de evitarlo. Poéticamente volvió a donde nació.

Extrañaré su pancita suavecita y sus brinquitos, salir del baño y que está en mi cama y que meta la patita por debajo de la puerta.

Cumplió su función en la vida. Quizá después hubiera sido peor, la familia de mi roomie no la quería dentro de la casa y además había estado vomitando toda la semana anterior. Ahora está en el cielo de los gatitos.

En el mes y medio que estuvo conmigo aprendí:

  • Que los gatitos se esconden cuando llegan a un lugar nuevo y no salen hasta que se sienten seguros.
  • Que cuando los gatos se muerden les salen abscesos porque sus dientes son muy filosos y las heridas se infectan.
  • Que si cargas a un gato del cuerito se apaga.
  • Que los gatos odian andar en carro.
  • Que la arena que tiene unos gatos que huelen bien en el empaque y venden en la mega es la mejor.
  • Que no a todos les afecta el catnip, y que les afecta ya que están grandes.
  • A brincar bardas
  • Que el señor de la veterinaria que está cerca es muy gruñon
  • Que la veterinaria de Econopets es bien linda
  • Que la señora de la casa de atrás es muy amable
  • Que los gatos también aman a sus humanos


Descansa en paz Sakurita, vivirás por siempre como el ícono de esta app.



viernes, 15 de julio de 2016

El Futuro Pokemon

Cuando estaba en la prepa mi mejor amiga y yo, como muchos frikis, soñábamos con un verdadero MMORPG de Pokémon. Sería como World of Warcraft, en 3D. Al principio crearías tu entrenador con todas las ropas y looks de dicho universo y elegirías la región en la cual empezar. Los Pokémon se verían a lo lejos como cualquier mob y podrías retar a otros entrenadores.

Lo que nunca imaginamos fue jugar en el mundo real, en esos tiempos ni siquiera conocíamos el término realidad aumentada.

Con la llegada de Pokémon Go, estamos al borde del inicio de un verdadero mundo Pokémon.


Ahorita sólo tenemos lo más sencillo, GPS y atraparlos, y aunque sé que parte del appeal del juego actual es su sencillez (fácil de aprender, se juega en casi cualquier celular) voy a fantasear un momento con cómo podría ser el futuro Pokémon.

En este futuro podríamos tener un dispositivo especializado para Pokémon, quizá algo como los hololens, algún tipo de reloj o un celular exclusivo. Las peleas y el trading serían integradas como en los juegos originales, donde los que suben de nivel son los Pokémon, quizá los gimnasios pudieran tener alguna restricción de nivel para que todo mundo pueda jugar (Por ejemplo, x gimnasio sólo puedes poner Pokémon menores a lvl 25, en este otro a lvl 50, etc; o quizá cada gimnasio tiene una versión easy, medium o advanced? ni idea) y claro, tus Pokémon tendrían 4 ataques y podrías enseñárselos, también cruzarlos y seguir caminando 10km para que nazcan los huevos.

Quizá cada región del mundo podría tener Pokémons de diferentes regiones, y para que todos puedan tener todos podrían rotarse cada determinado tiempo. Mantendríamos las facciones, porque eso está bien cool.

Los niños podrían recibir su Pokégear a los 10 años y ir a una Pokéstop cercana a recibir su starter, eventualmente no habría distinción con la realidad y los Pokémon se volverían parte de todos, la red Pokémon sería más valiosa que Facebook.

martes, 28 de junio de 2016

Pensamientos Misceláneos

Hace algún tiempo estaba platicando con mi novio del Bloodborne y de cómo estaba basado en Lovecraft (es opinión para otro post, pero se me hace que está bien chilo todo lo de la sangre sucia y la gente bestia y luego se diluye con los seres espaciales).

Un día fui a una librería y vi una colección de cuentos de Lovecraft y la compré para saber más al respecto, hasta el momento sólo sabía que Chtulu es un monstruo con cabeza de pulpo.

La empecé a leer y están bien padres, el único aburrido ha sido el de Chtulu, aún no lo termino, voy a la mitad de "The Dunwich Horror" y me faltan otros dos.

Decía por ahí que Lovecraft es el mayor escritor de terror desde Edgar Allan Poe. Aunque ambos sean terror, a lo que he leído son muy diferentes. Lovecraft se va más por lo sobrenatural, seres del espacio, lugares desconocidos. Edgar Allan Poe es más humano (y cae más en el humor negro), hay un cuento, por ejemplo, en el que un manicomio es conquistado por los locos. O en su defecto, el tipo de terror de The Pit and the Pendulum es muy diferente al de The Colour Out of Space, uno es como que más realista, y creo que por eso lo prefiero, aunque ambos me gusten mucho. Curioso que es todo lo contrario a lo que decía de por qué me gustaba más el tipo de humor de How I Met Your Mother que el de Friends (el cockamouse era real). ¿Será por qué la risa y el horror son cosas opuestas? Da más miedo algo realista.

Hace poco jugué un juego de mesa, el Fluxx, que existe de diversas temáticas y varía un poco de acuerdo a la temática. El que jugué fue el de piratas y realmente ese quería comprar, pero no lo encontré en Amazon y variaban mucho de precio (el del espacio estaba en 600 pesos wtf). Al final, los más accesibles eran el de Chtulu y uno de monstruos genérico. Decidí irme full nerd con el de Chtulu ya que el otro estaba muy sencillo.

Ayer me llegó y estaba checando las cartas y no sólo era de Chtulu, sino de cuentos de Lovecraft en general, es entonces cuando vi una carta llamada The Dunwich Horror que traía un monstruo que hasta donde voy no ha salido.

Y pues ya, me spoilié el cuento.