sábado, febrero 28, 2009

Prejuicios en toma de decisiones

http://es.wikipedia.org/wiki/Lista_de_prejuicios_cognitivos

destaco...

  • Prejuicio o sesgo por resultados: Tendencia a juzgar una decisión por su resultado final, en lugar de juzgarla por la calidad o acierto de la decisión, cuando fue realizada.
  • Prejuicio o sesgo de confirmación: Es la tendencia a buscar o interpretar información de un modo que confirme nuestras propias preconcepciones.
  • Efecto Bandwagon, efecto de arrastre o efecto del carro ganador: Es la tendencia a hacer (o creer) cosas porque muchas otras personas hacen (o creen) esas cosas. También se puede dar el efecto contrario, rechazar algo por el mero hecho de que es lo que hace la mayoría. Este es el mismo instinto de manada o falso consenso.
  • Prejuicio de la elección comprensiva: Es la tendencia a recordar nuestras propias decisiones como mejores de lo que realmente fueron.
  • Prejuicio de información: Es la tendencia a buscar información, incluso cuando ésta no puede afectar a la decisión a tomar. Puede crear la falsa impresión de que por tener más información el razonamento y/o la conclusión son más veraces.
  • Efecto foco: Desviación de la predicción del resultado, ocurre cuando las personas sitúan mucha más importancia en un determinado punto o aspecto de un evento.
  • Prejuicio por omisión: Tendencia a juzgar acciones perjudiciales, lesivas o dañinas como peores, o menos morales, que omisiones de acción, igualmente dañinas.
  • Tendencia de riesgo cero: Preferencia por reducir un pequeño riesgo hasta cero, en vez de reducir de manera considerable un gran riesgo.
  • Aversión de pérdida: Es la tendencia de las personas a preferir, en mayor medida, evitar las pérdidas, superiormente, a la posibilidad de adquirir ganancias.
  • Efecto de Von Restorff: Tendencia de un individuo a situarse en un modo de queja continua, para que sea mejor y más recordado que el resto, en general, dice que un elemento que destaca o rompe la norma será más recordado que otros elementos.


todas...

  • Prejuicio o sesgo de confirmación: Es la tendencia a buscar o interpretar información de un modo que confirme nuestras propias preconcepciones.
  • Prejuicio de desconfirmación o sesgo de disconformidad: Es la tendencia a realizar un crítico escrutinio de la información cuando contradice sus principales creencias y aceptar sin criterio aquella información que es congruente con sus principales creencias.
  • Percepción selectiva: Tendencia en la cual, las ansias, esperanzas o ilusiones, afectan a la percepción.
  • Efecto Bandwagon, efecto de arrastre o efecto del carro ganador: Es la tendencia a hacer (o creer) cosas porque muchas otras personas hacen (o creen) esas cosas. También se puede dar el efecto contrario, rechazar algo por el mero hecho de que es lo que hace la mayoría. Este es el mismo instinto de manada o falso consenso.
  • Prejuicio de la elección comprensiva: Es la tendencia a recordar nuestras propias decisiones como mejores de lo que realmente fueron.
  • Prejuicio de información: Es la tendencia a buscar información, incluso cuando ésta no puede afectar a la decisión a tomar. Puede crear la falsa impresión de que por tener más información el razonamento y/o la conclusión son más veraces.
  • Prejuicio de compatibilidad: Es la tendencia a probar hipótesis exclusivamente a través de la prueba directa.
  • Efecto contraste: Es el realce o reducción de una cualidad o medida de un objeto cuando la comparamos con otros observados recientemente.
  • Negación del ratio base, es un error que ocurre cuando dado un dato D la probabilidad condicional de una hipótesis H es evaluada sin contar suficientemente con el ratio base o probabilidad a priori de H.
    • Ej. Suponga una ciudad con 100 terroristas y 1 millón de no terroristas. Hay una cámara con detección de caras con un error del 1% y por tanto también con un 99% de acierto. Si suena la alarma, ¿cúal es la probabilidad de que sea terrorista?. El conjunto total de la población es 1.000.100 personas. Si se aplica el prejuicio de negación del ratio base, se diría que como el ratio de fallos es del 1%, entonces la cantidad de fallos será 1 vez por cada 100, así si la cámara suena él o ella será con 99% de seguridad un terrorista. Esta desviación se produce porque igualamos el número de terroristas con el número de no terroristas en la ciudad y así el error se aplica por igual a la misma cantidad de gente, es decir, se obvia la gruesa base de gente que reduce la probabilidad. El verdadero cálculo debería tener en cuenta que en la ciudad solo hay 100 terroristas en un millón de habitantes. La probablidad de que sea terrorista cuando suene sería de 0'99·(nterroristas/ntotalenciudad), es decir, 99 en 10.099 (99/10099 ~ 1/100).
  • Efecto foco: Desviación de la predicción del resultado, ocurre cuando las personas sitúan mucha más importancia en un determinado punto o aspecto de un evento.
  • Deformación profesional: Es la tendencia a mirar las cosas de acuerdo con las convenciones o prisma de nuestra propia profesión, olvidando cualquier otro punto de vista más amplio.
  • Efecto de cesión: Es la tendencia de las personas a dar más valor a algo tan pronto como lo poseen.
  • Ilusión del control: Es la tendencia del ser humano a creer que puede controlar o al menos influir, en algunos beneficios o pagos que claramente no puede controlar o influir.
  • Prejuicio por impacto: Es la tendencia a sobrevalorar la duración e intensidad de los futuros estados emocionales, basándose en experiencias previas. No es necesario que ante estimulos iguales se sienta de la misma manera en dos puntos temporales distintos.
  • Negación de la probabilidad: Es la tendencia a rechazar completamente cualquier probabilidad cuando se realiza la decisión bajo incertidumbre.
  • Efecto laguna de exposición: Tendencia de las personas a expresar apetencias por cosas simplemente porque éstas les son familiares.
  • Prejuicio por omisión: Tendencia a juzgar acciones perjudiciales, lesivas o dañinas como peores, o menos morales, que omisiones de acción, igualmente dañinas.
  • Prejuicio o sesgo por resultados: Tendencia a juzgar una decisión por su resultado final, en lugar de juzgarla por la calidad o acierto de la decisión, cuando fue realizada.
  • Falacia de planificación: Tendencia a desestimar o infravalorar los tiempos de finalización de las tareas.
  • Efecto de pseudocerteza: Tendencia a hacer elecciones adversas y de riesgo si los resultados esperados son positivos, porque realizando búsqueda de las elecciones de riesgo se tiene la preconcepción de evitar resultados negativos o no tan favorables.
  • Tendencia de riesgo cero: Preferencia por reducir un pequeño riesgo hasta cero, en vez de reducir de manera considerable un gran riesgo.
  • Descuento hiperbólico: Es la tendencia de algunas personas a tener mayores preferencias por beneficios inmediatos en comparación con beneficios retardados.
  • Aversión de pérdida: Es la tendencia de las personas a preferir, en mayor medida, evitar las pérdidas, superiormente, a la posibilidad de adquirir ganancias.
  • Prejuicio de statu quo: Tendencia de algunas personas, a valorar o apreciar en mayor medida, las cosas que permanecen estables.
  • Efecto de Von Restorff: Tendencia de un individuo a situarse en un modo de queja continua, para que sea mejor y más recordado que el resto, en general, dice que un elemento que destaca o rompe la norma será más recordado que otros elementos.
  • Efecto keinshorm: Predisposición a contradecir las ideas o formulaciones que otra persona juzga, con la cual no simpatiza.
  • Prejuicio o sesgo de punto ciego: Es la tendencia a no darse cuenta de los propios prejuicios cognitivos.

sesgo confirmación

Algo muy frecuente en nuestro mundo

http://es.wikipedia.org/wiki/Sesgo_de_confirmaci%C3%B3n


En psicología y las ciencias cognitivas, el sesgo de confirmación es una tendencia a investigar o interpretar información de tal suerte que confirma nuestras preconcepciones, provocando errores en la interpretación del mundo que nos rodea. Se suele hacer referencia también como "sesgo confirmatorio" y es uno de los sesgos cognitivos que provoca más errores en la inferencia inductiva realizada en el proceso de confirmación de las hipótesis a estudiar. Para compensar esta tendencia humana se ha elaborado el método científico con el objetivo de poder desaprobar las hipótesis que la confirman de una forma más objetiva. Véase para más información falsacionismo.

demostración lógica (o no)

http://es.wikipedia.org/wiki/Argumentum_ad_populum
Si billones de moscas comen mierda, estará buena

http://es.wikipedia.org/wiki/Efecto_Bandwagon

http://es.wikipedia.org/wiki/Comportamiento_gregario


Un argumento ad populum o argumentum ad populum (en latín significa "[dirigido] al pueblo"), es una falacia lógica que implica responder a un argumento o a una afirmación refiriéndose a la supuesta opinión que de ello tiene la gente en general, en lugar de al argumento por sí mismo. Un argumento ad populum (y por tanto, falaz) tiene esta estructura:

  1. A afirma B;
  2. Se dice que la mayoría de la gente dice B
  3. Por tanto, B es cierto.

Ad populum es una falacia lógica también conocida como sofisma populista debido a que suele usarse en discursos más o menos populistas. Es de uso habitual en los argumentos de las discusiones cotidianas. También se utiliza algo en política y en los medios de comunicación aunque no es tan poderosa como el argumentum ad hominem. Suele adquirir mayor firmeza cuando va acompañada de un sondeo o encuesta que respalda la afirmación falaz. A pesar de todo, es bastante sutil y para oídos poco acostumbrados puede pasar inadvertida.



El Efecto Bandwagon, también conocido como el efecto de arrastre, "efecto de la moda" o de "subirse al carro" y relacionado cercanamente al oportunismo, es la observación de que a menudo las personas hacen y creen ciertas cosas fundándose en el hecho de que muchas otras personas hacen y creen en esas mismas cosas. El efecto es peyorativamente llamado comportamiento gregario, particularmente cuando es aplicado a los adolescentes. Las personas tienden a seguir a la multitud sin examinar los méritos de una cosa en particular. El efecto Bandwagon es la razón del éxito del Argumentum ad populum.

El efecto Bandwagon está bien documentado en psicología conductual y tiene muchas aplicaciones. La regla general es que las conductas o creencias se propagan entre la gente, como claramente sucede con las modas, con "la probabilidad de que los individuos la adopten incremente con la proporción de quienes ya lo han hecho."[1] Mientras más gente lleguen a creer en algo, otros también se subirán al carro sin importar la evidencia subyacente.


El comportamiento gregario describe cómo los individuos de un grupo pueden actuar juntos sin una dirección planificada. El término se aplica al comportamiento de animales en manadas y a la conducta humanda durante situaciones y actividades, tales como las burbujas financieras especulativas, manifestaciones callejeras, eventos deportivos, disturbios sociales e incluso la toma de decisiones, juicio y formación de opinión de todos los días,


jueves, febrero 26, 2009

funcionamiento diferencial

http://www.todomecanica.com/puente-trasero-y-diferencial.html

duda antigua resuelta

two types of programmers

http://blog.red-bean.com/sussman/?p=79


Two types of programmers

There are two “classes” of programmers in the world of software development: I’m going to call them the 20% and the 80%.

The 20% folks are what many would call “alpha” programmers — the leaders, trailblazers, trendsetters, the kind of folks that places like Google and Fog Creek software are obsessed with hiring. These folks were the first ones to install Linux at home in the 90’s; the people who write lisp compilers and learn Haskell on weekends “just for fun”; they actively participate in open source projects; they’re always aware of the latest, coolest new trends in programming and tools.

The 80% folks make up the bulk of the software development industry. They’re not stupid; they’re merely vocational. They went to school, learned just enough Java/C#/C++, then got a job writing internal apps for banks, governments, travel firms, law firms, etc. The world usually never sees their software. They use whatever tools Microsoft hands down to them — usally VS.NET if they’re doing C++, or maybe a GUI IDE like Eclipse or IntelliJ for Java development. They’ve never used Linux, and aren’t very interested in it anyway. Many have never even used version control. If they have, it’s only whatever tool shipped in the Microsoft box (like SourceSafe), or some ancient thing handed down to them. They know exactly enough to get their job done, then go home on the weekend and forget about computers.

Shocking statement #1: Most of the software industry is made up of 80% programmers. Yes, most of the world is small Windows development shops, or small firms hiring internal programmers. Most companies have a few 20% folks, and they’re usually the ones lobbying against pointy-haired bosses to change policies, or upgrade tools, or to use a sane version-control system.

Shocking statement #2: Most alpha-geeks forget about shocking statement #1. People who work on open source software, participate in passionate cryptography arguments on Slashdot, and download the latest GIT releases are extremely likely to lose sight of the fact that “the 80%” exists at all. They get all excited about the latest Linux distro or AJAX toolkit or distributed SCM system, spend all weekend on it, blog about it… and then are confounded about why they can’t get their office to start using it.

viernes, enero 23, 2009

hiperinflacción

Columna publicada el 13-01-2009

http://www.libertaddigital.com/opinion/autores-invitados/analisis-de-la-hiperinflacion-por-que-y-como-se-produce-47270/


El siglo XX ha sido testigo de todo tipo de desórdenes monetarios: el abandono del patrón oro, el monopolio de emisión del dinero y las leyes de curso forzoso han dado alas a gobiernos irresponsables que para hacer frente a sus obligaciones no han dudado en inflar la moneda hasta límites estratosféricos sin tener en cuenta las terribles consecuencias de sus políticas.
 
Aunque la hiperinflación más conocida es la alemana, muchos otros países han sufrido procesos hiperinflacionarios: Rusia (1914-1923), Grecia (1941-1944), Chile (1972-1974), Hungría (1945-1946), Austria (1921-1922), México (1982-1988), Perú (1988-1990), Nicaragua (1985-1990), etc. Con este artículo pretendo realizar un análisis teórico de estos procesos.
 
Antes de nada conviene aclarar qué se entiende por hiperinflación y en qué se diferencia de la inflación. En principio, la inflación podemos definirla como el aumento de las existencias dinerarias de una economía1, mientras que la hiperinflación sería un aumento muy fuerte y prolongado en el tiempo de estas existencias monetarias. Esta diferenciación es imprecisa y por este motivo al final de este artículo haré una matización teórica más adecuada sobre este asunto.
 
Dicho esto, pasemos a analizar teóricamente estos fenómenos. Las hiperinflaciones son procesos muy complejos y cada una tiene sus propias peculiaridades; sin embargo pueden caracterizarse por constar de tres etapas:
 
1. El punto de partida de una hiperinflación suele ser la decisión del Gobierno de imprimir nuevo dinero sin ningún tipo de respaldo metálico con objeto de autofinanciarse. De esta forma el Gobierno puede ahora hacer frente a sus obligaciones y gastos sin tener que subir los impuestos: pagar a sus funcionarios, amortizar la deuda pública, cubrir déficits de empresas estatales, financiar una guerra, etc.
 
Es importante señalar que el nuevo dinero entra en el mercado por determinados conductos y en cantidades muy variables; como es lógico, los primeros precios en subir son los de aquellos bienes y servicios que son demandados por el Estado en un primer momento. Los productores de estos bienes y servicios ven cómo sus retribuciones aumentan y éstos a su vez utilizan este dinero nuevo para comprar otros bienes y servicios en el mercado y, consecuentemente, los precios de estas mercancías demandadas en una segunda oleada por el nuevo dinero también comienza a elevarse, etc.; y así, en oleadas sucesivas el nuevo dinero se extiende paulatinamente por todo el mercado.
 
Hay que insistir en que las subidas de precios ni son proporcionales (algunos precios suben más que otros, otros se estancan o ¡incluso bajan2!) ni instantáneas (pues los precios se ven afectados en etapas sucesivas). Los economistas neoclásicos, basándose en la mecanicista teoría cuantitativa del dinero, han utilizado el símil de que el efecto de la inflación (entendida como el aumento de la oferta monetaria) es una subida de un supuesto nivel de precios como si de la subida de una marea se tratara.
 
Pues bien, ni existe un nivel de precios3 ni éstos aumentan como la subida de una marea: lo que la inflación produce podría caracterizarse más bien como un terremoto que trastoca todos los precios de la economía.
 
Al inicio de este proceso los individuos no suelen ser conscientes de lo que está pasando exactamente: muchos de ellos tan sólo observan que determinados bienes y servicios están aumentando de precio en el mercado y piensan que se trata tan sólo de subidas transitorias y que en un futuro próximo los precios bajarán. Por tanto, bajo estas expectativas actúan empresarialmente restringiendo sus compras y aumentando sus saldos de tesorería. Así se produce un aumento de la demanda de dinero como depósito de valor, ya que el público sigue percibiendo que el dinero tiene la misma calidad que antaño.
 
Como acertadamente señala4 Rothbard, este aumento inicial de la demanda de dinero tiene dos efectos: el primero, los precios tienden a aumentar menos que lo que proporcionalmente aumentan las existencias monetarias en la economía; y el segundo, el Gobierno al principio obtiene más recursos reales del público de los que había esperado. Esta primera etapa puede durar incluso años dependiendo de la velocidad a la que se incremente la masa monetaria y de la credibilidad del Gobierno en ese momento.
 
2. Sin embargo, llega un momento en que las masas despiertan súbitamente y se dan cuenta de que la inflación es una política deliberada que el Gobierno utiliza para financiarse y que proseguirá sin interrupción. La estrategia de los individuos cambia de inmediato: el público intenta defenderse de la inflación tratando de canjear sus existencias monetarias por bienes reales, los necesiten o no.
 
La gente se da cuenta de que sale ganando si compra hoy en vez de esperar al futuro cuando el poder adquisitivo de la unidad monetaria será mucho menor. Es decir, la estrategia empresarial para sobrevivir a este caos monetario consiste en reducir al mínimo los saldos de tesorería individuales y tratar de adquirir todo lo comprable con el objetivo de conservar el valor de su riqueza.
 
Por tanto, la demanda de dinero como depósito de valor se desploma: la unidad monetaria ya no sirve para conservar el valor a lo largo del tiempo. Los bienes que son usados como valor-refugio en una hiperinflación pueden ser de lo más variado: trigo, bebidas alcohólicas, madera, ropa, etc.
 
Este descenso abrupto de la demanda de dinero como depósito de valor tiene dos efectos inmediatos justo en sentido contrario que en la primera etapa: primero, el crecimiento de los precios se acelera, y este aumento es más que proporcional que el incremento de la oferta monetaria, hecho que retroalimenta el proceso de depreciación del numerario; y segundo, el Gobierno obtiene menos recursos reales del público de lo que había esperado. Sin embargo, es preciso añadir que el Gobierno seguirá obteniendo recursos reales del público mientras el dinero se siga usando en el mercado.
 



Una alemana utiliza sus marcos sin valor para alimentar el fuego durante la hiperinflación de 1923.

No debemos caer en la trampa de las cuantitativistas de pensar que la única causa de la hiperinflación es el exceso de emisión de dinero y las expectativas de mayores aumentos del mismo. El precio del dinero (es decir, su poder adquisitivo) también viene determinado por su calidad como activo que puede conservar el valor a lo largo del tiempo. Y dado que ahora los individuos (acertadamente) consideran que el dinero ya no puede cumplir esta función, su valoración sobre el mismo se desploma (y por supuesto esto reduce aún más su poder adquisitivo). 

Por tanto, como vemos, la demanda de dinero como depósito de valor se reduce a cero. Sin embargo, al mismo tiempo que esto ocurre se incrementa fuertemente la demanda de dinero como medio de cambio: los individuos se ven obligados a movilizar grandes sumas de papel moneda durante cortos periodos de tiempo para poder adquirir bienes que diariamente multiplican su precio.
 
En esta situación suele ocurrir algo que muy curioso: ¡los precios crecen tan sumamente rápido que el dinero existente en la economía es insuficiente para vaciar los mercados! Es decir, la incesante emisión de circulante es incapaz de seguir el astronómico alza de los precios de los bienes y servicios y, en consecuencia, no hay suficiente dinero para realizar las transacciones mercantiles diarias. Así se producen enormes quejas respecto a la escasez de dinero en la economía y el Gobierno responde ante esta escasez emitiendo a un ritmo creciente más y más circulante que nunca es suficiente para vaciar los mercados.
 
3. En la última etapa de la hiperinflación el sistema monetario queda destrozado; la moneda deja de utilizarse en las transacciones comerciales, su poder adquisitivo se reduce a cero y el Estado ya no puede seguir utilizando la inflación como método de recaudación. Los individuos vuelven al trueque o adoptan alguna nueva moneda. En esta situación, lo normal es que el Estado cree una nueva moneda canjeable por la antigua para restablecer el sistema monetario.
 

Un billete de 100 millones de dólares zimbabuenses
 
Suele ocurrir que para dar credibilidad a esta nueva moneda se respalde (aunque sea ficticiamente) con oro, tierras, etc. Además, en muchas hiperinflaciones, cuando los individuos repudian la moneda nacional pasan a utilizar divisas extranjeras de mayor credibilidad, como por ejemplo en las hiperinflaciones latinoamericanas que se vivieron procesos de dolarización espontánea de la economía.
 
También puede ocurrir los mercados seleccionen una nueva mercancía como dinero: por ejemplo en la hiperinflación rusa en las zonas rurales se desarrolló un patrón-trigo5. Me gustaría hacer una reflexión sobre el proceso de hiperinflación y la pérdida de funciones del dinero. Tradicionalmente se suele atribuir al dinero al menos tres funciones: depósito de valor, unidad de cuenta y medio de intercambio; es curioso comprobar cómo a lo largo del proceso de hiperinflación el dinero las pierde de forma paulatina.
 
En primer lugar, pierde la función de depósito de valor. Los individuos perciben que la inflación no va a parar y huyen hacia valores reales cambiando saldos de tesorería en constante depreciación por bienes tangibles acelerando el proceso de aumento de los precios en el mercado; en segundo lugar, se pierde la función de unidad de cuenta.
 
La hiperinflación hace imposible el cálculo económico, lo que tiene como consecuencia que los individuos cometan graves errores empresariales (consumo de capital, etc.); yfinalmente el dinero se colapsa y pierde incluso su función como medio de intercambio forzando a los individuos a la vuelta al trueque y a la búsqueda de monedas alternativas (como el trigo en Rusia, una divisa extranjera con credibilidad, etc.).
 
Para acabar con este análisis creo que es interesante preguntarnos la siguiente cuestión. ¿En qué punto puede considerarse que las emisiones de dinero pasan de ser mera inflación a ser hiperinflacionarias? En principio, no existe un acuerdo universal sobre este asunto. Algunos autores como Phillip Cagan señalan que un país entra en un proceso de hiperinflación en el momento en que los precios de los productos aumentan mensualmente a tasas mayores del 50% (como vemos, Cagan utiliza la definición neoclásica de inflación); otros autores consideran que estos aumentos en los precios tan sólo tienen que alcanzar tasas mensuales de entre un 20-30% para que pueda hablarse de hiperinflación. Sin embargo yo creo que todos estos autores se equivocan.
 
A mi modo de ver, el punto de inflexión que marca el paso de una inflación a una hiperinflación acontece cuando el dinero pierde su función como depósito de valor; por tanto, no puede definirse una tasa de crecimiento de los precios objetiva y válida para todo tiempo y lugar que nos indique cuándo pasamos de una situación u otra, pues el momento concreto en el que la moneda pierde esta función depende completamente de las percepciones subjetivas de los individuos que serán diferentes en cada contexto histórico.
 
Es decir, no hay una tasa técnica de crecimiento de los precios que delimite el momento exacto en el que se puede hablar de hiperinflación, sino que los procesos hiperinflacionarios (sea el ruso, el alemán, el chileno, etc.) comienzan en sentido estricto cuando la sociedad percibe que el dinero ya no es un activo seguro para conservar su riqueza y responde adoptando estrategias empresariales para sobrevivir en esta situación de caos monetario.
 
Consecuencias de la hiperinflación:
 
1. Empobrecimiento generalizado6: El continuo envilecimiento del dinero hasta su extinción provoca la desintegración de todo el sistema económico: el mercado nacional desaparece y la producción se detiene. La pobreza, la escasez y el desempleo se extienden por toda la economía ocasionando muchas penurias y sufrimiento humano. La inflación lleva a la mal inversión generalizada de los recursos escasos de la economía, originando a una estructura productiva absurda, despilfarradora, antieconómica y alejada de las verdaderas necesidades y capacidades económicas de la sociedad.
 
2. Los salarios reales se desploman: los precios crecen más rápido que las retribuciones salariales provocando importantísimas pérdidas de poder adquisitivo a los trabajadores. Este efecto es especialmente dramático para los empleados públicos, a quienes el ajuste salarial siempre les llega más tarde (si les llega).
 
3. Se hace imposible realizar cálculo económico alguno: sin dinero no es posible el cálculo, y sin cálculo los individuos no pueden enjuiciar el éxito o fracaso de los diferentes cursos de productivos por lo que se encuentran a ciegas frente a qué es y qué no es rentable producir. Esta situación además induce a las empresas a ensayar procesos de consumo de capital involuntarios, por lo que uno de los efectos más perjudiciales de las hiperinflaciones es la fuerte reducción del equipo capital, hecho que empobrece aún más a la sociedad.
 
4. Efectos redistributivos: Con la hiperinflación la relación de deudas deja de tener significado, los acreedores pierden todos sus derechos y los deudores se ven libres de sus obligaciones y consecuentemente la deuda pública se reduce a cero. Además, los perceptores de rentas fijas sencillamente se arruinan: pensionistas, propietarios que perciben alquileres, etc.
 
5. A lo largo del proceso de hiperinflación los tipos de interés se disparan, pero suele ocurrir que el mercado crediticio no logra seguir el crecimiento de los precios y finalmente desaparece debido a las pérdidas en que incurren los prestamistas.
 
6. Financiación del Estado: La hiperinflación provoca que la recaudación de impuestos deje de tener sentido. Durante el proceso, el camino para la financiación estatal pasa por imprimir dinero a tasas cada vez más aceleradas; algunos gobiernos también recurren a incautaciones físicas de recursos o a exigir impuestos en especie; sin embargo la mayor parte de la financiación suele realizarse mediante la emisión de dinero.
 
Por tanto, en el momento en que el público repudia el dinero estatal esta fuente de financiación se termina; probablemente éste es el motivo más poderoso por el que los gobiernos deciden introducir una nueva moneda: para poder seguir financiándose de una forma regular.
 
Artículo elaborado por David Sanz Bas (Licenciado en Ciencias Económicas por la Universidad Complutense de Madrid, miembro del Instituto Juan de Mariana), y originalmente publicado en portaloro y en la revista online de Friedrich Hayek de Argentina. El autor agradece enormemente los comentarios de Juan Ramón Rallo, Philipp Bagus y Daniel Luna.
 
Notas 
 
1 La definición de inflación como aumento general del nivel de precios es confusa, arbitraria e imprecisa: confunde las consecuencias con las causas de estos aumentos en los precios y no es objetivamente cuantificable.
 
2 Como lúcidamente señala Mises en una inflación los precios de algunos bienes al principio pueden llegar incluso a bajar si esos bienes son mayoritariamente demandados por los individuos que reciben el nuevo dinero en último lugar y, consiguientemente, su renta real y su poder adquisitivo disminuyen fuertemente y, por este motivo, estas personas se ven obligadas a reducir sus demandas de estos productos, provocando que sus precios bajen. Mises (2004), p. 497  
 
3 Concepto de nivel de precios es falaz, pues lo que de verdad hay en el mercado son multiplicidad de bienes con sus respectivos precios que, efectivamente, tenderán a subir, ceteris paribus si se incrementan las existencias monetarias, pero en ningún caso lo harán uniformemente ni de modo coetáneo. 
 
4 Rothbard (2001), p. 875, en concreto dice: "The social demand for money, in short, increases. As a result, prices tend to increase less than proportionately to the increase in the quantity of money. The government obtains more real resources from the public than it had expected, since he public's demand for these resources has declined".
 
5 En este sentido merece la pena leer la teoría del origen del dinero que Carl Menger escribió en el capítulo VIII de sus Principios de economía política.
 
6 Rothbard ilustra muy bien esta situación de desorden social a la que lleva la hiperinflación cuando dice: "When this runaway stage is reached, the economy in effect breaks down, the market is virtually ended, and society reverts to a state of virtual barter and complete impoverishment". Rothbard (2001), p. 876

Bibliografía
 
• Mises, L. (2004), La acción humana. Tratado de economía, Unión Editorial Madrid, 7ª Edición
• Rothbard, M. N., (2001), Man, economy and the state, The Ludwig von Mises Institute, 4ª Edición, Alabama
• Menger, C. (1997), Principios de economía política, Unión Editorial, Madrid, 2ª Edición

jueves, enero 15, 2009

solicitud alta usuarios

 
----- Original Message -----
From: 
To: 
Cc: 
Sent: Thursday, January 15, 2009 2:25 PM
Subject: Re:

Hola,
 
No entiendo el correo
Una de las razones es que debemos de utilizar diferentes términos.
 
Te explico los que nosotros utilizamos
 
 
USUARIO
===========
Combinado con la contraseña sirve para identificar y garantizar la identidad de las personas que acceden al sistema
 
Ejemplos de usuarios alberto@dept1, gerardo@ent1
 
 
 
CUENTA
=========

El objetivo fundamental de la cuenta es poder distribuir y organizar las operaciones realizadas a diferentes usuarios.

En ocasiones se utiliza también para identificar en la orden el usuario, el departamento, desgloses, cuestiones de backoffice... pero eso son cuestiones secundarias que dependen de las necesidades específicas y de como se hayan configurado.

 

 

 

A un usuario se le da permiso a diferentes servicios de la plataforma (como por ejemplo la visualización de precios)

A un usuario se le pueden asignar una o varias cuentas en una relación  de   usuario/cuenta/mercado/tipoPermiso

 

Con este esquema podemos configurar que una orden introducida por el usuario X, sea vista por alguien más o no. Incluso que otra persona pueda cancelarla o modificarla.

El modelo es muy flexible (y lógicamente no es una configuración trivial)

 

Hay otras cuestiones, como los grupos de cuentas, los filtros de usuario, grupos de filtros, filtros de entidad, filtros de cuenta, etc... que ya comentaremos en otro momento.

 

 

Dicho esto, te paso a explicar cuál es la configuración actual de banco pastor en MEFF (sólo la relación usuario/cuenta/mercado/tipoPermiso, no entramos en filtros ni grupos, ni permisos a nivel de entidad)

 

Usuarios...
===========

fulanito1

fulanito2

pedrito

raulito

jaimito

 

Cuentas...
=========

BOLSA

DIRECCION

FULANITO

 

 

Relación efectiva usuario/mercado/cuenta/tipoPermiso
(efectiva porque la configuración está representada de otra forma)
===========================================

(omito el mercado porque esto es sólo para meff)

USUARIO CUENTA TIPO PERMISO
bbbb BOLSA VER
bbbb DIRECCIÓN VER
bbb FB VER
ffff BOLSA TOTAL
ffff DIRECCIÓN TOTAL
ffff FB TOTAL
ffff BOLSA TOTAL
fdddd DIRECCIÓN TOTAL
fdddd FB TOTAL
oooo BOLSA TOTAL
oooo DIRECCIÓN TOTAL
oooo FB TOTAL
rrrr BOLSA TOTAL
rrrr DIRECCIÓN TOTAL
rrrr FB TOTAL

 

Esta tabla se puede definir con la siguiente expresión...

Banco Pastor tiene 3 cuentas

Banco Pastor tiene 5 usuarios

Todos los usuarios ven y pueden manipular las órdenes de todas las cuentas (lo que genera que comparten todas las órdenes, pudiendo introducir cualquier usuario con cualquier cuenta y todos ven las órdenes de sus compañeros)

EXCEPTO backoffice que sólo puede verlas (las 3 cuentas)

 

Supongo que en el resto de mercados será algo muy parecido.

 

Espero haberme explicado.

 

Puedes mandarme la expresión que define la configuración o mandar la modificación de la tabla

 

 

 

hablamos

 
 
 
 
----- Original Message -----
From: 
To: 
Sent: Thursday, January 15, 2009 11:20 AM

Buenos dias:
Espero poder aclarar exactamente cual es la configuracion que querria Banco XX.
Querrian que federico tuviera laposibilidad de acceder a la cuenta Direccion y viceversa.
Querrian que la cuenta Bolsa tuviera acceso a la cuenta Direccion y viceversa.
 
Ahora bien, tambien querrian que las cuentas federico y Bolsa fueran independientes en todos los sentidos la una de la otra.
Este seria el escenario deseado.
Gracias y un saludo

Ser padre en 10 lecciones


1) Para vivir la experiencia del embarazo: cuélguese una bolsa de garbanzos a la altura de la barriga, agregando un puñado todos los días durante nueve meses. Luego de los nueve meses, abra la bolsa y retire el 10% de los garbanzos. 


2) Antes de lanzarse a tener hijos, busque una pareja que ya los tenga y sométalos a estudio. Critique sus métodos para imponer disciplina, su falta de paciencia, sus pésimos niveles de tolerancia, y por haber permitido que sus hijos se porten como salvajes. Sugiera maneras de mejorar el comportamiento de los niños a la hora de acostarse, ir a hacer pipí o comer. Aproveche, será la última vez que tendrá todas las respuestas.

3) Para hacerse una IDEA de cómo serán las noches, consiga un almohadón húmedo de entre 4 y 6 kilos, y recorra el salón llevándolo en brazos, sin sentarse, desde las 5 de la tarde hasta las 10 de   la noche. A   las 10 suelte el almohadón, ponga el despertador para que suene a las 12 y duerma.
Cuando a las 12 suene el despertador, levántese y vuelva a pasear el almohadón por el salón mientras canta canciones de cuna en   la oscuridad. Repetir   a las 2 AM a las 4 AM y a las 6 AM. Opcional: a las 4 AM puede dar una vuelta en coche con el almohadón. Siga esta rutina durante 5 años. Ponga siempre buena cara.

4) ¿Es posible aguantar a los niños dentro de casa? Para averiguarlo, unte nocilla en el sofá y mermelada en las cortinas. Esconda un trozo de pescado rebozado detrás del equipo de música y déjelo ahí durante todo el verano.
Meta los dedos en las macetas y luego arrástrelos por las paredes más limpias. Dibuje encima de las manchas con lápices de color. Compre 5 cachorritos de doberman y déjelos retozar en su dormitorio.

5) Vestir a un niño pequeño es simple: primero, compre un pulpo, pídale al verdulero una bolsa de red y trate de introducir el pulpo dentro de la bolsa de manera que no salga ninguno de los tentáculos por los agujeros de   la red. No   se aflija, le puede dedicar toda la mañana.

6) Niños en edad escolar: Guarde una caja de huevos (vacía). Usando una tijera y unos rotuladores, conviértala en un gracioso cocodrilo. Ahora junte un envase tetra-brik, una pelota de ping-pong y un paquete de cereales vacío y construya una réplica exacta de   la Torre Eiffel.
Comience   este trabajo a las 11 de la noche, que sería la hora en la que se entera que ES PARA MAÑANA. ¡Excelente! Ahora espere las críticas de la maestra.

7) Cambie el coche de dos puertas por una camioneta. Y no la lave nunca más. Después de todo, es un auto familiar, sin valor de reventa.
Compre un helado de chocolate y aplástelo en   la guantera. Meta   dos monedas de 10 cts. en el compact. Compre un paquete familiar de galletitas dulces. Macháquelas un buen rato sobre los asientos traseros. Salga del coche, y arañe ambos lados del vehículo con la llave. ¡Perfecto!

8) Vaya al supermercado. Lleve consigo lo más parecido que encuentre a un niño de menos de cuatro años (una cabra adulta es ideal). Si piensa tener más de un hijo, lleve dos cabras sueltas. Haga la compra para una semana sin perder de vista las cabras. Mantenga discusiones con los encargados de seguridad del supermercado, subiendo en el escalafón (pero siempre sin perder de vista a las cabras). Cuando llegue al gerente, cambie de supermercado.

9) Darle de comer a un niño: Compre un melón, vacíelo, y hágale un pequeño agujero en un costado. Cuélguelo del techo y dele un golpe para que se balancee. Ahora tome un plato con puré de calabaza. Trate de meter cucharadas de puré dentro del melón, mientras simula ser un avión.
Siga intentándolo hasta terminar la mitad del puré. El resto, viértalo sobre su regazo, y desparrame bastante en el suelo.

10) El aseo de la criatura: Consiga un gato adulto (preferentemente callejero o semisalvaje). Póngase su mejor traje si es hombre o medias y zapatos de tacón alto si es mujer. Llene la bañera con agua tibia y juguetes de goma. Acto seguido introduzca el gato y lávelo con
champú.. luego de enjuagarlo y secarlo con una toalla, siga el procedimiento indicado previamente con el pulpo y la bolsa de red. Repetir todas las noches durante 5 años.

Si logra superar estos pasos, usted puede tener hijos cuando lo desee.

El resto es lo mejor que le podrá pasar en su vida

lunes, enero 12, 2009

sábado, enero 03, 2009

Aprender varios lenguajes de programación

Comentario del creador de LUA

Do you have any advice for up-and-coming programmers?

Learn Lua :)

More seriously, I really subscribe to the idea that "if the only tool you have is a hammer, you treat everything like a nail". So, programmers should learn several languages and learn how to use the strengths of each one effectively. It is no use to learn several languages if you do not respect their differences.

martes, diciembre 30, 2008

Porcentajes ¿sencillos?

http://joseluis.estebanaparicio.googlepages.com/pensarporcentajessencillos


Yo creo que los "porcentajes" no son tan sencillos como parecen



  1. ¿Porqué un tendero anuncia que los productos de la competenica son un 50% más caros?
  2. Un tendero sube el precio de las bolsas de naranjas.
    Duda entre subir un 5% el precio o reducir un 5% el peso de las bolsas
    ¿Qué es más rentable para el tendero?
  3. Tenemos 100Kg de patatas.
    Sabemos que el 99% es agua.
    Después de pasar uos días en la calle, nos informan de que se han secado un poco.
    Ahora, el 98% es agua
    ¿Cuánto pesan ahora las patatas?
  4. Un inversor nos informa de que nos cobra x de comisión.
    Inmediatamente después, se producen pérdidas en nuestra inversión.
    Le reclamamos y nos dice...
    Es cierto, has perdido dinero, pero ten en cuenta, que mi comisión ha pasado a ser el 1% de la inversión a ser el 2%.
    Evidentemente, la comisión es fija x y es la misma antes y depués de las pérdidas.
    ¿Cuánto dinero hemos perdido?

Frases célebres de la informática

Saying that Java is good because it works on all platforms is like saying anal sex is good because it works on all genders.







http://www.javahispano.org/contenidos/es/frases_celebres_acerca_de_la_programacion/



"Debugging es dos veces más difícil que escribir el código en primer lugar. Entonces si escribes el código tan astutamente como sea posible, no eres -por definición- tan listo como para debugearlo."

Brian Kernighan



"Sólo hay dos tipos de lenguajes: aquellos de los que la gente se queja y aquellos que nadie usa."

Bjarne Stroustrup



"Cualquier tonto puede escribir código que un ordenador entiende. Los buenos programadores escriben código que los humanos pueden entender."

Martin Fowler



"Hay dos formas de diseñar software: la primera es hacerlo tan simple que obviamente no hay deficiencias y la segunda es hacerlo tan complicado que no hay deficiencias obvias. La primera forma es mucho más difícil.".

C.A.R. Hoare



"Mucho del software hoy en día se parece a una pirámide egipcia: con millones de ladrillos apilados uno encima del otro, sin integridad estructural y hecho por pura fuerza bruta y miles de esclavos."

Alan Kay



"Medir el progreso de la programación por líneas de código es como medir el progreso en la construcción de aviones por el peso."

Bill Gates



"Si deseas empezar y desarrollar algo grandioso, no necesitas millones de dólares de capitalización. Necesitas suficiente pizza y Diet Coke en la nevera, una PC barata y trabajo y dedicación para realizar tu idea."

John Carmack



"Los programas deben ser escritos para que la gente los lea y sólo incidentalmente, para que las máquinas los ejecuten."

Abelson / Sussman



"Pregunta: ¿Cómo se atrasa un año un proyecto grande de software? Respuesta: Un día a la vez."

Fred Brooks



"Nadie debe empezar un proyecto grande. Empiezas con uno pequeño y trivial y nunca debes esperar que crezca; si lo haces solamente sobre-diseñarás y generalmente pensarás que es más importante de lo que lo es en esta etapa. O peor, puedes asustarte por el tamaño de lo que tu esperas que crezca. Así que empieza pequeño y piensa en los detalles. No pienses acerca de la foto grande y el diseño elegante. Si no resuelve una necesidad inmediata, seguramente está sobre-diseñado. Y no esperes que la gente salte a ayudarte, no es así como estas cosas funcionan. Primero debes tener algo medianamente usable y otros dirán "hey, esto casi funciona para mí" y se involucrarán en el proyecto."

Linus Torvalds




"Debo confesar un fuerte prejuicio en contra de la moda del código reusable. Para mí, "el código re-editable" es mucho, mucho mejor que una caja negra intocable."
Donald Knuth



"Llevo 16 años trabajando y he pasado por más de media docena de empresas, habiendo participado en proyectos pequeños, medianos y grandes, en el sector público y en el privado. Mi experiencia y la de mucha otra gente es que el método seguido habitualmente es el de tipo "Braveheart", a saber:



Te pintas la cara de azul y blanco
Te pones una falda escocesa
Coges el primer objeto contundente que tengas a mano
Corres colina abajo con el resto de tus colegas a ver cuantos ingleses puedes degollar antes de que te degollen a ti
Fin del proyecto."


"Programar es tan fácil como caminar sobre el agua... siempre y cuando tanto las especificaciones como el agua estén congeladas".

domingo, diciembre 28, 2008

viernes, diciembre 26, 2008

git vs svn

http://git.or.cz/gitwiki/GitSvnComparsion


Note: This page is currently a work in progress. It started out as a private email to someone who currently uses Subversion. I decided to make it available and try to extend it further. I'll remove this comment when the page is improved. -- Shawn Pearce

Although this page is hosted on a Git-specific Wiki it tries to provide a fair and unbiased comparison of Git and Subversion to help prospective users of both tools better evaluate their choices. This page only describes base Subversion and does not discuss the benefits and drawbacks to using SVK, a distributed wrapper around Subversion.

Some comments for consideration in the next rev: A distinct bias is evident in the pro-svn section, which attempts to mitigate git's disadvantages (e.g., it talks more about how well git UI's are progressing than how incredibly good Subversion's UI's are; likewise, but less so, in 'Shorter Revision Numbers'). Also not mentioned are Subversion's support for http(s) and WebDAV, and its excellent support for Windows (in stark contrast to git's)

Git's Major Features Over Subversion

There are a number of key features in Git that really make it stand out when compared to Subversion. Among them are the following:

Distributed Nature

Git was designed from the ground up as a distributed version control system. Being a distributed version control system means that multiple redundant repositories and branching are first class concepts of the tool.

In a distributed VCS like Git every user has a complete copy of the repository data stored locally, thereby making access to file history extremely fast, as well as allowing full functionality when disconnected from the network. It also means every user has a complete backup of the repository. Have 20 users? You probably have more than 20 complete backups of the repository as some users tend to keep more than one repository for the same project. If any repository is lost due to system failure only the changes which were unique to that repository are lost. If users frequently push and fetch changes with each other this tends to be an incredibly small amount of loss, if any.

In a centralized VCS like Subversion only the central repository has the complete history. This means that users must communicate over the network with the central repository to obtain history about a file. It also means that having 20 users does not automatically imply 20 active backups. Backups must be maintained independently of the VCS. If the central repository is lost due to system failure it must be restored from backup and all changes since that last backup are likely to be lost. Depending on the backup policies in place this could be several man-weeks worth of work.

(Note that even SVK doesn't do quite the same thing as git. SVK downloads a complete history and allows disconnected commits, but there is still a unique "upstream" repository. Two SVK users can't merge with each other and then push the changes to the upstream.)

Access Control

Due to being distributed, you inherently do not have to give commit access to other people. Instead, you decide when to merge what from whom. (There exist different mechanisms of control in case you do want to have a repository into which multiple people can push to. -not covered yet here-)

Branch Handling

Branches in Git are a core concept used everyday by every user. In Subversion they are almost an afterthought and tend to be avoided unless absolutely necessary.

The reason branches are so core in Git is every developer's working directory is itself a branch. Even if two developers are modifying two different unrelated files at the same time it's easy to view these two different working directories as different branches stemming from the same common base revision of the project.

Consequently Git:

Automatically tracks the project revision the branch started from.
Knowing the starting point of a branch is necessary in order to successfully merge the branch back to the main trunk that it came from.
Automatically records branch merge events.
Merge records always include the following details:
Who performed the merge.
What branch(es) and revision(s) were merged.
All changes made on the branch(es) remain attributed to the original authors and the original timestamps of those changes.
What additional changes were made to complete the merge successfully.
Any changes made during the merge that is beyond those made on the branch(es) being merged is attributed to the user performing the merge.
When the merge was done
Why the merge was done (optional; can be supplied by the user).
Automatically starts the next merge at the last merge.
Knowing what revision was last merged is necessary in order to successfully merge the same branches together again in the future.
This is quite contrary to Subversion's handling of branches. As of Subversion 1.3:

Automatically tracks the project revision the branch started from.
Like Git Subversion remembers where a branch originated.
Incomplete merge event record:
Although Subversion records a merge as a commit and thus associates a username and a timestamp to it (like Git) there are some serious flaws in this record.
All changes made on the branch appear to be made by the merging user.
This means that from a historical perspective every line of code modified on the branch will appear in the trunk as though it was written by the user who merged the branch. This is wrong if there were other users working on that branch.
It's impossible to see only merge related changes.
If the merging user had to modify 12 lines of code to complete the merge successfully you can't tell what those 12 lines were, or how those 12 lines differ from the versions on the branches being merged.
The user must manually record what branches were merged and what versions they were.
Unlike Git Subversion does not automatically include these details. Consequently unless the user performing the merge explicitly includes these details in the commit message it's impossible to know what exactly was merged.
Does not track merge bases.
Because Subversion does not record important details about a branch merge it cannot provide the new merge base on subsequent branch merges. What this means in practice is that users must manually track branch merge points so subsequent merges can be completed.
In short Subversion's branching implementation is significantly flawed while Git's implementation accurately records the activity and is fully automatic.

In the current Subversion release (1.5), merge tracking has been significantly improved, see http://subversion.tigris.org/merge-tracking/ for details. Would be nice if someone would update this comparison to take this into account.

Supplement: In Subversion, branches and tags all are copies, it's a smart idea, but sometimes it's not convenient, many newbies checkout the whole repository by mistake or are confused when update or merge a moved branch. Branch path and file path lie in same namespace but they have different semantics indeed and should be taken care in different way.

Performance (Speed of Operation)

Git is extremely fast. Since all operations (except for push and fetch) are local there is no network latency involved to:

Perform a diff.
View file history.
Commit changes.
Merge branches.
Obtain any other revision of a file (not just the prior committed revision).
Switch branches.
FIXME: Include actual comparisons, e.g. load Git code into both Git and SVN.

Small Space Requirements

Git's repository and working directory sizes are extremely small when compared to SVN.

For example the Mozilla repository is reported to be almost 12 GiB when stored in SVN using the fsfs backend. The fsfs backend also requires over 240,000 files in one directory to record all 240,000 commits made over the 10 year project history. The exact same history is stored in Git by only two files totaling just over 420 MiB. SVN requires 30x the disk space to store the same history.

An SVN working directory always contains two copies of each file: one for the user to actually work with and another hidden in .svn/ to aid operations such as status, diff and commit. In contrast a Git working directory requires only one small index file that stores about 100 bytes of data per tracked file. On projects with a large number of files this can be a substantial difference in the disk space required per working copy.

Line Ending Conversion

Subversion can be easily configured to automatically convert line endings to CRLF or LF, depending on the native line ending used by the client's operating system. This conversion feature is useful when Windows and UNIX users are collaborating on the same set of source code. It is also possible to configure a fixed line ending independent of the native operating system. Files such as a Makefile need to only use LFs, even when they are accessed from Windows. This can be adjusted in a global config and overridden in user configs. Binary files are checked in with a binary flag (like with CVS except that SVN does this almost always automatically) and such never get converted or keyword substituted. Although Additionally Subversion allows the user to specify line ending conversion on a file-by-file basis. But if the user does not check binary flag on adding (Subversion prints for every added file whether it recognized it as binary) binary content might get corrupted.

Whilst Git versions prior 1.5.1 never convert files and always assume that every file is opaque and should not be modified. Git 1.5.1 and onwards make this configurable. For users on Windows they should set core.autocrlf = true so that text files are automatically checked out with CRLF and checked in as LF. Git's advantage over Subversion is that you do not have to manually specify which files this conversion should be applied to, it happens automatically (hence autocrlf).


Subversion's Major Features Over Git

Subversion has some notable features that Git currently doesn't have or will never have.

User Interfaces

Currently Subversion has a wider range of user interface tools than Git. For example there are SVN plugins available for most popular IDEs. There is a Windows Explorer shell extension. There are a number of native Windows and Mac OS X GUI tools available in ready-to-install packages.

Git's primary user interface is through the command line. There are two graphical interfaces: git-gui (distributed with Git) and qgit, which is making great strides towards providing another feature-complete graphical interface. Also gitk, the graphical history browser, can be more than just a fancy log reader. git-gui and gitk usually work out-of-box for common operating systems, and qgit is being ported to Qt4, which improves its portability.

Single Repository

Since Subversion only supports a single repository there is little doubt about where something is stored. Once a user knows the repository URL they can reasonably assume that all materials and all branches related to that project are always available at that location. Backup to tape/CD/DVD is also simple as there is exactly one location that needs to be backed up regularly.

Since Git is distributed by nature not everything related to a project may be stored in the same location. Therefore there may be some degree of confusion about where to obtain a particular branch, unless repository location is always explicitly specified. There may also be some confusion about which repositories are backed up to tape/CD/DVD regularly, and which aren't.

Access Controls

Since Subversion has a single central repository it is possible to specify read and write access controls in a single location and have them be enforced across the entire project.

Binary Files

Detection and Properties

Subversion can be used with binary files (it is automatically detected; if that detection fails, you have to mark the file binary yourself). Just like Git.

Only that with Git, the default is to interpret the files as binary to begin with. If you _have_ to have CR+LF line endings (even though most modern programs grok the saner LF-only line endings just fine), you have to tell Git so. Git will then autodetect if a file is text (just like Subversion), and act accordingly. Analogous to Subversion, you can correct an erroneous autodetection by setting a git attribute.

I'm not sure why this point is here ; both git and svn process content verbatim by default. Neither git or svn will munge line-endings unless you ask them to. svn appears to have one more option for munging (CR), which won't be used often. The chief difference is that git supports path-globbing for attributes, whereas on svn they must be applied on a per-file basis, necessarily so because svn supports checkout of subtrees so you could be decapitating your attribute metadata. Otherwise, on the matter of "not screwing up your files by making assumptions about the content", they seem equal.

Marking a file with the correct mime-type is important when you do things like surf your repository with a browser (esp. for web content, a browser that respects the mime-type (IE, not IE) will by default, display all HTML as plaintext from mod_dav_svn). svn mime-type autodetection (a subset of the auto-props feature) can be configured to specify a mime-type based on filename extension, as well as the default basic detection of application/octet-stream. You could happily do this with attribute globs on git, if I read the manual right, setting the crlf attribute. One big difference I do see is that if you turn on core.autocrlf, if a file is falsely determined to be text, it will get munged for line endings. On svn you must identify each file that you want line endings munged for manually (or via a manually configured feature).

All in all, yes, git has a slightly more convenient properties feature, but scoring for or against either product on these points is marginal ; both deal with binary and text properly, both have metadata features, both let you control EOL munging in an equivalent way. I would be shy about turning on autocrlf globally for git, simply because I don't think it's necessary for the majority of projects.

Change Tracking

Seemingly minor changes to binary files, such as adjusting brightness on an image, could be different enough that Git interprets them as a new file, causing the content history to split. Since Subversion tracks by file, history for such changes is maintained.

Partial Checkout

With Subversion, you can check out just a subdirectory of a repository. Such a thing is not possible with Git.

Shorter Revision Numbers

As SVN assigns revision numbers sequentially (starting from 1) even very old projects such as Mozilla have short unique revision numbers (Mozilla is only up to 6 digits in length). Many users find this convenient when entering revisions for historical research purposes. They also find this number easy to embed into their product, supposedly making it easy to determine which sources were used to create a particular executable. However since the revision number is global to the entire repository, including all branches, there is still a question of which branch the revision number corresponds to.

Unless the last committed revision is recorded. Since revisions are global for a repository, the last committed revision makes it possible to determine which branch was used

As Git uses a SHA1 to uniquely identify a commit each specific revision can only be described by a 40 character hexadecimal string, however this string not only identifies the revision but also the branch it came from. In practice the first 8 characters tends to be unique for a project, however most users try to not rely on this over the long term. Rather than embedding long commit SHA1s into executables Git users generate a uniquely named tag. This is an additional step, but a simple one.


The Original Email

Provided as reference, until this page is cleaned up.

The key things that I like about Git are:

- It's incredibly fast.
No other SCM that I have used has been able to keep up with it, and I've used a lot, including Subversion, Perforce, darcs, BitKeeper, ClearCase and CVS.
- It's fully distributed.
The repository owner can't dictate how I work. I can create branches and commit changes while disconnected on my laptop, then later synchronize that with any number of other repositories.
- Synchronization can occur over many media.
An SSH channel, over HTTP via WebDAV, by FTP, or by sending emails holding patches to be applied by the recipient of the message. A central repository isn't necessary, but can be used.
- Branches are even cheaper than they are in Subversion.
Creating a branch is as simple as writing a 41 byte file to disk. Deleting a branch is as simple as deleting that file.
- Unlike Subversion branches carry along their complete history.
without having to perform a strange copy and walk through the copy. When using Subversion I always found it awkward to look at the history of a file on branch that occurred before
the branch was created. from #git: spearce: I don't understand one thing about SVN in the page. I made a branch i SVN and browsing the history showed the whole history a file in the branch
- Branch merging is simpler and more automatic in Git.
In Subversion you need to remember what was the last revision you merged from so you can generate the correct merge command. Git does this automatically, and always does it right. Which means there's less chance of making a mistake when merging two branches together.
- Branch merges are recorded as part of the proper history of the
repository. If I merge two branches together, or if I merge a branch back into the trunk it came from, that merge operation is recorded as part of the repostory history as having been performed by me, and when. It's hard to dispute who performed the merge when it's right there in the log.
- Creating a repository is a trivial operation:
mkdir foo; cd foo; git init-db
That's it. Which means I create a Git repository for everything these days. I tend to use one repository per class. Most of those repositories are under 1 MB in disk as they only store lecture notes, homework assignments, and my LaTeX answers.
- The repository's internal file formats are incredible simple.
This means repair is very easy to do, but even better because it's so simple its very hard to get corrupted. I don't think anyone has ever had a Git repository get corrupted. I've seen Subversion with fsfs corrupt itself. And I've seen Berkley DB corrupt itself too many times to trust my code to the bdb backend of Subversion.
- Git's file format is very good at compressing data, despite
it's a very simple format. The Mozilla project's CVS repository is about 3 GB; it's about 12 GB in Subversion's fsfs format. In Git it's around 300 MB.
Links

http://utsl.gen.nz/talks/git-svn/intro.html
http://techblog.floorplanner.com/2008/12/09/git-vs-svn-for-bosses/

git vs all

http://es.whygitisbetterthanx.com/#


Por qué Git es mejor que X

hg bzr svn perforce

Este sitio existe porque últimamente me parece que paso demasiado tiempo defendiendo a los usuarios de Git frente a acusaciones de fanatismo, seguidimo y fe ciega. Así que aquí veremos por qué la gente está pasándse de X a Git y por qué tú también deberías. Sólo haz clic en una razón para verla.
Ver todas | Cerrar todas

hg bzr svn perforce
Ramas locales sin coste
Posiblemente la razón más fuerte a favor de Git que realmente lo hace destacar de casi cualquier otro SCV es su modelo de ramas. Es totalmente diferente de todos los demás con los que lo estamos comparando, la mayoría de los cuales recomiendan que la mejor rama es básicamente una copia del repositorio en un nuevo directorio.
Pero Git no funciona así. Git te permitirá tener múltiples ramas locales que pueden ser totalmente independientes entre sí y se tarda segundos en crear, fusionar, o borrar estas líneas de desarrollo.
Lo que quiere decir que puedes hacer cosas como :
Crear una rama para probar una idea, hacer varias entregas un par de veces, volver al punto desde el cual bifurcaste, aplicar un parche y volver a donde estabas experimentado y fusionarlo.
Tener una rama que siempre contiene sólo lo que va a producción, otra en la que acumulas el trabajo para testear y varias ramas más pequeñas para el trabajo del día a día.
Crear nuevas ramas para cada una de las nuevas funcionalidades en las que estés trabajando, de forma que puedas conmutar entre ellas y borrarlas cuando su funcionalidad ha sido propagada a la rama principal.
Crear una rama en la que experimentar, darte cuenta de que no va a ninguna parte y borrarla, abandonando todo el trabajo - sin que nadie más lo vea (incluso aunque hayas entregado otras ramas mientras tanto)

Es importante el que, cuando uno entrega sus cambios a un repositorio remoto, no tienes que subir todas tus ramas: puedes compartir sólo una de tus ramas y no todas. De esta forma la gente tiende a sentirse libre para probar nuevas ideas sin preocuparse de tener un plan de cómo y cuándo van a mezclar sus cambios o compartirlos con otros.
Se pueden encontrar maneras de hacer algunas de estas cosas en otros sistemas, pero el trabajo necesario es mucho más complicado y dado a error. Git hace que este proceso sea increíblemente sencillo y cambia la forma en la que trabajan los desarrolladores que aprenden a usarlo.
svn perforce
Todo es local
Esto es básicamente cierto en todos los SCV distribuidos, pero en mi mi experiencia lo es mucho más con Git. Aparte de 'fetch', 'pull' y 'push' hay muy pocos comandos que trabajen con cualquier cosa que no sea tu disco duro.
Esto no sólo hace que todo vaya mucho más rápido que de costumbre, también te permite trabajar cuando estés sin conexión. Que a lo mejor no te parece gran cosa, pero a mí al menos me ha llegado a sorprender la cantidad de veces que realmente trabajo sin conexión. El poder hacer ramas, mezclarlas, y navegar por la historia de mi proyecto mientras se está en un avión o un tren es realmente muy productivo.

Incluso en Mercurial comandos comunes como 'incoming' y 'outgoing' tocan al servidor, mientras que con Git puedes hacer 'fetch' de toda la información del servidor antes de quedarte sin conexión y hacer comparaciones, merges, y ver logs de todos los datos que están en el servidor aunque no pertenezca a tus ramas locales.
Lo que quiere decir que es muy fácil tener copias de no sólo todas tus ramas, sino también de todas las ramas que los demás que trabajan contigo proyecto hayan ido subiendo al repositorio de Git.
bzr svn perforce
Git is Rápido
Git es rápido. Todo el mundo, hasta los más acérrimos usuarios del resto de sistemas lo reconoce. Esto se debe, comparado con SVN y Perforce, a que todas las operaciones se hacen localmente. Sin embargo cuando se compara con otros SCVs distribuidos, Git también es veloz.
Es posible que esto se deba en buena parte a que fue construido para trabajar en el kernel de Linux, lo que quiere decir que desde el primer día ha tenido que mover de manera efectiva repositorios de gran tamaño. Otra razón es que Git está escrito en C, y otra razón más es que, en mi experiencia, los desarrolladores principales de Git están muy preocupados por la velocidad.
A continuación veremos algunas pruebas que realicé en tres copias del código fuente de django en 3 sistemas diferentes: Git, Mercurial y Bazaar. También hice alguna prueba con SVN, pero creedme cuando os digo que es más lento - básicamente es añadirle la latencia de red a los números de Bazaar.


El resultado final es que para todo menos para añadir nuevos archivos, Git es el más rápido (también commits muy grandes, empatado con Git, pero la entrega que hice era tan grande que es bastante raro que alguna vez tengas que hacer algo parecido - los commits normales son mucho más rápidos en Git)
Git Hg Bzr
Inicialización 0.024s 0.059s 0.600s
Añadir 8.535s 0.368s 2.381s
Status 0.451s 1.946s 14.744s
Diff 0.543s 2.189s 14.248s
Etiquetar 0.056s 1.201s 1.892s
Log 0.711s 2.650s 9.055s
Entrega (Grande) 12.480s 12.500s 23.002s
Entrega (Pequeña) 0.086s 0.517s 1.139s
Rama (en frío) 1.161s 94.681s 82.249s
Rama (en caliente) 0.070s 12.300s 39.411s
Los tiempos de creación de rama en frío y en caliente se corresponden, respectivamente, con el tiempo empleado en la primera y segunda vez que bifurqué el repositorio - de forma que en el segundo caso la rama se hizo con la caché del disco caliente.
Nótese que aunque los números para el añadido de ficheros son mucho más elntos, se trataba de una operación masiva (más de 2000 archivos) Para lo que la mayor parte de la gente hace, el añadir cosas al repositorio sólo lleva una fracción de segundo. El resto de operaciones es bastante más indicativo de las cosas que uno realmente termina haciendo en el día a día.
No es nada difícil volver a generar estas medidas. Simplemente clona el proyecto Django en cada uno de los sistemas e intenta ejecutar los mismos comandos en cada uno
git clone git://github.com/brosner/django.git dj-git
hg clone http://hg.dpaste.com/django/trunk dj-hg
bzr branch lp:django dj-bzr
svn checkout http://code.djangoproject.com/svn/django/trunk dj-svn
svn
Git es Pequeño
Git es realmente hábil a la hora de ahorrar espacio. En general tu repositorio Git será poco más grande que una copia de trabajo de SVN - y en algunos casos es posible que sea más pequeño (parece ser que hay un montón de cosas que acaban en los directorios .svn)
Los siguientes tamaños fueron obtenidos de copias del proyecto Django en cada uno de sus mirrors de Git semi-oficiales en algún punto de su historia.
Git Hg Bzr Bzr* SVN
Sólo el repo 24M 34M 45M 89M
Todo el directorio 43M 53M 64M 108M 61M
* el segundo número de Bzr es después de ejecutar 'bzr pack', que pensé que lo haría más pequeño pero por alguna razón lo hizo mucho mucho más grande.
hg bzr svn perforce
El área de montaje
Al contrario que otros sistemas, Git tiene lo que denomina "área de montaje", o "índice" que es un área intermedia donde puedes configurar lo que contendrá el aspecto que tendrá tu entrega antes de hacer el commit.
Lo mejor del área de montaje, y que marca la diferencia entre git el resto de herramientas, es que puedes fácilmente montar algunos de tus ficheros según terminas con ellos y después entregarlos sin tener que enviar todos los archivos modificados en tu directorio de trabajo y sin tener que listarlos en la línea de comandos durante la entrega.

Esto también te permite preparar sólo fragmentos de archivos que han sido modificados. Por ejemplo, montas para entregar sólo los cambios al principio de un archivo que has estado modificando pero no los cambios del final.
Por supuesto, Git también hace que sea fácil ignorar esta funcionalidad en caso de que no queramos tanto nivel de control - simplemente añade '-a' al commando 'commit'.

svn perforce
Distribuido
Una de las cosas más chulas de cualquier sistema distribuido de control de versiones, incluido Git, es que es distribuido. Esto quiere decir que en lugar de hacer un "checkout" de la punta del código, haces un "clon" del repositorio en su totalidad.
Lo que quiere decir que incluso si trabajas de manera centralizada, cada usuario tiene lo que en esencia es una copia completa del servidor principal, y cualquiera de ellas podría ser recuperada para reemplazarlo en caso de caída o corrupción. Básicamente, no hay un punto de fallo único con git... a no ser que haya un punto único.
Además esto tampoco ralentiza demasiado las cosas. En término medio un checkout de SVN es más rápido que cualquiera de los SCV distribuidos, pero por poco. Además, de entre los sistemas distribuidos git fue el más rápido en mis pruebas.

Git 1m 59s
Hg 2m 24s
Bzr 5m 11s
SVN 1m 4s
svn perforce
Cualquier flujo de trabajo
Una de las cosas que más sorpenden de Git es que debido a su naturaleza distribuida y a su super-sistema de ramas se puede implementar fácilmente prácitcamente cualquier flujo de trabajo que se nos ocurra.
Al estilo Subversion

Una forma de trabajo muy común, especialmente entre aquellos que se pasan de un sistema no distribuido es un flujo de trabajo centralizado. Git no permite hacer subir los cambios al servidor si alguien lo ha hecho desde la última vez que nos bajamos los últimos cambios, de forma que un modelo centralizado donde todos los desarrolladores entregan al mismo servidor funciona sin mayor inconveniente.


Al estilo Responsable de Integración

Otra forma muy común de trabajar con Git es donde exista un Responsable de Integración - una persona que entrega al repositorio 'bendecido', y después un número de desarrolladores se copian ese repositorio y hacen sus cambios en él le piden al integrador que integre sus cambios. Este es el tipo de modelo de desarrollo que se suele usar en repositorios de software abierto o en GitHub.


Al estilo Dictador y Tenientes

En proyectos más grandes, los desarrolladores pueden organizarse de forma similar a como lo hacen en el kernel de Linux, donde hay gente que está a cargo de un subsistema específico del proyecto (los tenientes) e integran todos los cambios que tienen que ver con ese subsistema. Después otro integrador (el dictador) puede recoger los cambios únicamente de sus tenientes y subirlos al repositorio principal el cual todo el mundo vuelve a clonar.


Y de nuevo Git es totalmente flexible en este aspecto de forma que uno puede mezclar y escoger el flujo de trabajo que mejor se adapte a sus necesidades.
hg bzr svn perforce
GitHub

En esto podría ser que yo no sea del todo imparcial porque trabajo en GitHub, pero quiero añadir esta sección de todas formas porque hay mucha gente que afirma que GitHub es la razón por la que escogieron Git.
Y GitHub es para muchos una razón para escoger Git porque se parece más a una red social de código que un mero sitio de alojamiento. Uno se encuentra con otros desarrolladores o proyectos que son similares a lo que está haciendo y es muy fácil bifurcar y contribuir, creándose una comunidad vibrante en torno a Git y los que proyectos en los que la gente lo usa.
Existen otros servicios, tanto para Git como para otros SCVs, pero hay pocos que estén orientados a los usuarios desde un punto de vista social, y ninguno de ellos se acerca al número de usuarios que tiene GitHub. Este aspecto social es decisivo, y esta junto con el resto de funcionalidades de arriba hace que trabajar con Git y GitHub sea una gran combinación para desarrollar rápidamente proyectos de código abierto.
Este tipo de comunidad no está disponible en ninguno de los otros SCVs. Simplemente.
perforce
Fácil de Aprender
Esto solía no ser cierto - en los comienzos de Git no era tanto un sistema de control de versiones como un puñado de herramientas que permitían hacer tareas de sistema de ficheros de manera distribuida. Sin embargo a día de hoy el conjunto de comandos y la curva de aprendizaje de Git son bastante parecidos a la de cualquier SCV, e incluso mejor en algún caso.
Como es difícil probar esto de manera objetiva sin algún tipo de estudio simplemente mostraré las diferencias entre el menú de ayuda por defecto de Mercurial y Git. He resaltado los comandos que son idénticos (o casi) entre los dos sistemas. (En Hg, si escribes 'hg help' te sale una lista de casi 40 comandos)
Ayuda de Mercurial

add add the specified files ...
annotate show changeset informati...
clone make a copy of an existi...
commit commit the specified fil...
diff diff repository (or sele...
export dump the header and diff...
init create a new repository ...
log show revision history of...
merge merge working directory ...
parents show the parents of the ...
pull pull changes from the sp...
push push changes to the spec...
remove remove the specified fil...
serve export the repository vi...
status show changed files in th...
update update working directory
Ayuda de Git

add Add file contents to the index
bisect Find the change that introduce...
branch List, create, or delete branches
checkout Checkout a branch or paths to ...
clone Clone a repository into a new ...
commit Record changes to the repository
diff Show changes between commits, ...
fetch Download objects and refs from...
grep Print lines matching a pattern
init Create an empty git repository
log Show commit logs
merge Join two or more development h...
mv Move or rename a file, a direc...
pull Fetch from and merge with anot...
push Update remote refs along with ...
rebase Forward-port local commits to ...
reset Reset current HEAD to the spec...
rm Remove files from the working ...
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify...
Antes de la versión 1.6 de Git todos los comandos estaban en el path ejecutable, lo cual confundía a mucha gente. Aunque Git sigue reconociendo todos estos comandos el único comando en el path ahora es 'git'. Así que si uno compara Git con Mercurial tienen un conjunto de comandos y sistema de ayuda muy parecido - hay poca diferencia desde el punto de vista de interfaz de usuario para un principiante.
Hoy es difícil sostener que Mercurial o Bazaar sean mucho más fáciles de aprender que Git.