Skip to content


Introducción a HTML (Nunca es tarde para aprenderlo)

En los siguientes videos puedes ver de manera rapida como trabajar en el maravilloso mundo del HTML, solo utilizando un editor de texto plano.

Introduccion a HTML



Si te animas puedes tambien realizar este ejercicio luego de ver el video:
Realizar una pagina web, utilizando un editor de texto plano (notepad, notepad++) donde de una descripcion sobre usted y que espera aprender en el curso, ademas de para que lo utilizara. Debe incluir al menos una imagen, que puede ser de usted o relacionada con su objetivo en la vida.

Y si sigues con energia, este tambien.

Realizar una presentacion utilizando HTML la cual cumpla con los siguientes requisitos:

  • Al menos 10 slide o paginas
  • Tratar un tema de su interes.
  • La presentacion debe estar optimizada para visualizarla en pantalla completa al presionar f11 en el navegador.
  • Todas las paginas deben tener el mismo fondo y no puede ser blanco .
  • En cada una de las paginas debe incluir al menos una imagen, (el fondo no cuenta).
  • Debe de utilizar al menos 2 tablas en la presentacion completa
  • Recuerde utilizar los titulos (h1-h6) y el formato necesario.

Nota: Cualquier cosa pueden investigar

Posted in HTML, Tutoriales.

Codigo Fuente de Vista.

Hace un tiempo vi por ahi el codigo fuente de windows vista… pero segun veo hay mucha gente que no lo ha visto aun, aqui hay una copia para que veas porque funciona asi…..

codigo-fuente-windows-vista1

Asi que no te sorprendas… veremos a ver si conseguimos el de windows 7…

Posted in Web, ¿Que estoy Haciendo?.

Se ve bien en Firefox y en IE no…

Estaba buscando la manera mas facil de explicarle a mis estudiantes virtuales el porque usar cualquier navegador, menos IE, para aprender HTML y me he encontrado este articulo que cae a la perfeccion:

El otro día una amiga me comentó que una compañera suya estaba haciendo una web, y que en el Explorer se ve bien y en Firefox mal, y me preguntó que a qué podría ser debido. Le di una respuesta deprisa y http://cafeina.ladybenko.net/index.php corriendo y creo que no expresé bien, así que aquí va la full version. La comparto con vosotros porque seguramente nos esperen muchas más preguntas de este estilo.

La clave para entenderlo bien es darle la vuelta a la tortilla. La realidad es que en IE se ve mal, y en el resto de los navegadores (no sólo Firefox) se ve bien. Pongo bien y mal porque son apreciaciones que hacemos los humanos, subjetivas.

Los navegadores no son adivinos con bolas de cristal que se conectan a la mente del maquetador web e interpretan su voluntad. El maquetador tiene que dejar escrito, detalladamente, el contenido y apariencia de la página web: esto se consigue con los lenguajes (X)HTML y CSS.

Estos lenguajes se encuentran bien definidos cómo estándar, en el WWW Consortium (viene a ser algo así como la RAE). Este organismo se encarga de describir con precisión cómo deben interpretar el (X)HTML y el CSS los navegadores.

Ahora bien, los navegadores no siempre cumplen a pies juntillas lo que dice el W3C. Es más, cierto navegador no hace ni puto caso.

Pongamos un ejemplo ficticio: Imaginemos que el Explorer confunde los colores rojo y blanco, y los intercambia, debido a un error de programación (no entraremos a valorar si por descuido o deliberadamente). Es decir, que donde pone #FFFFFF IE lo interpreta como #FF0000, y viceversa. En este ejemplo supondremos que el resto de los navegadores interpretan los colores correctamente.

¿Qué pasaría si queremos hacer una página web con fondo blanco? En nuestro código HTML, pondríamos <body bgcolor="#FF0000"> que en IE se mostraría blanco. Entonces cuando vamos alegremente a mirar la web con otros navegadores, vemos que se muestra de color rojo fosforito. En Firefox se ve mal. Pues no. Por mucho que se empeñe el Explorer en hacer creer a los desarrolladores web, el número #FF0000 significa rojo, y prou.

Lo que ha pasado es que una página se ha desarrollado mal (a menudo inconscientemente) para forzar a que se vea bien en IE. Lo que obtenemos es que en IE la página se visualiza incorrectamente, pero por casualidades místicas esa visualización coincide con los deseos del diseñador.

Un ejemplo real y muy gráfico de cómo IE visualiza de mal las páginas lo podemos encontrar en el Acid Test. Es un ejemplo de página web que construye mediante código estándar y válido un dibujito de una cara sonriente. Según lo bien programado que esté el navegador, veremos este dibujo más o menos bien. Los únicos navegadores mayoritarios que lo muestran correctamente son Safari (Mac), Konqueror (GNU/Linux) y Opera (multiplataforma). Firefox se queda a medio camino, pero lo de Internet Explorer clama al cielo.

En resumen, lo más fácil para que una web se vea más o menos bien en todos los navegadores es hacerla primero para Firefox o cualquier otro navegador, y luego apañarla como buenamente podamos para Internet Explorer.

O sea, usa internet explorer, para probar que se ve bien, por si acaso uno de tus visitantes entra con ese navegador. Tu usa firefox!!!

Copiado de: http://cafeina.ladybenko.net/?p=303

Mas aqui: http://www.jorgeoyhenard.com/porque-no-usar-internet-explorer-6/399/

Posted in PHP, Web.

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:

  1. PDFs -> un documento en este formato, el cual puede ser desde un libro hasta un material preparado por el docente.
  2. Presentaciones (PPT, PPS) -> Presentacion en power point con los temas del curso.
  3. Videos -> Se pueden usar videos para tratar los temas mas complejos.
  4. 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.

Posted in PHP.

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.

Posted in ¿Que estoy Haciendo?.

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

Posted in PHP, Web.

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.

Posted in Web, ¿Que estoy Haciendo?. Tagged with , , .

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.

LCIE en IE8

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.

Chrome se ha rompido

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.

IE8 se ha rompido

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.

Se ha rompido un plugin

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?

. 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.

Posted in Web.

AsgReport, ya se hace algo con el…

betaSaludos, como les habia dicho en el post anterior de AsgReport, Aqui esta la primera version visible de este programa. Como les habia dicho he utilizado en ocaciones la clase Fpdf para generar pDFs ,pero para ser sincero de verdad hay que estar de animos para hace algo con ella. Asi que he decidido en mi tiempo libre realizar un gui para hacer PDFs con esta clase. Claro que ahora estoy un poco lejos de lo que quiero (Manejo de datos, saltos automaticos, etc), pero ya esta la plataforma hecha, ahora es solo añadir opciones. Puedes ver un beta del recien nacido en http://adamix.net/asgReport/. En lo proximo publico un roadmap y la lista de feactures que tendra el producto final.

Por ahora solo tiene dos controles rudimentarios que son el label y la imagen, y el resize hay que hacerlo por la ventana de propiedades, pero genera pdf mas facil que con fpdf. En lo pronto le pongo campos dinamicos para que genere una clase que se pueda usar en algun proyecto. No doy opcion a descargar la clase ya que hasta ahora es un PDF sin muchas opciones, pero le gano a cualquiera que venga a hacer los mismo con fpdf pelado a codigo limpio.  Al añadir una imagen por defecto se coloca el src a una imagen local, pero puedes poner cualquier imagen si sabes la ruta de internet. Nada, pruebalo y me cuentan que tal lo ven. http://adamix.net/asgReport/

Posted in PHP. Tagged with .

Recursividad basica en c#

El concepto de recursividad es uno de los más complejos y díficiles de entender en la programación orientada a objetos. Lo trataré de explicar con algunas ideas y algún ejemplo.

En la vida hay muchos conceptos que se utilizan a si mismos para explicarse. Una rama de un árbol a su vez tiene ramas, que a su vez puede tener ramas y así sucesivamente hasta que aparecen ramas que solo tienen hojas.

Al igual que en este ejemplo, muchos algoritmos se explican en términos de sí mismos. Los algoritmos que poseen esta particularidad se denominan recursivos.

Al igual que la mayoría de los lenguajes de programación, C# permite definir métodos recursivos. O sea, métodos que se llaman directa o indirectamente a si mismos. Y ahora la gran pregunta que se hacen todos….

Cuando y como termina entonces el método recursivo?

Ya se que puede parecer un proceso infinito, pero la clave está en que en cada llamada el problema se “simplifica” de tal modo que llegará el momento en que no hará falta llamar nuevamente al método recursivo. Recuerda que la rama tiene ramas, que a su vez tiene ramas… pero llega el momento en que se llega a una rama que solo tiene hojas.

Cabe resaltar que la recursividad es una herramienta muy importante en la programación que en muchos casos permite expresar algoritmos de forma simple y legible. Veremos ahora un caso muy simple en que la recursividad hace nuestro trabajo mucho más fácil.

Factorial de un número

Los mátemáticos suelen decir que n! = n * (n – 1)! Sin embargo, en programación, dicho de esta manera la solución sería infinita, ya que siempre podemos restar 1 hasta el infinito negativo. Por tanto debemos definir el factorial de un número para los números mayores o iguales que cero. Por tanto, la función factorial es muy fácil de expresar en C# mediante la recursividad. Este sería el código:

static long Factorial (long n)
{
if (n>=0)
{
// caso base
if (n == 0)
{ return 1; }
else
{return n * Factorial (n - 1); }
}
else
{
throw new Exception(“Factorial de un negativo”);
}
}


Otra solución al cálculo de un factorial se puede expresar de manera muy simple utilizando un ciclo for.

//Factorial iterativo

static long Factorial (long n)
{
if(n<0)
throw
new Exception(“Factorial de un número negativo”);
else if(n==0) return 1;
else
{
long result= 1;
//Seria multiplicar n * n-1 hasta que n = 0
for (int k = n; i >= 1; i –)
result
= result * k;
return result;
}
}

Este ejemplo nos ilustra las principales reglas y pasos que debe seguir un método recursivo.

Ahora las 4 reglas de oro de la recursividad

1 – Caso base. Siempre tiene que haber al menos un caso base en que no se necesite la recursividad para resolver un problema.

2 – Toda llamada recursiva debe regresar hacia el caso base.

3 – Credibilidad. Asuma siempre que la llamada recursiva funcionará correctamente. Esto se fundamenta en la hipótesis de inducción, lo que quiere decir que no debemos preocuparnos por hacer el trozo de todos los largos caminos de llamadas recursivas, una labor que a veces ni uno mismo entiende.

4 – Nunca duplique el trabajo. No resuelva con una llamada recursiva por separado lo que ya ha sido resuelto en otra llamada.

Ahora ya tienes una idea de lo que significa que un método sea recursivo y como resolver algunos ejemplos sencillos con esta potente herramienta. Puedes practicar con algunos ejercicios sencillos como la sucesión de fibonacci, la suma de n números pares y otros ejemplos que se les ocurra. Trata de darle solución recursiva a problemas sencillos que hayas resuelto antes de modo iterativo.

Recuerda que en la programación, no se trata de leer muchos tutoriales y cursos, se trata de leer y escribir código.

En la segunda parte de este pequeño tutorial les comentaré sobre algunas técnicas y estrategias del ámbito recursivo como son “Divide y Vencerás” y “Backtracking” (Vuelta atrás) para resolver problemas un poco más complejos en los que la solución no se ve tan simple, así como algunos otros ejemplos y ejercicios resueltos.

Si tienen alguna duda o pregunta dejen un comentario.

Posted in c#.


Blog de Amadis Suarez Genao