Domina los atajos de teclado para Visual Studio

domingo 20 de abril de 2008 | categorías: , , | 0 comentarios -- da clic aquí para dejar el tuyo

Una de las maneras más fáciles de incrementar tu productividad cuando utilizas casi cualquier programa es aprenderte los atajos de teclado—los mentaos keyboard shortcuts, pues.  De hecho tengo amigos que odian levantar las manos del teclado cuando están programando.  Si alguna vez has usado algún editor de texto como vi, quizá hayas apreciado que una vez que dominas la complejidad de los comandos, en realidad se siente como si estuvieras "platicando" con el editor. Y aunque yo no llegaría al extremo de recomendar que manejes Visual Studio con los comandos de vi, sí recomiendo enormemente que te aprendas algunos de los más comúnes que ya vienen de cajón con el IDE.

El problema es que Visual Studio tiene 8 millones 557,934 comandos.  Bueno, quizá algunos menos, pero aún así son un titipuchal.  Y lo que es peor, los atajos de teclado cambian de acuerdo a la configuración general de Visual Studio.  Esta es la configuración que te pregunta la primer vez que arrancas el IDE o si das Tools>Import and Export Settings...>Reset all settings.

Ventana de diálogo de configuración general de Visual Studio

Aquí es donde ayudan algunos documentos de referencia rápida.  Si primordialmente desarrollas en Visual Basic, y utilizas esa configuración (Visual Basic Development Settings), aquí hay un PDF de Microsoft que los resume. 

Si usas la configuración de Visual C# Development Settings, para desarrollar primordialmente en C#, están este para Visual Studio 2005 y este otro para Visual Studio 2008.

Sin embargo, yo utilizo la configuración para desarrollo general (General Development Settings) porque desarrollo tanto aplicaciones Web como Windows, a veces en C# y a veces en Visual Basic, aparte que ya me había aprendido algunos atajos desde versiones anteriores de Visual Studio.  Como no encontré ninguna referencia rápida para esta configuración, creé mi propio documento.  Puedes descargarlo del sitio de la Comunidad.

Mi recomendación personal es, no intentes aprenderlos todos de un zopetón.  Dice un proverbio: "¿Cómo te comes un elefante? Un bocado a la vez".  Así que mejor escoge un grupo de comandos y practica cada uno por separado, repitiéndolo al menos 20 veces.  Lo que yo hice fue agarrar una archivo con código y practicar un comando a la vez en diferentes partes del archivo mientras lo "vocalizaba mentalmente" hasta que quedaba grabado en mi memoria muscular.  Luego practicaba el siguiente comando hasta terminar el grupo.  Al día siguiente me enfocaba en un grupo distinto, y así sucesivamente.

Cómo crear tus propios atajos

Por supuesto, también puedes definir tus propios atajos.  Estos atajos pueden ejecutar un comando del IDE o alguna macro que hayas creado para alguna tarea específica.  Por ejemplo, hay dos atajos que a mi me ha sido útil definir: uno para comparar el archivo actual contra la versión en el controlador de código y otro para obtener el historial del archivo actual en el controlador de código.

Para definirlos, primero ve a Tools>Options... y luego Environment>Keyboard.  Al hacerlo verás la siguiente ventana:

En la parte donde dice Show commands containing, teclea parte del comando, p. ej. "compare".  Esto traerá una lista de posibles comandos.  En este caso, el que busco es File.Compare.  Luego, selecciona el comando adecuado de la lista y pon el cursor en la parte donde dice Press shortcut keys. Presiona la combinación que desees utilizar.  Si la combinación ya está siendo utilizada por algún otro comando, esta información será mostrada en la parte de abajo donde dice Shortcut currently used by.  En mi caso escogí la combinación Ctrl+Alt+F,C para finalmente darle clic en el botón Assign

Repite los mismos pasos para el comando File.ViewHistory y utiliza el atajo Ctrl+Alt+F,H—o cualquier otra combinación que más te guste.

En fin, creo que esto da la idea.  Enjoy smile_shades

La Generación M: Al borde del un nuevo cambio

viernes 11 de abril de 2008 | categorías: , , | 0 comentarios -- da clic aquí para dejar el tuyo

Hoy me tocó dar una plática bastante diferente a la que estoy acostumbrado.  Resulta que los chavos de la carrera de Tecnologías Computacionales del Tec de Monterrey Campus Juárez (mi "alma mater") hicieron un evento llamado El Congreso con la finalidad de atraer a más chavos (y chavas, claro, si no qué chiste) de las prepas y secundarias locales hacia las carreras de "sistemas".

Aparentemente algunos de ellos habían leído mi blog y me enviaron un correo para invitarme a participar como expositor, lo cual se me hizo un honor.  Se siente medio raro regresar a la escuela de donde te graduaste para "enseñar algo".  Pero cuando me dijeron que la audiencia serían principalmente lepes de preparatoria comencé a ponerme un poco nervioso.  Después de todo, han pasado casi 10 años—a ver díaganlo: "uuuuuuuuuuuuu!"—desde que dejé de dar clases, y no me paraba a hablar enfrente de un grupo de esa edad.  Mi mente inmediatamente comenzó a dar vueltas: "Demonios, ¿de qué les puedo hablar? ¿De qué manera puedo encontrar un tema donde tengamos algo en común, y que hable de tecnología?" 

Pensándola un poco más caí en cuenta que muchos de estos chicos, son modelo 90 o más reciente—osea que nacieron después de 1990—lo cual me hizo sentir más ruco todavía porque yo soy setentayquíhúbole.  Mientras más lo pensaba más me era evidente que hay un a brecha entre esta generación y la mía.  Comencé a recordar cómo era el mundo cuando yo tenía la edad de ellos—hace 15 años más o menos—y cómo había cambiado el mundo desde entonces hasta ahora, hasta que me cayó el veinte: "¿y por qué no hablar precisamente sobre eso?".

Así que eché un poco de alucine este fue el resultado.

Generación i

La i es de internet.  Esta es la generación a la que creo que pertenezco.  En ella incluyo a las personas que eran adolescentes durante los pricipios de la década de 1990 y que nos tocó, por un lado, ver el nacimiento del internet—sí ya sé que el interné existía desde los 70s y 80s pero no fue sino hasta los 90s que el Web lo trajo a las masas ¿verdad?—y por otro lado presenciar cambios históricos a nivel mundial como la caída del comunismo.

 

Aún recuerdo ver en la televisión cómo derribaban el muro de Berlín.  Recuerdo ver también en la T.V. los tanques en Rusia mientras intentaron el golpe de estado contra Gorbachev y sentirme triste porque leí su libro sobre la perestroika y el glasnost.  Recuerdo la caída, país por país, de la cortina de hierro en Europa y también la primera Guerra del Golfo Pérsico donde una coalición de países decidió luchar contra Saddam Hussein.

Para cuando tuve edad de entrar en a la carrera en 1994, el mundo entero parecía enamorado de nuevo con el capitalismo y la apertura de mercados.  México llevaba poco que había firmado el TLC y en el Tec hasta inventaron carreras nuevas como la de Lic. en Comercio Internacional.  También por aquellos tiempos el internet comenzaba a salir de las escuelas y a entrar a los hogares.  El Tec, que hasta entonces había sido el único ISP de Cd. Juárez, le dejó eso a compañías como Infolink (si mal no recuerdo)—¿se acuerdan cuando tenían que pagarle a alguien y marcarles por teléfono con su módem para estar "en línea"? ¿No? Chin.

El caso es que se respiraba un ambiente de apertura.  En el lado tecnológico esa actitud comenzó a reflejarse en movimientos como el de Open Source.  Las personas comenzaron a colaborar a pesar de las grandes distancias gracias a la red que ahora cobraba vida.  Estábamos en plena "globalización 1.0", como lo describe Thomas Friedman y el mundo se estaba aplanando.  El internet había fomentado la globalización y la globalización ayudó al crecimiento de la red.  Por supuesto que ese momento no me dí cuenta de lo que ocurría porque estaba inmerso en él.  Para cuando me gradué de la carrera en 1998, "eso del e-mail" y de trabajar a distancia se había vuelto bastante común. 

Generación M

La M es de móbil, es decir un pochismo deformado mío de mobile phones, también conocidos como teléfonos celulares.  Esta es la generación que en estos momentos está en la adolescencia.

Cuando comencé mi plática, abrí con una pregunta: "¿Cómo sería tu vida... sin tu celular?"  Hubieran visto la reacción.  Fue una exclamación colectiva de auténtico horror: "¡Ay NOOoooo!", jejeje. "¿...sin Google? ¿...sin el Internet? ¿Qué música escucharías? ¿Qué sería diferente?"  Y ya cuando habían parado la oreja puse una diapositiva que decía: "Así era el mundo hace apenas 15 años".

A veces creo que no se le ha dado crédito a la impacto que han tenido los celulares—y sí, yo también considero que son odiosos y ojalá no los hubieran inventado, pero pues ni modo ya ganaron.  "En mis tiempos..."—como dicen los viejitos—los únicos que traían celulares eran los narcos y la gente de muuuucha lana.  Eran esos horrendos ladrillos Motorola que les duraba la pila una hora y podían se utilizados como arma de defensa personal.

 

Hoy en día parece que los chavitos nacen con el celular en la mano.  He visto niños de 7 y 8 años—entre ellos algunos de mis sobrinos—con celular propio, lo cual me parece absurdo, pero es la realidad.  Todo tipo de vagancias y mal comportamiento es videograbado con su teléfono para subirlo a YouTube.  Para ellos se ha convertido en una extensión de su persona.  Algunos de ellos incluso se identifican con su celular, lo cual es en verdad preocupante. 

Esto está ocasionando cambios interesantes.  Por ejemplo, todos esos mensajitos de texto—y la flojera que causa tener que teclearlos, supongo—están ocasionando cambios informales y deformaciones al español escrito.  Una conversación típica podría ser:

—Ke rollo?
—No ps nada
—Vas a ir al cine vdd?

Este tipo de deformaciones también están creciendo por el uso de mensajería instantánea (Messenger, Google Chat, Skype, etc.).  Cuando intento platicar con una de mis sobrinas por Messenger, a veces me dan ganas de darle un sape virtual y decirle: "¡escriba bien, no sea payasa!", pero me las aguanto.  Estos programas, también los están acostumbrando a que ahora se puede tener conversaciones de video o voz internacionales gratis o a muy bajo costo.  En otras palabras, la dimensión de la distancia comienza a cambiar.  El mundo no solo es plano sino que comienza a encogerse.

Una característica más que se me ocurre sobre la generación M es que, los chicos de ahora están (¿mal?)acostumbrados a tener las cosas on-demand, es decir, cuando ellos quieren y como ellos quieren.  Si quieren música, se van a iTunes, o BitTorrent o <inserte aquí la herramienta de piratería de moda>, la bajan y listo; ya no están limitados por la música de la radio o los discos en la tienda del mall.  Si quieren un libro es cuestión de pedirlo por Amazon o similares y obtenerlo.  ¿Aburrido? Solo "prende" YouTube y puedes perder horas enteras viendo todo tipo de tarugadas; ya no están limitados a lo que ofrece la tele.  La palabra clave, supongo, es opción.  Ahora tienen más opciones que nunca.  Lo cual quizá es bueno y malo a la vez.

Por otro lado también se pueden observar una serie de cambios y situaciones sociales interesantes.  Una de ellas me la apuntó Alex Briseño: los hijos de los dueños de muchas empresas están comenzando a tomar las riendas.  Es decir, un empresario que hoy tiene 50-60 años y que puso su negocio propio ahora está dándole el control a su hijos para que se hagan cargo.  Estos "hijos de dueños" son de la generación i, y no se sienten intimidados por la tecnología, lo que es más, lo ven como algo favorable, algo que trae un valor agregado.  Si alguna vez se han dedicado al negocio de vender "sistemas" se habrán quizá dado cuenta que con excepción de empresarios con mucha visión, la mayoría de la generaciones anteriores percibían esto como un costo, no como algo que les pudiera ayudar a ganar dinero.  Los "hijos de dueño", sin embargo, no solo no tienen problema con esto, sino que te buscan para que les hagas un sistema.  Eso a su vez comienza a cambiar la dinámica de la competencia en muchos ámbitos.

Combinado con la maduración de la globalización 2.0, el inicio de la 3.0 esto está permitiendo que los David comiencen a competir con los Goliat.  La Cola Larga está comenzando a esparcirse.  Dos ejemplos locales son que en Cd. Juárez, en los últimos 6 u 8 meses, Cablemás comenzó a competir con Telmex en telefonía; Volaris e InterJet, dos aerolíneas de bajo costo comenzaron a competir con Aeroméxico.

Pero con todas las maravillas de la tecnología hay otra cosa que está ocurriendo: está creciendo la brecha digital, el digital divide.  Es decir después de darte cuenta que el internet es maravilloso y que el acceso a la información es una necesidad porque uno como individuo está compitiendo con personas de todo el mundo, la siguiente pregunta inevitablemente es "¿y qué hay de los millones de mexicanos que aún viven en extrema pobreza? ¿Cómo sobreviviran en este nuevo mundo?"

Desgraciadamente no hay respuestas alentadoras.  La única manera de competir es a través de la educación y de ofrecer algo más.  En otras palabras, no competir en la maquilada de las cosas o de la información—siempre habrá mano de obra más barata en un país más desesperado—sino competir ofreciendo las cosas que requieren de más coco, de más intelecto. Seguro, un ingeniero hindú o chino de sistemas promedio sale más barato que yo, pero ninguno, de todos los que conozco y con los que he trabajado tiene la misma capacidad que yo.  Y no es por ser arrogante, simplemente les ha faltado cayo y colmillo.  No significa que no haya ingenieros competentes en otros países, significa que esos ingenieros no son de bajo costo.  Incluso eso está cambiando claro, al punto que en 10 años quizá estemos hablando de otros países.

Esta es una realidad difícil de aceptar.  Aunque hay que mencionar que sí hay algunas personas haciendo algo concreto al respecto.  Proyectos como el de Una Laptop Por Niño (OLPC) están tratando de atacar este tipo de problemas, pero la tecnología en sí es una solución insuficiente.

Generación W

La W es de wireless.  Esta generación serían los hijos de la generación M, nacidos quizá unos 15 o 20 años más en el futuro.

Si todo progresa como hasta ahora, más temprano que tarde la idea de las redes inalámbricas a nivel ciudad o región se harán realidad a través de cosas como WiMAX o mesh networks.  En otras palabras para entonces ya no estarás atado a tu casa o tu restaurante favorito para estar conectado.  Esto no solo dará a pie a dispositivos más sencillos y a la vez sofisticados—¿imaginas el iPhone del futuro?—sino que haría el sueño de OLPC una realidad.

Una vez liberados de los cables, estos niños podrán asimilar información y tecnología de manera casi instantánea.  De hecho, la idea de adiciones bio-tecnológicas al cuerpo humano no está completamente fuera del rango de posibilidades.  Imagina que en lugar de cargar un dispositivo como un celular o tableta inteligente que te brinda información, ésta esté integrada a ti.  Una red inalámbrica ubicua y un "chip" integrado podría darle la capacidad a los niños de este siglo de comunicarse y compartir información pseudo-psíquicamente en una red verdaderamente P2P.  Piensa en los Borg, de Star Trek, pero no tan feos y con independencia de acción.

¿Todavía suena como ciencia ficción?  Considera que en unos 15 años seguramente habrá avances significativos en la nanotecnología y que según algunos expertos para el 2029 también habrá tanto el hardware como el software necesario para tener inteligencia artificial a nivel humano.  Supon que se retrasen algunos años, el doble aproximadamente, y esto no se de sino hasta mediados de siglo.  Los niños de la generación W estarán apenas entrando a la adolescencia.

Sin embargo hay cosas que podrían descarrilar todo esto.  Conflictos globales persistentes, como la actual guerra en Irak podrían llevar a un des-aplanamiento del mundo y a que se vuelvan a cerrar las fronteras, regresándonos a la era Reagan.  Simplemente consideren algunos de los argumentos de los actuales candidatos demócratas a la presidencia de EE.UU., Barack Obama y Hillary Clinton.  Ambos han expresado que quieren re-negociar el TLC.  Entre eso, y el muro—perdón, "barda"—fronterizo que tan insistentemente y están construyendo, no inspira precisamente un ambiente de apertura para el futuro.  Siguiendo esta línea de pensamiento, no es tampoco descabechado pensar en un Great Firewall estadounidense o europeo modelado después del de China.  Si esto llegara a ocurrir y regresáramos a un mundo cerrado, la humanidad en mi humilde opinión, se estaría dando en la torre de motu proprio.

Pero todas estas son meramente posibilidades.  Lo bonito del futuro es que aún no está escrito, ¿verdad?

Apple libera Safari para Windows, IE8 beta no me impresionó

martes 18 de marzo de 2008 | categorías: , | 1 comentarios -- da clic aquí para dejar el tuyo

Parece que Apple acaba de liberar la versión final de Safari.  Y aunque las versiones beta tuvieron algunos detalles (desde problemas con los fonts hasta problemas para autenticar a través de un proxy), la versión final parece haber atado los cabos sueltos.  Una adición particularmente útil para los desarrolladores Web es que integraron las herramientas de desarrollado (WebKit) que antes solo estaban disponibles en la Mac:

Y aunque esto no es nada nuevo para gente que desarrolla con Firefox, es bueno tenerlo en otros navegadores.

Por otro lado hace un par de semanas el equipo de Internet Explorer anunció los features de IE8 al liberar el beta 1 de ese navegador el cual también incluirá herramientas de desarrollo Web estilo Firebug.  <sarcasmo>Qué bien, ya no voy a tener que bajar el Developer Toolbar y el Web Development Helper por separado.</sarcasmo>  En cuanto a los otros "features", ummm, a ver: WebSlices = Firefox Live Bookmarks on steroids, Activities = Smart Tags rehashed, y AJAX navigation = Something that should come with your AJAX framework.  Lo único decente va a ser la mejora en el performance de JavaScript, lo cual les urgía corregir, pero de ahí en más nada particularmente inovador.

Aguas con el SDC (Síndrome del Desarrollador Callado)

miércoles 27 de febrero de 2008 | categorías: , | 1 comentarios -- da clic aquí para dejar el tuyo

Ya van varias veces que veo esto ocurrir en diferentes proyectos y diferentes compañías, así que asumo que es algo relativamente común.

La historia casi siempre es la misma: se vende un proyecto grande a un cliente, quizá algo ajustado de tiempo, pero suficiente para hacerlo.  Se hace el análisis y se bosqueja el diseño rápidamente.  Se reparte la chamba y todos en el equipo se ponen a jalar: "Tú aviéntate este módulo, tú este y yo este otro".

Ves a uno de los desarrolladores involucrados en el proyecto todos los días en su esquinita, tecleando como hormiga.  Sabes que está chambeando (o al menos crees saber que está chambeando).  Cuando le preguntan:

—¿Qué rollo? ¿Cómo vas con eso?

—Bien—contesta sencillamente.  No se queja, no da detalles.  Así que asumes que todo va bien, ¿verdad?

Pasa una semana, quizá un mes o dos... tres meses, y de pronto esa persona comienza a enfermarse o a faltar misteriosamente y de buenas a primeras decide renunciar.  Para entonces ya estás a una semana de entregar el sistema que prometiste, y cuando comienzas revisar el código que el cuate hizo, te das cuenta que: 1) lo que hizo no funciona o 2) lo que hizo hace algo pero no era lo que se supone que tenía que hacer.  En otras palabras estás jodido en aprietos.

Entonces el proyecto entra en pánico.  Se oprime el botón rojo y comienzan a sonar alarmas.  Llamadas desesperadas.  Baja de unas cuerdas del techo un equipo S.W.A.T. de desarrolladores externos (o si no tienes pues con los mismos de tu equipo) y se junta a la raza en el war room para ver cómo canijos se puede hacer en una semana lo que un chango no hizo en 3 o 4 meses.  Todo mundo entra en overdrive codificando día, noche y fines de semana casi sin dormir.

Si tienes suerte, y gente MUY talentosa, igual y logras la meta.  Pero muchas veces no es suficiente.

¿Qué fue lo que pasó?  Acabas de ser víctima del SDC, o Síndrome del Desarrollador Callado.

Una de las cosas que a menudo hacemos al desarrollar software es que cuando el schedule anda apretado, lo primero que se hace es mandar a la goma las revisiones de código, las pruebas unitarias, etcétera.  Es decir, lo primero en sacrificarse en aras del calendario, normalmente son las buenas prácticas de desarrollo de software, que irónicamente son tu más valiosa herramienta para terminar a tiempo y con calidad. 

Lo que acaba ocurriendo es que si las sacrificas y tienes uno de esos desarrolladores con SDC, lo más probable es que esa persona no esté entendiendo los requerimientos y/o no tenga las habilidades para pasarlos a código y tiene demasiado temor de que se sepa.  Así que no pide ayuda, no se queja, no hace preguntas.  Simplemente se va a su esquinita y hace el intento.  Cuando va pasando el tiempo y se acerca el deadline (por algo trae dead la palabra) esa persona comienza a sentir la presión que a menudo se manifiesta en enfermedad/desaparición.

No me malinterpreten, conozco dos o tres desarrolladores excelentes, algo anti-sociales, que chambean en su cubículo/esquina, calladitos, enclaustrados una semana o dos y cuando emergen salen con una fregonería de código.  Pero son dos o tres de un montononal que conozco.

Lo peor es que la solución al SDC casi siempre es bien simple: hacer revisiones frecuentes del avance, no solo a lo que se ve (es decir, las pantallas, páginas, o lo que sea visible del sistema), sino a nivel código.  Cada semana (cuando MUCHO) juntar a otro desarrollador, y a un tester o persona que conozca los requerimientos: —A ver, vamos a ver cómo va esa pantalla.

No se trata de traer a la raza a latigazos, y tampoco se trata de hacer que la raza no le busque por su cuenta.  Se trata de no esperarse para descubrir las broncas cuando es demasiado tarde para hacer algo al respecto.  Sobre todo de que no se atasque el proyecto por cosas sencillas.  Yo, personalmente, si me atoro con algo (ya googulié, y ya lo intenté de dos o tres formas distintas) más de 3 o 4 horas y no puedo salir de ahí, inmediatamente agarro uno de mis compañeros y comienzo a explicarle el problema.  A veces con solo explicarlo se me viene una idea que resuelve el atorón, y cuando no, ellos me pueden dar ideas nuevas o enfoques que a mí no se me habían ocurrido.  Por muy chicho que creas ser, nunca faltan los días—o meses jejeje—en los que puedes caer en un lapsus brutus.

Así que si son uno de esos desarrolladores con SDC, por amor de Diosito, levanten la mano cuando se les atore la carreta.  No se esperen a que sea demasiado tarde.  Les prometo que nadie los va a morder.

smile_shades

Evento de Microsoft en El Paso

lunes 28 de enero de 2008 | categorías: , | 1 comentarios -- da clic aquí para dejar el tuyo

Dado que no sé si el grupo de usuarios de .NET de El Paso ya pasó a mejor vida, les paso información de un evento que realizará Microsoft este próximo jueves.  Se me hizo interesante, ya que últimamente he estado hablando de IIS 7 y ASP.NET:

MSDN Events: What’s New in IIS7 and Extending ASP.NET 2.0 Application Services

Thursday, January 31, 2008 12:00 PM - 4:00 PM
Welcome Time: 11:30 AM

Theater - Cinemark Tinseltown USA

11855 Gateway West
El Paso Texas 79936
United States

Para registrarse y obtener más detalles sobre el evento, vayan a la siguiente dirección:

http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&EventID=1032359805

Tengan en mente que este evento es en inglés (que igual no es problema).  También tomen en cuenta que aunque la página de registro dice que es de 1PM a 5PM, esto es tiempo del Centro así que sería de 12PM a 5PM tiempo local.

Les resalto los temas que me parecieron interesantes:

Session 1 | Safer, Smarter, Stronger: What’s New for Web Developers in IIS7

  • Authentication methods and integration between ASP.NET and IIS 7
  • Writing IIS managed handlers and modules
  • How the IIS protocol listeners support hosting WCF services on TCP, Named Pipes and more
  • IIS handler permissions, request filtering and administration lists
  • How the XML replacement for the Metdata Config file makes it easy to duplicate Web servers
  • Features and protocols that make IIS 7 secure right out of the box

Session 2 | Extending ASP.NET 2.0 Application Services

  • Membership, role and profile provider overviews
  • How to configure the built-in providers and use the basic login, role and navigation controls
  • How to create and integrate a custom provider
  • Using application services from AJAX and Silverlight clients
  • Using ASP.NET 3.5 client application services from a Windows client.

Espero verlos ahí. smile_shades