ediThor se muda a GitHub


Tiene rato ya que les había contado de ediThor, el editor de texto concurrente que en equipo programamos unos compañeros y yo para una asignatura en la UPIITA.

Pues resulta que en aquellos tiempos era un novato (más) en esto de compartir código en línea, ahora que ya me "enseñaron" a usar GitHub, he decidido mudar el proyecto a un repositorio en la plataforma. Cabe destacar que no es el ediThor (beta) del que se habla en la entrada anterior porque decidí reescribirlo todo (porque de igual manera el nivel de mi nuestra programación estaba bastante decadente en esos tiempos), eso sí, lo de beta aún no se le quita, "está chavo todavía" diría yo.

Pues así las cosas, si algún javamaniaco quisiera unirse al desarrollo del proyecto ya sabe en donde encontrarme. Con gusto colaboramos.

El repositorio es:



¡Saludos!
@fferegrino :)

La importancia de programar con estilo


Y al decir "programar con estilo" no me refiero a que estén todo el tiempo con los meñiques levantados, o sólo hacerlo las tardes a las 5 p.m.

Programar con estilo es hacer nuestros programas legibles, lo más documentados que podamos y siguiendo las convenciones que algunas comunidades de programadores suelen adoptar para que nuestro código sea "universal".

Si bien dicen que cada programador tiene su forma de hacer lo suyo (en lo cual creo que tienen razón), esto a veces se convierte en un problema cuando de optimizar, corregir o ampliar el código se trata. En el mejor de los casos recordaremos por completo lo que la variable asdflkj significa en nuestro código, pero imagínate que ya no recuerdas y tienes que andarle buscando por todos lados lo que realmente quisiste hacer. O PEOR AÚN: Imagínate que lo que tu desarrollaste hace tiempo ahora es responsabilidad de alguien más, ¡pobre de él!

"Pues mientras funcione", aplica, sí. Hay veces en las que es necesaria hacer una corrección rápida (bomberazo, le dicen), pero al final del día no olvides regresar y hacerlo de la manera correcta. Créeme te facilitarás la vida a ti y probablemente a tus colegas.

Creo que el problema viene desde las escuelas, por lo general al momento de entregar nuestros proyectos, tareas, prácticas, etc. nos conformamos con el "pues, funciona", esto debido a que pocas veces se trabaja varias veces sobre la misma cosa. Son entregas únicas y es por eso que prestamos muy poca atención a la manera en las que las hacemos. El ideal sería que al inicio del curso definiéramos sobre qué vamos a estar trabajando (una especie de proyecto a largo plazo) para forzarnos a darle mantenimiento al código, a mejorarlo  y por tanto hacer las cosas bien.

Ayudará bastante si en un momento dado entramos al mundo laboral en el cual sí se desarrolla constantemente sobre un mismo programa, el cual debería estar bien documentado y entendible para que pueda ser trabajado por varias manos, manos a las cuales les resulte sencillo manipularlo y no se pierda tiempo en preguntarle al de al lado "¿y esto qué hace?" o quedarnos rascando la cabeza un buen rato preguntándonos "¿para qué usé esto?".

Para nuestra fortuna existen algunas guías de estilo que nos muestran algunas de las convenciones acordadas, las cuales podemos no aceptar por completo desde el inicio sí es importante tenerlas en cuenta. Claro que uno puede inventar sus propias normas, lo importante es respetarlas siempre.

Amigo programador, te dejo unas guías de estilo que me encontré por ahí (cofcofintercofcofnetcof), recuerda que seguro hay alguna para tu lenguaje favorito.


Guía 1 C++Guía 2 C++Guía 3 C++Guía 1 C#Guía 2 C#Guía 1 JavaGuía 2 JavaGuía 1 PHPGuía 2 PHPGuía Phyton.

¡Saludos!

@fferegrino :)

De C a HTML con Flex (como Norman manda)

Ya hace unos días les había hablado de flex y la práctica que teníamos que hacer. Bien, resulta que apenas se entrega. Y no es como inicialmente la había hecho:

Lo que había hecho fue de manera individual y esta que subo hoy es en equipo (Mi equipo: Byron, Gaby y Robert).
Las funciones que escriben el archivo html están por separado. Para mejor explicación visita el post anterior.

Descargas
PracticaC2HTML.tar.gz
PracticaC2HTML.zip


¡Saludos!
@fferegrino :)

Práctica 5 de Programación Orientada a Objetos

La práctica que más me ha costado hacer D:, pequeñas confusiones, pero al fin aquí está:
Es sencillo y dejo comentado el código, la aplicación se basa en la arquitectura cliente servidor, hace uso de Sockets, Threads y la interfaz Serializable. El servidor recibe del cliente un objeto (clase Perro) y lo almacena para que cuando otro cliente se conecte, le sean enviados los clientes que están conectados.


Mini proyecto en NetBeans
Solo fuentes

¡Saludos!
@fferegrino :)

De C a HTML con Flex

De nuevo por acá, esta vez gracias a otra de mis asignaturas en la ESCOM. Toca el turno a Teoría computacional, fue el turno de usar Flex, herramienta que en lo particular no conocía. Lo que teníamos que hacer era usar Flex para escribir un programa que de un archivo con código en lenguaje C nos lo "transfiriera" a un archivo con formato html estilizado con CSS.

La idea era encontrar palabras reservadas, tipos de datos, identificadores, directivas, operadores, y cualquier otro tipo de cadenas permitidas con el analizador léxico y asignarles cierto estilo en un documento html. 

Trato de explicar gráficamente: la imagen de la izquierda es código en C, después de introducir este archivo en el programita nos debe entregar algo como la captura derecha, que es un na representación estilizada con CSS del archivo que introdujimos.



¿Qué es Flex?
Resulta que Flex, en términos prácticos (Wikipediazo), es un programa para generar analizadores léxicos. Uno mete la especificación de un analizador léxico y Flex regresa como salida la implementación en C de lo que nosotros introdujimos. En realidad es muy sencillo utilizarlo, solo hay que tener en cuenta la estructura del archivo que vamos a usar como entrada al programa, esta es sencilla y muy fácil de recordar, un archivo "lex", se divida en tres secciones (separadas por líneas que solo contienen '%%' como texto en ellas). Las líneas son:
1.- Sección de declaraciones
Lugar para incluir cabeceras, macros, variables globales... también es posible definir patrones a usar en la sección de reglas
%%
2.- Sección de reglas
Aquí es donde se asocian los patrones(expresiones regulares) a buscar con sentencias(código) de C. Cada vez que el analizador encuentra un a cadena que coincide con el patrón, se ejecuta el código en C
%%
3.- Sección de código en C
Contiene sentencias en C y funciones que serán copiadas íntegramente en el archivo que Felx genere, comúnmente se colocan aquí las funciones que se llamarán en la sección de reglas.

Descargas
Al compilar el programa en Flex nos devuelve un código compilable pero ahora en lenguaje C, el cual ya debería de hacer lo que nosotros le indicamos. En el descargable básico viene el archivo cToHtml.l que es el archivo en lenguaje Lex, el archivo de estilos estilos.css que es la hoja de estilos que se usa para formatear el documento de salida y el archivo Makefile que nos facilita la compilación y el archivo Leeme.txt PARA QUE LO LEAN, en donde viene como se usa el programa final. En el descargable completo, viene, además de lo indicado arriba, el archivo lex.yy.c que es el código que se genera al compilar en Flex y el archivo salida.html que es un ejemplo de lo que entrega nuestro programa si hacemos pasar por el a lex.yy.c.

Recuerda que para cualquier duda, comentario o invitación a una cerveza, está la sección de comentarios, mi cuenta en Twitter o mi correo. 

¡Saludos! @fferegrino :)

Sistema solar usando Java 3D API



Para una de las prácticas de la clase de programación orientada a objetos, (sí, la estoy cursando), tuvimos que hacer un un ejemplo de sistema solar. Esta es mi implementación, está un tanto rebuscada pero traté de hacerla lo más entendible, porque han de saber (y no le digan a nadie) que no muchos le entienden al maestro. 

Hay varias clases, una que representa a un planeta, otra que es la rotación del planeta, la distancia al centro, la traslación al rededor de este centro. De este ejemplo se pueden derivar mejoras y ampliaciones.

El descargable es una carpeta que contiene un proyecto en NetBeans, cabe aclarar que dado que usa las librerías de Java3D, hay que agregarlas manualmente. Para que el código compile.

SistemaSolar.rar


¡Saludos!
@fferegrino :)

Amateur, amateur, a-mateur de la fotografía


Me acabo de comprar una cámara fotográfica (automática dice @feregrinch), y me divierto con ella, estas son las mejores fotos, las que más me gustan.

 Es un buen hobbie y creo que de verdad me gusta tomar fotos.




¡Saludos!

@fferegrino :)

Una filosofía de vida


 ( ._.) Muy pocas veces la aplico (SIEMPRE).


¡Saludos!

@fferegrino :)

Librero



Librero, un proyecto en el que estoy trabajando del cual me gustaría tener noticias pronto. Lástima que este semestre en ESCOM no haya tomado muchas materias en las cuales desarrollarlo.

Me gustaría llevármelo hasta TT (algo como tesis).



¡Saludos!
@fferegrino :)

Outlook.com o cómo Microsoft no se rinde

Pues bien, la vaticinada muerte de Hotmail como servicio de correo electrónico llegó y llegó por parte de Microsoft, empresa que adquirió el servicio en 1997 (un año después de su creación), ya mucho se había hablado acerca de lo poco que innovaba el servicio y lo anticuado que resultaba usarlo.

Es por eso que Microsoft ha apostado por el "borrón y cuenta nueva", después de invertir en lavarle la cara al anticuado Hotmail sin éxito mientras el servicio por excelencia de Google (Gmail) aprovechaba el terreno y acaparaba los usuarios con sus innovaciones, facilidad de uso y, ¿por qué no? su apariencia. Y es en esto último en donde más se nota el cambio, la interfaz de Outlook es bella, simple y llamativa a la vez.

Antes que nada, yo nunca dejé de usar Hotmail, desde mi primer correo electrónico hace 7-8 años, uno de esos ridículos (goku13213supersaya_fut_barcelona@hotmail.com) me parecía buen servicio a secas. Ahora con este lavado de cara seguiré usándolo con más motivación, espero pronto pueda personalizar el color azul ese que trae por default.

Bien, para finalizar, como buen fiki ya tengo mis cuentas, ahora me pueden encontrar también en:

antonio.feregrino@outlook.com

Como postdata, los empleados de Microsoft también se ven bien. LOL.

¡Saludos! @fferegrino :)

No todo en internet es verdadero

Ayer me enfrasqué en una "discusión" con varios usuarios que me tacharon de ser un EPNbiber cuando los critiqué por estar usando una imagen editada para difamar a Joequín Lóepz-Doriga, todo esto con el fin de apoyar la iniciativa #UnfollowMasivoAElTeacher que consistía en dejar de seguir la cuenta de @lopezdoriga1.

Las quejas alrededor de este comunicador giran en torno a la mal información que brinda en su noticiero, pero ¿caer nosotros mismos en eso? ¿se justifica la mentira para linchar tuiteramente a alguien? Si nos quejamos de este personaje por no dar noticias veraces o dar noticias sesgadas, nosotros tampoco debemos caer en lo mismo, hay que ser críticos hay que saber filtrar lo que es verdadero de lo que no, no nada más ver algo que alguien pone en internet y empezar a cacarearlo como si de una verdad absoluta se tratase.

Admito que yo también he caído en ese juego de dar por verdadero todo lo que veo en internet, pero echando a perder se aprende. La cosa es darse cuenta de los errores y tratar de no volver a cometerlos, como todo en la vida.

Explico la falsedad de la imagen, la primera es la captura falsa (izquierda) y la segunda es una verdadera (derecha).



Es un juego de encontrar las diferencias, que por cierto son muy pocas:

  1. El señor @lopezdoriga1 tuitea vía BlackBerry NO vía iPhone, con esto me refiero al medio que él usó para mandar el tuit, no al que usamos para verlo nosotros,
  2. el error ortográfico "vallanse", dudo muchísimo que el incurra en fallas como esa,
  3. ¿por qué el tuit en la imagen falsa no se puede retuitear?
  4. la supuesta respuesta de @BibiSmalls es esta  https://twitter.com/BibiSmalls/status/220289789092560898, claramente es en respuesta a otro tuit.

A los que me dicen que lo defiendo, les aclaro que yo no me tuve que sumar a la convocatoria porque desde hace mucho que no lo sigo, critico que en su afán de sumar personas al unfollow masivo lo hagan con falsedades, con mentiras que lo único que hacen es aumentar el odio de manera irracional hacia este personaje.

Caso aparte son los rumores que a ultimas fechas se han venido suscitando como las supuestas agresiones a miembros del grupo #YoSoy132 (no estoy diciendo que no hayan ocurrido), con que alguien empiece a tuitear algo se genera el caos colectivo en Twitter debido a las características de la red, lo aconsejable es pedir confirmación antes de comenzar a difundir información, a menos, claro, que se trate de alguien de tu completa confianza. De esto les cuento después.

Agradezco pues, a quien me facilitó la captura de pantalla desde su iPhone, porque como dice @SrRetuiteador yo no tengo.


¡Saludos!
@fferegrino :)

¿Cómo traerlos a internet?

Muchas veces se ha hablado de la ruptura generacional que implica pasar de la televisión al internet, así como de las diferencias entre estos dos medios, ruptura que al tanteo me atrevo a asegurar que no es igual a la sucedida entre la tv y radio, ya que ambos son medios de comunicación unidireccional, es decir, que el mensaje no permite retroalimentación directa, es de una sola vía.

Lo que sucede con los muchos de los mayores  es que están acostumbrados a este tipo de comunicación: lenta, monóloga y sin necesidad de retroalimentarse; es por eso que les resulta aburrido(en algunos casos inútil) el uso de internet ya que de cierta manera se necesita más atención y más dinamismo para usarlo.

La cosa con nuestros padres, tíos, hermanos, vecinos, amigos e inclusive abuelos, es encontrar contenidos para que ellos se interesen, para que se introduzcan de a poco en la red y se unan a esta, la comunidad virtual.

Para lograr esto pueden comenzar por enseñarles a hacer cosas sencillas: búsquedas en Google, Wikipedia, YouTube, cómo navegar en una página web, usar de navegadores más comunes, enviar un correo electrónico, consultar y realizar trámites, hacer compras por internet, etc.

También pueden mostrarles cómo encontrar recetas, tutoriales, series, películas, noticias de medios comunes y alternativos, unirse a una red social, suscribirse a blogs o a podcasts, entre otras cosas.

Pueden, además darles advertencias sobre engaños como los banners ridículos de publicidad (que siguen existiendo gracias a los neófitos que sin la menor idea les dan click), los e-mails cadena, los mensajes en redes sociales y en blogs; aconsejarlos sobre seguridad en sitios de compras, trámites gubernamentales y redes sociales.

Informarles acerca de los horribles (a veces, yo entre ellos) trolls de la red para que no se enganchen ni se sientan ofendidos por alguien que ni conocen.

Como muchos podrán ver son cosas sencillas para nosotros, los viciosos, sin embargo son tareas titánicas para quienes apenas comienzan a hacer sus pininos en la red de redes y es por eso que se requiere de paciencia extrema para lograr que se interesen, si a las primeras de cambio les gritamos y nos desesperamos, sucederá con ellos lo mismo así que no lo hagas.

Si tus papás no han usado internet, no seas desgraciado trata de enseñarles, si tus hijos no te quieren enseñar a usarlo correctamente exígeles que lo hagan, no los mantuviste por amor nada más (LOL).

Nota: Por mi parte comenzaré tratando de dar cursos de Twitter y Facebook a mis más cercanos, luego les cuento como me fue.

¡Saludos!
@fferegrino :)

¡Chuirer está al aire!



 Después de mucho trabajo (por eso tenía tan abandonado el blog) la aplicación web de la que les hablé hace ya unos cuantas entradas al fin está viva y en un grado estable.

Al parecer nos va a dar para un 10 en la asignatura y nos valió (dicen) felicitación hasta del subdirector académico de la ESCOM :P.


A recordar y para hacer un pequeño resumen de lo que es y qué hace:

Chuirer es una red social nueva, usando(copiando) el concepto de Twitter por completo. Tienes la ocpión de registrarte, iniciar sesión, seguir gente, unirte a grupos, publicar mensajes, calificar los mensajes... aún faltan cosas por desarrollar pero ya no cubrían los requerimientos que se nos hicieron para obtener una calificación (muy) buena. Sin embargo no se queda para la historia, al menos yo seguiré desarrollando Chuirer.

Ahora bien, para realizarla utilizamos varias tecnologías:
  • Se utlilizó Java como lenguaje de servidor. Con ello se usaron servlets y para las pantallas se utilizó JSP y HTML
  • También se hace uso de AJAX para las comunicaciones asíncronas y dotar de mayor dinamismo a la aplicación.
  •  Cuando se hace una petición con AJAX, el servidor responde en formato JSON(JavaScript Notation Object), para lo cual se utilizaron las librerías JSONObject y JSONArray
  • Para la implementación de AJAX así como de muchos otras acciones del lado del cliente se utilizó el framework de Js, JQuery.
  • Se utilizó el framework Struts para la implementación del patron MVC.
  • Se utlilizó JDOM, para realizar la persistencia de la información en formato XML(No olvides que para esta versión de Chuirer no se implementó el uso de un SGBD conocido ¡toda la información se guarda en archivos XML brutos!) 
  • Se emplea CSS3 para mejorar el diseño de la aplicación en las pantallas finales, las que ve el usuario.
Lo presentamos en la EXPO ESCOM y pues de ahí surgieron ideas, lo que viene para Chuirer es mover la aplicación para que funcione con una base de datos como MySQL, Implementación de busqueda semántica y ahora que estoy tomando, un curso de programación para dispositivos con Android, realizar una app para Chuirer.

El código es libre, lo puedes encontrar en GitHub: Chuirer on GitHub
Así mismo puedes verlo en funcionamiento: Chuirer en línea

Recuerda que estoy a tu disposición para cualquier duda, aclaración y ayuda que puedas llegar a necesitar. ¡Coménta!


¡Saludos!
@fferegrino :)

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 :)

Tareas Teóricas de Tecnologías para la Web

Esta noche les traigo mis tareas teóricas de la asignatura Tecnologías para la Web, aclaro que no son nada buenas, aún me falta mucho para aprender a redactar bien pero... ¿qué le vamos a hacer?

Prometo de a poco ir mejorando en la redacción.

Incluídas en el súper paquete:

  1. Conceptos básicos de la web
  2. Historia del internet y la www
  3. Estándares de la web
  4. La Web 2.0
  5. Entornos de desarrollo
  6. Historia y diferencias entre navegadores
  7. Historia de XHTML
  8. Diferencias entre HTML y XHTML

Si las quieren en paquete aquí las dejo:

Tareas teóricas

¡Saludos! @fferegrino :)

Asignar trigger a un UpdatePanel en tiempo de ejecución (C#, ASP)

Supongamos que tenemos el siguiente escenario:
<asp:GridView ID="GridView1" runat="server">
 <Columns>
  <asp:TemplateField HeaderText="Botón">
   <ItemTemplate>
    <asp:ImageButton ID="ImageButton2" runat="server" />
   </ItemTemplate>

El botón ImageButton2 es inaccesible directamente dado que está contenido en un GridView, entonces no lo podríamos añadir como trigger para un UpdatePanel en el código como normalmente se haría:

<asp:AsyncPostBackTrigger ControlID="ImageButton2" EventName="Click" />
Entonces, lo que haremos será añadirlo dinámicamente en tiempo de ejecución.

 Nos valemos del evento OnLoad del control. Para que al momento de cargarse, se asigne como trigger al UpdatePanel en cuestión.

De tal manera el código quedaría así:

ASP:
<asp:GridView ID="GridView1" runat="server">
 <Columns>
  <asp:TemplateField HeaderText="Botón">
   <ItemTemplate>
    <asp:ImageButton ID="ImageButton2" runat="server" OnLoad="ImageButton2_Load" />
   </ItemTemplate>
Y C#:
protected void ImageButton2_Load(object sender, EventArgs e)
{
    ImageButton boton = (ImageButton)sender;
    UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger { ControlID = boton.UniqueID, EventName = "Click" });
}

¡Listo! ahora nuestro ImageButton2 ha quedado registrado como trigger asíncrono para actualizar el UpdatePanel1

¡Saludos!
@fferegrino :)

El sexenio de López Portillo



Interesante documental sobre el sexenio de López Portillo "El Perro" (LOL), memorables las frases que lo hicieron más famoso, entre ellas:
"Soy responsable del timón, pero no de la tormenta" De la clase de Fundamentos Económicos.

Por cierto, preparé un intento de reporte que aquí dejo:
El sexenio de López Portillo

 ¡Saludos! @fferegrino :)

Generador de tablas al estilo Dreamweaver con servlet

De las primeras tareas en ESCOM, clase de Tecnologías para la Web. Basándonos en el generador de tablas de la suite Dreamweaver, se nos quedó de tarea hacer un Servlet que imitara el funcionamiento del mismo. Se puede mejorar la implementación pero últimamente carezco de tiempo :(

 Dejo el proyecto completo(hecho en NetBeans).
Tablas App

 ¡Saludos!

@fferegrino :)

Actividad 1 de ingeniería web.

Como parte del inicio de clases y para ir entrando en calor, en la unidad de aprendizaje Ingeniería Web, nos fue encargado implementar un diagrama de clases en Java. No copié el diagrama (espero tenerlo pronto) pero aquí dejo mi propuesta de solución:

Diagrama de clases ( por @theshiest ) : Diagrama de clases Actividad1.Java

¡Saludos! @fferegrino :)