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.