Clases 100% virtuales
Recientemente estoy trabajando en el proyecto Juvenctec, impartiendo clases de Php de manera 100% virtual. Quizas sea mucho trabajo, pero lo acepte ya que PHP es mi lenguaje favorito y de esta manera puedo probar que tanto se puede enseñar por este medio.
Como se ve.. la educacion virtual esta de moda, se ven muchas instituciones ofertando entrenamientos por esta via, pero existen mucha personas que tienen sus dudas, aunque esto de la educacion virtual tiene sus pro y su contra, tambien depende como se ha preparado el material para la clase.
Estoy de acuerdo de que no todo los cursos virtuales se pueden aplicacar con la misma metodologia, por lo cual se deben adoptar las mejores tecnicas para logar buenos objetivos. Que tipo de materiales se pueden usar en aula virtual, a continuacion selecciono de lo que mas he visto en practica:
- PDFs -> un documento en este formato, el cual puede ser desde un libro hasta un material preparado por el docente.
- Presentaciones (PPT, PPS) -> Presentacion en power point con los temas del curso.
- Videos -> Se pueden usar videos para tratar los temas mas complejos.
- Foros -> Para discutir los temas, desarrollados con otros metodos o compartir el conocimiento.
Estas herramientas tienen sus pro y sus contra, pero cada una se adecuan al tipo de entrenamiento, pero si se combinan correctamente el exito es aun mayor. Como soy programador he usado mucho los videos, ya que son una manera facil de mostrar como se hacen las cosas, no imagino mostrando un ejemplo con un power point, digo si lo imagino, pero me pongo en lugar del estudiante y esto no me gustaria.
He desarrollado un programa de 12 clases para juventec, y si quieres ver parte de los videos aqui te los pongo. Hasta ahora he logrado un buen ambiente en el aula…
Clase 1:
Parte 1 Parte 2 Parte 3 Parte 4 Parte 5 Parte 6
Clase 2:
La proxima Semana.
Luego les cuento que tal me va en el desarrollo de la clase.
De regreso…. a terminar los proyectos
Casualmente me he puesto a pensar lo rapido que pasa el tiempo… para mi que fue los otros dias la ultima vez que puse el ultimo articulo aca en el blog. Desde mi ultima escritura aca en el blog han sucedido muchos cambios, la mayoria para bien , que me han dado muchas ideas de cosas que quiero compartir y me han enfocado aun mas en los proyectos que quiero concluir:
PHP: Se ha transformado en mi 4to bate a nivel de lenguajes de programacion, pasando C# a segundo plano y ya sin batear para anotar. En estos Meses he trabajado al 100% en este lenguaje.
HTML: No se si eres programador web, pero de cualquier forma esto es uno de los puntos que mas demotivas cuando haces varias aplicaciones web, si trabajas directamente con el HTML no es tan facil como poner un componente de ASP.net, pero si te da la motivacion de que puedes poner el efecto que desees en tu pagina o aplicacion.
Jquery, ha transformado mi metodologia de trabajo, a un nivel de que soluciones varios problemas con lo que podria llamar masters pages, y algunos efectos especiales.
MySql, aplicando las funcionalidades ya estables… triggers, stored procedures y funciones me ha ahorrado muchas lineas de codigo.
Este nuevo enfoque que tengo a nivel profesional me ha dado nuevos animos para terminar y continuar varios proyectos que habia dejado asi a medio camino, a la vez que me he dado cuenta que uno puede empezar 100 cosas y si no terminas ninguna por mas que trabajes en realidad no haz realizado nada. Por eso lo mejor que uno puede hacer es terminar un proyecto ya iniciado. Por eso he decidido, postear nuevas cosas aca y no dejarlo para despues.
Aplicaciones Web vs Escritorio
En mi carrera como programador, pocas veces he desarrollado una aplicacion de escritorio y segun veo las ventajas que brinda una aplicacion web, es poco probable que inicie un gran proyecto como aplicación de escritorio…
1. Concepto
Las aplicaciones Web utilizan lo que se conoce como clientes livianos (light clients) los cuales no ejecutan demasiadas labores de procesamiento para la ejecución de la aplicación misma. Desde el punto de vista de la arquitectura se distinguen dos lados el uno es el cliente en donde se encuentra el usuario final utilizando la aplicación por intermedio de una navegador (explorer o firefox), es aquí donde el usuario interactúa con la aplicación localizada al otro lado o servidor en donde residen realmente los datos, reglas y lógica de la aplicación.
2. ¿Por que este concepto ha tomado tanta relevancia?
La esencia del concepto es: no dejar que el cliente realice demasiadas tareas, solo lo necesario para que lleve a cabo su trabajo y dejar que en el lado del servidor se realicen las operación importantes: almacenamiento de datos, transacciones, reglas del negocio y la lógica del programa.
Con el auge de las rede locales (empresariales, institucionales o caseras) y la popularidad de la Internet ofreciendo la oportunidad de acceso a través de computadores y otros dispositivos móviles, lo que era algo de uso privilegiado hace algunos años, ahora es común. La Internet ha elevado y extendido aun más el concepto de aplicación Web para servir no sólo a usuarios de una pequeña red sino ubicados en cualquier sitio donde tenga acceso a la Internet.
3. Problemas con las aplicaciones de escritorio.
Con la división del problema en dos partes, se logra centralizar la administración en general a un solo lado: el servidor, resolviendo una gran cantidad de problemas anteriormente encontrados en las aplicaciones de escritorio mono usuario, como son:
- Duplicidad de datos por la falta de unificación de los mismos.
- Diseminación de la información y lógica en muchas partes (cada computador que la use).
- Falta de portabilidad de la aplicación a diferentes sistemas operativos
- Traumas a la hora de realizar actualizaciones o correcciones al programa ya que las instalaciones están diseminadas
- La administración de la seguridad, controlando el acceso a los usuarios a información no relevante o privada es un caos.
- Dificultad para configurar cada una de las instalaciones.(deployments) dependiendo de las necesidades de cada usuario
4. Que pasa con las aplicaciones de consola o modo texto?
Con aplicaciones tipo consola nos referimos a las aplicaciones construidas en plataformas del tipo Cobol, AS400 y RPG, FoxPro entre otras.
El concepto de las aplicaciones de consola es un poco similar al de una aplicación Web con una arquitectura del tipo cliente-servidor en el cual el cliente también se puede considerar liviano. Aunque existen algunas diferencias como son:
- Protocolos de comunicación propio y no estándar como si ocurre en Web con el protocolo HTTP y el concepto de URL.
- Formatos de intercambio propio y no estándar como si ocurre en Web con el formato HTML o XML.
- En el lado del cliente hay restricciones con las vistas ya que es necesario instalar APIs específicas que no son estándar, portables, o extensibles. En la Web sólo se debe instalar un navegador para acceder a la aplicación.y demas.
- La dependencia con el proveedor del software con respecto a la plataforma, arquitectura, hardware, sistema operativo y demás aditamentos que lleva consigo el “paquete” de la “solución” es inmensa en las aplicaciones de consola. En la Web la división por capas de las soluciones hace posible una independía en todo sentido mucho mayor.
5. La Web
La Web se puede considerar como una plataforma o “sistema operativo” en el cual los recursos están distribuidos en la red y están siendo extendidos en todo momento con posibilidades ilimitadas.
La Web se ha hecho popular con aplicaciones tales como clientes de correo, buscadores, portales, foros, chats, IRCs, RSSs, blogs y demás. Además de estas aplicaciones de propósito general existe adicionalmente una gran diversidad de soluciones que se acomodan al ambiente Web como son: Administradores de contenido (CMS), Administrador de proyectos, Suites para trabajo colaborativo, Administración de relaciones con el cliente (CRM), ERP y demás
La Web se reinventa día a día, lo que ayer parecía imposible hoy es una realidad, hace uno año o quizás meses no me cabía en la cabeza que hubiera muchas opción para realizar una hoja de calculo (Excel) en plataforma Web docs.google.com o que tal un juego animado de construcción de mundos (Age of empires) www.travian.net, un sistema de búsqueda mapas y direcciones (Google maps) maps.google.com. Google es uno de tantos que ha ayudado y sirve de infraestructura para llevar a cabo tales ideas a la realidad.
Si bien es cierto que la arquitectura cliente servidor de la web ha ofrecido muchas ventajas también es cierto que carece de la riqueza gráfica de las aplicaciones de escritorio que cuentan con controles inteligentes que dan mayor fluidez al trabajo del usuario, esto ha sido resuelto con varias estrategias o tecnologías tales como AJAX, flash y Web 2 entre otras. Asi que en vez de ir perdiendo fuerza debido a la pobreza en sus interfaces gráficas, la web busca alternativas que le permitan ofrecer todas sus ventajas pero con la posibilidad de ofrecer controles visuales más amigables al trabajo del usuario.
6 Integración
No se puede despreciar el enorme impacto que ha tenido el computador personal o PC en la actualidad, el haber puesto al servicio de un usuario normal el poder de una computadora en vez de una terminal simple ha potenciado una gran diversidad de usos.
Las aplicaciones de escritorio se han usado y se seguirán usando y tienen un campo enorme (sistemas CAD, CAM, suite de oficina, aplicaciones graficas, juegos, utilidades o el mismo sistema operativo), no todo esta en Web, hay cosas que se necesita que se ejecuten estrictamente en su máquina para aprovechar el poder que tiene al alcance. Pero la fusión e integración de servicios de los computadores, las aplicaciones de escritorio y la extensión de las facultades de comunicación con las aplicaciones Web que hace posible la Internet es la plataforma óptima que sirve de infraestructura para todos los usuarios desde el tipo empresarial, institucional o personal.
Referencias
Como usar de un modo práctico estas técnicas para el desarrollo Agil de aplicaciones, ver mas en: Open Systems Development (OSD) – http://www.osdglobal.com
El porque uso Google en el Aula
Porque uso Google en el aula.
En nuestro mundo actual tenemos muchas oportunidades, pero a veces porque simplemente desconocemos algo o simplemente no tenemos idea de lo que es. Dejamos eso disque para un dia que hagamos un curso o alguien nos muestre como es, pero hay otra manera de hacer las cosas, la manera Google. En cierta ocasión cuando estaba por allá estudiando informática en la universidad, fui a una entrevista de trabajo la cual ni idea tenia para que era, y resulto ser que era para trabajar administrado 2 servidores los cuales tenían Linux.
Linux, en aquel entonces era una palabra desconocida para mí, pese a que tenía los conocimientos informáticos generales no sabia nada de este sistema operativo, así que no fui considerado para el trabajo. Pero la historia apenas inicia ahí, lo primero que hice fue llegar a la casa y ponerme a averiguar… seguí, hasta que baje mi primera distro (Debían). Hasta llegar al punto que actualmente tengo conocimientos intermedio en el ambiente Linux, digo intermedio porque me especialice en una distro, Debían, lo que me permite resolver diversos tipos de problemas aquí tengo un nivel avanzado, pero que pasa…Existen diferencias considerables entre distribuciones que hacen que la ubicación de los archivos de configuración varíen de una versión a otra. En que Linux trabajo, prácticamente en todos, pero especialmente Debian y sus derivaciones como Knoppix, Ubuntu, Edulinux, Xandros, Guadalinex, Linex, etc. Ya que los comandos son los mismos, en los demás resuelvo pero con la herramienta Google.
Así mismo como leíste ahí arriba aprendí Linux con Google y me ha permitido trabajar en el área configurando servidores e incluso dar clases de sistemas operativos. Ahora porque no estoy en el área, bueno conocí algo que me llamaba más la atención y es la programación.
Introducción algo larga pero vale la pena ya que es la motivación por la cual quiero que mis estudiantes se acuerden que tienen ese recurso tan rico en contenido y que pueden usarlo en cualquier momento, para lo que necesiten.
Como lo uso en las clases.
Por suerte las aulas actuales todas tienen conexión a Internet y muchas veces se cuentan con recursos para hacer la clase mas dinámica, esto nos permite salir del esquema tradicional, realizar consultas e incluso ir de visita de manera virtual por diferentes puntos de vistas a la vez que vemos diferentes formas de ver las cosas.
Como uso Google, bueno ahí veces por ejemplo cuando les estoy explicando a los estudiantes como usar el HTML que me preguntan por propiedades de diferentes etiquetas que como pueden averiguar, le doy una repuesta clara y definitiva Google, y a la vez que le muestro como se hace. Si pongo un ejemplo de un editor de texto como el notepad ++ siempre pienso en el que no sabe e inmediantemante le muestro como se busca este software, realmente no recuerdo la pagina exacta siempre escribo notepad ++ en Google.
Lo que pasa es que tengo claro el concepto de que en el aula todos podemos aprender, y si un estudiante me pregunta algo que no esta en el programa, y que realmente no tengo una respuesta clara no temo en usar Google, estoy claro en lo que muchos dicen y no aplican, el docente no siempre lo sabe todo, debe estar abierto analizar junto con los estudiantes y así todos aprenden. Las clases son más divertidas y dinámicas.
A la vez que se le muestra al estudiante como puede seguir desarrollando cualquier tema que le interese conocer con más detalles sobre la clase. Aunque existen programas de clases, siempre doy la libertad a mis estudiantes que amplíen los temas que les interesen, que no se limiten a lo que damos en clases, y si investigando encuentran algo que no entienden me pregunten. Que sucede?.. A veces tengo estudiantes que se van profundo en un tema y cuando me consultan me obliga a investigar aun mas para contestarle. Es algo que disfruto porque aprendo cada vez mas.
En si no creo que sea igual dar el tag IMG en HTML con imágenes que yo lleve, en el aula en tiempo real, les pregunto que imagen ustedes desean poner en la pagina, y ahí ven que aunque la clase esta programada siempre podemos ir mas allá si el grupo avanza a buen ritmo. De igual manera ven como harían las practicas en su casa.
Ahora estoy claro que Google no lo es todo, es buena herramienta de consulta para encontrar diversos contenidos, pero hay que respetar que el estudiante tiene que tener el conocimiento el da la materia. Porque de otra forma todos sacaran 100 en los exámenes usando Google. Les ayuda a prepararse, pero solo si lo hacen en el momento adecuado.
Otro ambiente en que ven que les puede facilitar es en el laborar, para diferentes problemas en vez de estar adivinando mejor consulte y vea antes de actuar, eso evita en muchas pero muchísimas ocasiones errores y malos ratos, a la vez que aprenden para futuros errores.
Asi que cualquier duda que tengas, puedes preguntarle a google y recuerda no conformarte con la primera opinion, ya en internet todo el mundo escribe… Gracias por leer.
Navegadores multiprocesos
Osea, que si una pestañatiene problemas no todo el navegador se cierra….
Con la reciente salida de Internet Explorer 8 hemos asistido al nacimiento del segundo gran navegador multiproceso después de Chrome. ¿Qué significa esto? ¿Este tipo de navegadores son el futuro? ¿Qué ventajas e inconvenientes tienen respecto a los navegadores con un único proceso? Y lo más importante: ¿nos beneficia o nos perjudica a los usuarios este cambio de paradigma? Estas preguntas y algunas más las intentaré contestar en esta entrada.
¿Qué son los navegadores multiproceso?
Normalmente, cada aplicación ejecuta un único proceso, desde el cuál controlará todas las acciones que tenga que realizar. Si necesita hacer varias cosas a la vez, creará varios hilos, que no son más que subprocesos ligeros que comparten casi todos los datos o casi todas las instrucciones. De esta manera los recursos se utilizan de manera más eficiente, sobre todo la memoria, ya que al compartirla se evita tener que guardar varias veces lo mismo.
Comenzando una analogía que no sé si me va a gustar, un navegador monoproceso sería una empresa convencional, y los hilos serían sus trabajadores, que efectivamente pueden trabajar en paralelo y tienen aproximadamente la misma información, la que les provee la empresa. Este modelo es el que tradicionalmente han seguido las empresas pequeñas, y no les ha ido mal.
En contraposición, los navegadores multiproceso, como su propio nombre indica, crean varios procesos para realizar esas mismas tareas. En este caso suelen crear un proceso por cada página o pestaña que abramos (luego lo matizaré). En principio esto no tendría demasiado sentido, ya que un montón de memoria se repetirá, como por ejemplo las instrucciones que procesan el HTML o el motor de Javascript. Sin embargo, se obtienen mejores resultados al tratarse de un programa que tiene que estar preparado para ejecutarse durante horas o días seguidos.
Siguiendo y terminando con la analogía anterior, un navegador multiproceso es una gran empresa que trabaja en diferentes regiones. Aunque se dedica a hacer lo mismo en una región que en otra, una rama ciertamente no necesita saber nada sobre los clientes de otra rama. De esta manera necesitamos dirigentes o ingenieros “repetidos” para llevar cada una de las ramas, coste que nos ahorraríamos si solo tuviéramos una gran fábrica. A pesar de todo este modelo funciona bastante bien, y entre otros aspectos resalta uno interesante: si una rama tiene problemas no afecta a las demás.
¿Qué ventajas/desventajas tienen?
Lo más obvio es que se necesitan más recursos para ejecutar lo mismo que en navegadores monoproceso, ya que como he comentado antes muchos datos se guardan varias veces en memoria. Esto es algo malo de por sí, pero no creo que sea algo excesivamente notable con la cantidad de memoria que tenemos hoy en día.
De hecho, tras un tiempo usando el navegador abriendo y cerrando pestañas, el uso de memoria será incluso más eficiente que un navegador convencional. Esto es debido a que, cuando cerramos una pestaña, automáticamente se destruirá el proceso y los huecos que se liberan se administrarán desde rutinas específicas de nuestro Sistema Operativo. En un navegador monoproceso será el propio navegador el que tenga que ver qué hace con esa memoria, y no el SO. Por muy bueno que sea un navegador, el SO siempre será más eficiente, simplemente porque dispone de más herramientas. Esta es una de la razones por la que por ejemplo Firefox al cabo de un tiempo use más memoria que al principio aunque cerremos todas las pestañas, lo que lo hace bastante degradable.
Dejando de lado la eficiencia, la mayor ventaja de estos navegadores es la seguridad que ofrecen. Al aislar cada web en su propio proceso, es casi imposible que pueda afectar a las demás webs que están visualizando. En realidad incluso están aisladas respecto al navegador. Esto supone una funcionalidad interesantísima: si una de estas webs causa un fallo crítico que obliga a cerrarla, el navegador y las demás pestañas seguirán intactos. Es decir, si una web se cuelga, el navegador puede seguir adelante. Tradicionalmente, si una de las pestañas causa un fallo, todo el navegador se cierra inesperadamente.
Pero evitar que el navegador se rompa solo es un pequeño avance comparado con la seguridad que esta arquitectura puede ofrecer. Que dos webs estén completamente aisladas respecto a sí mismas y respecto al SO significa que es mucho más difícil infectarse con software malicioso. Y no solo en teoría, también se está probando en la práctica: Chrome ha sido el único navegador sobre el que no se ha encontrado ningún exploit en PWN2OWN, un concurso con expertos en seguridad celebrado esta semana. De acuerdo, IE8 ha sucumbido, pero eso es otro tema.
¿Cuántos procesos se crean?
Aunque las arquitecturas de Chrome e IE8 tienen algunas diferencias, las dos crean un proceso inicial que será el que se ocupe de la interfaz (las ventanas, las barras, etc), de todas las comunicaciones con el sistema (entrada/salida de ficheros, de internet, etc) y con el usuario (teclado, ratón, pantalla). Este es el proceso padre, y si se cierra se cerrarán todos los demás.
A partir de entonces se crean procesos adicionales por una o más webs que abramos. Cada proceso contendrá los motores de renderizado de HTML, CSS, Javascript, imágenes, etc necesarios para leer una página web. Esta es la información que se repetirá tantas veces como procesos tengamos abiertos. Estos procesos están aislados del resto del sistema, y solo se comunican con el proceso padre: si quieren acceso a disco lo tienen que hacer a través del padre, si quieren acceso a la red o a la pantalla también.
Aquí está la diferencia entre IE8 y Chrome, ya que los dos crean procesos de manera distinta. IE8 calculará cuántos procesos debe abrir dependiendo del número de sitios web que abras: si tienes cinco sitios abre 3 procesos, si tienes 15 abre 6, los que sean. Cada proceso se ocupará de varios sitios webs por defecto, y si uno de esos sitios web causa un fallo, los demás sitios que maneje ese proceso se cerrarán también. En cierto modo es como si balanceara la carga de varios sitios web entre varios procesos, tal y como se hace en un servidor web. Una manera rápida de ver los sitios que comparten un mismo proceso es ver qué pestañas comparten el mismo color (aunque si tienen distinto color también pueden compartir proceso).
Chrome sigue una arquitectura que me parece que tiene algo más sentido. En principio crea un proceso por cada sitio web que abras. Si abres otra pestaña con el mismo sitio web (por ejemplo, dos artículos de Genbeta) será lo suficientemente inteligente para reutilizar ese proceso. Este algoritmo seguirá repitiéndose hasta llegar a un tope que actualmente se acerca a los 20 procesos, a partir de este punto varias webs compartirán procesos de manera similar a IE8.
Otro punto fundamental de Chrome es que también aísla en su propio proceso a los plugins, cosa que IE8 no parece hacer. Estos componentes externos a los navegadores son probablemente la parte más inestable y la parte menos segura, así que es una buena idea aislarla también.
¿Es este el futuro?
Sí. Los navegadores tradicionales tienen sentido en la web tradicional, con sitios simples y recursos muy limitados. Hoy en día tenemos varios factores que nos llevan a preferir una arquitectura multiproceso: las aplicaciones web son tan complejas como las de escritorio (piensa en Gmail, Google Docs, etc), los navegadores se utilizan durante mucho tiempo, gracias a las pestañas cada vez abrimos más webs a la vez y la cantidad de memoria RAM es bastante grande. Y ni siquiera he hablado de los procesadores multinúcleo: un navegador multiproceso puede aprovecharlos más que los actuales multihilo, y si cada vez tenemos más núcleos habrá que explotarlos más.
Por estos motivos creo, espero y quiero que Firefox, Opera y Safari implementen esta arquitectura cuanto antes. Cualquiera que haya probado Chrome (en menor medida IE8) habrá comprobado que la experiencia de usuario es mucho mejor a lo que estamos acostumbrados, y que la estabilidad general del navegador es muy alta aunque visitemos sitios pesados. En general, todo se reduce a que los navegadores multiproceso no se degradan con la misma facilidad que los tradicionales.