2014-11-23

Cómo hablar en portugués, mal

Update: Agregué regla para 'c' al final de una sílaba en el medio de una palabra.

Hace muchos años hice software para Brasil. Parte de ese desarrollo requirió que pueda hablar con much@s brasileñ@s. Acá les cuento algunos truquitos que hacen mucho más fácil la comunicación.

Aprendé algunas palabras

Sabiendo 50 (o 10) palabras en portugués podés avanzar un montón. Y lo más probable es que algunas ya las conozcas. Te cuento alguna que me acuerdo:
  • obrigado: gracias
  • eu: yo
  • você: vos
  • a gente: nosotros
  • loja: negocio
  • eu te quero: te quiero cojer
  • ficar: estar/ quedarse en
  • batata: papa
  • frango: pollo

Imitá la tonada

Aunque suene increíble, solo imitando la tonada brasileña te entienden mucho más. Para eso podés tener en cuenta algunas cosas:
  • Las "h" al principio generalmente se transforman en "f". Por ejemplo "hacer" es "facer"
  • Las "j" se suelen pronunciar como "ll" (no como yé). Por ejemplo, "muller" (mujer) y "ollos" (ojos)
  • Muchas palabras que terminan en consonante se les agrega una "i" al final. Por ejemplo, Varig se pronuncia "Varigi"
  • Si hay una "c" al final de una sílaba en el medio de la palabra, sacala. Por ejemplo, "correto" (correcto) y "perfeto" (perfecto). En realidad se dice "perfeito", pero solo aplicar la regla nos acerca. 
No hace falta que imites la tonada bien para que sirva para comunicarse. 

Usá palabras largas

Las palabras de 4 o más sílabas casi siempre se corresponden con las palabras en portugués, solo teniendo que cambiar un poquito la pronunciación haciendo las cosas de las que hablé en el punto de arriba. También tienen la ventaja de que al ser muy largas, si pronunciás mal una parte te entiendan igual.

Olvidate de las conjugaciones de los verbos

Las conjugaciones de los verbos son distintas en castellano y portugués y siempre van a salir mal. No te preocupes por eso.

No tengas miedo

Si tratás de hablar en portugués siguiendo estas reglas no vas a estar hablando correctamente. Eso, en mi experiencia, no importa. Es más, se dan cuenta que estás haciendo un esfuerzo para comunicarte con ell@s. Y eso hace que muchas veces estén dispuest@s a hacer lo mismo y tratar de ayudarte en la conversación. Aparte l@s brasileñ@s se caracterizan por la buena onda.

Éxitos,
Aureliano.

2014-11-22

Projecto de ejemplo de sandro

Acabo de hacer público el projecto taleca. Ahí uso sandro para hacer una visualización de algunos datos que se usaron en el Hackatón de agro de la Fundación Sadosky. Es un ejemplo simple pero muestra cómo usar el general update pattern para hacer una visualización de d3 en sandro.

Te propongo que saquemos a sandro de las penumbras,
Aureliano.

2014-11-21

Datos de Fibertel

Hola,

Recientemente instalé Fibertel 6 megas en mi hogar. Acá les dejo algunas cosas que hubiera querido saber y que no me contaron.

  • Para ver la calidad de la conexión tienen que conectarse a http://provisioning.fibertel.com.ar/asp/nivelesPrima.asp. Los valores que tienen que mirar son Tx, Rx y Mer. Tx tiene que estar entre 30 y 50 dB (40 es lo mejor), Rx tiene que estar entre -10 y 10 dB (0 es lo mejor) y Mer tiene que ser mayor a 30 dB (los rangos los saqué de este post de Taringa).
  • Tengo un MODEM Arris Touchstone, para mirar/tocar la configuración me conecté con mi navegador a http://192.168.0.1 y me loguié con usuario "admin" y password "motorola". Raro, pero funcó, ¿me estaré conectando al MODEM del vecino?
Update: Me traté de conectar de nuevo a http://192.168.0.1 y no anda. Le tiré un nmap y tiene todos los puertos cerrados, aparentemente lo abren y cierran cuando hay técnicos trabajando en tu casa desde la central. El primer link sí anda.

Espero que les sirva,
Aureliano.

2014-11-14

Discriminación de género hacia los hombres en la Argentina

El discurso de violencia de género centrado en la violencia ejercida por los hombres hacia las mujeres, ignorando completamente la violencia que va para el otro lado, es violencia de género. Acá muestro algunas cosas en las que los hombres somos discriminados, y respaldado por estadísticas oficiales (ver los links para más detalles):

  • Expectativa de vida en Argentina (fuente): 
    • Hombres: 72,44 años
    • Mujeres: 79,76 años
  • Edad jubilatoria en Argentina:
    • Hombres: 65 años
    • Mujeres: 60 años
  • Población carcelaria en Argentina (fuente):
    • Hombres: 92%
    • Mujeres: 8%
  • Secretarías en Argentina:
    • del Hombre: no
    • de la Mujer: sí
  • Licencia por descendencia en la Argentina, incluye adopciones (fuente):
    • Mujeres: 12 semanas
    • Hombres: 2 días
  • Tenencia de l@s hij@s en la Argentina:
    • Queda con la madre 9 de cada 10 veces (fuente)
    • Esto es abusado sistemáticamente y ese abuso es escondido por el poder judicial (fuente)
  • Víctimas de asesinatos (fuente):
    • Hombres: 90%
    • Mujeres: 10%
¿Siguen pensando que el género discriminado en la sociedad es el femenino?
¿Por qué?

Aureliano.

PD: No estoy diciendo que esté bien la violencia en contra de las mujeres, digo que está mal la violencia en contra de los hombres.

2014-11-13

Dependencias con nombre en sandro

En requirejs cuando un módulo tiene muchas dependencias a veces se complica saber qué variable corresponde a qué módulo. Para simplificar esto, ahora en sandro se pueden definir módulos así:

define({name1:"./dependency1", name2: "app/dependency2"}, function(m) {
   // m.name1 refers to ./dependency1 and m.name2 refers to app/dependency2
})

Podés usarlo en define y require, tanto en el cliente como el server.
Happy hacking,
Aureliano.

2014-11-11

mosh en AWS

Acabo de instanciar una VM en EC2, usando la AMI estándar de Ubuntu-Server de 64bits. Hago
$ sudo apt-get install mosh
en un shell de la nueva instancia (por ssh) pero no me puedo conectar usando mosh. ¿Por qué? Tengo algún quilombo con los locales
The locale requested by LANG=en_US.UTF-8 isn't available here.
Running `locale-gen en_US.UTF-8' may be necessary.
¿Cómo lo arreglo? Siguiendo las instrucciones de acá, genero los 2 locales que necesito y los registro:
$ sudo locale-gen en_US.UTF-8
$ sudo locale-gen es_AR.UTF-8
$ sudo dpkg-reconfigure locales
Y ahora me puedo conectar :D.

Happy hacking,
Aureliano.

2014-11-10

Mi propia autoridad certificante y mi ELB

En esta respuesta de StackOverflow dice como armar tu propia autoridad certificante en 1 minuto, y en esta página cómo darle a AWS las cosas que necesita para setupear un load-balancer con SSL. Entre esas 2 cosas es fácil armar tu propia página que use tu autoridad certificante. Es medio difícil convencer a la gente que hace los browsers de que te acepte, pero probablemente sirva para intranets o aplicaciones que se conecten a la nube.
Happy hacking,
Aureliano.

2014-11-06

Utilidades para d3 en sandro

Estoy trabajando en sandro, y surgen cosas interesantes. Ahora empecé a hacer utilidades para d3. Lo más interesante es que hice un método que encapsula y da entidad al General Update Pattern de d3 e hice que los nodos updateados tengan que sí o sí ser hijos del nodo referenciado (en vez de cualquier descendiente), para evitar un montón de bugs que se dan eligiendo nodos.

Para usarlo en sandro es así:
define(["sandro/nadaMas/d3", function(d3h) {
  // Acá hay código tuyo, que hace aSelection
  aSelection.call( d3h.gupChildren, {
    tag: "line", // nombre del tag de la entidad a insertar (obligatorio)
    klass: "aClass", // nombre de la clase de las entidades insertadas (optional, sin clase si no está escrita)
    values: [1,2,3,4], // datos para la visualización (función o array, igual que en d3)
    key: function(d,i) {.....}, // key para los datos, opcional. Funciona igual que en d3
    onEnter: function(s, defaultOnEnter) {....}, // acciones a tomar con la selección de los nodos nuevos. Opcional. Si no es seteada solo hace append de los nodos y les setea la clase si querés hacer eso y algo más defaultOnEnter(s) hace eso y devuelve la selección para seguir operando.
    onUpdate: function(s, defaultOnUpdate) {.....}, // acciones a tomar sobre la selección de los nodos modificados (tanto agregados, como cambiados). Opcional.
    onExit: function(s, defaultOnExit) {.....}, // acciones a tomar con la selección de los nodos que no matchean con los nuevos datos. Opcional. Si no es seteada solo hace remove. Si querés hacer eso y algo más defaultOnExit(s) hace eso y devuelve la selección para seguir operando.
    onUpdateOld: function(s, defaultOnUpdateOld) {.....} // Igual que onUpdate pero solo aplica a los nodos viejos
  })
  // Y acá más código
}
Si quieren, pueden usar el código as-is si usan requirejs, o adaptarlo un toque y usarlo en el browser como más les plazca. Pero, si quieren usarlo en el server también, la mejor forma que conozco es que usen sandro.

Espero que les guste!

2014-11-01

Como lo hice yo

Estuve avanzando y empecé un módulo nuevo en sandro. Se llama comoLoHiceYo en honor a la canción de Sandro con el mismo nombre y tiene las configuraciones "opinionated" que hacen falta para unir cosas y que sea fácil compartir código entre cliente y server. Antes era posible, ahora es una pavada.
Éste es el código de una página de ejemplo que corre un pedacito en el cliente y otro en el server. Primero en el server, app/endpoint/clientCode.js es así:
define([], function() {
  return function(params) {
    var d3 = params.d3
    var startClientJs = params.startClientJs
   
    d3.select("body").append("div").text("Generated on the server")
    startClientJs("app/shared/clientCode")
  }
})

Y para el cliente está app/shared/clientCode.js:
define(["external/d3"], function(d3) {
  d3.select("body").append("div").text("Generated on the client")
})

Ya se empieza a ver que hay un montón de cosas que se pueden hacer en los dos lados. En este ejemplo, uso d3 tanto en el cliente como en el server para manipular el DOM.
¿Querés usar sandro? Decime y te ayudo.