miércoles, abril 12, 2006

Tráfico Web: el eterno dilema del webmaster

Guía de la A a la Z para obtener tráfico en el sitio web

En Septiembre de 1999, Brett Tabke escribió "26 Steps to 15k a Day" (26 pasos para tener 15k en un día) en el foro Webmaster World (Mundo Webmaster). Muchas cosas han cambiado desde entonces, y ahora es el momento de considerar un nuevo plan de 26 pasos que cubran las actuales necesidades de los webmasters del año 2006. Algunos de los pasos aún aplican (escribir contenido nuevo todos los días, por ejemplo), y otros no (enviar a los motores de búsqueda ya no es necesario), y estamos acá para decir cuál es cuál y qué es qué. Como tal vez ya sea muy sabido, atraer visitantes no es tarea fácil, requiere arduo trabajo, determinación y mucho ahínco. Así que si se encuentra listo, recójase las mangas y siga los siguientes 26 pasos sencillos, y en tan solo un año se habrá generado suficiente tráfico para mantenerse ocupado por un largo, muy largo tiempo. Guía de la A a la Z para obtener tráfico en el sitio web.

A) Búsqueda de palabras clave (Keyword research)

Antes que nada, utilice una herramienta de búsqueda de palabras clave y realice un extensivo trabajo de investigación, buscando las palabras y frases claves correctas para usar en el sitio. ¿Qué frases clave está usando la competencia? ¿Hay alguna frase que cree un potencial para la participación en el mercado? ¿Hay alguna con la que pueda lanzar el sitio y crear todo un nuevo nicho de mercado?

B) Nombre de dominio (Domain name)

Si desea registrar y carac el nombre de su compañía, entonces elija un nombre de dominio que lo refleje. Si su compañía se llama Umara, entonces use el dominio www.umara.com. Si ya ha sido tomado por alguien más entonces registre www.productosumara.com o similar. Sin guiones, y ojalá no más de dos palabras en el nombre del dominio.

C) Evite el sandbox

Tan pronto haya elegido las palabras y frases claves y el nombre de su compañía, compre un dominio lo antes posible. Diseñe y coloque una página en el sitio comentando un poco de lo que es usted, lo que vende, y que pronto habrá más por venir. Asegúrese de que va a ser recorrido, escaneado e indexado por buscadores como Google y Yahoo o envíelo o vincúlelo a cualquier otro sitio

D) Considere y cree contenido

Cree más de 30 páginas de contenido real, y original sobre su sitio. Esto le dará a los spiders algo para "masticar". Esto también aumentará las posibilidades de ser visto en los resultados de los motores de búsqueda con una gran variedad de palabras y frases claves.

E) Diseño del sitio

Use el principio "Consérvelo Simple". Emplee un archivo CSS externo, revise y limpie cualquier código Javascript refiriéndolo como archivo externo, y no use frames, utilice Flash de la manera como lo haría con las imágenes, y no importa qué, no construya sitios en Flash. No ofrezca un sitio plagado de "pitos y flautas" a los visitantes. Mantenga las cosas agradables y sencillas. Haga las cosas fáciles de encontrar, y el visitante no tendrán razón para mirar en ninguna otra parte.

F) Tamaño y extensión de página

Que la página use menos kilobytes, lo mejor especialmente para la página prinpipal o inicial. Optimice las imágenes y asegúrese que la página carga rápidamente. La mayoría de personas y negocios del mundo occidental puede que posean acceso alta velocidad, pero los teléfonos celulares y otros países no. Si el sitio carga lentamente, puede que ya haya perdido los visitantes incluso antes que hayan tenido la oportunidad de examinar y explorar el sitio.

G) Usabilidad

Asegúrese de que el sitio sigue las buenas reglas de usabilidad. Recuerde que las personas gastan más tiempo en otros sitios, así que no viole las conveniones del diseño. No use archivos PDF para la lectura en línea. Cambie los colores para los link visitados, y use bueno encabezados. Tener en cuenta algunos consejos y trucos de usabilidad valen la pena, pues le ahorrarán trabajo y esfuerzo.

H) Sobre la optimización del sitio

Utilice la frase clave que ha elegido en su título (lo más importante), sus encabezados (cuando sea conveniente) y en el contenido del texto. Asegúrese que su página/contenido se encuentra alrededor de la frase clave. Si está vendiendo cosas, entonces escriba acerca de esas cosas. No solo coloque por colocar, las palabras de esa objeto o artículo dentro del texto.

I) Los globales

Los globales son aquellos vínculos que permanecen iguales en cada página. Son el punto de referencia para que los nuevos visitantes no se pierdan en la navegación de la página. Algunas veces se encuentran en la parte izquierda de la página, a veces consisten en pestañas en la parte superior de la página. A menudo también se encuentran en el pie de la página. Asegúrese de que tiene una versión del texto de los globales en cada una de las páginas. Usualmente creo pestañas en la parte superior, y coloco versiones en solo texto en el pie de la parte inferior de la página. Revise, averigüe y descubra lo que mejor funciona en su caso.

Artículo originalmente en inglés, redactado por Shawn Campbell en Abril 7 de 2006.
Extraído, traducido y adaptado por Ricardo Andrés Obregón Merchán

lunes, marzo 06, 2006

¿Qué tiene que estudiar un informático?

¿Qué tienen que estudiar los ingenieros informáticos? Es curioso que una profesión tan extendida con titulaciones en casi todas las universidades del mundo tenga tan poco claro lo que tienen que estudiar sus ingenieros.

Introducción

El presente artículo no tratan temas que refieren necesariamente a la informática técnica como tal, quiero entrar en otro de los aspectos que me preocupan y que no es otro que la formación y, dentro de ella, el área que más conozco, la formación de los informáticos.

Una vez escrito este artículo, he de completar esta introducción para indicar que en el fondo sí trato los temas de siempre, fundamentalmente porque la formación de los profesionales informáticos está muy relacionada con el estado de la informática y especialmente con su futuro.

¿Qué se enseña en informática?

Los primeros planes de estudio de la ingeniería informática estaban muy influenciados por la procedencia de la mayoría de su profesorado. En algunas Facultades los profesores provenían fundamentalmente de áreas de ingeniería -ingeniería de telecomunicaciones e ingeniería industrial fundamentalmente- y en otras facultades de áreas de ciencias -matemáticas y física fundamentalmente-. Los primeros títulos oficiales "Licenciados / Diplomados en informática" parece que se decantaban más por esta segunda corriente, mientras que los actuales "Ingenieros / Ingenieros Técnicos en Informática" parece que se acercan más a la primera.

Esta diferencia de culturas llevó al choque entre dos concepciones distintas sobre los planes de estudio en informática. Los primeros con mayor énfasis en asignaturas aplicadas como sistemas operativos, redes de ordenadores, ingeniería del software, etc. Los segundos con más peso en el estudio básico, con mayoría de asignaturas como cálculo, álgebra, matemática discreta, teoría de autómatas, etc. El resultado final de los planes de estudio obviamente conjuga ambas visiones por imperativo legal, aunque la relación de fuerza en cada universidad determinan el sesgo del plan de cada una.

¿Qué lenguaje de programación?

Otro de los problemas habituales a la hora de implementar un plan de estudios de informática es elegir qué lenguaje o lenguajes de programación emplear. Parece razonable que esta decisión se tome fundamentalmente por razones pedagógicas, sin embargo otros muchos factores afectan y han afectado esta decisión.

Durante cierto tiempo muchas universidades emplearon Pascal como lenguaje para enseñar programación. En otras asignaturas, típicamente las relacionadas con los sistemas operativos, se empleaba C por ser el más usado en la implementación de sistemas operativos, los profesores de asignaturas de control o tiempo real preferían Ada, etc. Estas aproximaciones eran criticadas desde la industria por ser lejanas a la realidad del mercado. Es muy importante que aprendan COBOL clamaban hace 15 o 20 años...

A mi entender, la industria parece no darse cuenta de que van por detrás de la universidad y no por delante en estas cuestiones (en contra de lo que creen). Me explico, hace algunos años para mucha gente de la industria en la universidad se explicaban cosas poco útiles cuando no enseñaba COBOL. Curiosamente, como los alumnos en las universidades aprendieron otras cosas, en particular C, cuando llegaron a la industria empezaron a usar lo que mejor conocían. Así,hicieron uso de C, por ejemplo, incluso para hacer programas de gestión empresarial, para lo que no está especialmente dotado.

Hoy la situación sigue siendo similar. Ahora desde la industria se reclama, por ejemplo, que se use Java como lenguaje de programación. Mejor dicho, se pide que se les enseñe Java y sus implementaciones de todas las tecnologías básicas y casi nada más. Sé que para muchos la idea de un lenguaje interpretado con fuertes conexiones con la red puede parecer algo novedoso, pero la verdad es que había muchas cosas similares y mejores antes, simplemente Java tuvo la suerte de nacer entre los brazos de una multinacional.

Nuevo factor: la industria

Además se añade un nuevo factor, la industria ha crecido mucho y ahora hay jugadores muy poderosos: Microsoft, SUN, etc. que entienden perfectamente que lo que aprendan los futuros ingenieros será un factor de mucho peso en lo que se utilizará en las empresas en los años venideros. De ahí que muchas empresas hagan muchos esfuerzos para colocar sus productos en las universidades.

Microsoft parte de su conocida ventaja en sistemas operativos de los equipos de sobremesa, que son los que fundamentalmente equipan las aulas de prácticas por razones fundamentalmente de precio en las universidades. Hasta hace muy poco era complicado encontrar aulas de ordenadores compatibles con sistemas operativos que no fuesen de Microsoft. La resistencia ha sido muy fuerte a la aparición de aulas con GNU/Linux u otros sistemas operativos libres. Las multinacionales informáticas han creado licencias campus para tratar de convencer a las universidades de su uso. Han realizado donaciones de software con la misma idea.

Mi pregunta fundamental es: ¿Debería obligar la administración a utilizar tecnologías neutrales, esto es libres, en la docencia en tecnologías de la información? A mi entender sí, por dos razones fundamentales. La primera menos importante: por precio. Las licencias de campus son muy baratas comparadas con los precios individuales, pero aún así hay que pagarlas y las donaciones sólo se producen al subconjunto limitado de universidades de mucho prestigio con la idea de que arrastren a las demás.

La segunda es la más importante desde mi punto de vista: las administraciones públicas deberían forzar el uso de tecnologías no propietarias para no colaborar en el mantenimiento de monopolios en ningún campo de estas tecnologías. Aceptar que se emplee como lenguaje Java, o que los únicos sistemas operativos que vean los alumnos sean los de la familia Microsoft Windows, me parece peligroso desde el punto de vista social.

Curiosamente, para alguien que ha defendido la vertiente más ingenieril de la informática, son los sectores más partidarios de la fuerte formación matemática los que más comprenden la necesidad de usar tecnologías no propietarias. Quizás la no patentabilidad de las matemáticas ha llevado a esa comunidad a una evolución más abierta que a la de las supuestamente más dinámicas ingenierías.

Deontología profesional

Otro punto de interés en la formación de los informáticos, y que se deja muchas veces de lado, es la formación sobre la informática como rama del saber y sobre sus componentes sociales. La impartición de este tipo de conocimientos suele hacerse alrededor de la asignatura de deontología profesional. Esto no es exclusivo de la informática, casi todas las titulaciones universitarias imponen ciertos créditos obligatorios de deontología profesional.

Las asignaturas sobre deontología en informática tienen en mi opinión un perfil muy limitado, que reconozco sesgada por la implementación de las asignaturas que conozco. En general se centran en una única parte de los problemas a los que se enfrenta un informático en su vida profesional: el uso de información confidencial, bien de los usuarios de los servicios que desarrollan, de sus compañeros o de las empresas para las que trabajan. También abordan, como no podría ser menos, las prácticas éticas, por ejemplo no realizar programas incorrectos intencionadamente, se introducen discusiones sobre la necesidad o no de colegios profesionales (esto daría para otro artículo), se habla de las prácticas de contratación y relación con los compañeros y competidores, y en general se establecen los derechos y deberes legales de la profesión informática.

Sin embargo, en mi opinión es deseable introducir a los alumnos en otros asuntos relacionados con la informática, pero que son de carácter más general. Creo que es importante que se enfrenten a los problemas sociales de la informática. En particular me parece imprescindible que conozcan la filosofía subyacente en el modelo de desarrollo del software libre. No es aceptable que la mayoría de los alumnos de informática salgan de las aulas pensando que la única forma de desarrollar software, o de ganar dinero desarrollándolo es mediante la venta de licencias propietarias. Es necesario que se aborde el análisis de las licencias de software, que se estudien sus implicaciones.

De igual forma es necesario que en las aulas se aborden las cuestiones relacionadas con la propiedad intelectual, de las que yo creo que el software libre es un subconjunto. La informática está estrechamente relacionada hoy en día con la producción y distribución de contenidos multimedia. Es necesario que los informáticos discutan y razonen sobre las formas en que se van a realizar esas funciones y sus responsabilidades sociales.

Las prácticas profesionales de un informático no deben limitarse a su relación con la información confidencial, la privacidad de los datos, etc. Es importante que sea consciente de su papel en la cadena de producción intelectual y que decida con conocimiento qué tipo de herramientas desarrolla o utiliza en su vida profesional.

Los otros informáticos

Hasta aquí he usado la formación de los informáticos como hilo conductor del artículo. Soy consciente de que la profesión informática a día de hoy está llena de gentes de procedencias muy diversas. Así, además de ingenieros informáticos, hay ingenieros de otras ramas, licenciados, etc. Eso sí, lo dicho sobre el uso de herramientas informática libres se aplica igualmente a su formación.

Asignaturas relacionadas con la gestión de la propiedad intelectual en general y con el modelo de desarrollo del software libre en particular creo que deberían ser obligatorias en los estudios relacionados con las tecnologías de la comunicación y muy recomendables (quizás en formato de asignaturas de libre elección/configuración) en otras titulaciones.

Otra parte de los profesionales de la informática son los autodidactas. A ellos les recomendaría que, siguiendo sus instintos, trataran de ver más allá de las herramientas comerciales de moda y que apostasen por el software libre como camino de especialización.

Por último, como profesor no puedo dejar al resto de los usuario sin deberes: no vale con ser simples usuarios de GNU/Linux, hay que entender, por ejemplo, qué papel juega la licencia GPL y el modelo de desarrollo de software libre en general.

Como siempre BarraPunto sigue siendo un buen sitio para discutir estos asuntos. Así, si quieres leer más sobre estos temas puedes intervenir en muchas de las discusiones que se celebran al respecto.

Extraído y adaptado para la comunidad en general, del Libro "Sobre Software Libre" - http://gsyc.escet.urjc.es/~grex/sobre-libre/informaticos.html (c)

lunes, febrero 27, 2006

Lenguajes interpretados vs Lenguajes Compilados: Desidia, capricho o tendencia.

La eterna batalla a punto de culminar

Varios de los lectores de este blog me han cuestionado mi posición sobre lenguajes como Java, Perl, PHP, Ruby, ASP, y la última suite de Microsoft: Visual Studio.Net. Pues bien, ha llegado el momento de explicar mi posición, la cual puede ofender a muchos, dejar perplejo a otros y confundir al resto, bueno, algunos pocas personas estarán de acuerdo conmigo.
En fin, la pregunta clave es: ¿qué es mejor, el lenguaje interpretado o el lenguaje compilado? Voy a resumirlo en una sola frase. Todos los lenguajes son interpretados.
Ya sé que alguno (si no la mayoría) dirá que eso no es posible, y por lo tanto, haré la sustentación a tal afirmación.
Para empezar, debemos definir cada una de las frases desde el punto de vista programación de PC's.

Lenguaje Compilado
Un lenguaje compilado es término un tanto impreciso para referirse a un lenguaje de programación que típicamente se implementa mediante un compilador. Esto implica que una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc, Windows NT para Intel, etc.). (Lenguaje Compilado - Wikipedia)

Lenguaje Interpretado
... Un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una en tiempo de ejecución a un lenguaje intermedio o lenguaje máquina o a través de una máquina virtual, siendo típicamente unas 10 veces más lentos que los programas compilados.(Adaptación de la definición en Wikipedia)

Luego de las deficiones, digámoslo en términos cristianos, o mejor en términos informáticos, porque no todos los cristianos entienden esta terminología. Un lenguaje compilado es aquel que, en teoría, es traducido a código máquina y las instrucciones generadas, son interpretadas directamente por la máquina. Y un lenguaje interpretado, es aquel que es traducido a un lenguaje intermedio(entiéndase no-máquina), en la cual cada instrucción es interpretada y traducida a lenguaje máquina en tiempo de ejecución. En la práctica, solo los sistemas operativos y contados programas que se ejecutan especialmente por consola, se encuentran en código máquina. Y antes que alguien interprete mal, explico lo anterior.
Si hablamos de la plataforma más usada en el hogar, entiéndase Micro$oft Windows, o pues hasta el momento de la redacción de esta nota, TODOS, sin excepción, son lenguajes interpretados o semi-interpretados. Aquellos conocedores del lenguaje ensamblador me hallarán la razón sin mayor problema. En los sistemas operativos modernos, cuando se "compila" un programa, éste se traduce a un pseudoensamblador o a un estilo de pseudo-máquina, que a su vez es interpretada por la "máquina virtual" propia o nativa del sistema operativo, para poder procesar, dibujar y ejecutar todas las instrucciones adecuadamente. Los programadores avanzados, sabrán que cuando se compilan los programas, lo que se puede encontrar es una serie de llamados a librerías externas las cuales realizan las tareas solicitadas. En el caso de sistemas operativos tipo UNIX y demás, la cosa no cambia mucho, así que no entro en detalles.
Pero ahora sí entremos en materia. Ya está claro que todos los programas son interpretados en mayor o menor grado, la cuestión es ahora, qué compiladores generan código "más compilado" (valga la aparente redundancia) que los otros. Aquí voy a mezclar un poco concepto personal con concepto técnicos. Para empezar voy a ser directo y mencionaré algunos lenguajes que son los generan, en teoría, programas "más compilados", sin mencionar las plataformas a las cuales pertenecen (hago omisión de algunos lenguajes compilados, no usados en la actualidad: Fortran, Ada, Algol, COBOL y demás de su tiempo, exceptuando BASIC y derivados):
CEl lenguaje compilado maestro por excelencia, excepto en Visual Studio.Net. Solo menciono que es el lenguaje en el cual se diseñaron la gran mayoría, por no decir todos, los sistemas operativos modernos.
C++Alguno se peguntará, el porqué separo C de C++. Pues bien, sucede que C++ no es TAN compilado como C, especialmente porque casi siempre está usado en sistemas operativos gráficos, solo en sus versiones de consola es compilado en código máquina real, pero básicamente y en esencia se compila a código máquina.
PascalBásicamente, en todos sus sabores y colores, es compilado a código nativo máquina
Delphi, Kylix, LazarusSon altamente compilados, aunque no totalmente, pues están orientados a sistemas operativos gráficos, así que en menor grado son interpretados, pero son considerados lenguajes compilados, pues el código generado es nativo de la plataforma objetivo.

He mencionado los más conocidos y más usados, ahora sí vienen los lenguajes interpretados, los cuales causan tanta polémica.
BASICEl lenguaje interpretado por excelencia y hasta donde tengo conocimiento, el más antiguo, aunque no fue interpretado en sus principios, luego se convirtió en el hito de los lenguajes interpretados. Todos sus derivados son en mayor o menor grado interpretados, aunque alguna vez, Borland lanzó un BASIC que se compilaba, en teoría (nunca lo comprobé), a código máquina.
JavaScript, VBScriptAunque más interprestados que este par, creo que no existen, los menciono como para información general.
Perl, PHPEstos lenguajes diseñados para web, son lenguajes interpretados por excelencia, aunque se compilan a código intermedio en tiempo de ejecución, cosa que acelera su ejecución. Existen también herramientas que generan un código cercano a la máquina para estos dos lenguajes y cachean contenido, pero a la larga, siguen siendo interpretados.
Batch, ShellLenguajes interpretados para los OS's, los cuales se ejecutan bastante lento, pero ya que por lo general son tan cortos o realizan tareas tan básicas no es perceptible el rendimiento.
JavaEste lenguaje ha sido bastante diversificado en la actualidad, incluso, varias de las grandes aplicaciones comerciales modernas están diseñadas en este lenguaje, por ejemplo, Zend Studio y Oracle JDeveloper, solo por mencionar dos grandes.
Visual Studio .NETEl Boom de los lenguajes por imposición Micro$oft. NINGÚN programa generado con los lenguajes de esta suite o como se le quiera denominar a este paquete, genera código máquina y de hecho está bastante lejos de ser código máquina, o incluso, referencias a librerías como lo harían otros lenguajes como Delphi, C++, o similares. No estoy en contra de esta nueva metodología para la interpretación de software, pero sí hay una gran desventaja, es la MUY lenta ejecución de los programas generados y en cortas palabras explico el porqué (podría hacer todo un compendio): El lenguaje generado es un código intermedio el cual a su vez se compila en tiempo de ejecución, el cual es interpretado por el Framework de .Net, el cual ejecuta las instrucciones haciendo los llamados respectivos a las librerías del sistema operativo. En mi concepto personal, es demasiada vuelta para ejecutar una simple instrucción con llamado a una API del Sistema Operativo. Aunque la teoría dice que el programa luego de compilarse en tiempo de ejecución, permanece así, por lo tanto es un aumento en la velocidad de ejecución, mejora que he tenido la oportunidad de experimentar, porque código interpretado que ejecute código einterpretado, me temo no es muy veloz que digamos.

Pero, ¿por qué tanta renuencia a estas nuevas tecnologías?, y ¿qué pros y contras presentan?. Es bastante sencillo. No estoy en contra de estas tercnologías, de hecho, son excelentes y tarde o temprano, aunque más temprano que tarde, serán los estándares de compilación y serán considerados como lenguajes compilados.

Ventajas de los lenguajes interpretados

  • Portabilidad: Esta es la principal ventaja que presenta este tipo de lenguajes, porque puede ser compilado en y para cualquier plataforma o sistema operativo.
  • Compatibilidad: al ser interpretado por el sistema operativo, es la máquina virtual o framework el que se encarga de que las intrucciones sean ejecutadas por el software y el hardware.

Desventajas de los lenguajes interpretados

  • Velocidad: Es el aspecto más notable y el cual se debe evaluar a fondo al crear software con este tipo lenguajes, pues se debe equilibrar la portabilidad con la velocidad que se está sacrificando. A menos que las prestaciones de los equipos informáticos sean bastante altas, en el caso cual, se podría despreciar este aspecto.
  • Portabilidad: es una desventaja también. El problema radica en que en la actualidad, asi todos los lenguajes compilados, existen para todas las plataformas, no así las máquinas virtuales o frameworks, aunque en el caso de Java, se ha hecho un excelente trabajo en cuanto a eso y no me puedo quejar, existe para casi todas las plataformas, por no decir todas, actuales. El .NET framework, lamento decir que en la actualidad, se encuentra ciento por ciento probado solo en Windows, aunque existen proyectos que prometen tal portabilidad, aunque todavía no son un hecho.

En conclusión, ¿cómo actuar?. No es muy difícil. Se evalúan los requerimientos, se definen necesidades, si éstas no superan el hardware a usar, perfectamente se puede proseguir, de lo contrario, es mejor pensar en un lenguaje compilado, pues os lenguajes interpretados exigen gran cantidad de recursos especialmente RAM y procesador. Deberían aprovecharse los lenguajes interpretados hasta donde sea posiblem pues en pocos años o incluso meses, entrarán en vigor y serán (¿o son?) el nuevo estándar de desarrollo.