
Instapaper es un sensacional servicio para los que leemos mucho en Internet. Es muy simple pero extremadamente útil: cuando estás ojeando un post en un blog, un artículo, un vídeo o cualquier otra cosa en Internet y no tienes tiempo de pararte a leerlo a fondo pulsas el botón”Read later” y automáticamente te guarda una referencia en tu cuenta de Instapaper para que lo leas con calma más tarde, cuando tengas tiempo. Yo generalmente acumulo de esta forma decenas de artículos interesantes que luego leo el fin de semana desde mi tablet. Para conseguir su “magia” Instapaper utiliza un scriptlet -es decir, un fragmento de JavaScript- que se coloca en tu barra de favoritos y cuando lo pulsas, envía la URL a la lista de leer más tarde (debes estar autenticado antes, claro). En esta figura puedes ver el scriptlet (lo he renombrado) en mi navegador de escritorio: También existen extensiones para Firefox y Chrome que permiten hacer lo mismo. Navegador en Windows 8 Con los años esta aplic...
[Más]
Tags: Instapaper, Windows 8, Freeware, Utilidades
4f7452d7-f980-45cc-90ba-167693bf3db4|2|5.0

Windows 8 supone un cambio radical en cuanto a las interfaces de usuario se refiere, dentro del mundo Windows. Se ha eliminado por completo el clásico menú de inicio que nos había acompañado durante mas de 17 años (desde Windows 95) y todo gira ahora en torno a la nueva página de inicio: Como casi siempre que Microsoft lanza algo nuevo, y especialmente siendo un cambio tan radical como este, las opiniones están polarizadas y no suele haber término medio: o lo adoras o lo odias a muerte. Personalmente he de reconocer que fui de estos últimos cuando probé por primera vez Windows 8 hace alrededor de un año en las primeras versiones preview. No me gustaba nada. Lo cierto es que un año después no sólo he cambiado de opinión, sino que me gusta mucho, especialmente si dispones de una pantalla táctil (no tanto en un PC normal, donde la ventaja no es tan perceptible). Una vez que dominas los cuatro gestos que necesitas conocer y sobre todo cuando ves la gran ventaja que ofrece (incluso en es...
[Más]
Tags: Windows 8, Live Tiles
f194c43b-6296-491a-a853-71bd500afaab|2|5.0

Hoy he perdido un buen rato con este problema, así que comparto la solución aquí por si a alguien más le pasa. Tengo una aplicación vieja de escritorio que importa unos archivos XML dentro de una base de datos Access. Recientemente he instalado la versión definitiva de Office 2013 y he aprovechado para instalar la versión de 64bits de la suite, ya que antes tenía Office 2010 x32. Desde el momento en que he instalado esta nueva versión me dejó de funcionar la aplicación de importar archivos. Todo el tiempo daba el siguiente error: Al tener instalado Access 2013 eso no debería pasar. El caso es que desde Visual Studio también ocurría al intentar acceder desde el explorador de servidores si intentabas añadir una conexión a cualquier Access. Lo cierto es que el formato de Access no ha cambiado desde la versión 2007 por lo que cualquier versión del driver por antigua que sea debería funcionar, y con más razón si tienes instalada la última versión del entorno. Todo apuntaba a que era u...
[Más]
Tags: Access, OLEDB, Drivers
93e2c624-9995-42c1-ab70-71d20cee4d19|1|5.0

Recientemente he descubierto un nuevo editor que está preparando Adobe (sí: los mismos de Flash que se han rendido a la evidencia de HTML 5) y que promete resultar muy útil para desarrollo de aplicaciones Web. Se trata de Brackets, un editor Open Source con licencia MIT que está basado en Google Chrome y ofrece algunas características interesantes para agilizar nuestros desarrollos. De momento está disponible como una aplicación de escritorio que funciona realmente con Chrome por debajo, pero se espera que pronto se pueda utilizar también directamente on-line, sin necesidad de instalar nada. Sus dos principales características en mi opinión que lo diferencian bastante de otros editores son: La posibilidad de editar en línea el código de archivos relacionados que afecta al punto del editor en el que nos encontramos. Ahora lo explico mejor. La posibilidad de ver cómo afectan los cambios que hacemos en tiempo real en una versión en ejecución de la página que estamos desarrolland...
[Más]
Tags: Editores, Herramientas
2f422213-8130-4a5b-be70-b2344e4e91d1|0|.0

En esta ocasión quiero hablar de un efecto quizá poco conocido pero importante del modo en que procesa el código JavaScript. En JavaScript existen variables globales, las cuales tienen sus ventajas en un lenguaje como este, pero también están llenas de peligros, y variables locales, cuyo ámbito se circunscribe exclusivamente a las funciones en las que se declaran. Podemos utilizar una variable global desde dentro de una función cualquiera, ya que están accesibles desde cualquier lugar de la página, por ejemplo: //Variable global var name = "Jose"; function HelloWorld(){ alert(name); } HelloWorld(); Al hacer esto saltará el mensaje con el nombre que hay en la variable. Bastante obvio. Bien, pero ¿qué pasa si definimos una variable con el mismo nombre dentro de la función?: //Variable global var name = "Jose"; function HelloWorld(){ //Variable local var name = "Pepe"; ...
[Más]
Tags: JavaScript, Desarrollo Web, Fundamentos
3eaf5d87-c39a-4f9c-a888-34a51cc192fe|0|.0

Tras pasarme todo el verano trabajando y después de casi un mes de haberlo terminado, por fin puedo decir que ¡aquí está mi nuevo libro! :-) Se trata de Fundamentos de JavaScript y AJAX para desarrolladores y diseñadores web. En él he tratado de crear una obra muy completa que abarque desde los fundamentos del lenguaje JavaScript hasta temas de mayor nivel (como la orientación orientada a objetos o multitud de detalles importantes que se comentan en el libro). De este modo el libro sirve tanto para gente que se quiere iniciar en el lenguaje y quiere llegar a tener un buen nivel, como aquellos otros que lo usan habitualmente pero necesitan profundizar en algunas cosas para sacarle más partido en su trabajo del día día. Lo puedes usar como guía de estudio sistemático o como manual de referencia para tener a mano cuando necesites consultar algo. Viene con infinidad de ejemplos sencillos, orientados a entender bien los conceptos, contiene trucos, curiosidades, historia de Internet y cu...
[Más]
Tags: JavaScript, Libros
6c44ed45-0c97-4ba3-b3fb-c920946f04d5|0|.0

Google Chrome posee una característica sensacional que le permite mostrar notificaciones en el escritorio desde código JavaScript. Lo estupendo de estas notificaciones es que se ven en el escritorio y las puedes mostrar en cualquier momento, aunque el navegador no esté en primer plano o esté minimizado. Si tu aplicación comprueba información en segundo plano con AJAX (como hace GMail con los nuevos correos) el usuario puede dejar el navegador minimizado y aún así recibirá notificaciones cuando haya algo nuevo que atender. Como vemos las posibilidades son muchas Nota: Internet Explorer dispone de un método createPopup disponible desde la versión 7 análogo al método window.open de JavaScript de toda la vida, y desde la versión 9 es posible mostrar iconos superpuestos en el botón de la barra de tareas de la Web si esta se “engancha” allí, pero no son de lejos tan potentes como los de Google Chrome. El W3C tiene un borrador para crear notificaciones Web desde el año 2006 (última versión...
[Más]
Tags: Chrome, Notificaciones
621d33b7-e7be-44eb-8827-1c4c5f2e6647|2|5.0

El evento Application_End se desata en una aplicación Web cuando ésta termina por cualquier motivo, aunque sea para reiniciarse. Escribimos un gestor de este evento dentro de Global.asax en el que incluimos cualquier tipo de código que se encargará de dejar en el estado correcto cualquier recurso global que hayamos inicializado en el evento complementario que se lanza cuando arranca la aplicación: Application_Start. Esto es válido tanto para aplicaciones Web Forms como MVC. El código que pongamos en estos eventos se lanzará únicamente cuando se arranque y se detenga la aplicación. Si queremos depurarlo desde Visual Studio, usando el servidor de desarrollo (que es lo habitual), la cosa tiene algo de truco. El problema es que no es tan fácil conseguir que se cierre la aplicación y que puedas depurarlo al mismo tiempo. Al contrario de lo que muchos programadores se piensan, cerrar el navegador no detiene la aplicación, que sigue activa por detrás, sólo cierras la sesión actual del u...
[Más]
Tags: ASP.NET, Desarrollo Web, Global.asax
452839f2-31ac-4353-aa24-48770657a02f|0|.0

Este es un error muy típico en algunas aplicaciones y me he acordado de él a raíz de la pregunta de un alumno de mi curso de preparación del examen 70-515 en campusMVP.
La situación es la siguiente: tenemos un desarrollo ASP.NET hecho y todo funciona en Visual Studio a las mil maravillas. Lo publicamos al servidor Web y de repente, al intentar acceder al sitio Web, nos encontramos un error como este:
“¿Cómo?¿Inicializar cultura? Pero si yo no tengo nada de esto en mi aplicación. ¿Qué demonios pasa aquí?“
Por más que buscas en tu código no eres capaz de encontrar nada mal, y es que además “¡en mi máquina funciona!” (que es lo que decimos todos cuando algo falla en producción).
El problema viene de un hábito muy común y que, realmente, Visual Studio debería gestionar mejor: renombrar páginas ASPX en Sitios W...
[Más]
Tags: ASP.NET, Errores
89964c9e-4d42-4247-9d53-d1eb1fa9796d|0|.0

A la hora de trabajar con sesiones en C#, el mayor problema es que, al contrario que en VB, no se facilita el manejo directo de los valores como si fueran propiedades del objeto Session ni se transforman al tipo correcto para hacer operaciones como Session("Contador")++ y similares. Además, adicionalmente, hay que comprobar que las variables existan antes de poder hacer todas estas operaciones. Por ejemplo, si queremos trabajar con una cadena de texto en sesión y poder asignarle un valor, se trata de algo tan sencillo como lo es en VB ya que sólo debes asignarla directamente, así: 1: Session["TextoAGuardar"] = "Este es el texto que quiero almacenar";
Sin embargo si lo necesitamos es realizar una operación matemática es un poco más lioso ya que deberemos comprobar primero que la variable existe y contiene un valor, y ademas convertirla desde "object" que es lo que devuelve por defecto una variable de sesión, al tipo correc...
[Más]
Tags: ASP.NET, Session
8d55ec89-4dc6-460f-90cc-0d3b9171aa0c|2|5.0

Esta época, entre otras muchas otras cosas, estoy trabajando en un nuevo libro de JavaScript que verá la luz en los próximos meses. Uno de los capítulos se centra en la depuración de código JavaScript usando las herramientas que ofrecen de serie los navegadores. Entre éstas, una muy interesante es el “Profiler”, disponible tanto en Chrome como en Internet Explorer, y en Firefox a través de Firebug. El profiler tiene varias sub-herramientas, como el analizador de tiempos de ejecución que nos permite obtener información detallada y estadísticas sobre los tiempos de ejecución de nuestra página, y sobre sus consumos de memoria, identificando así posibles cuellos de botella, funciones poco optimizadas, etc... E incluso bugs en el motor de renderizado de las páginas (Se han dado casos). En el libro me estoy centrando en las herramientas de desarrollo de Google Chrome, ya que son más completas que las que trae Explorer y además viene “de serie” con el navegador, sin necesidad de instal...
[Más]
Tags: Navegadores, JavaScript, Rendimiento
c89f7381-1bd4-4c9e-95f7-1ffa6b90a7d8|1|5.0

ASP.NET Web Forms ofrece unos maravillosos controles de validación que nos permiten controlar los valores de los campos de un formulario tanto en el navegador como luego en el servidor. Así, basta con arrastrar unos cuantos controles sobre la página para validar campos obligatorios, rangos de valores, expresiones regulares, tipos de datos introducidos, etc... Incluso podemos definir nuestras validaciones personalizadas, si bien esto requiere mucho más esfuerzo por nuestra parte. Estos controles están muy bien pero, en el lado de cliente (navegador), se limitan a mostrar mensajes cuando falla alguna validación: Los mensajes podemos agruparlos en un control de resumen y cambiar el estilo que utilizan, pero no nos permiten apenas configuración del lado cliente. ¿Qué pasa si lo que necesitamos es tener mayor control sobre lo que ocurre en el navegador durante la validación? ¿Podemos hacer algo sin complicarnos demasiado la vida? Por ejemplo, un caso muy típico es querer destacar los ...
[Más]
Tags: Validación
7277bd63-bb78-48e6-9fd2-5d6326d26710|0|.0

Cuando instalas SQL Server se te pide que otorgues un nombre a la instancia que estás instalando. Y cuando te conectas desde una aplicación o con el SQL Server Management Studio (SSMS) también lo haces a una instancia determinada de SQL Server. Es tan común que todos lo damos por hecho, pero realmente ¿cuántos saben qué es una instancia de SQL Server y cuál es su utilidad?. Bien, en SQL Server es posible ejecutar varias copias del servidor de datos al mismo tiempo, con sus usuarios, bases de datos y demás elementos independientes unos de otros. A cada una de esas copias se le llama “instancia”. Lo que tenemos con las instancias son varios SQL Server ejecutándose en paralelo en la misma máquina. El límite es de 50 de instancias por cada máquina. Existen dos tipos de instancias: Las instancias con nombre: se accede usando una barra inclinada hacia la izquierda seguida del nombre de la instancia, que es la forma de identificarlas. Por ejemplo: (local)\Instancia, .\Instancia, localho...
[Más]
Tags: SQL Server
aeb3b048-a267-48a0-a6e6-b96389b4f837|0|.0

Las hojas de estilo en cascada o CSS son indispensables en cualquier aplicación Web no trivial. Nos permiten definir el estilo visual (e incluso el comportamiento) que mostrarán los diferentes elementos de contenido de una página o aplicación Web. Sin ellas serían imposibles la separación entre contenido y visualización o la adaptación de un mismo diseño de página a diferentes dispositivos.
Todos estamos acostumbrados a escribir CSS con sus diversas combinaciones de selectores, y cuando adquieren su verdadera potencia es, precisamente, al combinar las definiciones de selectores para poder asignar estilos con mucha exactitud.
Por ejemplo, imaginemos que tenemos una página con multitud de listas no ordenadas (por ejemplo colecciones de recursos en Internet) y queremos darle un estilo particular a los elementos de determinadas de estas listas. Podríamos especificar un selector como este:
1: .recurs...
[Más]
Tags: CSS, Optimización
0a26177f-42de-4a1f-9e34-29f236140fce|1|5.0

Desde que Ubuntu empezó a hacer el tonto con la interfaz Unity y desde que la actualización a su última versión me ha dejado sin ratón ni forma (aparentemente) de hacer que vuelva a funcionar, estoy usando Linux Mint 12 para juguetear con Linux (y sobre todo con Mono). La verdad es que tenía que haberme cambiado hace ya tres versiones, desde que Ubuntu estrenó la apestosa interfaz Unity. Mint va de maravilla, tiene tanto software como Ubuntu y es incluso más sencillo de instalar y configurar. Sin embargo no está exento de problemas. Por ejemplo, como me niego a usar Firefox salvo para probar las aplicaciones, la mejor opción es usar Google Chrome. El problema es que te bajas el paquete de instalación para Debian y no te funciona, diciéndote todo el rato algo como esto cuando le haces doble-clic: “No se puede abrir google-chrome-stable_current_i386.deb. TEl paquete debe estar corrupto o no tienes permisos para abrir el archivo. Comprueba los permisos del archivo” Sin embargo el pa...
[Más]
Tags: Linux
575e3d79-3690-41a0-b864-e2f8b4a0ea85|0|.0

Hoy tuve que montar un sistema sencillo para poder enviar de manera periódica, en formato CSV, una serie de datos a unos usuarios. Los datos se obtienen a partir de una consulta más o menos compleja a una base de datos SQL Server. Lo que necesitaba era que los resultados de esa consulta, una vez a la semana, se enviaran por email a un usuario para que pudiera abrirlos en una Excel y trabajar con ellos. Para conseguirlo no quería programar ni tampoco crear ningún paquete de integración específico ni hacer nada complicado. Lo único que necesitaba era definir la consulta, el formato y el destinatario. Punto. Mala suerte: en SQL Server no hay nada incluido nativamente que nos permita conseguir algo así de manera tan directa, lo cual no deja de ser una pequeña vergüenza porque realmente es algo habitual y deberían facilitarlo un poco ¿verdad? Así que tuve que improvisar y buscar una manera de conseguirlo sin complicarme demasiado la vida. A continuación os cuento el método que se me ocu...
[Más]
Tags: SQL Server, Trucos y consejos genéricos
e5b37089-2344-48b3-98ac-c4bbc613bb57|3|5.0

Soy un gran fan de Dropbox, el servicio de sincronización de archivos en la nube. La versión gratuita te permite gestionar 2 GB de archivos y mantenerlos sincronizados entre todos tus equipos (Windows, Mac y Linux), móviles (Android, iOS...) y con una copia de seguridad en la nube. Es fácil de poner en marcha y muy fácil de usar. Al contrario que otros servicios no te limita el tamaño ni el número de los archivos que puedes sincronizar y además (y esto es casi lo que más me gusta) te almacena todas las versiones de cada archivo sin consumir para ello nada de tu cuota de espacio, por lo que te puede salvar más de una situación peliaguda. Yo utilizo la versión de pago que te permite gestionar 50 GB y es ya algo imprescindible para mi.
A la hora de compartir archivos en Dropbox hasta hace poco tenías sólo dos opciones:
Colgar el archivo en la carpeta “Public” que tiene por def...
[Más]
Tags: Dropbox
a3759bbc-f8eb-47dc-a2a2-627883060974|0|.0

Como seguramente muchos de los lectores de este blog sabéis, tenemos un estupendo proyecto de formación on-line sobre tecnologías Microsoft llamado campusMVP. A través de él conocidos MVPs y personalidades de este mundillo ofrecen cursos on-line tutelados sobre tecnologías de Microsoft para desarrolladores. Llevamos trabajando con campusMVP en España y -en menor medida- Latinoamérica, desde el año 2005, es decir, los últimos 7 años. Además desde 2007 tenemos una editorial técnica complementaria con libros sobre las últimas tecnologías. Además de en España, ya llevamos vendiendo libros en el mercado de EEUU durante casi dos años, y la verdad es que nuestros libros funcionan muy bien allí. Nuestra metodología a la hora de crear e impartir los cursos así como la orientación al aprendizaje práctico, consiguen que un porcentaje altísimo de los alumnos nos valoren muy bien (el 87% el año pasado nos han puesto un 4 o 5 sobre 5), y que la mayoría tarde o temprano se formen de nuevo con nos...
[Más]
Tags: campusMVP, Certificaciones
4c055e89-22cb-4743-a137-e50f0211bd1e|1|5.0

La información que ofrece en ocasiones MSDN sobre la plataforma .NET se puede decir, eufemísticamente, que "no es todo lo buena que debiera ser". Un buen ejemplo de ello es la documentación de la clase FileSystemAccessRule y más en concreto lo que se refiere a los indicadores sobre propagación y herencia de permisos en el acceso al sistema de archivos. Consideremos este ejemplo. Necesitas controlar desde tu aplicación el acceso a un carpeta llamada "docs" de forma que te asegures de que el usuario "DOMINIO\Usuario" tendrá acceso de lectura a la carpeta y todas sus subcarpetas (y las hijas de éstas), pero sin embargo no tendrá acceso a ninguno de los archivos contenidos en éstas. Dejemos de lado la utilidad exacta de esto. Lo que quiero es mostrar lo retorcidas que han puesto las opciones correspondientes en la plataforma .NET :-S El código en C# que necesitaríamos incluir es este: 1: DirectorySecurity dirSec = Directory.GetAccessControl(@&quo...
[Más]
Tags: Programación, Seguridad, Sistemas operativos
4e5a6170-fd33-4318-871c-5e73c84cb22c|0|.0

Llevo unos cuantos días usando la nueva versión beta denominada Consumer Preview de Windows 8. Ya antes había usado la Developer Preview de hace unos meses, pero desde una máquina virtual por lo que no le daba un uso real. ahora la he montado en mi portátil, actualizando desde Windows 7, y la uso en real varias horas al día, por lo que puedo hablar con mucho más conocimiento de causa. Para empezar he de confesar públicamente que la interfaz Metro y la desaparición del botón de inicio me irritan y es algo que no me gusta nada. para un "power user" como yo es una pérdida de productividad en un entorno no táctil, si bien probablemente para los usuarios más comunes pueda ser mejor. Microsoft ha hecho sus estudios concienzudos (muy interesante, por cierto), y seguro que son gente muy lista. Puede que me acabe acostumbrando con los meses y cambie de opinión (sobre todo si uso un tablet con Windows 8), pero hoy por hoy para mi es una pérdida de productividad al trabajar. Y no soy e...
[Más]
Tags: Windows 8
b89e2bf5-c3a6-4f88-89db-877ad4f40aba|0|.0