Porque elegir a MongoDB

Posted by & filed under mongodb.

MongoDB es una base de datos, no relacional del tipo llamada NoSQL termino acuñado en 2009 para englobar las (nuevas) bases de datos pensadas para la web.

Pensadas para la web de la forma que tienen una forma de trabajar muy distintas a las tablas tradicionales. Tanto que prescinden de las tablas y hablan directamente de documentos.

Quien las usa?

Google las usa, Facebook, las usa, el Ney York times (mongoDB), foursquare (mongoDB). Son servicios que tienen una cantidad de inserts en sus data store impresionantes, además de necesidades de escalar de manera horizontal contantemente.

MongoDB, nacida en la nube.

La historia de MongoDB es más bien corta pero interesante de recordar, nació de un proyecto mucho más ambicioso de la empresa 10gen, cuando esta estaba trabajando en un software platform-as-a-service compuesto de un servidor de aplicaciones y una base de datos. Era una especie de AppEngine de Google, la idea detrás del proyecto era una infraestructura que escale automáticamente en requerimientos tanto de software como de hardware. Buscaban que los desarrolladores se preocupen solamente de su aplicación y no de los pormenores de la arquitectura, lo mismo que AppEngine.

Al final lo más interesante que nos dejó este proyecto fue la base de datos, que luego se pasó a llamar MongoDB.

Ahora que sabemos cómo empezó todo, entendemos porque MongoDB tenia que escalar tan bien. Esto fue así porque nació como una plataforma para ser utilizada en una granja de servidores y no una simple base de datos que corre en una sola máquina.

Funcionalidades

Una base de datos está definida en gran medida por su modelo de datos. En el caso de Mongo es orientada a documentos. Mejor poner un ejemplo

Orientada a documentos

{ _id: ObjectID('4bd9e8e17cefd66665961bb'),
title: 'Omniwired Blog',
url: 'http://omniwired.com/databases.txt',
author: 'juan',
vote_count: 10,
tags: ['databases', 'mongodb', 'web'],
image: {
url: 'http://omniwired.com/db.jpg',
type: 'jpg',
size: 15435,
data: "Binary"
},
comments: [
{ user: 'momokosan',
text: 'que buen articulo. nya'
},
{ user: 'blog',
text: 'Otro articulo bueno esta en http://cosas.com/db/db.txt'
}
 ]
}
 Parte 2. Ad Hoc, soon

Animaciones con CSS3

Posted by & filed under css, programacion.

Hacer animaciones como esta: Demo

Son facil de hacer con CSS3. Lo unico que nos hace falta es un browser compatible:

Show all versions IE Firefox Chrome Safari Opera iOS Safari Opera Mini Android Browser
2.1-webkit-
3.2-webkit- 2.2-webkit-
7.0 3.6 4.0-4.1-webkit- 2.3-webkit-
8.0 12.0-moz- 19.0-webkit- 4.2-4.3-webkit- 3.0-webkit-
Current 9.0 13.0-moz- 20.0-webkit- 5.1-webkit- 12.0-o- 5.0-webkit- 5.0-6.0 4.0-webkit-
Near future 10.0 14.0-moz- 21.0-webkit- 5.2-webkit- 12.5-o-
Farther future 15.0-moz-

info by: caniuse.com

Y hacer un selector del elemento que queremos animar.

En el caso de un id usando # en el caso de una clase ‘.’…. supongo que saben CSS.

#foto {
  -moz-animation-duration: 3s;
      -webkit-animation-duration: 3s;
      -moz-animation-name: omnirotate;
      -webkit-animation-name: omnirotate;        
}

    @-moz-keyframes omnirotate {
      from {
        -webkit-transform: perspective( 600px ) rotateY( 0deg );
         -moz-transform: perspective( 600px ) rotateY(   0deg );
           -o-transform: perspective( 600px ) rotateY(   0deg );
              transform: perspective( 600px ) rotateY(   0deg );
      }

      to {
        -webkit-transform: perspective( 600px ) rotateY( 360deg );
         -moz-transform: perspective( 600px ) rotateY(   360deg );
           -o-transform: perspective( 600px ) rotateY(   360deg );
              transform: perspective( 600px ) rotateY(   360deg );
      }
    }

    @-webkit-keyframes omnirotate {
      from {
        -webkit-transform: perspective( 600px ) rotateY( 0deg );
         -moz-transform: perspective( 600px ) rotateY(   0deg );
           -o-transform: perspective( 600px ) rotateY(   0deg );
              transform: perspective( 600px ) rotateY(   0deg );
      }

      to {
        -webkit-transform: perspective( 600px ) rotateY( 360deg );
         -moz-transform: perspective( 600px ) rotateY(   360deg );
           -o-transform: perspective( 600px ) rotateY(   360deg );
              transform: perspective( 600px ) rotateY(   360deg );
      }
    }

El codigo es muy facil de seguir y esta bien separadito que un branch es para webkit el otro para mozilla por el momento con guiones, pero muy pronto funcionara sin el “-webkit”/”-moz” segun corresponda.

Demo

Z-Type juego del creador de impact.js

Posted by & filed under programacion.

Impact es una de esas cosas que cuando la vi supe que queria tener. El tema fue asi, buscnado muchas cosas de javascript para ver como estaba la industria, encontre en Hacker news, un post con un video.

Lo que me llamo la atencion fue lo facil que parecia todo.

Dias despues me entero que Z-type fue creado con impact.js por el creador de impact! Cuando este juego estuvo en reddit le hizo ganar 300 EUR en un mes, no parece tanto, pero es buena “pocket money”.

Es muy dificil hacker tracking de tantos objetos en la platalla con sus respectivas colisiones. Para eso su creador usa una tecnica de divide and conquer, separando en una grilla las posibles interacciones y de ahi calcular las que hacen falta, y solo las que hagan falta. Muy bueno :) .

El precio de impact.js es de 99 USD asi que si se me da por hacer juegos y cuando tenga plata me lo comprare.

Asi que si los arcade games son unas de tus cosas te recomiendo jugar.

http://www.phoboslab.org/ztype/

Dandole otro giro al blog

Posted by & filed under programacion.

Despues de mucho tiempo de no escribir, y despues de haber terminado la facultad y ahora tener que empezar a trabajar y esas cosas.

Quiero darle otro giro al blog, sobre todo el tema tecnico y menos bussiness. Aunque segun Google Webmaster Tools soy numero 1 en “Groupon estafa”.

Ahora estuve aprendiendo muchas cosas sobre javascript y otras cosas magicas del HTML5 y la web. Tengo un Google Docs lleno de cosas…

Estoy haciendo una aplicacion para el campo que algun dia terminare, que se va a llamar omnicampo.

Crear keyboard layouts; “El ultimo paso para recibirse de loco”

Posted by & filed under free software, linux, programacion.

Si tienen el mismo problema que yo, que no existe un keyboard layout ‘US’ en Linux que tenga TODO lo que necesitamos.

Ej: ñ á é í ó ú ? ¿ o el comportamiento correcto de ‘ y “.

A comportamiento correcto digo sin dead keys ” y ‘ (Por ejemplo US international AltGr with dead keys tiene este problema).

/usr/share/X11/xkb o /usr/share/X11/xkb en Red Hat / Fedora

Y ahi dentro symbols.

Buscamos el layout que queremos modificar. En mi caso ” us “.

Cambiamos la tecla que no nos gusta y ya que estamos agregamos alguna locura como AltGr + ; = ☺

Y como aprendi en la Universidad (internal joke). Lamda = λ SIEMPRE TIENE QUE ESTAR.

Quedo asi

    // Alphanumeric section
    key <TLDE> {	[     grave,	asciitilde	]	};
    key <AE01> { [	   1,     exclam,    exclamdown,      onesuperior ] };
    key <AE02> { [	   2,         at,   twosuperior, dead_doubleacute ] };
    key <AE03> { [	   3, numbersign, threesuperior,      dead_macron ] };
    key <AE04> { [	   4,     dollar,      currency,         sterling ] };
    key <AE05> { [	   5,    percent,      EuroSign,     dead_cedilla ] };
    key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
    key <AE07> { [	   7,  ampersand,       onehalf,	dead_horn ] };
    key <AE08> { [	   8,   asterisk, threequarters,      dead_ogonek ] };
    key <AE09> { [	   9,  parenleft, leftsinglequotemark, dead_breve ] };
    key <AE10> { [	   0, parenright, rightsinglequotemark, dead_abovering ] };
    key <AE11> { [     minus, underscore,           yen,    dead_belowdot ] };
    key <AE12> { [     equal,       plus,      multiply,         division ] };

    key <AD01> { [	   q,          Q,    adiaeresis,       Adiaeresis ] };
    key <AD02> { [	   w,          W,         aring,            Aring ] };
    key <AD03> { [	   e,          E,        eacute,           Eacute ] };
    key <AD04> { [	   r,          R,    registered,       registered ] };
    key <AD05> { [	   t,          T,         thorn,            THORN ] };
    key <AD06> { [	   y,          Y,    udiaeresis,       Udiaeresis ] };
    key <AD07> { [	   u,          U,        uacute,           Uacute ] };
    key <AD08> { [	   i,          I,        iacute,           Iacute ] };
    key <AD09> { [	   o,          O,        oacute,           Oacute ] };
    key <AD10> { [	   p,          P,    odiaeresis,       Odiaeresis ] };
    key <AD11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
    key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };

    key <AC01> { [	   a,          A,        aacute,           Aacute ] };
    key <AC02> { [	   s,          S,        ssharp,          section ] };
    key <AC03> { [	   d,          D,           eth,              ETH ] };
    key <AC04> { [	   f,          F,             f,                F ] };
    key <AC05> { [	   g,          G,             g,                G ] };
    key <AC06> { [	   h,          H,             h,                H ] };
    key <AC07> { [	   j,          J,             j,                J ] };
    key <AC08> { [	   k,          K,            oe,               OE ] };

    key <AC09> { [	   l,          L,        Greek_lamda,         Greek_LAMDA ] };
    key <AC10> { [ semicolon,      colon,     U263A,           U2665 ] };
    key <AC11> {	[ apostrophe,	quotedbl	]	};

    key <AB01> { [	   z,          Z,            ae,               AE ] };
    key <AB02> { [	   x,          X,             x,                X ] };
    key <AB03> { [	   c,          C,     copyright,             cent ] };
    key <AB04> { [	   v,          V,             v,                V ] };
    key <AB05> { [	   b,          B,             b,                B ] };
    key <AB06> { [	   n,          N,        ntilde,           Ntilde ] };
    key <AB07> { [	   m,          M,            mu,               mu ] };
    key <AB08> { [     comma,       less,      U2190,         Ccedilla ] };
    key <AB09> { [    period,    greater, U2192,       dead_caron ] };
    key <AB10> { [     slash,   question,  questiondown,        dead_hook ] };
    key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };

OmniWired© → ☺ ♥

Fedora 16 Apagar GPU acceleration Google Chrome

Posted by & filed under linux.

Si bien Fedora 16, no sale hasta dentro un par de días, posteo lo que tuve que hacer para que ciertas paginas que usan aceleración de los CSS funcionen en Chrome.

Esto se da porque NVIDIA no tiene soporte para el nuevo X Server (lo mismo de siempre con los drivers cerrados).

El error es facil de detectar, pero dificil de saber el porque:

Basicamente ocurre cuando una pagina esta usando CSS tales que el Chrome decide acelerarlos. Por ejemplo el Google Reader, cuando se empiezan a pasar los items el render engine empieza a mostrar todo en blanco, cuando en realidad la pagina sigue funcionando de forma correcta.

Se soluciona iniciando el Chrome de la siguiente manera:

google-chrome --disable-accelerated-compositing

 

Método de Bisección en Python

Posted by & filed under free software, programacion.

Hace poco la Universidad de Palermo me pidio para la materia “Analisis Numerico” / “Calculo Numerico”, implementar el método de bisección programado en cualquier lenguaje.

Adapte de un código que encontre online, y como cosa diferente uso programación funcional para mandar como parámetro la funcion que escriba el usuario. Uso eval para evaluar lo que ingresa el usuario.

Aca esta asi, no tienen que volver a hacerlo. Es un proof of concept hay que importar mas librerias de matematica, ahora tiene soporte solamente para log.

#author Juan Manuel Combetto
#license GPL v3

from math import log
intervalo = []
print "Ingrese funcion"
funcion = raw_input()
funcion = funcion.replace("^", "**")
print "Ingrese intervalo en la forma a,b"
input = raw_input()
intervalo = input.split(",")
print "Ingrese convergencia. Ejemplo 0.001"
convergencia = raw_input()

def bisect(f, a, b, e):
    n = 0
    fa = f(a)
    if fa == 0.0: return (a, n)
    fb = f(b)
    if fb == 0.0: return (b, n)

    while (abs(a-b) > e):
        c = 0.5*(a+b)
        fc = f(c)

        if fc == 0.0: return (c, n)
        n = n + 1
        if fb*fc < 0.0:
            a = c
            fa = fc

        else:
            b = c
            fb = fc

    if fa < fb:
        return (a, n)
    else:
        return (b, n)

# prueba
# lo siguiente es usando programacion funcional
def f(x): return eval(funcion)
x= bisect(f, float(intervalo[0]), float(intervalo[1]), float(convergencia))
print "Raiz en", x[0], "en la iteracion", x[1]

 

Ordenar series automaticamente

Posted by & filed under free software, programacion.

tl;dr: bajarse el omnisorter.py configurar el Download folder y disfrutar.

https://github.com/omniwired/OmniSorter

Hace unos dias se me ocurrio hacer un programa en Python para ordenar el directorio de las descargas que esta siempre desordenado lleno de series y demas cosas que todas se bajan en el mismo lugar.

Por eso me surgio hacer un proyecto  y al final hacerlo open source, software libre. En este caso GPL v3.

El objetivo principal del programa es que tenga una funcionalidad “set and forget”, lo seteamos una vez y luego en distintos intervalos de tiempo se ejecuta sin que nosotros tengamos que hacer nada. Dejando todo el directorio o toda la computadora libre de series dispersas por todos lados.

Para eso usa la siguiente regular expression que lo que hace es encontrar un match cuando ve un archivo terminado en las extensiones target actuales, tales como .avi y .mkv.

regex = '(?=[S-s][0-9][0-9][E-e][0-9][0-9])\w+'

Una vez que estuvo terminada la funcionalidad de mover las series a sus respectivos directorios se me ocurrio porque no detectar cuando un archivo estaba duplicado para eso use una funcion de hash llamada md5, la cual saca una huella dactilar del archivo en cuestión. Como esta opción era computacionalmente muy cara, se me ocurrió guardar en un diccionario los archivos que ya habia procesado alguna vez para no tener que hacer las cosas 2 veces. Esto le da una especie de Rainbow Table llenada en parte con el nombre del archivo y la otra parte con el hash pre-computado..

Cuando detecta archivos duplicados, te avisa y da la lista para que puedas borrar el correcto.

También se me ocurrió porque no hacer un detector de que episodio te falta esto funciona de la siguiente manera. Una vez que ya tenemos ordenadas las series, se recorren todas las temporadas, buscando el episodio de menor numero y el de mayor numero para con esto hacer una búsqueda de los valores intermedios detectando e informando los que faltan.

Como conclusion hacer este programa fue divertido por el hecho de usar un nuevo lenguaje de programación, nuevo paradigma para un parte pequeña que no conocia, este es prograamción funcional. Python es increible en muchas cosas, sobretodo lo expresivo que es y lo bien hecho y facil de usar que son las collections.

En fin me encantó.

UPDATE: para hacer que se ejecute cada hora, en linux

En una consola escriben:

crontab -e

y ahi escriben

@hourly path completo a omnisorter.py

Por ejemplo /home/omniwired/omnisorter.py

Importar fotos de Facebook a Google+ (plus)

Posted by & filed under programacion, tutorial.

Exportar fotos de Facebook a Google+ (plus)

1er paso

ir a facebook.com/download y pedir su informacion (en Download Your Information)

Les van a mandar un mail que va a tener un zip con todas sus fotos, etc.

2do paso

Bajar

http://code.google.com/p/googlecl/http://code.google.com/p/gdata-python-client/downloads/list

3er paso

Ir a cada directorio de fotos que quieran subir

y poner en la consola el siguiente codigo

google picasa create “${PWD##*/}” *.jpg –summary “From FB”

“${PWD##*/}” > es para que les lea el nombre del directorio que se encuentran actualmente,

4to paso

ir a picasa web y setear con quieren quieren compartir las fotos (en google+).

5to paso paso (opcional)

Hacer +1 en este post y reshare en Google+

Cosas que un estudiante de Informática debería hacer antes de recibirse.

Posted by & filed under geek.

0000 – Comprar tu propio dominio.

0001 – Instalar y configurar un servidor Apache.

0010 – Instalar WordPress y tener su propio blog. | Importancia de tener una audiencia |

0011 – Correr tu propio sitio web desde tu casa.

0100 – Escribir una aplicacion web completa usando LAMP

0101 – Tener tu propio servidor en internet.

0110 – Instalar  VMWare o cualquier otra maquina virtual.

0111 – Configurar un router para que puedas hostear servicios desde tu casa (port forwarding)

1000 – Haber usado un packet sniffer.

1001 – Contribuir a un proyecto Open Source.

1010 – Escribir una web app que use un Web APIs, tipo Facebook Connect o una de Google.

Originalmente de aca:

http://tagide.com/blog/2011/06/things-ics-students-should-do-before-graduating/

 

PS3 junto con PS Vita y Move = Wii U?

Posted by & filed under geek.

Hoy Nintendo en la conferencia E3, anuncio una nueva consola (NO PORTATIL) que saldrá al mercado en el 2012.

 

Según Nintendo la nueva consola traería experiencias únicas para todo el mercado de los jugadores de video juegos. Tanto como al Casual Gamer como al Hardcore.

Las prestaciones técnicas del Nintendo Wii U (que no es sólo un control sino también una consola) son:

Tamaño: aproximadamente 4.5 centímetros de alto, 17.2 cm de ancho y 26 cm de profundidad.

El nuevo control: tiene una pantalla de 6.2 pulgadas, con una pantalla táctil con formato 16:9, botones, 2 palancas analógicas. Tener esta pantalla tan generosa hace que no necesitemos tener un televisor encendido para jugar y a su vez se podría usar esta pantalla como secundaria para brindar información extra sobre el juego, como por ejemplo el mapa en un juego de aventuras. También incluye giroscopo y acelerometro, vibración,  al menos una cámara, un micrófono, parlantes y un lapiz para la pantalla tactil.

Otros controles: Se van a poder seguir usando los controles Bluetooth de la Wii, ya sean con MotionPlus o sin. Además se va a poder seguir usando la Wii Balance Board™.

Media: se va a usar un formato propietario para los juegos. Se van a poder usar los juegos de la Wii (pero sin ninguna mejora en la calidad – No upscalling )

Video Output: soporta 1080p, 1080i, 720p, 480p y 480i. Las salidas incluyen HDMI, component, S-video y compuesto.

Audio Output: Seis canales PCM provistos mediante HDMI, usaría ademas AV Multi Out.

Almacenamiento: La consola va a tener memoria interna flash, y va a tener la opción de agregarle memoria mediante SD o un disco externo USB.

CPU: IBM Power®-based multi-core microprocessor.

Otros: cuatro conectores USB 2.0

Mi idea cuando estaba viendo la Press Release fue, como Sony podría ponerse a la par de tanta “innovación” por así llamarla de parte de Nintendo.

Yo creo que podrían sacarle la novedad mediante un uso muy inteligente del PS Move y el nuevo PS Vita.

Mediante software podrían simular la gran mayoría de funcionalidades que se vieron en los videos que puso de ejemplo Nintendo.

Por ejemplo podríamos usar el Move en conjunción con el Vita en el suelo (usada como pantalla accesoria) para un juego de golf.
Donde en el PS Vita se mostraría la pelota, con el Move se hace el motion capture y el PS3 como backend integrador de todo esto.

Augmented Reality

Las propuestas de Nintendo, mediante cartas [tipo magic] que pelean entre si y dan un componente tangible al juego, ya fueron vistas hace mucho tiempo (mas de 2 años) por Sony.

Sony tiene toda una suite de juegos para chicos que ya usan realidad aumentada en el PS3. Con sólo el PS Vita (sus prestaciones a nivel hardware) y sus camaras preparadas para 3D; estas 2 cosas ya abren ventanas de innovación para los desarrolladores.

Todo va a terminar siendo un tema de posicionamiento y adopción por parte de los consumidores, porque la tecnología ya esta lista hace rato.

Fragmentación del Mercado para el caso SONY

Es difícil de suponer que nuestro publico target, va a contar con el Move y el PS Vita para dar la experiencia que estamos proponiendo.

Suponiendo que el usuario tiene un PS3 con un televisor HD.

Puede darse:

  • Que tenga 3D
  • Que tenga 3D pero no Move.
  • Que tenga 3D pero no Vita.
  • Que tenga Vita pero no Move, ni 3D.
  • Y la lista sigue.

En el caso excepcional que nuestro publico tenga todas estas cosas, podría darse una experiencia incluso mejor que el Wii U.

Esto esta tramado por SONY desde hace mucho, cuando decía que el PS3 iba a ser el media Hub de nuestra casa.

Desventajas de Wii U.

Nintendo no tiene todo el ecosistema que tiene SONY para dar juegos hechos por terceras partes, más la consolidada (y muy golpeada últimamente) PlayStation Network.

Cuando salga al mercado va a tener muchos menos juegos (obvio), no tiene soporte para Blu-Ray; ni para multi Touch, ni capacidades tipo Kinect como las que tiene PS Move.

Estas desventajas son únicamente, si tenemos todo el Combo que propone SONY, que además nos daria una consola extra (a un precio extra 250 USD).

Hay que ver que tools se les dan a los desarrolladores para hacer juegos, ya que Nintendo siempre tuvo sus éxitos atados a sus Franchises como Mario, Zelda, Metroid, etc. Todas propiedades intelectuales muy valoradas y con años (más de 25) en la industria.

Last remarks

Este post fue un ejercicio sobre las posibilidades que tiene SONY.

En casa tenemos Wii (con Motion Plus, BalanceBoard, etc) y PS3 y Windows (pc = consola )

Las consolas gráficamente ya se están quedando atrás, porque obviamente las GPU se mueven mucho mas rápido que cualquier consola. (Calcular, doble performance de 6 a 8 meses).

La historia nos enseño que nunca hay que sub estimar a Nintendo, ya que muchas veces parece que es el unico que entiende al mercado en general. El mismo peso de Nintendo; el marketing y todo lo que pase desde el día de hoy hasta el lanzamiento y por sobre todas las cosas el precio, van a ser que sea un éxito o un fracaso.

Teniendo en cuenta la cantidad de dinero que hace falta para tener todo el Combo de SONY (3D + PS3 + PS Vita + PS Move) parece obvio pensar que (pensando con “plata infinita”) Sony va a dar una mejor experiencia y mejores juegos con una consola con más de (2011 – 2006) = 5 años en el mercado!.

Igual lo mas probable sea que, en mi caso en particular, compre el SONY combo + el Wii U.

 

Por favor +1 o tw!

Instalar la extension de GNOME 3 System Monitor

Posted by & filed under linux, programacion, tutorial.

Para instalar la extension del monitor del sistema como se ve en la imagen:

Screenshot de la Extension Gnome 3 (Gnome-shell) System monitor

Por el momento no esta en ningun repositorio por lo que tendremos que traerla desde un repositorio de git para eso tenemos que instalar git (ir agregar software y buscar git) y además “py3gobject”.

En fedora se llama python3-gobject se lo puede instalar usando la interfase grafica de yum o bien.

sudo yum install python3-gobject

Copiamos tal cual como esta aca este codigo y listo:

rm -rf ~/git_projects
mkdir ~/git_projects && cd ~/git_projects
git clone git://github.com/paradoxxxzero/gnome-shell-system-monitor-applet.git
mkdir -p ~/.local/share/gnome-shell/extensions
cd ~/.local/share/gnome-shell/extensions
ln -s ~/git_projects/gnome-shell-system-monitor-applet/system-monitor@paradoxxx.zero.gmail.com
sudo mkdir -p /usr/local/share/glib-2.0/schemas
sudo cp ~/git_projects/gnome-shell-system-monitor-applet/org.gnome.shell.extensions.system-monitor.gschema.xml /usr/local/share/glib-2.0/schemas
sudo glib-compile-schemas /usr/local/share/glib-2.0/schemas
sudo cp ~/git_projects/gnome-shell-system-monitor-applet/system-monitor-applet-config.py /usr/local/bin/system-monitor-applet-config

Despues hay que reiniciar el gnome-shell (ALT + F2 y en el cuadro de texto escribimos "r").

Groupon es una estafa

Posted by & filed under business.

Más exactamente es un Ponzi Scheme

Desde wikipedia

El esquema Ponzi es una operación fraudulenta de inversión, que implica el pago de prometedores o exagerados beneficios. Esta estafa consiste en un proceso en el que las ganancias que obtienen los primeros inversionistas son generadas gracias al dinero aportado por los nuevos inversores que caen engañados por las promesas de obtener grandes beneficios. El sistema sólo funciona si crece la cantidad de nuevas víctimas.

 

Es simple Groupon encontró la forma de venderle a los negociantes algo que pueden probar una vez y que les trae nuevos clientes. Groupon inmediatamente toma la mitad de esas ganancias para el comerciante, porque claro esta nunca fueron ganancias de Groupon propiamente dichas. Pero claro la ganancia de Groupon parecen altas, y por eso que ahora tienen una buena valuación, cosa que los lleva a transformarse en una empresa publica (cotizar en la bolsa, IPO, etc). Usan todas sus ganancias para contratar miles de vendedores para explotar el mercado en una ciudad (son ofertas locales siempre) y prepararse para moverse a la próxima ciudad.

Lo que pasa es que muchas empresas tienen una explosión en ventas de clientes que inmediatamente desaparecen, porque obviamente no pueden seguir dando fuertes descuentos para siempre, por lo que los comerciantes se dan cuenta… y dejan de usar Groupon. Pero la magia de Groupon por ahora es que tiene cada vez mas establecimientos nuevos que los que ya lo hicieron (les dio resultado instantáneo pero no duradero) y no lo volverán a hacer. Ese es el momento que Groupon se expande a un nuevo territorio. Básicamente baraja y da de nuevo.

El modelo es sólo sostenible a largo plazo si le da ventajas reales a los comerciantes. Porque algún día Groupon se va a quedar sin comerciantes que quieran hacer este tipo de descuentos que no le da resultado.

Pero lo que dice Groupon es que le ayuda a los comerciantes a atraer nuevos clientes que después se convertirán en clientes leales para el negocio, que el negocio en realidad esta pagando la posibilidad de ganarlos por medio de Groupon. Este es el argumento fundamental de Groupon en que usa sus vendedores cuando quieren incentivar a los comerciantes. El típico descuento de Groupon es de 50% menos que el precio normal, con la mitad de la promoción yendo directamente a Groupon. Entonces el comerciante se queda con un 25 % del ingreso de la misma compra si la hubiese hecho alguien que entro al negocio sin ser gracias a Groupon. Entonces todo lo que entra de Groupon muchas veces no da ganancia, entonces cuanto más vendemos por Groupon en realidad nos da perdida.

La mayoría de los comerciantes no puede ni hacer descuentos de un 10 %. Algunos podrían hacer de 25 % en algunas compras grandes o alguna situacion especial. Pero el 75 % es una locura. Si todos empezarían a usar Groupon, 2 cosas pasarían, inflarían los precios antes de Groupon para que den los números (créanme que pasa); o bien groupon dejaría de crear clientes que nos dejan plata para crear no solo gente que nos genera perdida, pero a oportunistas que están buscando esos descuentos re locos. Lo que quiere decir que mientras Groupon se vuelva todavía mas masivo, los comerciantes y sus competidoras se darán cuenta que el argumento de Groupon no sirve (si es que alguna vez sirvió), Groupon simplemente no le da nuevos clientes leales que van a pagar el precio normal. Entonces después de un tiempo todos van a dejar de usar Groupon con todos sus clones.

Tal vez Groupon piensa que esta creando un Dilema del Prisionero de forma sustentable, uno que va a terminar destruyendo el valor del ecosistema que integran los comerciantes locales. En otras palabras, Groupon crecería tanto que los comerciantes, TIENEN que usarlo aunque al final les termine haciendo mal. Si algo nos enseña la teoría de juegos es que Groupon terminaría creando un equilibrio en el cual todos los comerciantes deciden dejar de jugar.

Sólo tiene sentido usar Groupon en negocios que tienen una ganancia superior al 70 % o en industrias que ya gastan muchísimo en adquirir nuevos clientes en forma de propagandas, por lo que groupon no suena tan mal, comparando el gasto terrible que pueden incurrir en hacer publicidad en TV por ejemplo en horarios prime-time.

Groupon va a implosionar porque no existe muchos negocios que tengan margenes tan elevados, o que gasten muchísima (que salen derecho o pierden) en publicidad.

 

 

Como instalar chrome-chromium en Fedora 15

Posted by & filed under linux, tutorial.

Rapidisimo tutorial para ver si este titulo SEO funciona:

Primer paso

Abrir una terminal (en Gnome 3 buscamos terminal), si estan en modo fallback esta en el ultimo item del menu. “system tools” -> terminal

Segundo paso

Escribimos

sudo yum install wget

que increiblemente Fedora no lo trae instalado default.

Tercer paso

cd /etc/yum.repos.d/

Cuarto paso

sudo wget http://repos.fedorapeople.org/repos/spot/chromium/fedora-chromium.repo

Quinto paso

sudo yum install chromium
TL;DR:
sudo yum install wget
cd /etc/yum.repos.d/
sudo wget http://repos.fedorapeople.org/repos/spot/chromium/fedora-chromium.repo
sudo yum install chromium

Update: 3/JUN funciono el SEO.

Me pase a Fedora 15

Posted by & filed under linux, tutorial.

Principalmente porque OpenSUSE tuvo un problema con java o el ftp. No se bien todo lo que usaba FTP andaba inestable, asi que el Aptana no lo podia usar. Debe ser culpa mia por joder con los repositorios.

 

Asi que me instale Fedora que el unico problema que tuvo era que no entendia bien como parciionar el SSD. Culpa del instalador, totalmente, tuve que

yum install gparted

Y hacerlo a mano.

Despues de instalar chromium

Algunas extensiones funcionaban mal. Por ejemplo “real later fast” siempre decia “Read faster later has crashed” -> reload? TODO el tiempo esto lo fixea

restorecon -R -v ~/.config

Otra cosa:

Agregar un programa al menu de Gnome 3, es imposible… buscando en internet encontre

yum install alacarte

Despues hacemos control + F2 escribimos alacarte y ahi agregamos el programa que querramos como acceso directo al menu de gnome 3.

Asi podemos hacer Meta ( windows key) aptana y estar felices y contentos.

Instalar Flash

su -c ‘yum localinstall –nogpgcheck http://www.linux-ati-drivers.homecall.co.uk/flashplayer.x86_64/flash-release-1-2.noarch.rpm’

sudo yum install flash-plugin