miércoles, 26 de junio de 2013

IOS - Temporizador

Los dispositivos de Apple cuentan con una app, llamada reloj, que permite establecer el reloj del sistema, alarmas, cronometrar y hacer uso de un temporizador. Este temporizador puede usarse para detener la música que estemos escuchando.


El temporizador, por defecto, realiza una cuenta atrás. Cuando termina reproduce un tono.


Si seleccionamos la acción a realizar cuando se termina el tiempo podemos ver que aparece la opción Detener reproducción. Seleccionando esta opción se parará la música cuando se acabe el tiempo fijado.


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.

jueves, 28 de febrero de 2013

Linux - Instalar programas

Cuando descargamos un programa para Linux, nos encontramos con varios formatos *.rpm, *.deb, *.tar.... A continuación se describe como instalarlos: 

RPM

Estos ficheros son ejecutables de red hat y fedora, si tenemos uno de estos sistemas o sus derivados utilizamos el comando "rpm", que tiene los siguientes atributos:
-q (Comprueba si el paquete esta instalado o no)
-qa (Muestra una lista con los paquetes instalados)
-i (Instala el paquete)
-e (Desinstala el paquete)
-ivh (Instalar y mostrar el progreso de la instalación)
-Uvh (Instalar y actualizar el paquete)

rpm [Atributos] paquete.rpm

Si tenemos un rpm y estamos en una distro distinta, debian o ubuntu por ejemplo, no podremos instalar directamente un rpm, primero debemos convertirlo a un .deb que es el ejecutable de debian y sus derivados como ubuntu o Knoppix.

Para hacer la conversión necesitamos un programa llamado "alien". Si no lo tenemos instalado ejecutamos el comando sudo apt-get alien
Para ejecutar alien escribimos sudo alien -i paquete.rpm una vez hecho instalamos el .deb resultante.

DEB

Estos ficheros son ejecutables de debian, en distribuciones derivadas de debian como ubuntu estos paquetes pueden instalarse haciendo click sobre ellos, aunque también pueden instalarse haciendo uso del terminal con el comando "dpkg". Este comando al igual que rpm tiene una serie de atributos:

-i (Instalar el paquete)
-l (Muestra una lista con los paquetes instalados)
-r (Desinstalar el paquete)

dkpg [Atributos] paquete.deb

De manera alternativa puede utilizarse el comando "apt-get" la ventaja de usar este último es que resuelve las dependencias, es decir, un paquete que para ejecutarse necesita de otros paquetes que podemos tener instalados o no. El comando dpkg revisa las dependencias pero no descarga los paquetes que se necesiten, se tendrían que descargar de forma manual, con apt-get este paso es automático.

Los atributos de apt-get son:

install (Instalar paquete)
remove (Desinstalar el paquete)
purge (Desinstalar el paquete y elimina sus ficheros de configuración)
autoremove (Desinstalar paquetes que no se usan)
update (Actualizar un paquete)
upgrade (Actualizar el sistema operativo)
check (Comprobar dependencias)

[sudo] apt-get [Atrubutos] paquete.deb

(Para este comando el uso de sudo es obligatorio)

TAR

Con estos ficheros no podemos hablar de instalar nada, ya que los tar son ficheros comprimidos, como un zip o un rar. Además su contenido puede estar o no compilado, si ya lo está, no es necesario seguir ya que el programa esta listo para ser ejecutado. Si no lo viene compilado seguimos los siguientes pasos

Como es un fichero comprimido, lo primero es sacar los ficheros que tiene dentro, para ello seguimos las instrucciones que escribí hace unos días

Antes de seguir comprobar que el programa no este

Una vez descomprimido nos vamos a la carpeta configure con el comando cd.
Luego ejecutamos make y a continuación sudo make install.

Una vez hecho esto ya tenemos el programa compilado




sábado, 23 de febrero de 2013

Linux - Comprimir y descomprimir archivos y ficheros

Para comprimir y descomprimir archivos en linux usando terminal necesitamos el comando "tar".
Este comando tiene los siguientes atributos:
-c (Crear fichero comprimido)
-v (Mostrar el proceso)
-f (El nombre del fichero a tomar se toma de la cadena de texto que sigue a los atributos)
-x (Descomprimir)
-t (Mostrar el contenido de un fichero comprimido)
-z (Fichero *.tar.gz)
-j (Fichero *.tar.bz2)
-r (Agregar fichero o directorio a un fichero comprimido existente)

Ejemplos:

Crear fichero comprimido:

tar -cvf ejemplo.tar /home

Descomprimir un fichero:

tar -xvf ejemplo.tar

Si es un tar.bz2: tar -jxvf ejemplo.tar.bz2
Si es un tar.gz tar -zxvf ejemplo.tar.gz

Agregar un fichero a un archivo comprimido existente

tar -rvf ejemplo.tar fichero


domingo, 10 de febrero de 2013

Video - Arreglar alimentación de papel en impresoras HP PSC series

Si teneis una impresora HP de la serie PSC, aqui os dejo un video oficial de HP donde se explica como corregir ese problema.


martes, 29 de enero de 2013

Tutorial - Búsquedas avanzadas con google

Cuando utilizamos el motor de búsqueda más famoso hoy en día, vemos que aunque nos proporciona la información que pedimos también nos da información que no es demasiado relevante para lo que queremos o que directamente no nos interesa. Esto puede arreglarse si al buscar información tenemos en cuenta unos comandos que el buscador de Google es capaz de reconocer. 

Operadores:

Operador AND: Los resultados se mostrarán en función a 2 palabras clave, se escribe con el operador +. Ej: Palabra1 +Palabra2 (No hay mucha diferencia en cuanto a resultados entre Palabra1 +Palabra2 y Palabra1 Palabra2)

Si buscamos Velázquez +pintura se mostrará información sobre las pinturas de Velázquez, dejando en segundo plano su biografía.

Operador OR: Los resultados se mostrarán en función de palabra1, de palabra2 o de las dos, se escribe con OR o con el operador |. Ej: Palabra1 OR Palabra2.

Si buscamos Velázquez | pintura se mostrará información sobre Velázquez (su biografía, obra, etc), la pintura en general o resultados que incluyen ambos términos como museos con pinturas de Velázquez. 

Operador NOT: Los resultados contendrán la Palabra1 y NO la Palabra2, se escribe con el operador -. Ej: Palabra1 -Palabra2 Si buscamos Velázquez -pintura se mostrará información sobre Velázquez pero sin relación con la pintura. Vemos calles, estaciones de metro y Hoteles llamados Velázquez. 

Operador ~: Los resultados contendrán la Palabra1 y elementos similares a la Palabra2 se escribe con el operador ~ (Para escribirlo pulsar Alt y sin soltarlo teclear el número 126) Ej: Palabra1 ~Palabra2.

Si buscamos Velázquez ~pintura se mostrará información sobre Velázquez y cosas similares a pintura. Vemos información sobre Velázquez como pintor y sus cuadros (Pintor y cuadro son términos relacionados con pintura) Lo aclaro ya que el ejemplo queda raruno.

Operador *: El asterisco es el operador que hace de comodín, este operador añade a la búsqueda un segundo término que en principio es desconocido. Si buscamos Velázques obtenemos a Diego Velázquez, el pintor. Pero si buscamos Velázquez * obtendremos como resultado a parte de Diego Velázquez, otras personas con el mismo apellido.

Otras búsquedas avanzadas: 

Búsquedas en una web: con la palabra clave site: obtendremos resultados de una web en concreto, con site:wikipedia.org Velázquez veremos información de Velázquez unicamente mirando Wikipedia.

Webs relacionadas: con la palabra clave related: obtendremos webs similares a la introducida, con related:wikipedia.org tendremos como resultado otras enciclopedias online. 

Búsquedas con intervalos numéricos: con la palabra clave .. podemos indicar intervalos entre dos números, que pueden ser años, medidas, precios, etc

Si buscamos Velázquez 1650..1660 vemos que el primer resultado resalta la información de uno de sus cuadros más famosos que es Las meninas, pintado en 1656

Definiciones con la palabra clave define: obtendremos la definicion de término.
Por ejemplo define: Pintura

miércoles, 2 de enero de 2013

Linux - Crear accesos directos

Para tener más a mano las aplicaciones que necesitamos el uso de accesos directos es bastante recomendable. En linux, los accesos directos como se los conoce en Windows, se llaman enlaces simbólicos.

Crear un enlace simbólico es bastante sencillo, basta con un simple comando:

ln -s /ruta_del_elemento_a_enlazar /ruta_donde_crear_el_enlace

El elemento puede ser tanto un fichero como una carpeta
 
Por ejemplo si queremos crear un acceso directo a la carpeta de documentos para acceder desde el escritorio

ln -s /home/usuario/Documentos /home/usuario/Escritorio

Y para tener un acceso directo de un fichero en el escritorio

ln -s /home/usuario/Documentos/fichero.txt /home/usuario/Escritorio