jueves, 28 de marzo de 2013

Cisco IOS - Modos de trabajo

Los dispositivos de Cisco que trabajan con el sistema IOS, pueden estar en distintos modos de trabajo, en función del modo en el que se encuentre el dispositivo se nos permitirán ciertos comandos.
Estos modos son:

Modo user EXEC: Este es el modo en el que se encuentra el dispositivo por defecto, en este modo solo se permiten ciertos comandos para realizar pruebas de conectividad y pedir cierta información al dispositivo, como show o ping. En ningún momento se permite ver o modificar la configuracion del dispositivo. El promt en este modo es "Router>"

Modo privileged EXEC:  Este modo es el equivalente al root de UNIX, se accede desde el modo user EXEC con el comando enable. Este modo permite la ejecución de todos los comandos de IOS. El promt en este modo es "Router#"

Modo de configuración: Este modo permite configurar el dispositivo. Desde este modo se accede a los modos de configuración más específicos como la configuración de protocolos o de las interfaces. Se accede desde el modo privilegiado con el comando configure o configure terminal. El promt en este modo es "Router(config)#"

Modo ROM Monitor o ROMMON: Un dispositivo entra en este modo cuando no encuentra una imagen del sistema para cargar o se interrumpe la secuencia de arranque del dispositivo, desde este modo se pueden realizar test de diagnostico o iniciar el sistema. El promt en este modo es ">" o "rommon1>" 

domingo, 10 de marzo de 2013

Windows - Deshabilitar Aero

Con la llegada de Windows Vista se incluye uan nueva interfaz, Windows Aero, que se caracteriza por tener transparencias en los bordes de las ventanas (Aero Glass), y una nueva forma de intercambiar ventanas (Windows Flip).

Esta interfaz requiere un trabajo extra por parte del equipo que puede llegar a afectar al rendimiento general y presenta problemas de compatibilidad, aunque cada vez son menos.

Si queremos desactivar Aero debemos dirigirnos al panel de control -> Apariencia y personalización -> Personalización.


Ahora seleccionamos un tema básico para quitar Aero

viernes, 8 de marzo de 2013

Android - Manejando Resources

Cuando programamos para android, debemos tener en cuenta de que hay que separar la parte gŕafica (UI), del código de nuestra futura app.
La parte visual se escribe en XML y el código es Java. La misma distinción que se hace entre CSS y HTML.

Tras crear el proyecto, si nos fijamos en eclipse, vemos que se nos han generado una serie de carpetas. (assets, bin, libs, res, etc)

Aquí nos vamos a centrar en la carpeta res que es donde se almacenan las resources, los elementos que tienen que ver con la parte visual de la app.
Entre estos elementos tenemos las cadenas de texto, los menús, los colores, la disposición de los elementos en la pantalla (layout), etc.

Si consultamos las guías de Android para desarrolladores, los elementos que podemos tener en esta carpeta son:
Animation Resources
Animaciones
Se guardan en res/anim/ y accedemos a ellos desde nuestro código a través de la clase R.anim.
Color State List Resource
Colores
 Se guardan en res/color/ con un valor hexadecimal y accedemos a ellos desde nuestro código a través de la clase R.color.
Drawable Resources
Elementos gráficos.
Se guardan en  res/drawable/ y accedemos a ellos desde nuestro código a través de la clase R.drawable.
Layout Resource
Define la disposición que tendrán los elementos en la pantalla.
Se guardan en res/layout/ y accedemos a ellos desde nuestro código a través de la clase R.layout.
Menu Resource
Menús de nuestra app.
Se guardan en res/menu/ y accedemos a ellos desde nuestro código a través de la clase R.menu.
String Resources
Cadenas de texto, desde las de título de nuestra app hasta el texto que ponemos en un botón, además almacena conjuntos de cadenas de texto y plurales, (Incluye estilos).
Se guardan en res/values/ y accedemos a ellas desde nuestro código a través de las clases R.string, R.array, y R.plurals.
Style Resource
Define el estilo y el formato de los elementos que aparecen en la interfaz.
Se guarda en res/values/ y accedemos a ellos desde nuestro código a través de la clase R.style.
More Resource Types
Define distintos tipos de valores como booleanos, enteros, dimensiones, colores, y arrays.
Se guarda en res/values/ pero se accede a cada uno desde su propia clase (Ej. R.bool, R.integer, R.dimen, etc.).

miércoles, 6 de marzo de 2013

Python - Programas de práctica Nuclear Reactors

Esta es una solución al problema de practica Nuclear Reactors de codechef.com, la solución es correcta pero para los casos grandes se pasa del tiempo.

Enunciado:

There are K nuclear reactor chambers labelled from 0 to K-1. Particles are bombarded onto chamber 0. The particles keep collecting in the chamber 0. However if at any time, there are more than N particles in a chamber, a reaction will cause 1 particle to move to the immediate next chamber(if current chamber is 0, then to chamber number 1), and all the particles in the current chamber will be be destroyed and same continues till no chamber has number of particles greater than N. Given K,N and the total number of particles bombarded (A), find the final distribution of particles in the K chambers. Particles are bombarded one at a time. After one particle is bombarded, the set of reactions, as described, take place. After all reactions are over, the next particle is bombarded. If a particle is going out from the last chamber, it has nowhere to go and is lost.

Enunciado completo

Código:

#!/usr/bin/env python
linea = raw_input()
i=0
c=0
linea = linea.split()
n_centrales = 0
n_centrales = int(linea[2])
max = 0 
max = int(linea[1])
n_bombardeos = 0 
n_bombardeos = int(linea[0])
centrales = [0] * n_centrales
def bombardear( n ):
 if n >= n_centrales:
  return
 else:
  centrales[n] = centrales[n] + 1
  if centrales[n] > max:
   centrales[n] = 0
   bombardear(n+1)
  return
  
while i < n_bombardeos:
 bombardear(0)
 i = i + 1

while c < n_centrales - 1:
 print centrales[c],
 c = c + 1

print centrales[n_centrales - 1], 

Para mejorar el tiempo habría que eliminar la recursividad.

lunes, 4 de marzo de 2013

Software multimedia - XBMC

XBMC es un media center con versiones para múltiples sistemas operativos: Windows, Linux, android, IOS, Mac, etc. Además tiene su propia versión de sistema operativo para PC basada en ubuntu, xbmcbuntu y tres versiones para Raspberry Pi, que son: Raspbmc, Xbian y Openelec

Es un software completamente personalizable a través de varias skins y ampliable con plugins y add-ons

Cuando iniciamos xbmc tenemos esta pantalla, en este menú se nos presenta el tiempo, imágenes, vídeos, películas, música, programas y sistema.

En la parte de películas, podemos hacer que XBMC escanee nuestro PC o la carpeta que queramos de otro equipo de nuestra red en busca de videos, series o películas. Luego buscara información en internet a través de varios portales de cine como Filmaffinity o IMDB y nos creará una biblioteca.


Además es posible reproducir películas que tengamos en DVD

Una sección relacionada con la de Películas es Vídeos, en esta sección podemos reproducir cualquier vídeo o reproducir contenidos de internet descargandolo desde Youtube, Twitch, CNN, etc.
En cuanto a la música e imágenes, XBMC permite como con las películas reproducir contenidos tanto locales como remotos, pero en este caso no crea una biblioteca de música. También es posible reproducir un CD de música.



Con XBMC podemos consultar la predicción del tiempo consultado distintas webs de meteorología


En programas podemos descargar plugins que expanden las funcionalidades de XBMC, yo por ejemplo tengo instalado MCERemote, para poder utilizar un mando multimedia.


En cuanto a los ajustes permiten configurar muchos aspectos del programa, que van desde algo sencillo como el idioma hasta algo más complejo como seleccionar el método que se va a usar para rendeizar un vídeo.


Por último ver que XBMC como es un software media center que va a estar a pantalla completa permite entre apagar o suspender el equipo sin tener que quitar el software


XBMC es un buen software para hacer de media center, que por estar hecho para tantos sistemas operativos distintos hace que tenga una amplia comunidad que crea plugins y add-ons para el programa y puede resolver las dudas o problemas que le surgan a cualquier usuario. Una buena opción para los que tengan un HTPC.

Puntos positivos:
- Biblioteca de películas con información en español.
- Reproducción de contenido remoto fluida.
- Informa de plugins rotos.
- Ajustes muy completos.

Puntos negativos:
- Falta de configuración de vídeo más avanzada.
- Falta de biblioteca de música.
- No todas las fuentes de información sobre el tiempo funcionan correctamente.




sábado, 2 de marzo de 2013

Programación - Reglas para optimizar código en python

Como en anteriores entradas donde mostraba formas más eficientes de hacer operaciones de entrada/salida en C/C++ ahora voy a dar unos consejos parecidos para programar en Python con restricciones de tiempo.

1) Importar lo mínimo y siempre que sea extrictamente necesario:

Resolviendo un problema para una web, me lo rechazaban por no terminar en el tiempo límite, eliminé un import string que necesitaba para una función que necesitaba y mirad la diferencia.

Y eso que esa operación que eliminé solo la ultilizaba una vez para dar formato a la información de entrada, de haberla usado en un bucle por ejemplo la mejora sería mayor.
2) Evitar recursividad
Siempre es más eficiente, tanto en Python como en otros lenguajes hacer algo de forma iterativa que hacerlo con recursividad, el problema anterior tenia recursividad y para entradas muy grandes se quedaba sin tiempo.

3) Trabajar con listas

Intentar trbajar con listas ya que en Python están bastante optimizadas.