De como aprender a programar

Muchas veces, tanto entre mis amigos, familiares, conocidos y no tan conocidos ha surgido la pregunta (debido a mi gran fanatismo por la computación y la programación) de como es que aprendí a programar, nunca, nunca he sabido bien la respuesta así que lo único que me limito a hacer es decirles: Practicando

Pero, ¿oye, me recomiendas un libro?
El que quieras, en lo personal he tratado con libros de editorial AlfaOmega, los de Francisco Javier Ceballos me parecen muy buenos, también he leído los de Deitel y deitel, que a gusto personal no son mis favoritos, y otros de editoriales y autores que ni recuerdo. Tal vez no me enseñaron mucho. La cosa aquí es no casarse con un solo libro ni con un solo autor, a final de cuentas no en un solo libro están las respuestas a todo.

Dices que practique, pero no se por donde empezar
Otra fácil, comienza por donde gustes, fíjate o piensa en algo que quieras hacer, algún juego sencillo, alguna pequeña aplicación, quizá un simulador no muy complejo, inclusive puedes inspirarte en cosas que ves a diario... recuerdo cuando quise hacer mi primer juego, iba a lo grande y he de confesar que a estas alturas no he podido terminar, pero la clave también está ahí porque si bien es necesario y recomendable que tengas dedicación y le pongas empeño a algo, probablemente habrá cosas por las que tengas que detenerte y no puedas avanzar de momento, pero no te preocupes no es un fracaso, si aprendes algo, no es un fracaso.

¿Tu de donde sacas tus ejercicios o las ideas para programas?
De nuevo, y esperando no sonar cursi, la única fuente de la que brotan las ideas es la imaginación solo de ahí, como la vez que se me ocurrió generar imagenes para guardar los tweets, o la vez que hice un generador de case's, o la vez que se me ocurrió que sería divertido darle retweet a todos los tweets visibles en la pantalla, lo cierto es que aquí es donde creo que si hay que estar medio loco para comenzar a practicar. Como con todo y creo que ya me cansé de repetirlo, lo importante es la práctica, puede ser cualquier programa puede ser cualquier idea que tengas, siempre se podrá buscar la manera de implementarla con líneas de código.

¿En qué lenguaje es bueno iniciar? 
Siempre he dicho que Java es un buen punto de inicio, sin embargo es muy importante conocer conceptos de otros paradigmas de programación, en mi caso, la iniciación fue con el poderoso C, de ahí vino C++, Visual Basic y C#, mis comienzos.

Siempre he dicho que saber programar es como saber hablar, si sabes comunicarte y expresar tus ideas, muchas veces lo de menos es el lenguaje

¡Saludos!
@fferegrino :)

Investigación sobre la inflación

Esta es la investigación que realizamos entre un compañero (Rodrigo) y yo acerca de la inflación, todo esto para la clase de Fundamentos Económicos en la ESCOM.

Tomamos como base la siguiente tabla de contenidos:
  • Conceptos básicos. 
  • Teorías sobre la inflación. 
  • Índices de precios. 
  • Medición de la inflación.
  • Efectos de la inflación. 
  • ¿Cómo combatir la inflación? 
  • La hiperinflación a fondo.
  • Casos históricos. 
  • La inflación en México. 

Dejo aquí el material que preparamos para el grupo:

Extenso(Documento escrito)
Presentación
Resumen

¡Saludos!
@fferegrino :)

De UPIITA a ESCOM

En respuesta a varios cuestionamientos que se me han hecho por la desicion que tomé hace ya casi un año de cambiarme de carrera, he decidido hacer este post, para compartir mis motivos y las impresiones que me ha dejado mi nueva escuela

Yo entré a la UPIITA pensando en que la carrera tendría que ver más con programación y desarrollo de sistemas que con física y telecomunicaciones. La verdad es que no puedo culpar a nadie más que a mi mismo por no haberme informado mucho mejor antes. Tan solo entrando, me encontré con lo dura y difícil que podría ser esa carrera, álgebra lineal fue mi coco, con problemas la saqué y hoy puedo decir al menos que si aprendí de ahí, ninguna otra materia me causo tanto dolor de cabeza como esa; sin embargo nunca, en los primeros semestres de la carrera se me ocurrió pedir cambio de carrera dado que aún no comprendía muy bien de lo que se trataba la ingeniería en telemática.

De ahí llegaron muchas cosas: electromagnetismo, ecuaciones diferenciales, cálculo multivariable, comunicaciones, cálculo de variable compleja... asignaturas que si bien no se me dificultaban llevaba muy bajas en promedio y es que junto con esas llevaba también asignaturas como: Sistemas operativos, programación, estructura de datos, programación avanzada, diseño digital... en fin, materias a las que les dedicaba más tiempo del que debería de haberlo hecho, mis calificaciones se resumían en dos grandes grupos: Matemáticas y física <= 7, Sistemas y programación > 8, todo esto, aclaro por no saber equilibrar y dedicarle más tiempo a lo que en verdad me apasiona.

Considero que la UPIITA no es una escuela difícil, la cuestión es saber darle el equilibrio a las cosas y a las materias, no solo enfocarte en una disciplina, ¡recuerda que la primera 'I' es de interdisciplinaria! cuestión que lamentablemente entendí un poco "tarde", por ahí de mi 4to semestre (aunque en realidad con el nuevo plan iba por ahí de 3 y medio) la iluminación llegó a mi cerebro, comenzaba a apuntar hacia ESCOM, posibilidad que no veía tan descabellada ya, dado que dentro de poco, comenzarían a llegar las materias de señales y comunicaciones, junto con más materias de programación y sistemas y yo comenzaba a temer que me sucediera lo mismo que en los primeros semestres, eso de dejar de lado las demás materias para centrarme en unas cuantas. El cambio parecía inminente, pero he de aceptarlo, ya había más en juego, ya tenía más amigos y me llevaba muy bien con ellos, ya conocía a muchos maestros y también, con algunos, me llevaba muy bien( :') ) pero al final creo que tomé la mejor decisión, ahora me encuentro muy a gusto con mi nueva escuela.

ESCOM no es muy distinta a la UPIITA, físicamente son casi idénticas (me quedo con ESCOM por sus pasillos que conectan a los 3 edificios), eso si, las canchas y las instalaciones deportivas de la UPIITA son mejores y por mucho que las de la ESCOM, pero pues también queda cerca Zacatenco y todas sus instalaciones. El nivel académico es muy similar, hay profesores(maestros y doctores) similares (igual de locos y dejatareasdificilesparaelotrodía) que en la UPIITA, también estan en el "nuevo plan", aunque eso si, si vas en UPIITA has de saber que para ordenar tu horario necesitas encomendarte a Gauss y a Euclides, porque la disponibilidad de horarios sinceramente está del carajo, y acá, en ESCOM, no sucedió eso, tuve que rogar por sobrecupos, pero los horarios están excelentes, con facilidad puedes llevar 6 materias y salir a la 1:30, o 7 y salir unos días a las 3... e incluye descanso de 10 a 10:30.

No estoy tratando de vender una escuela mejor que la otra, ambas son excelentes, buenas instalaciones, buenos maestros y en la comunidad académica pues hay de todo.
Si estas en mi situación, piénsalo bien, ¡pero no te tardes tanto! espero este post haya ayudado o por lo menos entretenido, cualquier comentario, duda o aclaración abajito está la sección para expresarlo, espero también no te hayas hartado de tanto UPIITA y ESCOM y bueno... chau.

¡Saludos!
@fferegrino :)

Chuirer

Pues así es como he decidido nombrar (para mi y mis conocidos, sin permiso del resto de mi equipo) a la aplicación en la que estaré trabajando durante lo que resta del semestre.

Chuirer

Resulta que para la clase de Tecnologías para la Web, se nos dió a elegir entre diversos proyectos a implementar para obtener calificación del semestre. Entre las propuestas que nos presentó el maestro estaban unas muy interesantes como crear un editor de textos en la nube, crear un foro de discusión orientado a la educación, desarrollar un sistema de almacenamiento de marcadores, crear una red social tipo Facebook y otra tipo Twitter. A esta última es a la que decidí dedicarme junto con el resto de mi equipo, somos 4 integrantes ;).

Todo iría "normal" hasta el momento en el que se nos informó que no debíamos usar ningún sistema gestor de bases de datos, como MySQL, SQL Server o PostgreSQL. Todo el almacenaje persistente debería de ser en archvos xml.

:S Ahora tengo a en que se irán mis madrugadas, se ve que estará un poco pesado.

De mientras y para no perderse en el tema, econtré dos puntos de partida:

¡Saludos!
@fferegrino :)

Generador de slideshow básico con XML y Flash

De nuevo, y para no variar tarea de Tecnologías para la Web, esta vez correspondió hacer un servlet que se valiera de una película hecha en flash para presentar imágenes que el usuario elige.
El proceso es el siguiente:

  1. Mediante la interfaz se le solicita al usuario el número de imágenes que desea en su presentación
  2. Se crean los campos correspondientes al número de imágenes, para que el usuario suba sus archivos
  3. Ya dentro del servlet se leen las descripciones y se guardan en una lista
  4. Se obtiene el ID de la sesión actual para crear una carpeta única en el servidor que alojará los archivos necesarios para la presentación
  5. Posteriormente se suben las imágenes al directorio creado, al tiempo que se crea una etiqueta de XML por cada imagen, al cual se le añaden los atributos de descripción que guardamos en la lista en el paso anterior y la url en la que el servlet las guardó
  6. Una vez que las imágenes han sido cargadas, se procede a guardar el documento XML dentro del directorio creado para el cliente y a copiar el archivo SWF dentro de la misma carpeta
  7. Una vez que llegamos a este paso, ya está listo para ser devuelto al cliente para lo cual se comprime la carpeta completa
  8. Y se reenvía al cliente una vez comprimida
  9. El cliente disfruta de su presentación para la cual solo tuvo que subir imágenes :D

En resumen, lo que se hace es implementar la subida de archivos al servidor para lo cual se usan las librerías de Apache Commons(IO y FileUpload), se crea un documento XML para lo cual se usa la librería JDOM, de la cual ya tengo tiempo escribiendo cosas y utilizo una clase llamada SimpleZip para comprimir el archivo, la cual viene incluida.

Más detalles y código en el resto de la entrada

Valida tus archivos XML 'online'.

Hay dos tipos de documentos XML:
Bien formados
Es un tipo de documento que cumple ciertas normas, tales como incluir información sobre la versión de XML que usa o el juego de caracteres que contiene. También debe de tener un único elemento raíz además de llevar una sintaxis correcta para documentos XML.

Válido
Este tipo, además de estar bien formado, cumple con normas que se especifican dentro de el DTD(Document Type Definition). Para que sea válido debe cumplir con todas esas normas.

Ahora, este servlet que preparé para la clase de Tecnologías para la Web, toma cualquier archivo que elijas y lo sube al servidor para validarlo. Utiliza las librerías de JDOM de las cuales ya les había hablado antes la validación es simple con esta herramienta y el manejo de excepciones, ya que al momento de cargarlo a memoria se le puede especificar que revise o no la validez del documento; La buena forma la revisa al estar leyendo el archivo. En el momento en el que no se cumpla alguno de los parámetros una excepción es lanzada.

Digo que es online ya que está pensado para que trabaje montado en un servidor, sin embargo es posible convertirlo a una aplicación de escritorio.

Las pocas, y de verdad pocas, líneas que tuve que escribir para la validación fueron estas(en las que se pide se construya el archivo y se valide):

JDOM, Fácil manipulacion de XML en Java.

Esta es una biblioteca para Java que facilita el uso y manipulación de documentos XML en memoria y de manera persistente. Similar al DOM del W3C, con la potente diferencia de que este se refuerza con las características de Java.

Me lo presentó el profesor de Tecnologías para la Web.


Del siguiente código XML:
<tienda nombre="tienda para geeks" ubicacion="Tokio, Japon">
  <computadora nombre="iBook" precio="$1200" />
  <historieta nombre="Dragon Ball Volumen 1" precio="$9" />
  <nivel_geek_de_la_tienda precio="sin precio" /> 
</tienda>
Mediante Java y JDOM se puede obtener la información de la siguiente manera:
SAXBuilder builder = new SAXBuilder ();
Document doc = builder.build (new FileInputStream ("foo.xml"));
Element root = doc.getRootElement ();
root.getName ();                            // devuelve "tienda"
root.getAttributeValue ("nombre");          // devuelve "tienda para geeks"
root.getAttributeValue ("ubicacion");       // devuelve "Tokio, Japon"
root.getChildren ();                        // devuelve una java.util.List de objetos que tiene tres Element
Ejemplo extraído de Wikipedia 

JDOM

¡Saludos! @fferegrino :)