Cómo usar bundles y minificados

ASP.NET 4.5 viene con una característica muy buena llamada bundles y minificados. Son dos técnicas que permiten unificar nuestros archivos en uno solo y reducir su peso renombrando variables y quitando comentarios y espacios en blanco innecesarios.

El primer paso es crear los bundles. Para esto debemos buscar el archivo App_Start\BundleConfig.cs. En la función RegisterBundles, debemos realizar la configuración:

La función Include permite especificar todos los archivos que incluye el bundle. Simplemente se ingresan todos separados por coma.

El wildcard {version} permite que podamos actualizar el número de versión y ASP.NET va a tomar siempre el más grande si necesidad de cambiar el código.

También se puede hacer con CSS:

Para mostrar los bundles en nuestras vistas:

Para activar el bundling y la minificación no hay que olvidarse de cambiar la siguiente propiedad en el web.config:

Si no cambiamos debug a false, nuestro HTML se generará con toda la lista de referencias a los archivos que incluyen nuestros bundles. Por ejemplo:

En cambio, con debug en false, se genera un único archivo (un bundle), minificado y además, se agrega un parámetro aleatorio para evitar que el browser cachee los archivos.

archivo minificado

Adicionalmente, si debug está en false, ASP.NET va a buscar la versión .min de los archivos, si es que ya existe.

Para mayor información, recomiendo este artículo: https://docs.microsoft.com/en-us/aspnet/mvc/overview/performance/bundling-and-minification

Cómo usar la constante de compilador DEBUG

Todo proyecto de Visual Studio se crea con dos configuraciones predeterminadas: Debug y Release.

Es común que si queremos que cierto código sea solo válido para la configuración Debug, alguna vez hayamos utilizado directivas de compilador de la siguiente forma:

Normalmente, el código entre #if DEBUG y #endif solo va a salir si estamos en la configuración Debug. Y digo “normalmente” porque no es algo que dependa directamente de la configuración Debug, sino del símbolo DEBUG dado de alta en las propiedades del proyecto:

debug constant

 

Aquí podemos ver que DEBUG es una constante que se define en la sección Build de las propiedades del proyecto (al igual que TRACE). Normalmente la constante DEBUG está definida en la configuración Debug pero no está definida en Release.

Como se dan cuenta, no se podría hacer algo como:

Simplemente, la constante RELEASE no existe. Aunque podrían dar de alta el símbolo RELEASE en el campo Conditional compilation symbols y así sí obtener el resultado esperado.

Otra opción a considerar sería usar #if !DEBUG.

Por último, tengan en cuenta que estas constantes y símbolos cambian con la configuración. Entonces, si tienen una configuración Release, los símbolos que den de alta allí no estarán en la configuración Debug y viceversa.

ASP.Net WCF: The service cannot be activated because it does not support ASP.NET compatibility

Estuve dando vueltas con este error desde ayer y fue algo que, ciertamente, me hizo perder mucho tiempo.

El error surge por una falta de conocimiento en la forma en que trabaja WCF y ASP.NET cuando corren dentro del mismo sitio.

WCF y ASP.NET puede correr side-by-side pero se debe habilitar el modo de compatibilidad. Si no se hace, va a aparecer el mensaje de error del título:

The service cannot be activated because it does not support ASP.NET compatibility

Ahí se nos invitará a modificar la propiedad aspNetCompatibilityEnabled a false. Pero esto no resuelve las cosas totalmente porque habrá cosas en nuestro servicio WCF que no funcionarán como esperamos.

El problema que estaba teniendo yo al hacer esto es que HttpContext.Current me estaba devolviendo siempre null en mi servidor de pruebas (IIS Express). En el servidor de producción (AWS) funcionaba bien.

El problema aquí es que el servicio no se estaba activando bien. Para esto hay que seguir los siguientes pasos:

1. En primer lugar, la propiedad aspNetCompatibilityEnabled tiene que estar en true en el web.config:

2. En segundo lugar, hay que importar el siguiente namespace:

3. Y, por último, hay que decorar la clase de nuestro servicio de la siguiente manera:

De esta forma podremos acceder a HttpContext.Current sin problemas.

Para más información sobre este tema, recomiendo este post de Microsoft: WCF Services and ASP.NET.

Estaremos en Barcelona para los 15 años de Centraldev

Curiosamente, no estaremos en Buenos Aires para los 15 años de Centraldev sino que estaremos de viaje en Barcelona. Tenemos clientes en Madrid, pero no tenemos clientes en Barcelona por lo que si alguien de Barcelona desea comenzar a ser nuestro cliente, ¡aún está a tiempo para que lo invitemos una cena y unas cervecitas el día 3 de Agosto! 😀

¡Se vienen los 15 años de Centraldev!

Ayer estaba aburrido y me puse a pensar… ¿cuántos años llevamos trabajando con Centraldev? Para hacer el cálculo sencillo, me fijé cuál fue la fecha en que registré el dominio y resultó ser… ¡3 de agosto de 2002! ¡O sea que este año cumplimos 15 años!

Me pareció increíble el número, pero cuando empecé a mirar hacia atrás, el cálculo es acertado.

Empezamos con la idea de este negocio en el año 2002 con Carola Kessler. Argentina había devaluado recientemente y quisimos aprovechar la oportunidad para trabajar para el exterior prestando servicios por Internet. Para la época, ¡algo totalmente novedoso!

El año 2002 fue un año principalmente de preparativos. Diseñamos nuestro primer logo y nuestro primer sitio web.

No recuerdo exactamente cuándo llegaron nuestros primeros clientes, pero sí recuerdo que fueron:

  • Ampli Red, una empresa de venta de equipamiento para TV por cable, la única que aún conserva el diseño original del 2002.
  • Mabel Iam, una autora de libros de autoayuda de Miami (nuestro primer cliente del exterior).
  • Sounder Labs, una empresa de fabricación de laboratorios de idiomas.

Más tarde seguimos con proyectos nacionales como Cinturón Negro, 123info y Fundación Habitat y Desarrollo, entre otros.

Me acuerdo cuando conseguí una vez un proyecto para desarrollar un “presupuestador online” para un estudio de diseño. Fue el primer proyecto “grande” que había conseguido. En esa época estaba también aprendiendo ASP.NET y con el dinero del adelanto me fui derecho a comprarme el libro “Programming ASP.NET”, de O’Reilly, un libro que me sirvió muchísimo.

Seguimos en 2003 y 2004 cada vez consiguiendo proyectos más grandes, como MegaOperadora, que nos tuvo ocupados durante casi un año. Y luego Lantern Books, una editorial de Nigeria, BuddyTips, que luego migraría a Exxset, nuestros siguientes proyectos para el exterior.

2005 fue un año de muchos desafíos, porque empezamos, tanto Carola como yo, a dedicarnos full-time a Centraldev. Continuamos la mayor parte del año trabajando duro con BuddyTips. Hacia fines de año conseguimos también nuestro primer proyecto “WinForms”, que resultó muy interesante y desafiante, a pesar de que duró poco.

En 2006 arrancamos trabajando para SoliSYSTEMS, una empresa de Texas con la cual continuamos trabajando regularmente hasta el día de hoy. Para ellos hicimos toda clase de proyectos, incluyendo los realizados para la industria automotriz mexicana. Pero continuamos trabajando en toda clase de proyectos para otros clientes que sería muy largo de enumerar.

Hoy estamos concentrados en el lanzamiento de una aplicación web para nuestro cliente de California, OmniPrint International, al mismo tiempo que estamos planeando nuevos proyectos propios.

Más cerca del cumpleaños prometo hacer un post más detallado sobre los proyectos realizados y quienes colaboraron.

Calculadora de Impuesto a las ganancias para autónomos

En diciembre del año pasado, inspirado en un proyecto publicado en el blog de Ariel Setton, una calculadora del impuesto a las ganancias para trabajadores en relación de dependencia, me puse a programar una calculadora específica para el caso de Autónomos.

La calculadora salió publicada primero en el blog de Ariel Setton, quien también colaboró en el desarrollo, y ahora la publico aquí, para el que no la haya visto.

Recuerden incorporar en los Gastos y Deducciones el monto que pagan en aportes de Autónomos.

Recuerden incorporar en los Gastos y Deducciones el monto que pagan en aportes de Autónomos.

Tutorial: Accedé a la API de Foursquare con PHP

En este tutorial veremos un ejemplo bastante simple sobre cómo acceder a la API de Foursquare desde PHP.

El primer paso es registrar una aplicación. No importa que se trata de una aplicación de prueba. Lo importante es tener definido ya el servidor donde la alojaremos. Para esto vayan a la URL https://es.foursquare.com/developers/register.

Captura de pantalla 2015-01-28 a las 16.28.33

Allí, completen los datos que les piden para su aplicación y obtendrán los dos datos más importantes: el client_id y el client_secret. Estos datos los deben resguardar ya que son las credenciales de autenticación de su aplicación.

Ahora sí, ya pueden empezar a programar.

Básicamente, la interacción con Foursquare se maneja de la siguiente manera:

Se dirige al usuario a la página de autorización de Foursquare (https://foursquare.com/oauth2/authenticate). Aquí el usuario deberá autorizar el acceso de nuestra aplicación a su cuenta de Foursquare. Para esto, el usuario deberá loguearse con sus datos de Foursquare, si es que ya no está logueado.

Para esto, le proveemos al usuario de un link en nuestra aplicación hacia la siguiente URL:

Observen que debemos pasar dos parámetros: el client_id y la URL a donde queremos que Foursquare nos devuelva la respuesta.

Una vez que el usuario haya autorizado a nuestra aplicación, Foursquare nos devolverá un “code” en un parámetro de querystring, a la redirect_uri. Por ejemplo, http://redirect_URI/?code=XXX.

Con este code, el cual puede ser diferente con cada autenticación, deberemos obtener el token del usuario. Para esto llamaremos a la siguiente URL:

En este caso, la respuesta será en JSON:

Si vamos a guardar los usuarios en una base de datos, querremos también guardar este token con él.

Veamos cómo realizar esto con PHP:

Aquí vemos como accedemos a un bloque if al recibir el parámetro code por querystring y luego obtenermos el token. Seguidamente, utilizamos este token (en $obj->{‘access_token’}) para mostrar un link a otra página de nuestra aplicación que realizará otra tarea.

El siguiente paso ya es la interacción con los diferentes métodos de la API.

Por ejemplo, si queremos obtener todos los checkins de un usuario, podemos llamar al siguiente método:

Aquí vemos cómo obtener los checkins con PHP:

Aquí ya tendremos los datos de los últimos checkins en la variable $obj. Aquí deberemos hacer referencia a la documentación para conocer cómo está estructurada la información JSON en esta variable.  Para esto podemos ir a la página que documenta el método (en este caso, https://developer.foursquare.com/docs/users/checkins) y allí hacer click en el botón Try it out para ver un ejemplo de utilización y los datos retornados.

Por ejemplo, para recorrer todos los checkins, podemos hacer lo siguiente:

De esa forma imprimiremos una lista de todos los checkins recientes.

Para un ejemplo de uso completo, he armado una pequeña aplicación de una página que lista todos los checkins realizados bajo la categoría “Hoteles”. El mismo puede ser encontrado aquí: http://centraldev.net/4sqtest/

El código fuente lo pueden bajar de http://centraldev.net/4sqtest/index.php.zip con la salvedad de que deberán crear un archivo config.php donde deberán definir dos constantes CLIENT_ID y CLIENT_SECRET con las credenciales de su aplicación, como se muestra a continuación:

 

Plastc, una multitarjeta digital

Plastc Card_front_and_back

Si somos sinceros, a más de uno de le ocurrió alguna vez tener una tarjeta única para todo. Plastc es la primera implementación de esta idea hecha realidad. A simple vista, parece una tarjeta más para nuestra billetera, pero es mucho más que eso.

Plastc cuenta con un display LCD monocromático táctil, chip de smart card, chip de RFID y chip de memoria flash. Todo integrado en la medida estándar de una tarjeta de crédito común y corriente (si bien hay que darle crédito a la empresa estadounidense que lo ideó, no podemos dejar de admirar también a los chinos te fabrican cualquier cosa!).

La tarjeta funciona en conjunto con un smartphone mediante el cual podemos registrar hasta 20 tarjetas. Todo esto es alimentado con una batería que se recarga por inducción y tiene una vida útil de hasta 30 días.

El funcionamiento se basa en emular las tarjetas que queremos utilizar. Para esto, basta seleccionarla desde la pantalla táctil y estará lista para funcionar ya sea como tarjeta de crédito, débito o tarjeta de millas o puntos. Básicamente, puede emular cualquier tarjeta que tenga banda magnética, chip o código de barras.

Sinceramente, no me he adentrado en los conceptos tecnológicos, pero me imagino que, para hacerlo, tienen que haber establecido algún tipo de acuerdo con las entidades financieras de las tarjetas que buscan emular.

El producto estará disponible a mediados del 2015, pero ya se están tomando órdenes por 155 dólares.

5 consejos para gestionar el Facebook de tu empresa

Desde que surgió Facebook como un medio de comunicación más para que las empresas se conecten con sus clientes he visto de todo. Hay excelentes casos de uso de la red social para salir de la más grave de las crisis comunicacionales con la mayor elegancia posible y hay algunos que se meten solos en lios.

Recientemente, un conocido inició un nuevo emprendimiento y empezó a utilizar Facebook para promocionarse. Enseguida vi muchos errores básicos en la estrategia de uso de la red social y me pareció una buena oportunidad dedicarle un artículo al respecto para ayudarlo. Así que ahí van mis 5 consejos básicos para gestionar el Facebook de tu empresa.

1. Creá una Página.

El primer error, y uno de los más comunes, es crear la página de tu negocio como una nueva cuenta de Facebook. Esto es un error, porque tus clientes deberán hacerse “amigos” de tu negocio y vos tendrás que aceptar su solicitud de amistad. El principal problema que surge aquí es la privacidad, ya que al ser “amigos” de nuestros clientes, estaremos habilitados para ver todo lo que el cliente publica en sus cuentas personales de Facebook. Entonces, habrá muchos potenciales clientes que advertirán esto y rechazarán la posibilidad de hacerse amigos para evitar que alguien desconocido acceda a su contenido personal.

La forma correcta, entonces, es crear una Página, la cual manejaremos desde nuestra cuenta personal.

2. Elegí cuidadosamente el contenido

Publicar y republicar el mismo anuncio o posteo hasta el cansancio es un gran ¡NO! Esto no hace más que cansar a la gente hasta lograr que abandone tu página. A nadie le gusta entrar a su muro de Facebook y encontrarlo lleno de publicidad.

No hace falta todos los días subir el mismo banner publicitario donde describís lo que hacés y publicás tu teléfono. No aporta nada. Perdés clientes.

Lo que queremos es mantener el interés del público de nuestra página, aunque no se conviertan en clientes YA. Para esto, el tipo de contenido que podés publicar puede estar relacionado con lo que hacés.

¿Das clases de música? Linkeá videos de YouTube que estén buenos, publicá fotos nuevas cada tanto de tu trabajo con tus alumnos. ¿Sos especialista en alguna tecnología? Escribí algún comentario relevante sobre alguna tecnología novedosa, publicá links de interés para tu público. En fin, mostrá lo que hacés, demostrá lo que sabés.

Si la gente quiere contactarte, en la sección de información de tu página encontrarán tu teléfono o tu email. O te podrán dejar tu comentario.

3. No etiquetes a tus amigos

No sé por qué Facebook pensó que las etiquetas eran una buena idea, a nadie le gusta que lo etiqueten. Pero, que etiquetar a alguien en un anuncio, ya es pasarse de la raya.

Dejá las etiquetas solo para cuando realmente aparezca la foto de esa persona, y asegurate de haber obtenido el consentimiento de esa persona para etiquetarla.

Un caso de especial cuidado debe tenerse cuando se publican fotos de menores. Asegurate de tener el permiso para hacerlo o solo publicá fotos donde no se vean sus rostros para evitarte problemas.

4. Hablá con tus seguidores

No hay nada más decepcionante que una empresa que no responde. Si te hacen una consulta, asegurate de poder responderla en un tiempo razonable.

Las redes sociales son justamente para eso, para estar en contacto permanente con tus seguidores, clientes actuales o que en un futuro podrían serlo.

Por eso, mantenelos actualizados sobre las actividades y novedades de tu negocio y respondé a sus consultas ya que la respuesta para uno puede ser de utilidad para muchos.

5. Entendé las críticas

Es parte del juego, si estás en redes sociales, no va a faltar quien te haga una crítica. Puede ser desde un cliente que, con razón te haga saber que no estuvo conforme con tu servicio, hasta uno realmente quejoso o incluso, un competidor encubierto.

Recordá que esto es parte del juego de estar en las redes sociales. La forma en que vos respondas esa crítica va a ser vista por todos tus seguidores y podrás hacer una diferencia a tu favor o en contra.

Incluso, tené en cuenta que si resolvés el problema del cliente de forma privada, el cliente podrá acudir a las redes sociales para mostrar su descontento o su agrado en la resolución que le diste a su problema.