How to run a SQL Server script from the command line

To run the script file

  1. Open a command prompt window.
  2. In the Command Prompt window, type: sqlcmd -S myServer\instanceName -i C:\myScript.sql
  3. Press ENTER.

To save this output to a text file

  1. Open a command prompt window.
  2. In the Command Prompt window, type: sqlcmd -S myServer\instanceName -i C:\myScript.sql -o C:\EmpAdds.txt
  3. Press ENTER.

No output is returned in the Command Prompt window. Instead, the output is sent to the EmpAdds.txt file. You can verify this output by opening the EmpAdds.txt file.

How to download SQL Server Express, the easy way

For some not easy to understand reason, Microsoft has made downloading SQL Server Express very difficult. According to this blog post, you have to go through 12 steps to download SQL Server Express 2014.

Luckily, Scott Hanselman has put togetter a page where you will find all the direct links you’ve always wanted. So here you have the SQL Server Express download page, just 1 click away!

http://downloadsqlserverexpress.com

The 5 Types of Prospects

1. The Most Aware: Your prospect knows your product, and only needs to know “the deal.”

2. Product-Aware: Your prospect knows what you sell, but isn’t sure it’s right for him.

3. Solution-Aware: Your prospect knows the result he wants, but not that your product provides it.

4. Problem-Aware: Your prospect senses he has a problem, but doesn’t know there’s a solution.

5. Completely Unaware: No knowledge of anything except, perhaps, his own identity or opinion.

Cómo determinar la paridad de claves para encriptación con DES

Un tema que resulta confuso es determinar si una clave DES es odd parity o even parity. El algoritmo DES generalmente se utiliza con claves odd parity ya que son más seguras. Un criptograma creado con una clave even parity es más fácil de desencriptar.

Primero, para que nos pongamos de acuerdo, traduzcamos:

  • Even: par
  • Odd: impar (odd también significa extraño o raro, en inglés).

La condición para que una clave sea odd, es que cada uno de sus bytes sea odd. Si esta condición no se cumple, entonces es even.

  • Si todos los bytes son odd, la clave es odd y es aceptada.
  • Si al menos un byte es even, la clave es even y es rechazada. Algunos sistemas pueden hacer un ajuste para convertirla en odd.

Luego, la condición de odd o even de un byte se determina así:

  • Si el número de “1” en su representación binaria es impar, entonces el byte es odd.
  • Si el número de “1” en su representación binaria es par, entonces el byte es even.

Finalmente, el algoritmo para ajustar una clave even a odd debería ser byte a byte: Si un byte es even, se convierte ese byte a odd. Así para cada uno de los 8 bytes (para una clave single length). La forma en que se debería hacer este ajuste es el siguiente:

  • Si el número de “1” desde el bit 1 al 7 es impar (odd), se setea el bit 8 en “0”. Con esto se obtiene una cantidad impar de “1” en todo el byte, dejandolo odd.
  • Si el número de “1” desde el bit 1 al 7 es par (even), se setea el bit 8 en “1”. Con esto se obtiene una cantidad impar de “1” en todo el byte, dejandolo odd.

En todos los casos, se entiende que el bit 1 es el de la izquierda y el 8 el de la derecha.

Uso de Branches y Tags con SVN

El uso de branches y tags en SVN nos permite una mejor organización del trabajo en equipo. Si bien no muchos usuarios de SVN utilizan esta funcionalidad su uso trae varias ventajas.

Branches

Los branches se utilizan cuando se desea crear una rama independiente de desarrollo para trabajar en alguna funcionalidad nueva de un proyecto que todavía no se quiere incorporar a la línea principal. De esta forma, se crea una copia del proyecto en una carpeta /branches y el programador encargado de esta nueva característica cambiará (switch, según la terminología de SVN) su working copy a este nuevo branch y trabajará sobre este.

Cuando este programador realice operaciones de commit las realizará sobre su branch, sin afectar el desarrollo principal. Cuando esté listo para integrar sus cambios a la línea de trabajo principal, realizará una operación de merge.

Tags

El uso de tags se da cuando queremos “marcar” una determinada revisión por alguna razón en especial. Por ejemplo, podemos querer marcarla porque se trata de un release entregado al cliente. En este caso, como en el anterior, se crea una copia de la revisión deseada del repositorio en la carpeta tags. Técnicamente la creación de un branch y un tag es idéntica, ya que se realizan con el comando svn copy. La diferencia radica en la forma en que se les da su uso; en los branches está permitido realizar commits y en los tags no. Esta “prohibición” sobre la realización de commits o no es virtual, ya que no existe impedimento técnico sino que son los programadores los que lo deben tener en cuenta.

Creación y uso de branches y tags

El comando para la creación, tanto de branches como tags, es svn copy:

$ svn copy http://svn.example.com/proyecto/trunk \            http://svn.example.com/proyecto/branches/soporte-IPv6 \       -m "Branch para agregar soporte para IP v6" 

Si trabajamos con Tortoise SVN es aún más fácil, ya que tenemos un comando Branch/tag. Con Tortoise SVN tan solo tenemos que hacer clic derecho sobre nuestra working copy y elegir el comando Branch/tag. Tortoise reconocerá la URL de origen en el repositorio y nos pedirá la URL de destino, donde queremos hacer la copia.

En la ventana para crear un nuevo branch o tag, también tenemos un checkbox que podemos marcar para automáticamente hacer el switch al branch o al tag recientemente creado. De no hacerlo, podremos realizar el switch en cualquier otro momento con el comando homónimo.

Finalmente, para reintegrar un branch a la línea de desarrollo principal, recurrimos al comando Merge.

Estructura de directorios recomendada

La estructura de directorios recomendada por SVN, para la raíz de nuestros repositorios es de tres carpetas:

  • /trunk: este directorio aloja la línea de desarrollo principal.
  • /tags: en esta carpeta guardamos los tags que vayamos creando, por ejemplo /trunk/release-1.2/.
  • /branches: en esta carpeta guardamos los branches que creemos.

Es una buena práctica seguir esta estructura, aunque aún no hayamos decidido trabajar con branches y tags ya que de decidirlo más adelante será más complicado cambiarlo.

Residuos: ¿Cómo lo hacen en otros países?

Voy a inaugurar una serie de posts donde publicaré sobre cómo han resuelto en otros países problemas cotidianos que sería bueno imitar.

En el caso de la basura he visto diferentes métodos. En México DF, por ejemplo, he visto que el camión de la basura pasa tal como aquí pero con la diferencia de que un señor va tocando una campanita con la mano. Entonces, cuando escuchas la campana tenés que salir de tu casa para sacar la basura y tirarla al camión directamente. El mismo método lo he visto en Lima, Perún. El resultado es interesante ya que la gente no deja la bolsita de basura en la vereda, a cualquier hora, costumbre que solo la he visto en Argentina.

En el caso EE.UU. está bastante mejor pensado. Y es bastante sorprendente que en uno de los paises que mayor basura genera el servicio de recolección es muy eficiente y se ven las calles mucho más limpias que aquí.

Encontré, para ejemplificar, el caso de la ciudad de Allen, Texas, donde estuve de viaje por trabajo varias veces (http://www.cityofallen.org/DocumentCenter/View/143). En dicha ciudad el servicio de recolección de la basura es prestado por la municipalidad, como en casi todos lados. Cada vecino recibe de la municipalidad, en caracter de préstamo, dos tachos de basura grandes, con rueditas (estimo que habrá un caso especial para edificios grandes y oficinas). Uno de los tachos es para basura y el otro para reciclables. Los tachos deben ser sacados a la vereda en el día y horario designado. Si lo sacás en otro horario, te multan, ya que el tacho lleva tu dirección.

Lo que es increíble es que en uno de los paises que más residuos genera es que la recolección de basura común es una vez por semana. La recolección de reciclables, por otra parte, es cada dos semanas.

En el caso de los residuos voluminosos, me he cansado de ver aquí, en Buenos Aires, cómo la gente saca colchones viejos, sillones, cocinas, lavarropas y los tira felizmente a la calle como si se tratara de un basural. En EE.UU. corresponde una buena multa para los infelices que hagan eso. Los residuos voluminosos como esos deben retirarse solamente por pedido y se recolectan solamente una vez al mes.

En otras ciudades de EE.UU., por ejemplo San Francisco, agregan un tacho más de basura para materia orgánica la cual se utiliza para generar fertilizantes.

Sin dudas, son cosas de las que podemos aprender.

Argentina economics for software services buyers

Yesterday, I received an email from an old client, who has hired full time engineers in Argentina, asking me about the economic situation of software outsourcing companies after the new government regulations. He was referring to the new argentinean government regulation for foreign money exchange. So, I gave him some background information.

Why so much USD in Argentina?

Argentineans, for years, were used to save in foreign currency, specially in US dollars, as a way to protect themselves from inflation and economic crisis. US dollars are also used by the Argentinean Central Bankto maintain and somehow control the value of our currency, the Peso. Argentina is the second country in the world after Rusia, with more US dollars outside USA. Another strange thing that happens here is that all real estate operations are made in USD. That doesn’t happen, for example, in our neighbor Brazil, where their currency, the Real is used exclusively for everything, and I think that is what we should do.

The recent economic crisis in Europe is making european companies here to transfer US dollars to Europe, to help their central branches. I’m not sure why, that is apparently not a good thing. Some private savers are also changing more pesos to USD because they fear of the European crisis.

All these scenarios made the government create a new regulation in which they demand that, whoever wants to change Pesos into USD, to prove how they obtain their money.

The issue is that a good part of the pesos which were changed into USD were not legally justified from people or companies who did not pay their taxes. So now, if they don’t have a legal way to demonstrate how they obtained the pesos, they are not allowed to buy USD.

For outsourcing companies doing their things within the law, this is not a problem. I can receive payments from foreign companies as usual and I could buy USD if I wanted.

What changes

As I said before, for companies doing things within the law, that is, paying their taxes, nothing changes. An argentinean company or individual has NO reason to demand more money from you because of this new regulation. Our costs did not go up because of this in any way.

The usual flow is that the outsourcing company emits a valid invoice (valid for the argentinean law) , client transfer the funds, usually via international bank transfer (SWIFT code), and the money is cleared in the company’s account, always in Pesos, which is our national currency.

If, for any reason, the company needs to buy foreign currency, they can do it without any problem, because they report their sales to the Tax Agency monthly.

It is true that providers using services like Xoom or Western Union received their payments in USD before the new regulations and no justification for the origin of the funds were asked for them. The difference now is that, if they want to continue receiving their funds in USD, they will have to prove the origin of the funds; if not, they will pay them in Pesos, at the official exchange rate.

The trick here was that those providers were declaring that the funds received were “familiar help”. That was definitely outside the law.

How to tell if you are hiring within the law

Now, if you are a foreign company hiring argentinean services you may be asking if you are hiring providers within the law.

If you are not hiring registered providers, that means you are paying less than the market value or that your providers are making more because they are not paying their taxes.

Even though you don’t need an invoice, it is your moral obligation to request one.

An argentinean invoice has some elements that will help you determine if it is legal or not.

CUIT

This is the tax identification number. It is a 11 digits number, usually represented as ##-########-#.

If the invoice of your provider does not include this number, you are not receiving a legal invoice and you are probably helping to tax evasion.

With this number, you can find out if you are hiring a provider who is registered in the tax agency. You could go to AFIP, click the Constancia de Inscripción link, and make a query using the CUIT (no dashes).

You could get two result types:

  1. If it says “Régimen Simplificado para Pequeños Contribuyentes” means he is registered in the simplified program for small taxpayers (commonly referred to as “Monotributo”), which is OK. But you should also check the category, which is a capital letter.

    In this page, you can see how much is the tax for each category (values expressed in Pesos). The first column shows you the category letter. The second, the top anual income for each category and the last two columns shows you the total tax they have to pay for services and goods respectively.

  2. If it doesn’t say “Régimen Simplificado para Pequeños Contribuyentes”, your provider is in the “General” program, which is more suitable for companies with an anual income of 46,000 USD or more. This program has more controls from the tax agency and taxpayers are forced to report monthly sales and spendings. They usually pay more in taxes (aprox. 30%), but they can deduct spendings.

Invoice letter

If the services provided are used outside Argentina, your provider should give you an E type invoice wether he is in the Monotributo program or not.

The difference between C and E invoices in Monotributo, for services, is formal. It doesn’t mean they pay different taxes with one invoice type or the other. So some providers could also give you a C type invoice but that should not be a problem.

You should not receive an A nor B invoice, unless you buy directly IN Argentina, because that means that you would be paying the sales tax (21%) and, as a foreign company, you should not pay it.

Transfer method

If you send the funds through international bank transfer, it is very likely that your providers will have to present the invoice that justifies those funds to the bank, to get the money cleared into their bank account.

If you are paying your programmers through services like Western Union or Xoom.com, and you are not asking your providers a valid invoice, you should know that these services do not demand to present an invoice to release the funds, so it is an easy method to skip paying taxes.

Argentinean inflation

Argentina, like many other countries in Latin America is experiencing a continuous growth since 2003. The collateral effect is inflation. That means that, each year, we need more Pesos to live.

Anual inflation in 2010, according to government is approximately 11%. But, to private consultants it is 25%. The trick is that not all the consultants reveal their measure methodology but government does. And government inflation is more country broad while private consultants focus more on big cities. An average between both values is acceptable.

If your provider express the prices in USD, he can make some difference with the exchange rate variation, but it is not enough to cover from inflation. For example, in the last year, USD went up 10%, wich is not enough to cover the average inflation.

In 2011 we might not experience as much of inflation as last year or, at least, not more. But beginning 2012, we will experience a higher cost in services like electricity, gas and water, specially in Buenos Aires and surroundings.

The case of my old customer

My opinion is that his providers were lying and trying to deceive him. They told him that they had to register as exporters and to pay more taxes. They pretended a raise of 30%, which is crazy in any industry.

The fact is that software providers do not need to register as exporters (that is for goods that go through customs), and they don’t have to pay more taxes than what they should be already paying from the beginning.

Probably, these providers realized that they won’t be able to be paid in US dollars anymore, because they are not producing invoices for their work or they are not properly registered and paying their taxes.

Why they would need US dollars? As I said at the beginning, argentineans are used to save in this currency, to protect from inflation or to buy a property. But it is also true that they can exchange the US dollars for the Pesos they need for living at a higher exchange rate than the official in the black market for, easily 15% or 20% more.

Use Cases vs. User Stories

No me parece que haya mucha diferencia entre una metodología dirigida por casos de uso (Use cases) o por historias de usuario (User Stories).

Por lo general, los casos de uso proveen una descripción más detallada “paso a paso” de las acciones que realiza un usuario del sistema para cumplir con su objetivo. Además, los casos de uso contemplan las extensiones, es decir, las diferentes variantes que pueden darse en el camino para alcanzar el objetivo como errores o algún desperfecto en algún sistema dependiente.

Pero es importante entender que no es necesario definir los casos de uso por completo al inicio del proyecto. Estos deben ser primero identificados, declarados y luego definirlos a medida que se avanza en las iteraciones del proyecto. En muchos proyectos me han pedido definir todos los casos de uso por anticipado y esta es una tarea realmente sin sentido.

Otro punto sobre el que se discute mucho es si los casos de uso deberían o no contener información sobre la interfaz de usuario. Mi opinión es que depende de dónde provengan. Si los casos de uso los escribe un analista en base a la información que obtiene del cliente, probablemente no sea necesario definir elementos de la UI. En cambio, en equipos de trabajo más chicos puede darse que la misma persona que define los casos de uso vaya a ser quien luego haga el trabajo de diseño o implementación. En este caso, definir aspectos de la UI puede ser una buena forma de ahorrarse trabajo.

Por último, y siguiendo todavía con los casos de uso, no siempre es necesario utilizar la famosa plantilla de Cockburn para definirlos. En ocasiones basta con una simple descripción, a menos que se requiera una funcionalidad muy específica.

Por el lado de las User Stories, una de sus principales ventajas es que las metodologías ágiles parten de que estas son escritas por el cliente. Para el cliente resulta mucho más natural escribir User Stories que casos de uso, aunque tan solo sean los títulos.

Si bien creo que la información que brindan las User Stories al desarrollador es similar a la que brinda un diagrama de casos de uso, no podemos pedirle al cliente que haga un diagrama. Las User Stories, por definición, se crean utilizando un lenguaje hablado natural, y ahí radica su ventaja que es la facilidad para su concepción.

Error Saving changes is not permitted en SQL Server

En el día de hoy me encontré por primera vez con algo totalmente nuevo para mí. Resulta que el Management Studio para SQL Server 2008 modificó la forma en que se guardan los cambios en la vista diseño de una tabla.

En algunos casos, Management Studio elimina totalmente una tabla y la vuelve a recrear, por ejemplo, cuando tiene que crear una columna en una ubicación específica. Esto es así desde versiones anteriores, pero aparentemente en esta versión 2008 decidieron ponerle una opción que impide esto, mostrando el siguiente mensaje:

Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.

La solución es muy simple y solo consiste en dirigirse a[Tools/Options/Designers] y desmarcar el checkbox [Prevent saving changes that require table re-creation].

Mi primer Palermo Valley (pv10)

El jueves se me dio por curiosear un poco en el evento que realizaba la gente de Palermo Valley sin mucha idea de qué se trataba.

Me pareció bueno el emprendimiento para conectarse con gente pero todavía falta un poco más de organización. Prometo que, cuando tenga yo un poco más de tiempo, voy a ofrecerme para colaborar, porque me interesa.

Interesante el anuncio que hicieron sobre el proyecto de unir a todos los valleys de Latinoamerica en un Latam Valley y también sobre la posibilidad de eventos dedicados a proyectos para móviles.

Hablando de móviles, algo que me sorprendió fue haber visto la mayor concentración de iPhones por metro cuadrado en toda mi vida!

Por otro lado, tuve la oportunidad de conocer emprendimientos muy interesantes. Entre las ideas que me parecieron más interesantes están:

  • MapiProp es un portal para búsqueda de propiedades basado en GoogleMaps. No es original la idea, pero lo probé y puedo afirmar que funciona muy bien.
  • WIMIT es un software para teleconferencias y e-learning que parece estar bastante bueno. Es uno de los productos que venimos considerando para nuestro proyecto de e-learning pero que por ahora está pospuesto.
  • Bibliotecasa es un sitio de intercambio de libros físicos. La idea está buena, pero no creo que le vaya a hacer mucha gracia a las editoriales. Me pregunto si será legal. Igual me parece buena la idea y en algún momento voy a probarlo.

En un futuro próximo, me gustaría alguna vez tener la oportunidad de dar un speech sobre algún proyecto propio. Claro que primero debería tener uno 🙂

Para los curiosos les dejo el link al video del evento en el blog de mi amigo Ariel Corgatelli, Infosertec, que hizo la cobertura:http://www.infosertec.com.ar/blog/?p=5803