Entendé tu factura de luz

Debido a los aumentos y quitas de subsidios acontecidos últimamente en los servicios públicos de Argentina, cada vez se puede ver a más gente preocupada por los montos que le vienen a pagar en su factura de luz.

La factura de luz tiene dos componentes principales: un cargo fijo y un cargo variable.

Por otro lado, es importante saber que existe una serie de escalones tarifarios según el tipo de consumidores que seamos. En el caso de los consumidores residenciales normalmente son 8 escalones y el pasaje de uno a otro es totalmente automático.

El consumo de energía eléctrica se mida en kilowatt-hora (kWh) y equivale a tener encendido un artefacto con una potencia de 1000 Watts durante 1 hora.

Veamos algunos ejemplos para clarificar esto:

  • Si tenemos una lamparita de 100 Watts (una de las viejas incandescentes que ya no se venden más) encendida durante 1 hora, el consumo energético será de 0,1 kWh.
  • Si tenemos una lamparita bajo consumo de 10 Watts encendida durante 1 hora, el consumo será de 0,01 kWh.
  • Si tenemos una plancha de 1000 W encendida durante media hora, el consumo será de 0,5 kWh.

Obviamente, la factura expresa los kWh consumidos en un período mensual o bimestral. Quiere decir que si la plancha del último ejemplo la usamos 10 veces en el período de facturación, habrá contribuido con 5 kWh al consumo facturado.

Ahora bien, de acuerdo al consumo que hayamos realizado en el período de un mes, se definirá en qué escalón tarifario estamos. Esta información se puede buscar en la página web de nuestra compañía eléctrica. En el caso de EDESUR, se puede ver el último tarifario (agosto 2018) aquí: http://www.edesur.com.ar/cuadrotarifario201808.pdf.

Cuadro tarifario Edesur

Aquí podemos ver, por ejemplo, que si en un mes tuvimos un consumo de 260 kWh, entraremos en el escalón tarifario T1 – R2. Según esa tarifa, tendremos un cargo fijo de $56,11 y un cargo variable de 1,944 $/kWh. Significa que tendremos que tomar el cargo fijo y sumarlo a la multiplicación del cargo variable por los kWh consumidos:

Subtotal por servicio eléctrico = 56,11 + 1,944 x 260 = $318,05

Algo importante a tener en cuenta es que el cuadro tarifario beneficia mucho a los que consumen poca energía. Por ejemplo, si consumimos el doble, es decir, 520 kWh, el cargo fijo pasa a $316, lo cual representa un aumento de 5,6 veces con respecto a nuestra condición anterior. El cargo variable, por otro lado, pasa a ser de 2,211 $/kWh, lo cual es un 13% más.

A todo esto se le pueden restar subsidios y bonificaciones y sumar impuestos (generalmente un 21% de IVA, un 6,5% de contribución municipal y algún porcentaje más provincial).

Consejos para ahorrar

Todo lo que hagas para ahorrar ayuda, en principio es muy importante usar lámaras LED. Incluso las dicróicas se pueden cambiar por LED. Por otro lado, mantener apagadas todas las luces y artefactos que no se usen es muy importante.

Utilizar lo menos posible todo lo que sea caloventores y calefacción eléctrica (estufas de cuarzo, etc.). Revisar especialmente artefactos antiguos ya que antes no se tenía tanto cuidado del consumo eléctrico. Lo importante es revisar la potencia (los Watts) de cada aparato.

Un caso a prestar mucha atención es si compartís el medidor entre varias viviendas, algo común en familias que fueron agrandándose. Si este es tu caso estás en una enorme desventaja ya que al estar sumando los consumos de varias familias, automáticamente vas a parar en los escalones tarifarios más altos. Si pudieras separar el consumo en medidores distintos, estarían pagando en total muchísimo menos.

Por ejemplo, si entre dos viviendas gastan 800 kWh, van a pagar $1203,64 de cargo fijo más $2,704 de cargo variable multiplicado por 800 kWh; en total, $3366,84 más impuestos. En cambio, si cada vivienda tuviera su propio medidor y gasta justo la mitad cada una, 400 kWh, pagarían $91,73 de cargo fijo más $1,998  de cargo variable multiplicado por 400 kWh; total, $890,93. Si sumamos las dos viviendas con medidores individuales da un total de $1781,86, lo cual es casi la mitad que con un solo medidor.

Como ven, es muy importante mantenerse en los escalones más bajos ya que el crecimiento es muy rápido. Por ejemplo, aquí podemos ver cómo influyen 150 kWh de consumo según el escalón:

Cuadro

Como ven, 150 kWh pueden llegar a representar entre $413,64 y $2359,62 en nuestra factura, según el escalón en el que nos encontremos.

Consulta el tamaño de las tablas en SQL Server

Cuando estamos analizando por qué una base de datos ocupa mucho espacio, una forma de investigarlo es visualizar el tamaño que ocupa cada tabla.

Esto puede obtenerse fácilmente con una consulta como esta:

Tengamos en cuenta que las bases de datos de SQL Server Express solo pueden ocupar hasta 10 GB de espacio por lo tanto es importante monitorear este dato.

SQL Table Size Query

Cómo reducir el tamaño del archivo de Log de SQL Server

SI nuestro archivo de log es muy grande probablemente tengamos problemas con el espacio en el disco más pronto que tarde.

Si nuestra base de datos tiene muchas transacciones pero maneja poco volumen de datos, es común que tengamos un archivo de datos (.mdf) relativamente pequeño y un archivo de log bastante más grande (.ldf).

Una de las operaciones más comunes para achicar el tamaño del archivo de log es recurrir a la opción Tasks > Shrink > Files del SQL Server Management Studio.

En la lista File type escogeremos entonces Log y luego nos mostrará en Available free space cuanto espacio se puede liberar. Para ejecutar la operación, hacer click en OK.

Sin embargo, es posible que ejecutes la operación Shrink File pero el tamaño del log no se reduce.

En este caso hay una alternativa que podemos emplear en el caso de bases de datos que NO son de producción: Para esto hacemos click derecho sobre la base de datos y elegimos Properties y luego Options. En la opción Recovery Mode nos aseguramos que diga Simple (no Full). Luego procedemos a hacer el Shrink como explicamos arriba.

Alternativamente podemos ejecutarlo en Transact-SQL:

Tengamos en cuenta que el Recovery Mode afecta la posibilidad de restaurar una base en el futuro ya que en los logs se guarda la información de todas las transacciones. Si queremos poder volver a restaurar la base a un estado pasado en el futuro, tenemos que asegurarnos de hacer una copia de seguridad del archivo de log.

 

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: