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

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.

Aire y luz y tiempo y espacio [C. Bukowski]

Yaderv - Sáb, 02/02/2013 - 04:31

Sabes, yo tenía una familia, un trabajo, algo
siempre estaba
en el medio
pero ahora
he vendido mi casa, he encontrado este
lugar, un estudio amplio, deberías ver el espacio y
la luz
por primera vez en mi vida voy a tener el lugar
y el tiempo
para
crear

no, nene, si vas a crear
vas a crear trabajando
16 horas al día en una mina de carbón
o
vas a crear en una habitación con tres chicos
mientras estás
desocupado,
vas a crear aunque te falte parte de tu mente y de
tu cuerpo.
vas a crear ciego
mutilado
loco.
vas a crear con un gato trepando por tu
espalda mientras
la ciudad entera tiembla, con terremotos, bombardeos,
inundaciones y fuego.
nene, aire y luz y tiempo y espacio
no tienen nada que ver con esto
y no crean nada
excepto quizá una vida más larga para encontrar
nuevas excusas

Charles Bukowski

Mi etapa Lorquiana

Yaderv - Sáb, 02/02/2013 - 04:29

[SOLUCIÓN] "No se ha podido cargar el complemento" (Flash Chrome 24.x) en Linux

Xenode - Sáb, 02/02/2013 - 00:54

Hace rato vi la imagen que está como cabecera de este post en un grupo de facebook que sigo. La imagen la posteó un amigo explicando su problema con Flash Player y Fedora 16 después de una update reciente. Es curioso  porque justo había notado el mismo problema (en Fedora 18) antes de checar su post pero no le presté atención y simplemente me cambié de navegador hasta que leí el post de mi amigo. Ahí les va la solución:

NOTA: Me comentan que pasa lo mismo en Ubuntu 12.10, probablemente estemos ante un problema que afecta a todas las distros.

Para solucionar esto, necesitamos tener Flash Player instalado. ¿Cómo saber si lo tengo instalado? Si tu firefox reproduce videos flash pero chrome no, entonces lo tienes instalado. Nos vamos a: chrome://plugins/ dentro de chrome y desactivamos flash pepper como se muestra a continuación:


Una vez inhabilitado, reiniciamos Chrome y listo! ya nos funcionará el plugin de Flash Player sin problema alguno en nuestro Chrome 24.x dentro de nuestro sistema Linux.

PCLinuxOS KDE y KDE-MiniME 2013.02 disponible para descarga

Espacio Linux - Vie, 02/01/2013 - 23:16
PCLinuxOS KDE y KDE-MiniME 2013.02 se publica como el primer lanzamiento de este año, actualizando KDE a la versión 4.9.5, el kernel 3.2.18, mayor soporte para tarjetas de red inalámbricas, entre otros cambios. PCLinuxOS KDE 2013.02 y su edición para usuarios avanzados KDE-MiniME están disponibles para descargar como el primer lanzamiento de la rama 2013. [...]

Hate/Love con Fedora 18

Fedora Nicaragua - Vie, 02/01/2013 - 18:10

Desde que instalé Fedora 18 (desde el DVD de Instalación) he estado creando esta lista de cosas que voy encontrando. La lista se ha acumulado durante una semana.

  • Proceso de Instalación.
    • Yo seleccioné Idioma Español, Teclado US con teclas muertas. A la hora de entrar a mi usuario el Idioma se respeta, pero tengo Teclados US (Normal) y Español.
    • Yo seleccioné paquetes de ofimática para tener LibreOffice. Al entrar a mi usuario no hay LibreOffice.
    • En Fedora 17 en el disco live se incluía el editor vi, en el disco de instalación se incluía vim. Vim es mucho más poderoso. Ahora solo se incluye vi. Un paso atras? Siempre he pensado que vim y wget deberían estar en todos los discos.
  • Gnome Shell.
    • Al mandar a apagar el computador me pide contraseña de root porque hay otros usuarios conectados. Supongo que algún proceso del sistema queda activo y al apagar desde un usuario común no puede terminar ese proceso. Al menos no sucede todo el tiempo.
    • No hay opción de cerrar sesión o cambiar de usuario. Hay que instalar un paquete (dconf-editor) y hacer la configuración para cada usuario.
    • No tengo ninguna aplicación educativa, pero tengo la categoría de aplicaciones educativas la cual está vacía.
    • El botón para ver las aplicaciones en el menú de favoritos es una característica interesante, pero me preocupa que sucederá si por accidente lo borro de favoritos.
    • El puntero fantasma ha regresado a mi computadora en el día 1 con fedora 18
    • Configuración de impresoras no permite cambiar el nombre de las impresoras. Mi impresora funciona a colores o en escala de grises, no en ambos. Yo hago una copia de la impresora y la configuro en escala de grises. De esa forma a la hora de imprimir es fácil escoger entre ambas configuraciones. Tampoco permite cambiar el tamaño de papel. Toda Centroamérica usa tamaño carta (US- Letter), pero estoy atrapado en formato A4. Hace algún tiempo hubo un esfuerzo conjunto de toda Centro América para reportar este bug, pero aun nada.
    • En la barra de favoritos hay un lanzador de documentos. Ahora muestra documentos recientes y documentos existentes. Hace las búsquedas correctamente. Aún no se pueden visualizar documentos al hacer click en ellos.
    • Quize probar multi-seat con un dock-station y no logro cargar la sesión de usuario. Esto funcionaba plug-and-play en Fedora 17.
    • La barra de notificaciones es más sensible y ahora funciona en cualquier parte del borde inferior de la pantalla. Cuando se activa congela la pantalla. he terminado con mi pantalla bloqueada al mover el mouse accidentalmente varias veces. Por ejemplo inicio a escribir algo, luego me doy cuenta que voy a escribir más y acerco el teclado y con la esquina del teclado muevo el mouse. Supongo que debería tener un espacio de trabajo ergonómico, pero acumulo muchos papeles en mi escritorio.
    • Multi-seat no funciona. Era algo nuevo en Fedora 17. Una estación de trabajo compartida por dos usuarios con un dock de plugable fue migrada a Fedora 18. No funcionó y hubo que regresar a Fedora 17.
  • Administración de Paquetes.
    • Desde Firefox di click para descargar el paquete de Dropbox. La ventana de descarga me ofrece instalar o salvar. Escojo instalar. Me pide autorización de administrador de sistema. Luego no pasa nada, no instala el paquete. Busco procesos y no encuentro nada. Intento de nuevo, pero esta vez salvo el paquete y luego me voy a la línea de comando para instalar con YUM. Luego probé que funciona descargar un rpm y darle doble click desde nautilus.
    • En PackageKit seleccioné un paquete, luego lo deseleccioné, cuando quise seleccionarlo de nuevo, ya no me permitio marcar el check.
    • El sistema avisa de las actualizaciones, uno da click en instalar y se abré la ventana para mostrar las actualizaciones. Uno da aplicar y la máquina pierde estabilidad. Las ventanas dejan de responder incluyendo la ventana de actualizaciones. La única forma de cerrar las ventanas es vía la vista de aplicaciones abiertas con la tecla supra. Nuevas ventanas parecen responder, pero preferí reiniciar para asegurarme de que todo está funcional. Luego a la hora que voy a finalizar mi sesión, me ofrece instalar actualizaciones y reiniciar. Tomo la opción y la maquina se reinicia, hace el proceso de actualización y vuelve a reiniciar. Curioso de que acciones tomó veo la respuesta de yum check-update y hay una gran lista de paquetes pendientes de actualizar. El log de yum dice que no hay nada actualizado.
    • Segundo intento… luego de una actualización manual con YUM. Ofrece descargar los paquetes, los descarga. Dice que hay que reiniciar la maquina para aplicar algunas actualizaciones. No acepto, cierro mis aplicaciones abiertas. El menu de usuario me ofrece reiniciar e instalar. Hace el ciclo. El log de YUM muestra las actualizaciones. El mensaje de reiniciar e instalar actualizaciones, aun sigue ahi. Le doy que lo haga de nuevo. El log de YUM no muestra nada, la opción persiste.
  • Nautilus.
    • No hay barra de menú. Las opciones estan divididas en dos botones cuya lógica se me escapa. Siempre tengo que abrir ambos para encontrar lo que necesito.
    • No hay opción de dividir la pantalla con F3 para hacer “drag and drop” de un directorio a otro. Abrir dos ventanas, hacer que una use la mitad izquierda de la pantalla y la otra ventana use la mitad derecha de la pantalla. Eso brinda una solución cerca a F3. Incluso en la ventana de la derecha uno puede quitar la barra lateral y esta más cerca, pero es bien tedioso hacer todo eso.
    • No hay opción de hacer un enlace simbólico con “drag and drop” y alguna combinación de “Alt”, “Ctrl” y “Shift”. El menú contextual ofrece opción de hacer enlace y lo hace en el mismo directorio. No se cual es la lógica de eso. En fin, lo moví el enlace simbólico “copia-de-directorio” al directorio que necesitaba y le cambie el nombre.
    • No hay función de conectar a un servidor. Hay que llamar una aplicación en línea de comando la cual lanza a una aplicación gráfica. Porqué no esta un lanzador entre las aplicaciones gráficas?
  • Empathy.
    • No hay barra de menú, ni herramientas. Aún hay funciones con combinación de teclas, pero nunca las he usado y me son desconocidas.
    • No hay grupos. El tiempo invertido en hacer que los grupos de todas las cuentas en distintos protocolos fueran iguales para tener orden y poder rápidamente encontrar a un contacto se ha perdido.

Voy a dejar de usar Fedora por todo esto? No, absolutamente no. Pero creo apropiado hablar sobre las cosas que no están bien para que mejoren. A final Fedora se trata de eso, mejora continua. Yo acepté el reto y no desisto.

Add a key for a Debian/Ubuntu repository

Vanished - Vie, 02/01/2013 - 10:01
 Per a realitzar la instalació de un repositori nou i la seua clau en ubuntu/debian afegim les fonts en el sources.list i després hem d'afegir la clau.

 La clau es pot obtenir amb la següent comanda:

gpg --keyserver [name of keyserver] --recv-keys [keyhash]  
Una volta descarregada la clau la exportem i la afegim.
gpg --export --armor CE49EC21 | sudo apt-key add -
Per exemple per a afegir la clau del repositori  seria:

gpg --keyserver subkeys.pgp.net --recv-keys 8842CE5E

Aquesta es la eixida del programa.

gpg: /root/.gnupg: directorio creadogpg: creado un nuevo archivo de configuración `/root/.gnupg/gpg.conf'gpg: AVISO: las opciones en `/root/.gnupg/gpg.conf' no están aún \
activas en esta ejecucióngpg: anillo «/root/.gnupg/secring.gpg» creadogpg: anillo «/root/.gnupg/pubring.gpg» creadogpg: solicitando clave 8842CE5E de hkp servidor subkeys.pgp.netgpg: /root/.gnupg/trustdb.gpg: se ha creado base de datos de confianzagpg: clave 8842CE5E: clave pública "Launchpad PPA for Bitcoin" importadagpg: Cantidad total procesada: 1gpg:               importadas: 1  (RSA: 1)
Despres afegirem la clau amb:

gpg --export --armor  8842CE5E | sudo apt-key add -

Si tot funciona correctament rebrem un OK per part del programa.

Páginas

Subscribe to Fedora-es agregador