VERSION ACTUAL :

Inicio de sesión

Raulito el Friki

Raulito El Friki

COMENTARIOS

EN LINEA

Hay actualmente 0 usuarios conectados.

NUEVOS

  • fam29
  • poetnight
  • carrillojuanpablo
  • andrex250
  • Erik_rana

Planeta Fedora-ES

Estrategias Digitales, IFTTT o porqué 10 "Fans" valen más que 1,000,000 de "Followers"

Xenode - Lun, 02/04/2013 - 15:50

Ahorita que me puse a checar el Twitter (tanto la cuenta de Xenode Systems como la mía), di con un artículo bastante interesante sobre la diferencia entre un Community Manager y una Estrategia Digital como medios para generar audiencia en lugares como Facebook y Twitter para una marca.

Es curioso porque justamente hace unos días les hablaba de la agenda laboral 2013 para Xenode Systems y la verdad es que me emocioné porque dentro de esa agenda laboral (que yo diseñé) metí varios aspectos de lo que llamarías estrategia digital de una manera muy cool. La verdad es que todavía faltan unas semanas más antes de que todo lo contemplado esté al 100% listo y funcionando (falta el nuevo sitio web que va a hacerla de plataforma digital, las nuevas tarjetas, el acondicionamiento del nuevo espacio de trabajo y demás) Pero en estos días he estado introduciendo a cuentagotas algunos de los elementos de nuestra estrategia digital a lo mejor sin que lo hayan notado todavía.

Un ejemplo de esto es que ya estamos en Instagram (próximamente haré el anuncio oficial) y mi objetivo es armar a todos y cada uno (ya sean actuales o futuros) de los miembros del círculo interno de Xenode Systems con un Smartphone para que compartan fotos de nuestra vida diaria como integrantes de la empresa. Ayer precisamente le explicaba a mi socio principal que en la web manejamos 4 tipos de contenido "estático" multimedia: Fotos, Videos, Audio y Texto... Y que este contenido lo podríamos dividir en 2 categorías principales: Contenido Generado y Contenido Compartido.

En mis palabras, el contenido compartido te genera una afinidad mientras que el contenido generado te va moldeando una personalidad (como marca). Sólo vayamos al ejemplo de las imágenes: Mientras que en Facebook los muy conocidos memes nos generan likes y shares, (son un claro ejemplo de contenido compartido) Éstos solo nos sirven para generar una AFINIDAD. ¿Esto qué quiere decir? que al publicar un meme que le interesa a tu audiencia estás generando un sentimiento de "ja! me gusta lo que estos tipos comparten, es gracioso, cool, o ingenioso" Sin embargo no te está generando una personalidad como marca o empresa.

Por otro lado (y seguimos hablando de imágenes) las FOTOGRAFÍAS son una manera de generarle una personalidad a tu marca, ya que es contenido generado que va mostrando a tus seguidores cómo es que la filosofía de tu empresa o proyecto se manifiesta en la vida diaria de sus integrantes. En nuestro caso, no tienen idea de las cosas que nos ha tocado ver, los lugares a los que nos toca ir o los proyectos en los que nos enfrascamos (¡y me disculpo por ello! Estamos arreglando eso para ser más inclusivos) Pero la realidad es, que la vida del emprendedor (y del miembro de Xenode Systems para ser más específico) es una mezcla de raras aventuras y situaciones que merecen la pena contar, ¡Estamos llenos de Anécdotas! y una manera de llevar esto hasta ustedes es la estrategia instagram que recién he implementado.

IFTTT Haz que el internet trabaje para ti

Generar y compartir contenido puede ser tedioso. Vamos al caso de las imágenes que tenemos de ejemplo: Tu tomas una foto, la descargas a tu PC, la editas, la subes y la compartes. Es un proceso "largo" que no permite que a veces, la información llegue en tiempo real a tus fans y a veces hace que incluso "se te pase" compartirlo. Este es uno de los problemas a los que me enfrenté cuando por primera vez intenté iniciar una campaña de fotografía para Xenode Systems por parte de todo el Xenode Team.

Sin embargo, para este 2013 decidí integrar IFTTT, una interesante herramienta web cuyo significado es "If THIS then THAT". Se trata de un sistema de automatización para el Internet que hace lo que su nombre dice, basado en eventos cumple ciertas tareas, por ejemplo: "Si yo subo una foto a Instagram me gustaría que se compartiera en las redes sociales de mi empresa".

Como emprendedores, nuestro trabajo REAL es buscar soluciones a diversos problemas de la sociedad. Algunos emprendemos en tecnología, otros en el campo, otros en la ciencia etc. Y la verdad es que no eres un emprendedor si primero no buscas una solución a TUS PROBLEMAS jajajajaja. Uno de nuestros problemas como empresa es que tenemos una fuerza de trabajo bastante reducida y sin embargo tenemos un público que se extiende más cada día. Por otro lado la sociedad ha montado un escenario para las marcas en el cual es importante estar en las redes sociales más fuertes (Facebook, Twitter, Google Plus, Pinterest) cueste lo que cueste, requieres esa presencia.

¿Cómo una empresa pequeña como Xenode Systems podría abarcar todas esas redes sociales con contenido generado sin invertir mucho dinero y no teniendo que forzar a alguien a estar ahí pegado en las mismas redes? Ese era mi problema.

¿La solución?, (y de nuevo, sólo les estoy comentando el ejemplo de las imágenes pero la estrategia digital que organicé abarca muchos flancos) Muy simple: Abro una cuenta empresarial de Instagram, armo a mis empleados generadores de contenido (que no usen dicha app para fines personales ya) con smartphones y les doy acceso a dicha cuenta directamente en los aparatos, Programo IFTTT para que cada que se tome una foto y se suba a esa cuenta de Instagram se comparta en las redes sociales principales de la empresa y listo.

Eso es una estrategia digital. A lo mejor tenemos que invertir en los teléfonos, pero me estoy ahorrando el sueldo de un community manager y dejo que los generadores de contenido nos generen una personalidad en la red haciendo algo que DISFRUTAN: Tomar Fotos.

Es una situación de ganar-ganar: Mis empleados generadores de contenido obtienen una herramienta más de trabajo (smartphone) y tienen una razón para expresarse por medio de la fotografía que tanto les gusta más "fija", haciendo que tomen en cuenta el tomar más fotos. Dichas fotos se convierten en contenido generado que va a nuestras redes sociales en automático y ustedes como fans pueden tener un sneak peak a nuestra vida diaria como emprendedores, como miembros de este proyecto de una manera más personal y directa.

FANS, La clave

En el párrafo de arriba remarco la palabra fans, ¿Porqué? bueno: Resulta que nosotros hace tiempo nos embarcamos en el negocio de las campañas de social media cuando trabajábamos en conjunto con un estudio musical donde (para ellos) los resultados se veían en el número de followers. La cuenta "piloto" del proyecto era de un cantante ranchero que, (como personaje) a simple vista generaría poco interés en las redes sociales. Sin embargo, la cuenta llegó de 0 a 900 seguidores en cuestiones de 1 semana y media. ¿Cómo? Estrategias de Community Manager:

  • Sígueme y te sigo
  • Contenido para las masas
  • Interacción con cuentas masivas
Entre otras. Muchos dirían que entonces, los seguidores que generamos eran de poca utilidad más allá de un número, pero en Xenode Systems no trabaja gente idiota: Sorprendentemente, nuestro manager de social teams de aquel entonces (contratado exclusivamente para esa cuenta) logró no solo un crecimiento en números, sino que había también interacciones....

Sin embargo algo no estaba bien:

Yo veía los resultados de esa cuenta al supervisar y me hacían sentir vacío. No es que el equipo lo estuviera haciendo mal o algo así, pero yo veía la cuenta de twitter de Xenode Systems (esa la manejo yo) y aunque con menos followers, me hacía sentir orgulloso. Verán: La cuenta de Xenode Systems está llena de menciones (preguntando cosas, agradeciendo, compartiendo nuestro contenido) RT's y demás de una comunidad que se preocupa (y le interesa) lo que hacemos o los temas que tratamos en el blog o en sí, lo que publicamos.

Comparando ambas cuentas, aunque en la del cliente teníamos una cantidad hasta eso llamativa de folllowers las interacciones eran pocas (pero había, y eso habla muy bien de nuestro community manager para esa cuenta teniendo en cuenta los requerimientos del estudio jajajaja). En nuestra cuenta, donde había menos followers, las interacciones sucedían diario. Esto es algo que tienen que tener en cuenta, y va más allá de una simple gratificación personal: Como gestor de la cuenta de Twitter de Xenode Systems me encanta contestarles sus dudas, ayudarlos, ver el contenido que nos comparten y promocionar aquello que vale la pena, me encanta interactuar con nuestros seguidores. Sin embargo, en el campo de social media esto (como ya dije) va más allá:

10 fans (Gente que interactúa con tu marca, que se interesa por los temas que expones en tu blog o por el contenido que generas) Te sirven más como muestra de mercado REAL que 1,000,000 de followers que están ahí por el sígueme y te sigo y similares, ¿Porqué? porque el público REALMENTE interesado y comprometido es público REAL de tu nicho de mercado, público útil, público verdadero, público de calidad. Puedes tener certeza de que si lanzas una encuesta (y tienes un público comprometido y verdadero) los resultados de la aplicación de dicho estudio (la encuesta) que arroje serán los que mejor se amolden a tu nicho de mercado haciendo que los resultados sean más fructíferos en general. Un público "basura" más allá del número no te sirve como muestra de nada, porque realmente no quieren nada, y lo que puedan "querer" (o lo que puedas extraer con estudios) es muy improbable que sea útil para tu estrategia digital.

Es por esto que 10 fans valen más que un millón de followers, (Click para twittearlo) y esto aplica para CUALQUIER red social. Si eres un emprendedor, tienes un proyecto, sitio web, startup o empresa, te sugiero que a partir de ahora (si no es que lo hacías ya) te centres en generar público de calidad para tu marca en lugar de público masivo, ya que las bonificaciones de centrarte en el primer tipo son realmente increíbles, ¡inténtalo!

Finalizo el artículo agradeciendo a nuestros seguidores en todas las redes sociales allá afuera y les dejo como tarea el mantenerse pendientes, puesto que nuestra estrategia digital para este 2013 será algo súper genial que los involucrará como la comunidad que son, ¡Los queremos mucho!

Si te gustó este artículo, no te olvides de suscribirte a nuestro RSS o bien, seguirnos en Twitter para las mejores publicaciones al momento.

Podcast 002: ¡La TV está Muriendo! ¿o tú qué opinas? (08:20)

Xenode - Lun, 02/04/2013 - 08:05

El otro día vi la última temporada de Fringe completa y me puso a pensar muchas pero muchas cosas sobre el futuro de la TV como medio de entretenimiento en una sociedad que se la vive en Internet... Te invito a escuchas mis opiniones sobre el tema en el podcast de hoy para que nos compartas las tuyas en los comentarios:



Descargar Episodio (¡Usa Firefox para esto!): 

Iron man examinándonos de Programación

Gaussianos - Lun, 02/04/2013 - 08:00

Parece que en la Universidad de Deusto hay algún profesor de Informática bastante friki:

Esta imagen, que un lector ha enviado al correo del blog, corresponde (según apunta dicho lector) a un examen de Programación II del Grado de Ingeniería Informática de la Universidad de Deusto de hace un par de años en el que Iron Man (al menos parece que es él) es quien se encarga de transmitirnos el enunciado. También nos comenta que dicho examen no es muy complicado, sobre todo viendo que se trata de Programación II. Como la programación no es algo demasiado conocido por mí no puedo opinar, pero sí me gustaría que lo hicieran los informáticos que suelen entrar por aquí.

Un examen más que añadir a Cuando un profesor saca su vena friki… (en Naukas podéis ver el post completo) y a Frikismo matemático plasmado en exámenes. Espero vuestras aportaciones en los comentarios, a la cuenta de Twitter de Gaussianos (@gaussianos) o al mail gaussianos (arroba) gmail (punto) com.

Tu zona de confort

Jose Salgado - Lun, 02/04/2013 - 06:51

Se ha puesto de moda durante estos últimos meses, o al menos según mi correo electrónico, el concepto de zona de confort. Según afirman estas buenas gentes, nuestra zona de confort es donde estamos cómodos y seguros, pero que para crecer, para realmente progresar como personas (o como tostadoras, que con esto del internet de las cosas uno ya no sabe quién o qué le está leyendo) hemos de abandonar nuestra ámbito conocido y adentrarnos en un mundo extraño y desconocido, tan escalofriante que da un susto al miedo. Como somos todos perros viejos, a este lugar horripilante y espeluznante en vez de llamarlo Paraíso de Freddy Krugger o El medievo, torturas de calidad garantizada, lo han llamado Dónde ocurren los milagros.

No voy a negar algunas premisas que son ciertas en esa teoría, de hecho, es lo que le da este toque new age y romántico con un barniz de credibilidad. Pero no podemos tampoco negar que salir de tu zona de confort produce cierto nerviosismo. Pero no siempre puedes estar refugiado en tu espacio vital, a veces la vida te da una pequeña patada en el culo, o simplemente ves que le falta algo de sustancia en tu quehacer cotidiano y levantas el pie derecho, cierras los ojos, y pisas al otro lado de esa línea que delimita tu mundo conocido.

Por tu cabeza pasa directamente la lista de todas las cosas que pueden salir mal, y a la vez, repasas la lista de las cosas que realmente sabes hacer bien. Al mismo tiempo, te vuelves a preguntar el porqué has dado este paso, y porque no te estabas quietecito, y en paralelo, un gusanillo de excitación y alegría te va subiendo y bajando por la médula espinal. El miedo y la ansiedad, tampoco se quedan sin un órgano para jugar y toman a la conquista tu estómago, dónde en vez de soltar mariposas, se dedica a azuzar a una banda de avispas descontentas con el gobierno.

Pero ya has dado el paso y volver atrás sería un error, un pequeño fracaso que acechará tu subconsciente, y todos sabemos lo enrevesado y maligno que este puede ser, así que solo hay un camino, adelante. Mentalmente dibujas tu meta, el recorrido que has de seguir, dándole el mayor número de detalles posibles para prepararte, y te pones a trabajar. Te sientas y comienzas a desarrollar tu sueño, a preparar las reuniones o acciones que has de ejecutar, poco a poco porque te sientes todavía inseguro, pero ves que a cada paso que das te sube un poco la confianza. Si, indudablemente existirá un punto donde te equivocarás, pero habrás cogido experiencia y seguridad y no será más que un obstáculo que tendrás de superar, nada que no hayas hecho antes en tu vida.

Y en eso estoy ahora mismo, dando pequeños pasos, avanzando poco a poco, perfilando lo que quiero hacer, fijándome en la meta que tengo en mente e intentando trasladar el camino que he de recorrer en hechos factibles, medibles y sobretodo medibles. No niego que hay bastantes fuerzas que actúan en contra, inseguridad, procrastinar, distracciones que te apartan de tu meta. Se necesita fuerza mental para seguir caminando, y sobretodo pasado la excitación inicial, esa parte del recorrido donde ya has partido de la meta y dónde todavía queda mucho recorrido para ver las primeras metas volantes que certifiquen que has tomado la decisión correcta.

Por eso, es importante tener bioretroalimentación (o feedback que se dice ahora), para poder ir midiendo tus avances, porque de lo contrario, el arrancar puede ser algo muy solitario y que lleve a más de uno a desistir. Gracias a dios, la tecnología nos pone a tiro de click a todos nuestros contactos y amigos para pedirles opinión, ayuda y sugerencia, y quizás con suerte y con poco de ayuda de mis amigos, tal como decía Joe Cocker (la versión de los Beatles es muy ñoña), conseguirlo.

flattr this!

Olimpiada Matemática de Baleares 2013 – Problema 4

Gaussianos - Lun, 02/04/2013 - 04:00

Hoy os traigo el cuarto problema propuesto en la Olimpiada Matemática de Baleares 2013, primer de la segunda sesión, que se celebró el 11 de enero pasado. Vamos con él:

Se escriben alrededor de un círculo siete números enteros. Demostrar que si cada uno de ellos es igual a la media aritmética de los dos que tiene a su lado entonces la suma de los siete números es múltiplo de 7.

Que se dé bien.

Contador incremental con un display 7 segmentos y Arduino

Ernesto-ecrespo - Lun, 02/04/2013 - 02:30
Luego de explicar como se enciende y apaga de manera constante un LED en un Arduino, ahora se mostrará como conectar un Display 7 segmento de cátodo común.

El display incrementará de 1 a 9, luego pasa a valor 0 y vuelve a contar desde 1 a 9, a intervalos de 1 segundo.

Requerimientos:

  1. Arduino Uno.
  2. Protoboard.
  3. Cables.
  4. Display 7 segmentos de cátodo común.
  5. Resistencia de 220 Ohms.

En la siguiente figura se muestra la identificación de los LEDs del display 7 segmentos:


El esquema de conexión es el siguiente:


Conexiones:

  • Pin a - Digital 7
  • Pin b - Digital 8
  • Pin c - Digital 9
  • Pin d - Digital 10
  • Pin e - Digital 11
  • Pin f - Digital 12
  • Pin g - Digital 13


La siguiente figura se muestra el montaje del circuito:
El código del programa se muestra a continuación:


int pausa=1000; // define la pausa entre cada digito #Se definen los Pines de salida al display 7 segmentos  void setup() {   pinMode(7, OUTPUT);     pinMode(8, OUTPUT);   pinMode(9, OUTPUT);   pinMode(10, OUTPUT);   pinMode(11, OUTPUT);   pinMode(12, OUTPUT);   pinMode(13, OUTPUT); } //Se define la funcion display que recibe 7 //variables y se asignan a cada una de sus salidas void display (int a, int b, int c, int d, int e, int f, int g) // Funcion del display {   digitalWrite (7,a);      digitalWrite (8,b);      digitalWrite (9,c);   digitalWrite (10,d);   digitalWrite (11,e);   digitalWrite (12,f);   digitalWrite (13,g); } //Funcion principal que genera un lazo continuo void loop()  // Dependiendo de cada dígito, se envía a la función display // los estados (0 y 1) a cada uno de los segmentos {   display (1,1,1,1,1,1,0); //escribe 0   delay(pausa);   display (0,1,1,0,0,0,0); //escribe 1   delay(pausa);   display (1,1,0,1,1,0,1); //escribe 2   delay(pausa);   display (1,1,1,1,0,0,1); //escribe 3   delay(pausa);   display (0,1,1,0,0,1,1); //escribe 4   delay(pausa);   display (1,0,1,1,0,1,1); //escribe 5   delay(pausa);   display (1,0,1,1,1,1,1); //escribe 6   delay(pausa);   display (1,1,1,0,0,0,0); //escribe 7   delay(pausa);   display (1,1,1,1,1,1,1); //escribe 8   delay(pausa);   display (1,1,1,0,0,1,1); //escribe 9   delay(pausa); }
En la siguiente figura se muestra la conexión:


Para terminar, se muestra un vídeo con el contador funcionando:

XI ANIVERSARIO ÁREA DE INGENIERIA DE SISTEMAS UNERG

E-ais - Dom, 02/03/2013 - 19:30


En el marco del 11 aniversario de el Area de Ingeniería de Sistemas de la Universidad Romulo Gallegos tenemos preparado lo siguiente:
En el marco del 11 aniversario de el Area de Ingeniería de Sistemas de la Universidad Romulo Gallegos tenemos preparado lo siguiente:

MARTES 05/02/2013
7:00 am Caminata
Salida desde el La Villa Olímpica
Llegada: Área de Ingeniería de Sistemas

10:00 Encuentros Deportivos
Lugar: Área de Ingeniería de Sistemas

MIÉRCOLES 06/02/2013
8:00  Misa de Acción de Gracia
 Lugar: Área de Ingeniería de Sistemas

9:00   Foro de Estadística
Lugar:  Área de Ingeniería de Sistemas

2:00 compartir con la comunidad.
 Lugar: Ancianato Abuelos de la Patria
           Comunidad San Juan de Los Morros
5:00 Programa Especial de Radio
Lugar: UNERG 92.7 fm  @UNERGfm en el programa de @tecnoaldia927FM  www.unerg927fm.com

JUEVES 07/02/2013
8:00 am cursos Cortos de Programación
Lugar: Laboratorios del Área de Ingeniería de Sistemas
2:30 p.m. Cursos cortos de Programación
Lugar: Laboratorios del Área de Ingeniería de Sistemas

Viernes 08/02/2013
9:00  Obra de Teatro: En Pro de los valores Humanos.
Lugar: Estacionamiento del Área de Ingeniería de sistemas
 y otras actividades mas.....


AUTORIDADES

DR. RAMÓN ANTONIO GALINDO
RECTOR

DRA. MARIA ARISELA MEDINA
VICERECTORA  ACADÉMICA

DR. CIRO PÉREZ
VICERECTOR  ADMINISTRATIVO

DRA. SUSANA PACHECO
SECRETARIA

DRA. JENNY PADILLA
DECANO  DEL AREA DE INGENIERIA DE SISTEMAS

COMITÉ CENTRAL DE ORGANIZACION
Centro de Estudiantes AIS
Profesores del Área






Editando archivos .po con vim

E1th0r - Dom, 02/03/2013 - 15:47

Los archivos permiten la traducción de un software de una bastante simple.

La edición de estos archivos puede hacerse con cualquier editor de texto sin embargo, existen algunos especializados tales como poedit y otros; sin embargo, para aprovechar la potencia de un editor de texto de consola, nosotros utilizamos vim con un plugon de nombre po.vim [1].

Este plugin es fácil de instalar (basta con descargarlo y ubicarlo en la carpeta  ~/.vim/plugins/ ) y ya puede comenzar a utilizarse.

Algunos comandos útiles son:

* Ir a la siguiente cadena sin traducir \m

* Ir a la cadena anterior sin traducir \p

Espero que les sea útil.

 

[1] http://vim.sourceforge.net/scripts/script.php?script_id=695

(Vídeo) Explicando con música la aritmética modular

Gaussianos - Dom, 02/03/2013 - 11:46

La aritmética modular es una parte básica y elemental de la teoría de números que en principio no es fácil de comprender para los no iniciados. Por ello cualquier forma de facilitar la comprensión de este tema es bienvenida, y si es algo tan llamativo como una canción mucho mejor. Aquí tenéis 1+1=11:

Aunque va apareciendo en la parte superior derecha del vídeo, aquí os dejo la letra de la canción:

1 + 1 is 11
1 + 1 is 11 mod 3
but what the heck is mod 3?

There are three options when you divide by 3
Only 3 remainders that we can see

Just 3 groups for every integer
11 is 2. This could not be stranger

Unless you know modular math

1 + 1 is 11
1 + 1 is 11 mod 9
but what the heck is mod 9?

In modular math
The numbers wrap around
There are 9 numbers mod 9 to be found
2 and 11 mod 9 are congruent
they are in the same set. See — you can do it!

This is just modular math

1 + 1 is 11
1 + 1 is 11 mod 3
What the heck is mod 3?

We use modular math
When we use a clock
10 + 5 = 3. This should be no shock
Mod 12 is for months and hours
It’s not hard, you need no powers

But you gotta know modular math
And now you know modular math

Podéis decargarla en mp3 en este enlace. Podéis poner precio 0 para descargarla de forma gratuita o realizar la donación que queráis al autor.

Vía este tuit de @grey_matter.

Graficar consumo de memoria con memory_profiler

Ernesto-ecrespo - Dom, 02/03/2013 - 02:30
En el artículo anterior se explica como usar memory_profiler para evaluar el consumo de memoria de un programa Python, a continuación se explicará como graficar ese consumo utilizando matplotlib.

Este artículo se basa en el artículo Memory plots with memory_profiler.

Se hará una pequeña modificación al programa que cálcula la matriz inversa:


#!/usr/bin/env python # -*- coding: utf-8 -*- #Importar de memory_profiler a memory_usage from memory_profiler import memory_usage #Se importa numpy como np import numpy as np #Se crea la funcion que calcula la matriz inversa def Inversa(n):     return np.matrix(np.random.rand(n,n)).I     #rando = np.random.rand(n, n)     #a = np.matrix(rando)     #inversa = a.I          return inversa if __name__ == '__main__':     #Se define una lista de  tamaños de la matriz     tamagno = 2 ** np.arange(0, 12)     #Se calcula la memoria usada de la funcion Inversa pasando el ultimo tamaño de la lista generada     mem_usage = memory_usage((Inversa,(tamagno[-1],)),interval=.01)     #Se imprime la lista que contiene la información de la memoria usada     print mem_usage     #Se importa pylab     import pylab as pl     #Se genera la gráfica     pl.plot(np.arange(len(mem_usage)) * .01, mem_usage, label='Matriz Inversa')     pl.xlabel('Tiempo (seg)')     pl.ylabel('Consumo de memoria (MB)')     pl.show()
El resultado de la ejecución es el siguiente:
[11.39453125, 13.39453125, 15.45703125, 17.51953125, 19.83984375, 21.90234375, 23.96484375, 26.02734375, 28.34765625, 30.41015625, 32.73046875, 34.79296875, 36.85546875, 38.91796875, 41.23828125, 43.30078125, 53.80859375, 64.37890625, 74.94921875, 48.70703125, 60.30859375, 71.91015625, 77.8046875, 81.15625, 85.0234375, 88.890625, 92.5, 96.109375, 99.71875, 103.5859375, 107.453125, 111.04296875, 114.39453125, 118.00390625, 121.61328125, 125.22265625, 128.83203125, 132.44140625, 134.76171875, 138.11328125, 139.6328125, 139.6328125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.5703125, 140.4609375, 140.4609375, 140.4609375, 139.953125, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.20703125, 140.20703125, 139.953125, 140.20703125, 140.20703125, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.4609375, 140.6640625, 140.6640625, 140.6640625, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.625, 140.625, 140.625, 140.625, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.05078125, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.55859375, 140.359375, 140.61328125, 140.61328125, 140.61328125, 140.61328125, 140.61328125, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.7265625, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 140.75, 141.26171875, 141.26171875, 141.26171875, 141.26171875, 140.75, 140.75, 141.26171875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 144.8671875, 142.80859375, 140.75, 140.75, 140.75, 141.26171875, 141.26171875, 141.26171875, 141.26171875, 140.8359375, 149.08203125, 149.08203125, 153.4609375, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 157.328125, 149.08203125, 149.08203125, 140.8359375, 140.8359375, 141.34765625, 141.34765625, 141.34765625, 141.34765625, 141.34765625, 142.89453125, 142.89453125, 143.6640625, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 144.953125, 142.89453125, 142.89453125, 142.89453125, 142.89453125, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 140.8359375, 141.34375, 141.34375, 141.34375, 140.83984375, 140.83984375, 140.83984375, 142.8984375, 143.41015625, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 144.95703125, 142.8984375, 142.8984375, 140.84375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 144.96484375, 148.83203125, 156.3046875, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 157.078125, 149.08984375, 149.08984375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 142.90234375, 142.90234375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 144.9609375, 142.90234375, 142.90234375, 140.84375, 140.84375, 140.84375, 141.35546875, 141.35546875, 141.35546875, 141.35546875, 140.84375, 140.84375, 141.765625, 150.015625, 160.84375, 161.35546875, 76.8515625, 12.84375]

La gráfica que se genera es la siguiente:



Se puede notar en la gráfica que se incrementa el consumo de memoria rápidamente en menos de 1 segundo a aproximadamente 140MB, luego viene una estabilización con pequeños aumentos y disminuciones al valor constante hasta que se genera una caída a 12MB a los 5 segundos de ejecución.

Si desea ver más ejemplos de como graficar el consumo de memoria puede revisar el artículo el cual se baso este.

Monitorear el uso de memoria de un programa Python con memory_profiler

Ernesto-ecrespo - Sáb, 02/02/2013 - 21:21
Memory_profiler es un módulo Python desarrollado para monitorear el consumo de memoria de un programa Python línea por línea de cada instrucción del programa.

Para instalar el módulo se usa easy_install o pip:
easy_install -U memory_profiler

pip install -U memory_profiler

Se muestra el código del artículo sobre profiling publicado antes:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Se importa numpy como np
import numpy as np

#Se define el uso del decorador profile. En la funcion que genera matrices inversas.
@profile
def Inversa(n):
    a = np.matrix(np.random.rand(n, n))
    return a.I

if __name__ == '__main__':
    #Se define una lista de  tamaños de la matriz
    tamagno = 2 ** np.arange(0, 12)
    #Se recorre la lista  y se invierte cada matriz con la
    #funcion Inversa
    for n in tamagno:
        Inversa(n)

Para iniciar el monitoreo se ejecuta el siguiente comando:
python -m memory_profiler matrizinversa.py

El resultado se muestra a continuación:
Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     11.89 MB      0.00 MB   def Inversa(n):
    10     11.91 MB      0.02 MB       a = np.matrix(np.random.rand(n, n))
    11     12.10 MB      0.19 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.11 MB      0.00 MB   def Inversa(n):
    10     12.11 MB      0.00 MB       a = np.matrix(np.random.rand(n, n))
    11     12.16 MB      0.05 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.16 MB      0.00 MB   def Inversa(n):
    10     12.16 MB      0.00 MB       a = np.matrix(np.random.rand(n, n))
    11     12.16 MB      0.00 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.16 MB      0.00 MB   def Inversa(n):
    10     12.16 MB      0.00 MB       a = np.matrix(np.random.rand(n, n))
    11     12.16 MB      0.00 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.16 MB      0.00 MB   def Inversa(n):
    10     12.16 MB      0.00 MB       a = np.matrix(np.random.rand(n, n))
    11     12.16 MB      0.00 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.16 MB      0.00 MB   def Inversa(n):
    10     12.16 MB      0.00 MB       a = np.matrix(np.random.rand(n, n))
    11     12.17 MB      0.00 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.17 MB      0.00 MB   def Inversa(n):
    10     12.22 MB      0.05 MB       a = np.matrix(np.random.rand(n, n))
    11     12.35 MB      0.13 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.35 MB      0.00 MB   def Inversa(n):
    10     12.45 MB      0.09 MB       a = np.matrix(np.random.rand(n, n))
    11     12.95 MB      0.50 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.45 MB      0.00 MB   def Inversa(n):
    10     12.95 MB      0.50 MB       a = np.matrix(np.random.rand(n, n))
    11     13.54 MB      0.59 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.53 MB      0.00 MB   def Inversa(n):
    10     14.54 MB      2.00 MB       a = np.matrix(np.random.rand(n, n))
    11     16.79 MB      2.26 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.79 MB      0.00 MB   def Inversa(n):
    10     20.79 MB      8.00 MB       a = np.matrix(np.random.rand(n, n))
    11     28.88 MB      8.09 MB       return a.I

Filename: matrizinversa.py
Line #    Mem usage    Increment   Line Contents
================================================
     8                             @profile
     9     12.87 MB      0.00 MB   def Inversa(n):
    10     44.87 MB     32.00 MB       a = np.matrix(np.random.rand(n, n))
    11     77.38 MB     32.50 MB       return a.I


Se muestra los ciclos de ejecución de la generación de la matriz inversa del archivo matrizinversa.py, se representa en columna la información de la línea que se está ejecutando del programa, la cantidad de memoria utilizada, el incremento de memoria y el código que se está ejecutando.

Paquete de pegatinas de Fedora

Fedora Nicaragua - Sáb, 02/02/2013 - 20:14

Les comparto este paquete pegatinas, adhesivos y stickers de Fedora:


Este paquete de adhesivos surgio de la idea de incluir algun elemento promosional de Fedora junto con los discos enviados por la comunidad de usuairos de Fedora mediante el programa Freemedia.

Espero le sea de utilidad a alquien.

Creación de grafos con networkx. Parte 2.

Ernesto-ecrespo - Sáb, 02/02/2013 - 18:04
El primer artículo sobre networkx mostraba como crear los nodos y los enlaces de las redes (relación de Estados y Ciudades de Venezuela).

En este artículo se basa en un artículo del sitio "The Glowing Python", este artículo se llama Primeros pasos con Networkx (en inglés). Este artículo usa como ejemplo las relaciones de los personajes de la novela Los Miserables. Usa un archivo con extensión gml que maneja las relaciones de los personajes, el archivo lo pueden descargar de aquí.

El archivo contiene la definición de los nodos dentro de un grafo, la información de cada nodo se coloca entre corchetes como se muestra a continuación:

graph [   node   [     id 0     label "Myriel"   ]   node   [     id 1     label "Napoleon"   ]   node   [     id 2     label "MlleBaptistine"   ]   node   [     id 3     label "MmeMagloire"   ] ... ]
Se identifica el nodo y se coloca una etiqueta, en este caso la etiqueta es sobre un personaje de la novela ya mencionada antes.

El código de la generación del grafo se muestra a continuación:

#!/usr/bin/env python #Se importa networkx como nx import networkx as nx #Se importa la libreria pyplot de matplotlib como plt import matplotlib.pyplot as plt # leer el grafo desde archivo con formato gml G = nx.read_gml('losmiserables.gml',relabel=True) # dibujar la red completa. plt.figure(1) nx.draw_spring(G,node_size=0,edge_color='b',alpha=.2,font_size=10) plt.show() A continuación se muestra el grafo:

El grafo en sí no muestra información útil que se diga, para entender más la información del grafo se creará un histograma del número de conexiones por nodo (es la continuación del código anterior):


#Histograma #Se crea la figura 2 plt.figure(2) #se crea la instancia degree del grafo d = nx.degree(G) #Se crea el histograma con los valore del grafo. plt.hist(d.values(),bins=15) #Se muestra la grafica. plt.show() La siguiente figura muestra el histograma:
Se nota en el histograma que sólo pocos personajes tienen más de 10 conexiones.
A continuación se muestra el código de un grafo de sólo esos personajes con más de 10 conexiones:



def trim_nodes(G,d):     """ retorna una copia de G sin       los nodos de menos de d conexiones"""     #Se crea la copia de G     Gt = G.copy()     #Se define la instancia de degree con la copia de G     dn = nx.degree(Gt)     #Se recorre los nodos y se remueve los que tengan menos de d conexiones     for n in Gt.nodes():         if dn[n] <= d:             Gt.remove_node(n)     #Se retorna el nuevo G     return Gt # dibujar la red solo con nodos de mas de 10 #conexiones Gt = trim_nodes(G,10) #Se crea la figura 3 plt.figure(3) #Se dibuja el grafo nx.draw(Gt,node_size=0,node_color='w',edge_color='b',alpha=.2) #Se muestra en pantalla el grafo  plt.show() A continuación se muestra el grafo con los personajes más relevantes de la novela Los Miserables:
Enhanced by Zemanta

Desafíos GaussianosyGuijarro – Desafío nº9: “Una sucesión muy particular” – Solución y ganador

Gaussianos - Sáb, 02/02/2013 - 13:00

Unos días después de terminar el plazo para el envío de respuestas os traigo la solución del Desafíos GaussianosyGuijarro – Desafío nº 9: Una sucesión muy particular y, por tanto, del ganador de El número en la Naturaleza. Matemáticas y comprensión de la realidad observable, 1.

Se han recibido 45 respuestas, de las cuales 16 eran correctas. A continuación recordamos el enunciado del problema y dejamos la solución de Antonio Rojas, que fue quien nos lo propuso:

Definimos la siguiente sucesión de números enteros, a(n), de forma recurrente:

\begin{matrix} a(1)=1 \\ \\ a(n)=\begin{cases} -a(n/2), & \mbox{ si } n \mbox{ es par} \\ 1+a(n-1), & \mbox{ si } n \mbox{ es impar} \end{cases} \end{matrix}

Este noveno desafío consiste en responder correctamente a estas dos cuestiones:

1) Demostrar que para todo número entero k existen infinitos números enteros positivos n tales que a(n)=k.

2) Hallar el menor entero positivo n tal que a(n)=1000.

La solución propuesta por Antonio es la siguiente:

La definición por recurrencia de la sucesión sugiere que se intente demostrar por inducción y, de hecho, muchas de las respuestas obtenidas intentan resolverlo así­. Sin embargo, en este caso es mucho más directo razonar en base 2. Sabemos que todo número entero positivo n puede escribirse de manera única en base 2, es decir, en la forma

n=c_m \cdot 2^m+c_{m-1} \cdot 2^{m-1}+ \cdots+c_2 \cdot 2^2+c_1 \cdot 2^1+c_0

donde m\geq 0, c_m=1 y c_i=0 ó 1 para todo i=0,\ldots,m-1. Teniendo en cuenta que a(n+c)=a(n)+c si n es par y c=0 ó 1 (lo cual es evidente si c=0 y por definición de la sucesión a(n) si c=1) tenemos que

\begin{matrix} a(n)=a(c_m\cdot 2^m+c_{m-1}\cdot 2^{m-1}+\cdots+c_2\cdot 2^2+c_1\cdot 2^1+c_0)= \\ =a(c_m\cdot 2^m+c_{m-1}\cdot 2^{m-1}+\cdots+c_2\cdot 2^2+c_1\cdot 2^1)+c_0= \\ =a(2(c_m\cdot 2^{m-1}+c_{m-1}\cdot 2^{m-2}+\cdots+c_2\cdot 2+c_1))+c_0= \\ =-a(c_m\cdot 2^{m-1}+c_{m-1}\cdot 2^{m-2}+\cdots+c_2\cdot 2+c_1)+c_0= \\ =-a(c_m\cdot 2^{m-1}+c_{m-1}\cdot 2^{m-2}+\cdots+c_2\cdot 2)-c_1+c_0= \\ =a(c_m\cdot 2^{m-2}+c_{m-1}\cdot 2^{m-3}+\cdots+c_2)-c_1+c_0= \\ =\cdots=c_0-c_1+c_2-c_3+\cdots+(-1)^m\cdot c_m, \end{matrix}

es decir, a(n) no es más que la suma alternada de las cifras de n en base 2 o, dicho de otra forma, el número de unos en posición impar menos el número de unos en posición par (empezando a contar desde la última cifra).

A partir de aquí­ es fácil responder a las preguntas planteadas:

  • para cada entero k existen infinitos n tales que a(n)=k: basta tomar como n cualquier número que en base 2 tenga la forma 1010101 \ldots 101 (con k unos) seguido de un número par de ceros si k es positivo, la forma 1010101 \ldots 101 (con -k unos) seguido de un número impar de ceros si k es negativo, o 11 seguido de un número par de ceros si k=0.
  • También se deduce que el menor n tal que a(n)=1000 debe tener, como mínimo, 1999 cifras en base 2 (puesto que debe tener al menos 1000 unos en posición impar), y el único con 1999 cifras que lo cumple es el que no tiene ningún uno en posición par, es decir, el número

    1+2^2+2^4+2^6+\cdots+2^{1998}=1+4+4^2+4^3+\cdots+4^{999}=(4^{1000}-1)/3

    que tiene 602 cifras en base 10.

Comentarios sobre las soluciones

Básicamente se han recibido dos tipos de soluciones:

  • Por un lado las que usan un argumento parecido al anterior, posiblemente con alguna variación (como usar base 4 en vez de base 2). De entre ellas destacamos las de José Antonio Prado Bassas (@eliatron), Massimo Milesi, José Antonio Rama López y Romeo.
  • Por otra parte están las soluciones por inducción: algunas de éstas son incompletas, pues aunque se llega al resultado correcto para el menor n tal que a(n)=1000, no se demuestra que ése es en efecto el menor. De entre las correctas destacamos las de Felix Gimeno y Enric Tamarit.
  • Y para finalizar destacar especialmente la solución de Miguel Capitán Ruiz quien, además de resolver el problema de las dos formas, con tablas numéricas incluidas, nos ofrece un entretenido relato detectivesco.

Y el ganador de este desafío ha sido, curiosamente, el propio Miguel Capitán Ruiz (los sorteos son así de caprichosos), que pronto recibirá El número en la Naturaleza. Matemáticas y comprensión de la realidad observable, 1. Enhorabuena.

Muchas gracias a todos por participar.

En pocos días habrá nuevo desafío, el décimo. Estad atentos.

Páginas

Subscribe to Fedora-es agregador