Por qué Google necesita ganar en el tema social

Escrito por Juanjo el Sunday, 24 de April del 2011 a las 5:17 pm

Google está tratando desesperadamente de dar un paso adelante en el tema “social”. De hecho, el nuevo CEO Larry Page ha condicionado el bono de los empleados de la compañía al éxito de la estrategia social de Google.

Por una parte tiene sentido: Facebook es un negocio enorme, cada vez más importante y que crece a un ritmo vertiginoso, por lo que Google no debería quedarse atrás en el tema social.

Pero por otro lado, también es un poco desconcertante ¿Por qué a Google debería importarle tanto las redes sociales? Está claro que son interesantes, pero ¿por qué debería ser tan vital para una compañía de búsquedas entrar en el tema social? Actualmente no se puede decir que está perdiendo dinero. De todas formas, ¿no es “social” una palabra de moda bastante vaga?

Hay más razones: Facebook está inventando nuevas formas de publicidad y parece que se va a hacer con una gran parte del display advertising, el cuál Google necesita para crecer más allá de su ya bastante maduro negocio de búsquedas; Facebook tiene mucha información valiosa sobre los intereses y preferencias de sus usuarios, y Google quiere obtener una cantidad de información similar. Facebook también compite muy exitosamente contra Google por los mejores cerebros y talentos del sector, y Google necesita ser vista como la compañía más puntera para atraer a los mejores ingenieros. Todo eso es correcto.

Pero nada de eso explica por qué Google está tratando a Facebook como una amenaza mortal que cada vez parece serlo más.

El mayor motivo es obvio aunque nadie suele comentarlo: en internet, el tráfico es dinero y poder, y la compañía que controla el tráfico obtiene el dinero y el poder.

Es por eso que el tema “social” es más que una palabra de moda (si bien es cierto que lo es), y por qué es realmente enormemente importante. Las redes sociales se están llevando un porcentaje cada vez mayor del tráfico en Internet, que al final se traduce en dinero y poder.

En un sentido estricto, la gente siempre buscará cosas en internet, y entre esas cosas siempre habrá cosas que se pueden comprar y a las que las compañías querrán darle publicidad, por lo que siempre habrá muchísimo dinero para la empresa con el motor de búsquedas más importante.

Pero también hay dinero para construir mainframes y vender servicios de consultoría, y sin embargo nadie ve a IBM como la compañía tecnológica más poderosa del mundo, aún cuando lo fue durante muchas décadas y aún sigue siendo una compañía enorme.

Pensémoslo desde la perspectiva del propietario de un sitio web, que bien podría ser un blog o Amazon. Durante la mayor parte de la década pasada, la mayor fuente de tráfico fue, de lejos, los buscadores. Por lo que el tema que más te preocupaba si querías tener éxito en tu web eran las búsquedas, bien mediante SEO o mediante Márketing en las ellas. Toda el entorno de la web giraba alrededor de las búsquedas. Compañías enteras fueron concebidas y construidas alrededor de este hecho.

Sin embargo, en la actualidad empresas grandes y pequeñas están diversificándose y alejándose de su dependencia de Google.

Las redes sociales conforman entre un 30% y un 50% del origen de las visitas a los principales media sites. Las fuentes de tráfico que más crece a sitios comerciales, que es donde está el dinero, son las redes sociales, y si hay algo que la historia de internet nos ha enseñado es que si algo es pequeño pero crece muy rápido, probablemente con el paso del tiempo se convertirá en enorme. La mayoría de las startups de hoy en día – reconociendo que tienen recursos limitados y que el SEO ha convertido a Google en víctima de su propio éxito, al tener un exceso de resultados de búsqueda – están basando su estrategia de distribución en Facebook y en Twitter, no en Google.

Cuando la gente habla sobre la amenaza que representan las redes sociales a Google, suelen referirse al modo en que las personas están buscando información, preguntando primero a sus amigos antes de ir a Google. Sin embargo, la gente seguirá usando casi siempre los ordenadores para buscar información, puesto que el resultado suele ser eficiente.

Por tanto, la amenaza de las redes sociales a Google no es que lo social pueda reemplazar a la búsqueda como tal, sino que parece inevitable que lo social se convierta en una fuente de tráfico igual o mayor a las búsquedas, y por tanto en mayor poder y dinero que éstas últimas.

Visto así, puede o no suponer una amenaza mortal al core del negocio de las búsquedas de Google. Lo que sí es seguro, es que plantea una amenaza mortal a la forma que tiene Google de verse a si misma, no sólo como la compañía en internet más rentable y poderosa, sino como el centro mismo de internet, alrededor de la cuál giran las demás.

Eso es lo que tiene aterrado a Larry Page. Y tiene razón para estarlo.

(Traducción bastante libre del artículo The Obvious Reason Why Google NEEDS To Win Social That Nobody Talks About)

Comentarios (1)

Categoria: Actualidad,Informática,Tecnología

Primeros pasos con Threading Building Blocks

Escrito por Juanjo el Monday, 24 de January del 2011 a las 7:33 pm

Hace poco, como tema de una presentación en la Facultad, @jmbarroso y yo estuvimos “jugando” con una librería de paralelización de Intel de la que no tenía ni idea de su existencia y que me dejó francamente sorprendido. Se llama Threading Building Blocks (TBB), lleva algunos años en el mercado y en este post explicaré someramente qué es, para qué sirve, y qué viene a mejorar en el mundo de la paralelización.

TBB – Qué es

TBB es una librería escrita en C++, para programas hechos en este lenguaje (por ahora), que facilita la paralelización de los mismos en procesadores multicore gracias a las funciones y estructuras que provee. Su objetivo es lograr un paralelismo escalable, haciendo uso de C++ estándar, que además abstraiga al programador de los detalles de la plataforma y del manejo de hilos, que exprese el paralelismo de una manera más simple y que realice un mejor aprovechamiento de los recursos de los procesadores.

TBB – Ventajas

TBB permite expresar el paralelismo como Tareas en lugar de Hilos. De esta forma, no es necesaria llevar a cabo manualmente la gestión de los mismos: no más create, join, manage, etc. Dichas tareas son asignadas automáticamente a hilos, haciendo un uso eficiente de los recursos del procesador.

Una característica curiosa es el uso de una técnica denominada task stealing; la librería se encarga de asignar/desasignar tareas entre procesadores de manera transparente al programador, según la carga de trabajo actual, para equilibrar el trabajo de todos. Toda esta “abstracción” permite desarrollar soluciones más simples de alto nivel.

Además, es compatible con otros paquetes de paralelización, por lo que se puede optar por usar algunos componentes de TBB bajo ciertas circunstancias, y usar diferentes soluciones (OpenMP, gestión de hilos manualmente) en otras.

TBB – Contenido

La librería provee soluciones de distinta índole para facilitar la paralelización de las aplicaciones, que se pueden dividir en:

Algoritmos básicos:
• parallel_for
• parallel_reduce
• parallel_scan

Algoritmos avanzados:
• parallel_while
• parallel_do
• pipeline
• parallel_sort

Contenedores:
• concurrent_queue
• concurrent_vector
• concurrent_hash_map

Reserva de memoria escalable:
• scalable_malloc
• scalable_free
• scalable_realloc
• scalable_calloc

Exclusión mutua:
• mutex
• spin_mutex
• queuing_mutex
• spin_rw_mutex
• queuing_rw_mutex
• recursive mutex

Operaciones atómicas
• fetch_and_add
• fetch_and_increment
• fetch_and_decrement
• compare_and_swap
• fetch_and_store

Timing:
• Método thread_save portable para procesar el tiempo transcurrido.

Planificador de tareas
• Acceso directo para controlar la creación y la ejecución de tareas

Instalando TBB.

La última versión estable de la librería para Windows, Linux y Mac se puede encontrar aquí.

La instalación resulta bastante sencilla. En mi caso con la versión para Mac OS, que no diferirá mucho de la disponible para Linux:

Se descomprime el tgz descargado. Yo lo hice en un directorio de mi home donde instalo los frameworks y librerías que utilizo (grails, maven, gradle, mercurial, etc) pero /opt/ podría ser otra ubicación adecuada. También he creado un enlace simbólico “tbb” que apunte a la última versión, para usarlo al referirme a la librería, en vistas a simplemente actualizar el enlace en caso de que siga descargando en el futuro versiones de la librería y quiera cambiar fácilmente entre ellas:

juanjo:bin juanjo$ pwd
/Users/juanjo/bin
juanjo:bin juanjo$ ls -ltr
drwxr-xr-x   4 juanjo  juanjo       136 24 ene 17:21 tbb30_20101215oss
juanjo:bin juanjo$ ln -s tbb30_20101215oss/ tbb
juanjo:bin juanjo$ ls -ltr
drwxr-xr-x   4 juanjo  juanjo       136 24 ene 17:21 tbb30_20101215oss
lrwxr-xr-x   1 juanjo  juanjo        22 24 ene 17:28 tbb -> tbb30_20101215oss/

Es necesario modificar el archivo bin/tbbvars.sh para asignar a la variable TBB30_INSTALL_DIR la ruta al directorio raíz de la librería:

juanjo:tbb juanjo$ pwd
juanjo:bin juanjo$/Users/juanjo/bin/tbb
juanjo:bin juanjo$ cat -n bin/tbbvars.sh
 
# Threading Building Blocks Home
    30    TBB30_INSTALL_DIR=/Users/juanjo/bin/tbb

Cargamos las variables definidas en el fichero, que se deberá hacer cada vez que se abra una terminal y se desee trabajar con la librería. La alternativa es añadir la línea al fichero ~/.bash_profile para hacerlo automáticamente al cargar sesión:

juanjo:bin juanjo$ source bin/tbbvars.sh

Para probar si todo está configurado correctamente, intentamos compilar y ejecutar uno de los ejemplos incluídos en la distribución:

juanjo:tbb juanjo$ cd examples/GettingStarted/sub_string_finder/
juanjo:sub_string_finder juanjo$ make
g++ -O2 -DNDEBUG  -o sub_string_finder sub_string_finder.cpp -ltbb
g++ -O2 -DNDEBUG  -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb
g++ -O2 -DNDEBUG  -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb
./sub_string_finder_extended
Done building string.
Done with serial version.
Done with parallel version.
Done validating results.
Serial version ran in 8.01188 seconds
Parallel version ran in 4.1834 seconds
Resulting in a speedup of 1.91516

En efecto, todo funciona, y ya estamos en disposición de empezar a utilizar los componentes que nos provee TBB. De hecho, en el ejemplo que lanzamos se observa una de las bondades: un speedup del 91% que no está nada mal.

En el próximo artículo veremos cómo hacer uso de los componentes incluídos en la librerías, paralelizando un código secuencial y desgranando el código fuente del mismo.

Más información:

• Página Oficial de Threading Building Blocks.

Comentarios (3)

Categoria: Coding,Informática,Tecnología

Un Novato en el Agile Open Spain 2010 (I)

Escrito por Juanjo el Wednesday, 17 de November del 2010 a las 1:21 am

El fin de semana pasado tuve la enorme suerte de asistir al Agile Open Spain 2010, un evento celebrado anualmente, donde se reúnen los entusiastas de las Metodologías Ágiles en España para compartir experiencias y, en menor medida, rajar de las cárnicas :-P

Yo, en mi situación de virgen (entiéndase como persona que asiste por primera vez), no tenía ninguna expectativa puesta en el evento, pues apenas había indagado en Internet sobre celebraciones de años anteriores, o sobre conferencias similares en otros países. Sin embargo, ser miembro de Agile Canarias y, por tanto, fiel admirador de esta “forma” de ver el desarrollo del software y de todas sus bondades asociadas, me convenció de que tomar un vuelo a Barcelona y dejarme caer por la Universidad La Salle, junto a Juanma (@jmbarroso), Fran (@fran_reyes) y Yeray (@ydarias) (en adelante: Comando Muyayo) no iba a ser tiempo perdido. Y vaya que no lo fue. Lo juro por Snoopy.

Vayamos por partes.

Para hacer honor a la verdad, el viaje no empezó como debería haber empezado. Al llegar al aeropuerto de Los Rodeos el jueves por la tarde, mi compañero de viaje (Juanma) y yo nos encontramos con la agradable (léase con ironía; mucha ironía) sorpresa de que nuestro vuelo en Vueling había sido replanificado. ¿Qué significaba eso? Que mientras nosotros estábamos dirigiéndonos al punto de facturación, el avioncito ya iba por Cádiz, kilómetro arriba, kilómetro abajo. Supuestamente, nos comunicaron el cambio por e-mail hacía dos meses. Nosotros, ni nos enteramos.

– ¿Y ahora qué hacemos? – nos preguntamos, contemplando la opción de ver el AOS desde casa, con Fran retransmitiendo por streaming con el NexusOne.

– ¡Improvisación! – decidimos al fin, negándonos asumir los designios del perro destino.

There’s an old saying that goes: “Cuando un amigo se muda, no pierdes un amigo; ganas una casa donde quedarte” Y por suerte para nosotros, dos amigos viven ahora en Madrid. Una simpática vendedora de Spainair nos consiguió un vuelo a Barcelona, vía Madrid, por un precio razonablemente económico, con el único contratiempo de tener que hacer noche en la capital. Un par de llamadas, y a las tres horas estábamos en Tribunal, degustando unas tapas terriblemente buenas con Sergio y Aurora (@aurocj). Gracias chicos, por acompañarnos esa noche ;-)

Al día siguiente, y sin más contratiempos, llegamos a Barcelona, a una pensión más bien cutre (lo que tiene reservarla dos horas antes de viajar…) pero limpia, suficiente para un fin de semana. Por la tarde, nos reunimos con Fran y después de jartarnos (sí, con “j”; con “h” parece que comimos menos) en el almuerzo, cerca de Plaza Catalunya, nos dirigimos al primer día del Agile Open Spain 2010.

Una vez recogida nuestras acreditaciones y almacenar la contraseña de la Wi-Fi, pasamos a un salón donde ya estaban reunidos prácticamente todos los asistentes (200 almas). Reconocí a Alejandro (@alejandropgarci), de Autentia, y a Dani Latorre (@dani_latorre) de Jobsket, dos auténticos cracks a los que conocí a su paso por Tenerife. Una vez sentado, empezaron las gratas sorpresas:

– El modelo de conferencia difiere radicalmente de todos los eventos y charlas a los que he asistido alguna vez. Este formato se conoce como Open Space, y al parecer, tiene como principal característica la carencia de una agenda predefinida antes de empezar. Con esto se consigue que los asistentes, sentados en un círculo y ayudados por un moderador/facilitador, organicen por si mismos los temas en los que están interesados participar u asistir.

Open Space

– Una vez propuestos las ponencias, se exhortaba a los promotores de las mismas a reunirse con personas que hubiesen expuesto temas afines, para discutir la posible mezcla de los mismos en una única ponencia.

– Para hacer honor a las metodologías ágiles, las charlas se ubicaron en un panel en la pared, y “ágilmente” se fueron distribuyendo las ponencias en las clases y horarios disponibles, cambiando varias veces las disposiciones según le interesaba a unos o a otros. Sinceramente, en su momento dudé de dicha forma de proceder, y llegué a creer que pasarían veintiséis años y catorce días antes de que nos pusiéramos de acuerdo sobre cómo deberían quedar las charlas, pero apenas quince minutos de rotaciones y algún que otro “¡No me hagan eso, joder! ¡A las 9 de la mañana no!” fue suficiente.

– Otro problema: el 70-80% de las charlas propuestas parecían muy pero que muy interesantes, y el solapamiento de muchas te obligaba a hacer una elección dolorosa, muy cerca del “¿A quién quieres más, a papá o a mamá?”. Después de algunas reflexiones personales, logré establecer un planning de las ponencias a las que quería asistir, y aún sin estar seguro de haber hecho la elección correcta, pensé que si al final alguna no me interesaba, simplemente podría cambiar de aula. No cambié ninguna.

Panel de Conferencias

Terminé el día visitando a un amigo de la infancia, por lo que me perdí la cena y las cañas respectivas de esa noche. Por suerte para todos, Yeray estaba ahi para contarlo ;-)

En el próximo post, hablaré de las ponencias como tal y de las sensaciones que me llevé de las mismas. Puede adelantar que fueron muy inspiradoras. Dudo que pueda expresar en palabras lo mucho que te hacen pensar sobre la forma de ver tu trabajo diario, y en la ambición necesaria para mejorar diariamente en el plano profesional que, como siempre, afecta a cómo afrontas el plano personal.

Aún así, lo intentaré. Permanezcan atentos.

PD: Las fotos son de Juanma y Yeray ;-)

Comentarios (2)

Categoria: Coding,Informática,Personal

Diez Consejos para proteger tu privacidad en Facebook

Escrito por Juanjo el Monday, 21 de September del 2009 a las 10:01 pm

   Hace poco leí un artículo en inglés sobre consejos de privacidad en Facebook que me han parecido muy importantes conocer: 10 Solid Tipos to Safeguard Your Facebook Privacy

   Las redes sociales estan experimentando una masificación brutal en su utilización, y me he encontrado casos, sobre todo en personas poco acostumbradas a la navegación en la red y a los peligros que conlleva su mala utilización (nativos no digitales) exponiendo muchísimos datos sensibles sobre ellos mismos que no deberían estar circulando en Internet.  También es cierto que muchísimas personas, que a priori se desenvuelven mejor en ámbitos digitales, incurren en los mismos problemas y defectos, probablemente por falta de conocimiento, o por simple dejadez. 

   Teniendo en cuenta de que en Facebook está hasta mi madre, literalmente hablando, he traducido libremente los consejos para que puedan leerlo las personas que no controlen el inglés:

1 – Organiza a tus amigos en Listas

   ¿Qué haces cuando tu jefe, tu madrastra, o algún "conocido" te envía una petición de amistad en Facebook? Usar las listas de amigos, que es la base con la que cuentas para mantener tu privacidad. Elige Amigos > Todos mis amigos  en el menú superior, y luego utiliza el enlace Crear nueva lista para construirlas. Algunos ejemplos pueden ser Compañeros del trabajo, Familia, Compañeros de la Universidad, etc. Tus amigos no pueden ver tus listas, así que puedes nombrarlas de la forma que mejor se adecúe a tus necesidades. (Recomiendo, no obstante, evitar nombres como "Tías buenorras", "Pobres diablos" o similares :P )

01

   Tip: En la barra de navegación de la izquierda, puede que no se muestren por defecto todas las listas que has creado. Haz click en "Más" para verlas todas, y luego selecciona y arrástra aquellas que quieras ver por encima del separador.

2 – Personaliza la privacidad de tu Perfil

   Haz click en Configuración > Configuración de Privacidad > Perfil. Selecciona qué partes de tu perfil podrán ser vistas por quién.

02

   Si eliges la opción "Personalizar" en el menú seleccionable, puedes ser mas especifico. Es aquí donde las listas de amigos del punto anterior se convierten en útiles de verdad.

03

   También ve a la pestaña Información de Contacto y elige cuántos datos de contacto quieres que sean compartidos en Internet.

3 – Establece el Nivel de Privacidad de Facebook en los Álbumes de Fotos

   En la pestaña Fotos de tu perfil, haz click en Privacidad del Album. Aquí puedas usar de nuevo tus listas de amigos para establecer el nivel de privacidad para cada álbum.

04

   Ten en cuenta que tus fotos de perfil van a un álbum especial que está siempre visible para todos tus amigos (no es muy recomendable que tu jefe vea la última tranca a base de tequilas que pillaste)

4 – Restringe la visibilidad de las búsquedas

   Haz click en Configuración > Configuración de Privacidad > Búsquedas para establecer la visibilidad de tus datos cuando alguien está usando las búsquedas en Facebook. Este punto es una forma muy importante de salvaguardar tu privacidad. Puedes seleccionar también qué se mostrará en los resultados.

05

5 – Controla los envíos automáticos al Muro y las actualizaciones de tus acciones

   Tus acciones en Facebook como comentarios, gustos, "galletas de la suerte", aparecen resaltados en las páginas de inicio de todos tus amigos. No puedes usar listas de amigos aquí, así que sólo puedes activarlo o desactivarlo. Ve a Privacidad > Noticias y Muro y elige si quieres que tu jefe o tu ex sepan que estás enrollado con alguien.

06

6 – Establece la política de privacidad de tu Muro

   Ve a la página de tu Perfil, haz click en Opciones > Configuración bajo la caja de estados.

07

Aquí puedes controlar si tus amigos pueden postear en tu Muro, y quierenes pueden ver los mensajes hechos por tus amigos.

7 – Evita aparecer en Anuncios

   Facebook tiene dos tipos de publicidad: de terceras partes y de Facebook. Los anuncios de terceras partes actualmente no pueden usar tus fotos, pero hay un ajuste para no permitirlo en el futuro. Ve a  Configuración > Configuración de Privacidad > Noticias y Muro > pestaña Anuncios de Facebook y desactívalo.

08

Los anuncios de Facebook que se muestran a tus amigos son sobre ‘acciones sociales’ como convertirse en fan de algo. También se puede desactivar en el pie de la página.

8 – Protégete de las aplicaciones de tus amigos

   Ve a  Configuración > Configuración de Privacidad > Aplicaciones, haz click en la pestaña Configuración y desmarca todas las opciones. Esos ajustes controlan qué información sobre ti es visible en las aplicaciones instaladas por tus amigos. Por defecto, están marcadas como visibles, lo que significa que tus preferencias religiosas, sexuales y políticas, además de tus fotos, etc, son accesibles por mas de un millón de desarrolladores de aplicaciones de Facebook en todo el mundo, cada vez que uno de tus amigos realiza una prueba, juega, o ejecuta cualquier otra aplicación. Esto es, obviamente, un tema relacionado con tu privacidad.

09

   Probablemente, este es el aspecto más malentendido de la política de privacidad de Facebook. Esos ajustes controlan qué pueden ver sobre ti las aplicaciones instaladas por tus amigos, aún cuando tu no lo hayas instalado.

   ¿Por qué es importante esta aclaración? Porque estos ajustes no influye en lo que compartes en las aplicaciones instaladas por ti. Para controlar ésto está el siguiente punto.

9 – Privacidad de tus Aplicaciones

   No hay forma de controlar qué datos ven las aplicaciones; es un dilema de todo-o-nada. En este enlace (Inglés) puedes ver qué pueden saber sobre ti y sobre tus amigos los desarrolladores anónimos de aplicaciones, por el simple hecho de completar un test.

   Hay una aplicación llamada Privace Mirror, que permite averiguar qué puede que sepan las aplicaciones de ti y de tus amistades. Si realmente quieres saber exactamente qué datos del perfil de cada uno de tus amigos es visible para desarrolladores, Privace Mirror lo muestra en detalle.

   Lo único que puedes hacer es autorizar únicamente a aquellas aplicaciones que necesitas y en las que confíes. Ve a  Configuración > Configuración de Aplicaciones en el menú superior. Cambia en el menú seleccionable la opción Usados Recientemente por Autorizados. Así puedes ver qué aplicaciones has autorizado para acceder a toda tu información del perfil. Elimina todas aquellas que ya no necesitas (en mi caso encontré 64, inútiles todas ellas… qué barbaridad).

10

   También revisa la lista de aplicaciones "Con permisos para publicar" y "Con permisos adicionales concedidos" para eliminar los que no quieres.

10 – ¿Quieres salir de Facebook? Elimina tu cuenta, no sólo la desactives.

   En Facebook es bastante fácil poder desactivar tu cuenta, simplemente yendo al menú Ajustes. Pero la desactivación mantiene toda tu información de perfil en Facebook, incluyendo fotos, amigos, etc. Si lo que en realidad quieres es eliminar permanentemente la cuenta, haz click aquí para enviar una petición de baja.

Ten en cuenta que:

   – Hay un retraso indeterminado entre el envio de la petición y la eliminación real.
   – Si te autenticas en Facebook, la petición se cancela automáticamente.
   – Parece que no hay forma de confirmar si tu petición fue completada.
   – Incluso después de la baja permanente, Facebook dice que copias de tus fotos “pueden permanecer en sus servidores por razones tecnicas”.

   Aparte de todo esto, has de tener en cuenta que de vez en cuando aparecen noticias de fallos de seguridad en Facebook, que pueden exponer tu información privada en Internet. Es mejor evitar usar Facebook para todo lo que pueda causarte problemas y comprometerte, quizás no en estos momentos, pero si más adelante. Todo lo que publiques va a estar ahí por mucho, mucho tiempo.

Escribir comentario

Categoria: Informática,Tecnología

Tips de Supervivencia: Atajos de teclado en Eclipse

Escrito por Juanjo el Saturday, 7 de February del 2009 a las 2:22 am

Después del primer tip de supervivencia sobre la autenticación automática vía SSH (que me permite ahorrar unos cuantos segundos al día) publico este otro sobre los atajos de teclado en Eclipse, para aprovechar una de las características más útiles del editor.

Todos los programas tienen shortcuts (atajos de teclado), y prácticamente todo el mundo utiliza alguno. Probablemente todo el que trabaje con algún entorno de programación hace uso de varios de ellos con total naturalidad, casi sin percatarse. Pero también me he dado cuenta de que hay muchos compañeros de clase que se conforman con muy pocos, casi todos básicos, bien porque no conocen los demás atajos, bien porque no consideran necesario realizar el esfuerzo de aprenderlos y utilizarlos (no solo en Eclipse, sino en otras herramientas: Vim, la Terminal, etc). Bien, yo creo que son indispensables si se desea programar con rapidez y soltura, o manejar las perspectivas/opciones/vistas de Eclipse con celeridad sin tener que hacer uso del ratón, que si bien es más cómodo, nos obliga a retirar las manos del teclado (nuestra herramienta de codificación), haciéndonos perder algunos segundos innecesariamente.

Yo no los aprendí todos de golpe; poco a poco los fui asimilando paulatinamente, conforme alguien me revelaba su existencia y su utilidad. Paso a detallar los shortcuts que utilizo diariamente:

Primero, los más básicos no sólo de Eclipse, sino de cualquier editor (de texto, imágenes, etc):

  • CTRL + X : Cortar la selección.
  • CTRL + C : Copiar la selección.
  • CTRL + V : Pegar la selección.
  • CTRL + Z : Deshacer última acción.
  • CTRL + Y : Rehacer última acción desecha.

Estoy seguro que todos los usamos periódicamente. Es más cómodo también realizar la selección desde el teclado, haciendo uso de SHIFT + Flechas, ayudado de las teclas Inicio, Fin, RevPág, AvPág, y CTRL (Windows/Linux) o ALT (Mac).

Los siguientes son específicos de Eclipse, y son los que contienen la verdadera chicha del tema. Están organizados de mayor relevancia (bajo mi singular y subjetivo punto de vista) a menor:

  • CTRL + BARRA_ESPACIADORA : Autocompletado de metodos/variables/etc.
  • CTRL + SHIFT + R : Búsqueda de un recurso (código fuente, jar, xml, properties…) en los proyectos abiertos (sin tener que ir al explorador de paquete a buscarlo).
  • CTRL + SHIFT + G : Buscar referencias al método/clase en el Workspace. El único caso en que yo prefiero usar el botón derecho -> References -> Proyect, porque si hay muchos proyectos abiertos tarda más en hacer la búsqueda.
  • CTRL + O : Ver métodos/atributos de la Clase.
  • CTRL + D : Eliminar una línea.
  • CTRL + M : Maximizar/Minimizar la ventana activa.
  • CTRL + I : Corregir indentacion.
  • ALT + UP_ARROW / DOWN_ARROW : Subir/Bajar una línea. Respecto a éste, me costó muchísimo quitarme la maña de seleccionar las líneas que deseaba, cortarlas, moverme a donde quería, y pegarlas.
  • CTRL + T : Arbol de Herencia (para ver las clases que implementan una interfaz, por ejemplo).
  • CTRL + F : Búsqueda en el fichero actual.
  • CTRL + H : Buscar en todo el proyecto/workspace (dentro de ficheros java, jars, xmls, htmls, Spring beans…)
  • CTRL + ‘/’ (CTRL + SHIFT + 7): Añadir/quitar comentarios “//”.
  • CTRL + L : Ir a una línea específica.
  • CTRL + SHIFT + L : Ver todos los atajos de teclado.
  • ALT + SHIFT + C : Cambiar la firma del método actual (parámetros, nombre, tipo retornado, etc… los cambia en todas las clases que hagan uso del método).
  • CTRL + AV_PAG / REV_PAG : Siguiente/Anterior pestaña de las abiertas en la ventana activa.
  • CTRL + E : Ver las pestañas de código fuente para seleccionar una.
  • CTRL + ‘+’ (del teclado numérico) : Expandir un bloque entre llaves (cuando solo se muestra la firma).
  • CTRL + ‘-’ (del teclado numérico) : Contraer un bloque (para mostrar sólo la firma).

En modo Debug añadiría también:

  • F5 : Entrar en una llamada.
  • F6 : Ir a la siguiente línea de código (“Step”).
  • F7 : Ir a la sentencia de retorno del método.
  • F8 : Continuar hasta el siguiente breakpoint.
  • CTRL + Q (sobre un elemento) : Inspeccionar estructura y valores del elemento (p.e. una variable).

Hay otros dos atajos que debería usar, pero no lo hago. El primero, porque utilizo CTRL + F, y el segundo, porque sigo usando el ratón (aunque ya me he comprometido conmigo mismo a cambiar esto :P )

  • CTRL + J : Búsqueda incremental (como Firefox).
  • CTRL + 1 : Arreglo rápido. Es equivalente a pulsar sobre la “x” que sale al lado de la línea que contiene errores en el código fuente, sugiriendo soluciones.

Para finalizar, dos apuntes más:

- Todos estos atajos son configurables; pueden ser adaptados a nuestras preferencias personales. En Windows->Preferences->General->Keys está la lista de todos los ellos y su configuración asociada
.
- Existe un Plugin para Eclipse llamado MouseFeed que te muestra el shortcut asociado a una acción que se lleve a cabo con el ratón, de tal forma que así podemos aprender nuevas funcionalidades en el teclado para irnos desprendiendo de Mickey.

¿Usas algún atajo más? Compartelo con todos en un comentario ;)

Bonus Tip: escribir “syso” y luego hacer uso del shortcut de autocompletado (CTRL + Barra Espaciadora) nos da como resultado “System.out.println(“”);. Ahi lo dejo, aunque como todos somos buenos programadores, los mensajes los imprimimos usando loggers, y la consulta de valores de variables lo hacemos mediante el debugger, ¿no? :P :P

Comentarios (7)

Categoria: Coding,Informática,Tips Supervivencia

El software del futuro: NaDa 0.5

Escrito por Juanjo el Thursday, 5 de February del 2009 a las 12:21 am

Ni Windows 7, ni Mac X Snow Leopard, ni Ubuntu 9. El Software del futuro ya esta aquí y se llama NaDa. Como su descripción explica, “NaDa does nothing for everybody”. Sin bugs, sin problemas de soporte, sin documentación que empollarse… sin problemas. Nada de Nada.

Una maravilla. Y si estás preocupado por el espacio que ocupa en Disco, ¡olvídate! Sólo necesitarás un byte de espacio en el disco duro. Como lo oyes, un mísero byre. ¡Si hasta los iconos molestos del Messenger que utilizas para incordiar a tus amigos ocupan más!

Descárgalo ya y empieza a disfrutar de la experiencia. ¿A qué esperas?

(¿Momento iJam?)

Escribir comentario

Categoria: Humor,Informática

Sabiduría Popular I: Problemas

Escrito por Juanjo el Wednesday, 4 de February del 2009 a las 11:55 pm

“Algunas personas, cuando se encuentran con un problema, piensan «Ya lo tengo!, usaré expresiones regulares». En ese momento ya tienen dos problemas“.

Oído decir por Jamie Zawinski, desarrollador de NetScape. Yo lo vi en Intenta.

Escribir comentario

Categoria: Coding,Humor,Informática,Sabiduría Popular

Test Técnico de Java

Escrito por Juanjo el Monday, 2 de February del 2009 a las 3:50 pm

No me acuerdo exactamente donde fue que encontré las siguientes preguntas, pero si son verídicas, soy un completo ignorante (por cierto, no es lo mismo intuirlo que corroborarlo). Al parecer, son preguntas que se hacen en la parte “técnica” de las entrevistas de trabajo para ingenieros informáticos en el Reino Unido. Son bastante bastante concretas sobre Java… y no sé ni una. Creo que me queda mucho que estudiar para aspirar a las certificaciones Sun…

Aquí van las preguntas (en inglés):

1- Troubleshoot the following class that is producing performance errors on the site:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.blah.dataaccess;  
 
import java.sql.*; 
import javax.sql.*;  
import com.blah.data.*;  
 
public class GetFormats {   	
 
   private Connection con;  	
 
   public static String GetFormat(String user) 	{ 	 		
      String format = "mpeg4_150k";
      try {
         con = ConnectionFactory.getConnection();
         String sql_string = "select wfmt_urlroot from wprf, wfmt where wprf_value = wfmt_id and wprf_type = 'bandwidth' and wprf_wusr_id = ?";
         PreparedStatement pstmt = con.prepareStatement(sql_string);
         pstmt.setString(1, user);
         ResultSet rs = pstmt.executeQuery();
         if (rs != null) {
            while (rs.next()) { 
               format = rs.getString(1);
            }
         }
      } catch (SQLException e) {
          String error = ""+ e.toString();
      }
      return formats;
      }
   }
}

2- What’s wrong with the following Tag:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.blah.webui;  
 
import java.sql.*; 
import java.lang.*; 
import java.util.*; 
import java.net.URLEncoder;  
 
public class OutputFooter extends TagSupport {
 
   public String Footer() {
      String html = "";
      html = html + "</body></html>";
      return html;
   }
 
   public int doStartTag() throws JspException {
      try {
         // and write out the formatted content to the page
         pageContext.getOut().write(Footer());
      } catch (java.io.IOException ioe) {
         throw new JspTagException(ioe.getMessage());
      }
      // and skip evaluating the body of the tag (as there shouldn't be one)
      return SKIP_PAGE;     
   }
}

3- If you need to obtain and return the referring URL into a JSP page, how would you do it?

4- Describe how you would set up servlet mappings in Tomcat or any other J2EE servlet container, what would you do to involve Apache in this process to provide a unified URL convention for static and dynamic elements of the site.

5- Describe the steps involved in making Apache and a servlet container such as Tomcat work together. Discuss the relative merits of mod_jk and mod_proxy.

6- Discuss the differences between redirection and forwarding in the Java server environment within a cluster, between servers in a cluster and between sites.

7- Describe how serving of static and dynamic fragments can best be done in a clustered environment for high efficiency under high load with maximum availability.

8- The company has decided to settle on memcached to provide a distributed cache store. Describe how you would create a set of custom tags to provide an interface to memcached to provide for creating, updating, invalidating and retrieving cached items.

9- Explain the steps, giving references to libraries you would use, to enable elements from a content management system to connect with XML-RPC services to provide pings.

10- What’s your preferred way of parsing incoming XML and why?

11- Describe the stages involved in getting Ant, subversion and Eclipse working together to automatically build a tree from a subversion repository and deploy it to Tomcat.

12- Discuss the relative merits of

<c:import>

and

<jsp:include>

13- Discuss the difference between a custom tag which supports EL and one which supports RT.

14- Describe (with code examples if possible) how you would use an EL based JSP fragment to iterate through a simple XML file and make decisions based on the values of certain nodes.

15- The introduction of JSR-220 brought with it JPA. Hibernate is an open source ORM solution. Briefly describe, with a small example if possible, the impact JPA has had on the Hibernate project, and what steps would need to be taken to convert an existing hibernate project to conform with the JPA specification in JSR-220. What advantages to would this conversion bring?

16- When using a persistence layer within a multi-threaded environment which has the potential for a long object lifetime, special precautions must be made to ensure the system can maintain a high degree of concurrency, and also work correctly in a clustered environment. Give a short explanation of the problem domain and a potential high-level solution.

17- Explain the following method signature:

<T extends Myobject> T getMyobject(Class<T> MyObjectType);

18- Explain the difference between phantom, soft, strong and weak references and give a context they would be used in.

19-Diagnose the following exception, found in the tomcat catalina.out file:

java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.1.244:80 connect,resolve) 
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264) 	
        at java.security.AccessController.checkPermission(AccessController.java:427) 	
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
 	at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
 	at sun.net.www.http.HttpClient.openServer(HttpClient.java:459)
 	at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
 	at sun.net.www.http.HttpClient.New(HttpClient.java:287)
 	at sun.net.www.http.HttpClient.New(HttpClient.java:299)
 	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796)
 	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748)
 	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673)
 	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:917)
 	at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireReader(ImportSupport.java:331) 
.......

20- Design a simple three database table structure which would allow the creation, editing and publication of a webpage stored in a content management system.

Concurrencia, clústering, parsing XML, diseño DB, Templates….. En pocas palabras, la-le-che :P

Comentarios (3)

Categoria: Coding,Informática

Comentarios Recientes
  • Programador web Cádiz: Parece un poco inconforme de que el mundo rueda alrededor de Google…pero la idea es...
  • Fernando: Que pocas ganas de colaborar, este tipo de información es muy útil para muchísima gente. Que pena que la...
  • Danielfcc: Alguien sabe como activar el agrupamiento de parrafos era +/- de esta forma.. + function1 - function2...
  • Pablo: Algo que me pareció bueno es lo de poder configurar tus propios atajos, yo particularmente me configuré...
  • Pablo: Excelente post, pagina de inicio para google chrome! =)
  • informatico: Gran trabajo….me gustaria saber más sobre ello…para cuando la siguiente entrada??? gracias.
  • Churry: Esta entrada ya se publico?? “En el próximo artículo veremos cómo hacer uso de los componentes...
  • Gregorio: Qué cabrones, lo tuvieron que pasar genial. Iré solicitando el acceso al comando a ver si para el próximo...
  • LcOHN: Muy bueno, con el ctrl + F11 corre los test. Saludos! grac
  • alexis perez: Pero no hay que ser un ingeniero para darse cuenta que por ejemplo en la pregunta 1, reclama o lanza...


All's clear