martes, 29 de abril de 2014

Entrevista de trabajo


Tomado de la Fan Page de Roberto Tapia

Un joven fue a solicitar un puesto gerencial en una empresa grande. Pasó la entrevista inicial y ahora iba a conocer al director para la entrevista final. El director vio en su CV sus logros académicos y eran excelentes. Y le preguntó: " ¿Recibió alguna beca en la escuela?" el joven respondió "no".
"¿Fue tu padre quien pagó tu colegiatura? "
" Mi padre murió cuando yo tenía un año de edad, fue mi madre la que pagó. "-respondió.
"¿Dónde trabaja tu madre? "
"Mi madre trabajaba lavando ropa."

El director pidió al joven que le mostrara sus manos . El joven mostró un par de manos suaves y perfectas.
"¿Alguna vez has ayudado a tu madre a lavar la ropa? "
"Nunca, mi madre siempre quiso que estudiara y leyera más libros. Además, mi madre puede lavar la ropa más rápido que yo.

El director dijo: "Tengo una petición: cuando vayas a casa hoy, ve y lava las manos de tu madre, y luego ven a verme mañana por la mañana."
El joven sintió que su oportunidad de conseguir el trabajo era alta. Cuando regresó a su casa le pidió a su madre que le permitiera lavar sus manos. Su madre se sintió extraña, feliz pero con sentimientos encontrados y mostró sus manos a su hijo.




El joven lavó las manos de su madre poco a poco. Rodó una lágrima al hacerlo. Era la primera vez que se daba cuenta de que las manos de su madre estaban tan arrugadas y tenían tantos moratones. Algunos hematomas eran tan dolorosos que su madre se estremeció cuando él la tocó.
Esta fue la primera vez que el joven se dio cuenta de lo que significaban este par de manos que lavaban la ropa todos los días para poder pagar su colegiatura. Los moretones en las manos de la madre eran el precio que tuvo que pagar por su educación, sus actividades de la escuela y su futuro.

Después de limpiar las manos de su madre, el joven se puso a lavar en silencio toda la ropa que faltaba.
Esa noche, madre e hijo hablaron durante un largo tiempo.
A la mañana siguiente, el joven fue a la oficina del director.

El director se dio cuenta de las lágrimas en los ojos del joven cuando le preguntó: "¿Puedes decirme qué has hecho y aprendido ayer en tu casa?"

El joven respondió: "lavé las manos de mi madre y también terminé de lavar toda la ropa que quedaba"
"Ahora sé lo que es apreciar, reconocer. Sin mi madre, yo no sería quien soy hoy. Al ayudar a mi madre ahora me doy cuenta de lo difícil y duro que es conseguir hacer algo por mi cuenta. He llegado a apreciar la importancia y el valor de ayudar a la familia.

El director dijo: "Esto es lo que yo busco en un gerente. Quiero contratar a una persona que pueda apreciar la ayuda de los demás, una persona que conoce los sufrimientos de los demás para hacer las cosas, y una persona que no ponga el dinero como su única meta en la vida". "Estás contratado".
Un niño que ha sido protegido y habitualmente se le ha dado lo que él quiere, desarrolla una "mentalidad de tengo derecho" y siempre se pone a sí mismo en primer lugar. Ignoraría los esfuerzos de sus padres. Si somos este tipo de padres protectores ¿realmente estamos demostrando el amor o estamos destruyendo a nuestros hijos?

Puedes dar a tu hijo una casa grande, buena comida, clases de piano, ver en una gran pantalla de televisión. Pero cuando estás cortando el césped, por favor que también lo experimente. Después de comer que lave sus platos junto con sus hermanos y hermanas. No es porque no tengas dinero para contratar quien lo haga, es porque quieres amarlos de la manera correcta. No importa cuán rico seas, lo que quieres es que entienda. Un día tu pelo tendrá canas, igual que la madre de ese joven. Lo más importante es que tu hijo aprenda a apreciar el esfuerzo y tenga la experiencia de la dificultad y aprenda la habilidad de trabajar con los demás para hacer las cosas." ¡Cuídate! 

lunes, 28 de abril de 2014

Desarrollo de aplicaciones móviles multiplataforma parte 1/3, Web vs. Nativas vs. Multiplataforma

scribiendo un post en el que pretendía analizar en profundidad las alternativas y herramientas al desarrollo de aplicaciones multiplataforma para móviles, me di cuenta de que estaba quedando demasiado largo y que nadie en su sano juicio lo leería. Así que he decidido dividirlo en tres partes con el fin de que se digerible. Esta es la primera, las otras mañana y pasado. Post relacionados:

Introducción

Hace ya algún tiempo que llevo queriendo meterme en profundidad en el desarrollo móvil. Pero hacer esto no significa tirar por la borda todos los años o experiencia que tengo en desarrollar aplicaciones web, sino ampliar el alcance de los nuevos proyectos haciendo que funcionen también en dispositivos móviles. Al fin y al cabo, muchas de estas aplicaciones usan servicios web y/o tienen un site en internet donde continuar usando la aplicación o servicio, así que programar para móviles no es dejar la programación web, ni mucho menos, sino hacer que ésta sea accesible por más usuarios. Puede incluso ser visto al revés: el desarrollo web complementa al desarrollo móvil, permitiendo que el usuario continúe usando su aplicación también en internet y no solo en su dispositivo.

Aplicaciones web vs aplicaciones nativas

Una de las principales ventajas de los smartphone es que todos tienen un navegador HTML5, por lo que podemos, simplemente, crear una aplicación web y usarla desde el navegador de uno de estos móviles. Esto tiene sus pros y sus contras:

Ventajas:

  • Fácil diseño: no hay que pensar en desarrollar una aplicación para móviles si no queremos. Basta con hacer un diseño adaptado a una pantalla y resolución más pequeñas -que puede ser simplemente adaptando un CSS por cada dispositivo- o podemos rediseñar la navegación al completo. Además, las aplicaciones web se pueden “tunear” para que parezcan aplicaciones nativas: icono de aplicación, pantalla completa, splash screen, barra de estado, etc. más info en este tutorial.
  • Fácil implementación: las aplicaciones web pueden ser desarrolladas en cualquier tecnología de servidor, así que podemos usar nuestro lenguaje favorito (Java, Grails, Php, Ruby, Python,…) con la seguridad de que la aplicación se verá igual en todos los terminales.
  • Seguridad: tu controlas el acceso a la aplicación y la puedes actualizar sin tener que pedir permiso. Nadie te va a “piratear” la versión premium de tu site, ni nadie ta va a vetar la entrada al App Store porque no cumple los requisitos.

Desventajas:

  • Apis nativas: no hay acceso completo a todas las Apis nativas del móvil. Aunque la cámara y el micro son accesibles con Flash, todos sabemos que esa tecnología está vetada en IOS. Desde HTML5 y Javascript, es posible acceder a lascoordenadas del GPS, pero no en tiempo real ni de la misma manera que si pudiéramos acceder a la Api del móvil directamente. Y olvídate de usar el acelerómetro, la agenda, la brújula, etc.
  • Difícil de usar, fácil de olvidar: para usar una aplicación web en un móvil, es necesario que el usuario abra el navegador y teclee la dirección, ya sea porque la sepa, la haya encontrado en Google o la haya recibido por correo o chat. Una vez abierta la aplicación, debe añadirla a favoritos o, mejor todavía, crear un icono de acceso directo en el móvil para acceder a ella más tarde. Confiar en que nuestros posibles usuarios acaben haciendo todo esto para poder acceder cómodamente a nuestra aplicación en futuras ocasiones es pecar de ingenuo. Es mucho más fácil descargar una aplicación y que aparezca directamente como un icono en nuestro móvil.
  • Lenta: sin contar que renderizar HTML e interpretar Javascript es sin duda más costoso que ejecutar una aplicación nativa, cada petición que hagamos en nuestra aplicación implicará una recarga de la página o un acceso, en mayor o menor medida, contra nuestro servidor. Cualquier espera por pequeña que sea impacta en la experiencia de usuario. Una aplicación nativa tiene todos los recursos y procesos guardados en local, y solo accede al servidor para obtener o enviar datos si es que los necesita. Por tanto, una aplicación web no tiene la fluidez y velocidad de manejo que una aplicación nativa, ni nunca la tendrá.
  • Peor monetización: es más fácil que un usuario pague por nuestros servicios si simplemente cobramos X por nuestra aplicación al descargarla del App Store, que no hacer que el usuario se tenga que registrar y efectuar el pago en nuestra web, introduciendo manualmente todos sus datos como el número tarjeta, dirección, etc. Si el usuario ya tiene sus datos guardados en el App Store, para comprarla solo tiene que poner su password y confirmar la compra. Más fácil imposible.
Y no soy el único que piensa así, tenemos que ser conscientes de que los mercados de aplicaciones son una realidad: Apple tiene su App Store para IOS y MacOS, Google su Chrome Web Store, Google Apps Marketplace y el Android Market, Amazon su Amazon Appstore, incluso hay markets alternativos como OpenAppMkt. Cada vez más empresas invierten en crear un entorno fácil y cómodo para que el usuario pueda descargar, probar y comprar aplicaciones, repartiéndose los beneficios. Pensar que podemos competir con todo esto con una aplicación web para móviles, que simplemente se puede acceder desde una dirección en un navegador, es una ilusión.

Desarrollando aplicaciones móviles

Cada plataforma tiene su propio lenguaje, herramientas de desarrollo y Apis con los que crear aplicaciones. Para el post, vamos a comentar solo las más importantes: IOS y Android. Demos un breve repaso a cada uno de ellas.

IOS

El lenguaje oficial para IOS es Objective-C, y con este lenguaje podemos crear aplicaciones para Iphone, Ipad y Ipod touch. Hay distintas versiones de IOS pero todas ellas se programan usando el mismo lenguaje, Objective-C, y la misma herramienta, Xcode.
Xcode es el entorno de desarrollo oficial de Apple. Con él, podemos crear aplicaciones de escritorio para Mac y para IOS. Aunque podemos compilar las aplicaciones “a mano”, es una tarea casi imposible y siempre se recomienda Xcode para, por lo menos, empaquetar y subir la aplicación al App Store. La mayoría de alternativas para crear aplicaciones en Iphone (Appcelerator, Phonegap, Corona) se apoyan siempre en esta herramienta para hacer el build final, aunque no todas (Flex no lo necesita).
El único “problema” que tiene es que solo existe para Mac, por lo que para crear aplicaciones IOS te hace falta un ordenador marca Apple. Y esto no siempre es posible, claro (aunque se puede remediar con virtualización). Sobre el precio, ahora es gratis pero hasta hace poco costaba 5€ en la App Store. No es caro y tampoco es un drama tener que comprarlo.
Requisito importante: para distribuir aplicaciones en el App Store y para poder probar las aplicaciones desarrolladas en nuestro propio Iphone/Ipad, es necesario adquirir una licencia de desarrollador que cuesta 79€ al año.

Android

Para Android todo es mucho más fácil. Primero tenemos el lenguaje Java para programar aplicaciones y un SDK multiplataforma que funciona en Windows, Linux y Mac. Que Java es más fácil de aprender y programar que Objective-C -y que C en general- debido a su simplicidad es un hecho (sobre si es mejor o peor, ahí no voy a entrar a discutir, cada uno tendrá su propia opinión). Si queremos un entorno de desarrollo, podemos usar un plugin ADT para Eclipse que incluye un simulador, que también es multiplataforma, libre y gratuito, aunque me consta que hay más. Y no tenemos que pagar ninguna licencia anual.

Desarrollo móvil multiplataforma

En resumen: para hacer aplicaciones IOS nos hace falta un Mac con Xcode, una licencia de desarrollador y hay un lenguaje Objective-C con una sintaxis un tanto complicada de escribir y de leer. Y para hacer aplicaciones Android, no nos hace falta ningún sistema operativo en particular: usamos Java con Eclipse+plugin ADT o el propio SDK de Android que son multiplataforma y no hay licencias que pagar.
Sobre el hecho de que hay más aplicaciones de pago en el App Store que en el Android Market, o si es mejor publicar tu aplicación en un sitio o en otro, etc, no diré nada. Ya hay unos cuantos artículos interesantes sobre ello. Yo lo que ahora me planteo es:
  • ¿Qué pasa si no tenemos un Mac y queremos desarrollar aplicaciones para IOS?
  • ¿Qué sucede si Objective-C nos parece complicado y no queremos aprenderlo?
  • O lo contrario ¿que sucede si sabemos Objective-C y no nos gusta Java?
  • Y la más importante ¿qué ocurre si queremos hacer una aplicación para los dos dispositivos y no queremos programarla dos veces?
Personalmente, creo que todas las preguntas tienen fácil respuesta: “te compras un Mac o virtualizas un Mac OS conVirtualBox” o “te aguantas y aprendes Java/Objective-C”. Pero a la última pregunta no hay respuesta válida posible: si quieres una aplicación para IOS y Android, tienes que programarla dos veces. Oh, espera un momento, quizá haya una alternativa a todas estas preguntas…
La solución es conseguir una herramienta “write once, run everywhere”. Un software con el que sea posible programar con un lenguaje determinado y que, además, permita que tu aplicación funcione en varios dispositivos. Tras una inspección exhaustiva en internet, esto es lo que he encontrado:
  • Flex 4 y Adobe Air Mobile, la única herramienta que permite construir aplicaciones Android y IOS sin tener un Mac ni Xcode. Y se programa en ActionScript.
  • PhoneGap, Titanium Appcelerator y Anscana Corona, que nos permiten construir aplicaciones usando otros lenguajes como Javascript y Lua, aunque requieren Mac y Xcode.
Y me he decidido a probarlas. Las he descargado todas, me he hecho una aplicación de ejemplo con cada uno de ellas y la he intentado instalar el Ipad y el Iphone que tengo en casa (no tengo móvil Android). Y estas han sido mis conclusiones…

Para aceptar salir con una chica

Para aceptar salir con una chica. (Post para personas que no se ofenden)
Escrito por:  Enrique Pascalin (Erparom)

Oh si, no hay que salir con cualquiera, si piensan despegarse de la PC, salir a la calle y descubrir que hay un mundo de tres dimensiones mas allá de la barrera del monitor, si quieren tener contacto humano; deberán salir con una chica señores. Pero no con cualquier chica, deben ser selectivos. Después de todo, hay que darle un poco de ayuda a la evolución. Aquí les dejo un Test que pueden aplicar a sus candidatas antes de salir con ellas.
Test del hombre que busca una chica con cerebro (o una chica buscando un chico con cerebro):

1-¿Qué música te gusta? (casi cualquier respuesta será aceptable excepto reggaeton, justin bieber y otras variedades de música ligera y misógina). Ahora que si le gusta el metal, el rock y/o el blues, sabrán que tiene un buen nivel de cerebro y cultura.
a)-Reggaeton, Justin Bieber, etc.... -1 punto
b)-Cualquier otra cosa................... 0 puntos
c)-Blues, rock, jazz, metal..............+1 punto

2-¿Qué religión profesas? (será muy importante saber su nivel de adoctrinamiento religioso, pues eso marcará diversos factores, como lo influenciable que es por el entorno, el nivel de fanatismo y qué tanto piensa en algo antes de creerlo)
a)-Testigo de Jehová, Mormona, Cristiana, Ciencióloga, Musulmana, Santa Muerte, Politeísmo, etc..................-1 punto
b)-Agnóstica, panteista, libre pensadora, cree en el dios de Spinoza o simplemente no le preocupa.............0 puntos
c)-Atea..........................................+1 punto

3-¿Qué supersticiones tienes? (el pensamiento crítico será un factor esencial para asegurarte de que no busca causalidad a través del pensamiento mágico o el delirio místico)
a)-Creo en hadas, gnomos, duendes, mala suerte, creacionismo, unicornios, dios(es), vida después de la muerte, reencarnación, medicina alternativa (homeopatía, cristales, etc), reiki, superación personal (caldo de pollo para el alma), etc....................-1 punto
b)-No tengo supersticiones................0 puntos
c)-La realidad es representada por ecuaciones matemáticas y antes de creer en algo, pienso si ese algo puede ser representado a través de una ecuación matemática........................+1 punto

4-¿Estarías de acuerdo con renunciar a una vida efímera y materialista si te presento opciones que pueden satisfacer tus necesidades sin recurrir a productos comerciales dañinos? (es muy importante entender que tan esclavizada está la persona al consumismo, a las leyes de la moda y la tendencia y que tan dañado está su cerebro por la TV)
a)-Yo no puedo dejar mi Coca-Cola / Telenovelas / McDonalds / Mi Shampoo Caro / Mi estética cara / Mi Windows / Amo Procter & Gamble o Solo consumo Unilever........................-1 punto
b)-Estoy dispuesta(o) a probar alternativas sanas, naturales, sin conservadores, de código abierto, entender lo que es el copyleft y el software libre, etc................................+1 punto

5-Menciona a un icono contemporáneo que en tu opinión haya contribuido a la humanidad
a)- Ke es ikono? / Julio Iglesias / Steve Jobs / Psy .....-1 punto
b)-Mi mamá, contribuyó a la humanidad al tenerme.....0 puntos
c)-Jimmy Page / Dennis Ritchie / Linus Torvalds.........+1 punto

6-¿Qué tan geek eres? (comprensión y compatibilidad)
a)-¿Geek? Tu muy mal eh! Yo  los antros............-1 punto
b)-Me gustan los superheroes, los comics, etc.........0 puntos
c)-Bitch please! Puedo armar un robot con circuitos electrónicos / me gusta el anime seinien con profundidad de contenido / pienso mas en la materia oscura que en el maquillaje / mi show favorito es Cosmos / Richard Dawkins y Lawrence Krauss me piden consejos.......+1 punto

7-¿A que te dedicas / te gustaría dedicarte? (nivel de independencia, banalidad y pasión)
a)-A buscar el hombre ideal para que me mantenga.....-1 punto
b)-Turismo, contabilidad, etc........................................0 puntos
c)-Ingeniería, investigación, ciencias, etc.....................+1 punto

8-¿Qué tipo de comida te gusta? (evaluando su clase, su estilo y su paladar)
a)-Me gusta la comida en la calle, particularmente víceras, como mucha sal / grasa / comida chatarra y refrescos / gaseosas, me gusta el ron con refresco de cola..................................-1 punto
b)-Me da igual la comida y la bebida.....0 puntos
c)-Me gustan los sabores mediterráneos, solo cocino con aceite de oliva, me gusta un buen Chiantti u otra denominación de tinto de la Toscana, adoro el Queso Roquefort, en vez de cerveza o alcohol prefiero un buen espresso, etc.....................................+1 punto

9-¿Que tipo de noticias ves? (Para evaluar su nivel de cultura e interés por el mundo que la (lo) rodea)
a)-Me gustan los chismes de los famosos.......-1 punto
b)-No veo noticias de ningún tipo....................0 puntos
c)-Me interesa todo tipo de noticias, particularmente busco noticiarios internacionales, no sesgados por la moda o intereses creados, intento ser imparcial con los bandos en las noticias..........+1 punto

10-¿Cual es tu afiliación política?
a)-Yo siempre voto por ___xyz partido de la derecha, soy conservadora, radical, pienso que debemos poner a dios en todas nuestras monedas, me gustan los partidos que hacen mas rico a mi papi y mas jodida y pobre a la prole y a la chusma......................................-1 punto
b)-Yo siempre voto por el _____xyz partido de la izquierda, voy a mítines, plantones y pienso que el gobierno tiene la culpa de todo lo malo que pasa en mi vida....................................................0 puntos
c)-Soy apolítica(o) pues la ilusión de democracia es tan risoria como la ilusión de tener voto y decisión. El mundo es gobernado por unos pocos individuos cuyo poder se centra en algunas pocas instituciones. En vez de perder el tiempo intentando elegir un buen candidato, intento aprovechar el mundo que me rodea, tal y como es, en mi propio beneficio. No puedo cambiar al mundo, pero puedo tener la mejor vida posible sin que me afecte el gobierno, la globalización, etc...........+1 punto

Resultados:
*de -10 a -6 puntos: Tu candidato/a es un cavernícola, está a 2 minutos de tener un mazo con obsidiana y sacarle el corazón a sus enemigos.
*de -5 a -1 puntos: Tu candidato/a esta desviado del buen camino, con un poco de condicionamiento pavloviano / terapia de choques tal vez puedas hacer algo bueno con el/ella.
*de 0 a 5 puntos: Tu candidato/a solo necesita unos retoques, tal vez puedas vivir con sus placeres culposos mientras lo (a) sometes a un proceso continuo de mejora a fuerza de razón y enseñanza.
*de 6-10 puntos: Tu candidato/a es ideal, es la persona mejor preparada para estar contigo. No la(o) dejes ir; no importa su físico, sus defectos, su mal caracter o narcisismo, será tu compañera(o) de vida!

NOTAS:
-La mujer con la que me case, obtuvo 10 puntos en esta prueba.
-Si algo te ofendió de este post, puedes ignorarlo, continuar con tu vida, y simplemente no hacerme caso.
-Si terminaste de leer este post ¡Felicidades!, tienes mucho tiempo libre y paciencia; este post es de broma, o mejor dicho broma con pequeños toques de realidad aquí y allá.
Saludos a todos, desde la comodidad de la cama y lleno de ocio.

Escritorios en Linux y sus Diferentes sabores

Escrito por Enrique Pascalin (Erparom)  

**** ESCRITORIOS EN LINUX ****

Existe un poco de confusión sobre lo que significa un "Escritorio en Linux", y es que se compone de tantas cosas y hay tanta variedad, que es fácil perderse en términos, conceptos y demás.

Intentaré explicar en este post, lo que es un escritorio en Linux, cuales son sus componentes y un poco de su historia.

NOTA: Este es uno de mis post largos, pero pienso muy esclarecedor e interesante, ojalá lo disfruten. Pueden saltar entre subtítulos si no les interesa el encabezado.

**** UNA BREVE HISTORIA ****
Entre 1973 y 1982, se crearon las primeras interfaces gráficas para sistemas operativos. Xerox creó Alto en 1973 y posteriormente Star en 1981. De Apollo Computer hubo uno similar en 1981 llamado Display Manager.
Para la segunda generación, que realmente fue la que llegó al público, Apple tomo prácticamente a modo de plagio los esfuerzos de Xerox desde 1979 y crearon a partir de ellos a Lisa en 1983 y luego Macintosh en 1984.
En el mundo Unix, se formó el Andrew Project en 1982 y Blit Terminal en 1982. Dieron paso a un entorno gráfico en 1983 llamado W (desarrollado en la Universidad de Stanford). W dió paso a X, proyecto que hizo el MIT en 1984. X es el padre de todos los entornos gráficos en Unix, Linux, FreeBSD, etc.
(Windows 1.0 de Microsoft no llegó hasta 1985, siendo una copia del código fuente que Apple robó a Xerox y que Microsoft robó a Apple cuando Bill Gates trabajó algunos meses para Steve Jobs).
Todos estos escritorios tenían la idea de representar una metáfora llamada WIMP (Window, Icon, Menu, Pointing Device) que se traduce como ventanas, iconos, menús y dispositivo apuntador (mouse).
Todos los sistemas gráficos para sistemas operativos siguieron desarrollándose durante la década de los 90s, dónde Microsoft trabajó en Windows 95, Mac compró NeXT y tomó su sistema basado en Unix (mas no en X) para crear la interfase de Mac OS X, para lo cual, tomó el kernel de software libre FreeBSD y le puso encima el entorno gráfico que había fabricado NeXT para equipos Unix, como competencia de X. A esto es a lo que hoy en día llamamos Mac OS X.
Debido a que X era muy primitivo en ese tiempo, varios grupos de programadores comenzaron a crear interfaces mas estilizadas, fabricadas encima del Sistema X. Por un lado, Sun Microsystems y AT&T (dueños de unix) crearon una interfaz llamada Open Look en conjunto con la gente de Xerox, veteranos en el tema. OpenLook competía con Motif, que fue el desarrollo de la comunidad de código abierto para competir con Windows 3.11 que fue el primer Windows popular.
A finales de los 90s, otros grupos comenzaron a construir interfaces mas complejas, como CDE (hijo directo de Motif), KDE fue fundado en 1996 en Alemania para competir con CDE y Xfce fue un clon directo de CDE con algunas mejoras en 1996. Gnome llegó desde México en 1999 para competir con ambos.
Hoy en día, existen tantos entornos de escritorio, interfaces gráficas para estos, manejadores de ventanas y similares, que el Free Software es un mundo de alternativas de todas formas, colores y sabores.
**** COMPONENTES DE UN ESCRITORIO ****
Con tantos términos, vamos a esclarecer un poco cada concepto y componente.
* SISTEMA GRÁICO: En el primer nivel (layer) de todo escritorio gráfico, existe un Sistema Gráfico de Despliegue de mapas de Bits. En Linux existen X (X11 o XWindow System) desde los 80s y recientemente Wayland (2008), como un reemplazo para X11. Esta es la capa que interactúa directamente con el hardware. X11 está originalmente escrito en lenguaje C, al igual que Wayland. (La importancia de dicho lenguaje es fundamental en Unix / Linux)
* ENTORNO DE ESCRITORIO: En el segundo nivel o layer es el Entorno de Escritorio, que generalmente toma una librería de Widgets (como Motif, GTK+ o QT4) para construir una interfaz completa sobre el sistema gráfico. Generalmente los Entornos de Escritorio incluyen un Manejador de Ventanas, un Manejador de Displays, un Shell de Escritorio, una Librería de Widgets y posiblemente un Compositor de Ventanas, para decorar la forma y funcionalidad de las mismas. Los Entornos de Escritorio (completos) mas populares para X son KDE, Razor-QT, Gnome, Xfce, LXDE. En el caso de Wayland, muchos están portando su escritorio, existen diversos experimentos de Canonical (MIR) Gnome (Gnome3) y KDE (KDE4+).
* LIBRERIA DE WIDGETS: Las librerías de widgets son las librerías de componentes sobre los que un entorno de escritorio se integra. Las mas populares son GTK+ escrita en C y QT4 escrita en C++. También existen otras mas exóticas como GNUStep que usa Objective-C como Mac OS X.
* MANEJADOR DE DISPLAYS: La mayoría de escritorios requieren de una manera de manejar los displays (o dispositivos de salida / monitores) lo cual generalmente también está vinculado con un inicio de sesión en un determinado escritorio. KDE usa kdm, Gnome usa gdm, LXDE usa lxdm, etc...
* MANEJADOR DE VENTANAS: (Lo que muchos confunden con Entorno de escritorio). El manejador de ventanas, es la forma en que un escritorio despliega las aplicaciones en pantalla a modo de ventanas, maneja cual tiene foco, cual esta minimizada, cual está cerrada, etc. Se han escrito varios manejadores de ventanas además de los default que tiene cada escritorio. Por ejemplo, KDE usa Kwin, Gnome 2 usa Metacity mientras que Gnome 3 usa Mutter (que fue pensado para Wayland), Xfce usa Xfwm4, LXDE usa OpenBox, etc. Es posible usar diversos manejadores de ventanas en el mismo escritorio o switchear entre ellos. Los manejadores de ventanas tienen 3 tipos:
a)-Composición (Compiz, KWin, Metacity, Mutter, Xfwm) que es el tradicional.
b)-Tiling (Awesome, Dwm, i3, Ion, XMonad, etc)
c)-Stacking (4Dwm, AfterStep, Fluxbox, OpenBox, etc)
Tienen paradigmas distintos, y es posible tener sobre un mismo escritorio (digamos Gnome 2) a varios gestores de ventanas como OpenBox, Metacity y Compiz.
* SHELL GRÁFICO: Para cambiar la funcionalidad base de un Entorno de Escritorio, se han diseñado una especie de Skins que implementan una visualización y/o funcionalidad distinta. Es por ello, que los entornos de escritorio modernos, se basan en shells gráficos para poder personalizar sus componentes. Existen diversos Shells gráficos populares, que son escritos por encima de un entorno de escritorio para modificarlo; por ejemplo, Cinnamon, Enlightenment, GNOME Shell, Hawaii, KDE Plasma, Maynard y Unity son Shells escritos para tener un escritorio distinto al que están basados. El caso de Enlightenment, es además de shell gráfico un compositor de ventanas, por lo que siendo muy sencillo, se le llama escritorio parcial, que puede fungir como escritorio completo.
* COMPOSITOR DE VENTANAS: Funciona por encima del manejador de ventanas, y la idea es desplegar las ventanas de una forma, estilo o efectos particulares. ejemplos: Enlightenment, KWin, Mutter, Muffin, MIR, Weston.
**** ENTORNOS MODERNOS MAS POPULARES ****
Dadas las explicaciones de las previas secciones, es fácil entender porqué existe tanta confusión con los entornos gráficos en Linux / Unix / FreeBSD. Mientras que Windows y Mac OS X tienen una sola versión de cada cosa y cada versión suele ser incompatible con la anterior (obsolescencia programada para sacar mas dinero), muchos usuarios nuevos y no tan nuevos en Linux se confunden con tantas opciones.
Así que sin importar si son Entornos de Escritorio Completos, solo Shells o pequeños Manejadores de Ventanas, mientras se presenten como la alternativa gráfica de una u otra distribución Linux, pondré aquí a los mas populares, su propósito general y a quién están dirigidos.
*Gnome 3: Gnome 3 usa el sistema de Shells, su shell por default es Gnome Shell. Rompe el paradigma convencional de escritorio y fusiona un poco las ideas de Mac OS X, Enlightenment y otros para formar un escritorio con una apariencia moderna. Usa GTK3 y en vez de construir sus interfaces directamente en C o Python, usa HTML5 y Javascript. Gnome3 esta rápidamente migrando de X a Wayland. Gnome3 es el mas usado, pero irónicamente, ha sido uno de los mas criticados por expertos. Cuando salió, el mismo Linus Torvalds no quiso migrar a él; probó KDE4 que tampoco le gustó y terminó pasando a Xfce. Recientemente le dio una oportunidad. Gnome3 esta diseñado para competir con Windows 8 y poder ser usado en diversos dispositivos, aunque en esto último ha fallado por la gran cantidad de recursos que consume. Nació en EUA (originalmente en México)
*KDE4: Es la última generación de escritorios KDE, basado netamente en QT4, se enfoca en ser altamente configurable en vez de sencillo. Su consumo de recursos también es alto, y al estar basado 100% en C++ con QT4, tiene pocas variantes. Se considera elegante, muy completo y lleno de herramientas muy interesantes. Es similar a Windows 7 (De hecho hay buenas suposiciones al respecto de que Windows Vista/7 se basó en KDE 4). Nació en Alemania
*Mate: Este proyecto nació porque Gnome abandonó por completo el soporte y actualizaciones para Gnome 2. Por lo que en Argentina un talentoso programador hizo un fork de Gnome 2, para estabilizarlo, trabajar en sus bugs y continuando con su soporte. Mate es una elección sensata en cuanto a rendimiento / recursos y conserva el paradigma convencional de escritorio.
*Unity: Este es un Shell para Gnome 3 inventado por Canonical en lo que tienen listo MIR. La idea de Unity es portarlo a diversos dispositivos como smartphones, tablets, smartTVs, etc... Por lo que su interface resulta siempre algo que parece diseñado minimalista para una pantalla touch. Es poco configurable y ha sido el escritorio de Linux mas criticado de la historia, por detrás del mismo Gnome 3. Unity lo Usa Canonical en Ubuntu a partir de la versión 11.04 Unity está creado en UK
*Cinnamon: Esta fue la respuesta de Linux Mint a Gnome 3. Su creación es completamente análoga a Unity, pero por tratar de rescatar el paradigma convencional de escritorio por encima de Gnome 3, su adopción ha sido muy existosa. Linux Mint como esfuerzo comunitario, ha sido desarrollado en diversas partes del mundo
* Xfce: Xfce es muy antiguo. La idea central es el rendimiento y el minimalismo (a diferencia de los previos). Por lo que puede ejecutarse en diversos entornos con bajos recursos. Xfce es elegante, sencillo y minimalista. Su desventaja es que no es intuitivo. Se basa igual que Gnome 2 en GTK+2 por lo que es sumamente portable con dicho sistema y con Mate. No incluye tantas aplicaciones como KDE o Gnome precisamente por perseguir el minimalismo y el bajo consumo de recursos. Su paradigma es distinto al escritorio convencional.
*LXDE: Es el mas ligero de los entornos de escritorio. Debido a ello, en ocasiones se requiere un esfuerzo no despreciable para configurarlo, sin embargo, funciona con tan escasos recursos, que puede correr en las máquinas mas viejas. LXDE recuerda mucho a Windows desde 98 hasta Vista. Usa OpenBox como gestor de ventanas. Originalmente basado en GTK, LXDE a partir del 2013 fue portado a QT4 por los problemas que GTK3 presentaba.
Esta lista no es exhaustiva.
**** DISTROS Y SUS ENTORNOS ****
Muchas distros elaboran versiones de acuerdo a cada escritorio; como Canonical que tiene Ubuntu para Unity, Xubuntu para Xfce, Lubuntu para LXDE, Kubuntu para KDE, etc. Otro caso es Mint, que tiene escritorios por default para Cinnamon, Mate, Xfce y KDE.
Muchas otras distros tienen uno por default siendo muy sencillo instalar cualquier otro, como Fedora que usa Gnome 3.
Otras distros mas, se basan precisamente en el uso de 1 solo escritorio altamente costumizado como Bodhi, Elementary OS, Zorin, etc.
Por último, hay distros en los que cualquier (o casi cualquier) entorno de escritorio se puede instalar desde el instalador y otros mas tan sencillamente como con una sola instrucción. Este es el caso de Arch, Debian, etc.

**** CONCLUSIONES ****
Hay distros para todos gustos y tipos de computadoras. mi veredicto personal, es usar un equilibrio entre un escritorio muy completo, uno muy ligero y uno fácil de configurar, además de uno muy estable, no muy nuevo para que no tenga muchos problemas y fallos. Y para mí, el único que cubre dicho criterio, es Xfce y Mate. Yo, me quedo con Mate.