21-enero-2016
admin

Modificar el tamaño de una imagen y añadir una marca de agua en python

Pillow es una variante (o fork) de la popular librería PIL (Python Image Library) que permite procesar con facilidad imágenes con Python 2.x/3.x.

Permite consultar información básica de una imagen como su tamaño, el formato que tiene, el tipo de imagen (bits/pixel, BN/color, etc.), es posible cambiar su tamaño, recortar un área, girar, aplicar filtros y efectos, convertir el tipo de imagen y su formato, etc.

Para instalar la librería basta con ejecutar el comando.

 pip install Pillow

Un ejemplo de uso puede ser:

import PIL
from PIL import Image

img = Image.open("C:\\foto.jpg")
img = img.resize((500, 500), Image.ANTIALIAS)

imgAgua= Image.open("C:\\agua.jpg")
img.paste(imgAgua, (25, 25))

img.save("C:\\imagenFinal.jpg")

En el ejemplo se abre la imagen foto.jpg para redimensionarla a un ancho y alto de 500px.
Además, se le añade encima una imagen agua.jpg en las coordenadas 25,25 a modo de marca de agua o firma.

Documentación: Link1, Link2

15-enero-2016
admin

Máquinas virtuales de Bitmani para desarrollo web

Bitnami es una biblioteca de aplicaciones de servidor populares y entornos de desarrollo que se pueden instalar con un solo clic. Es tan sencillo como descargarse una máquina virtual ya preparada para VMware o Virtual Box con los servidores que deseemos. Además, luego le puedes ir añadiendo módulos que vayas necesitando.

A continuación se muestra una guía de comandos rápida de uso para montar un servidor Tomcat con java 1.7 y nodejs.

Arrancar y parar Tomcat
-----------------------
	Todos los servicios se arrancan y paran de la siguiente forma:
		sudo /opt/bitnami/ctlscript.sh status
		sudo /opt/bitnami/ctlscript.sh start tomcat
		sudo /opt/bitnami/ctlscript.sh stop tomcat
		sudo /opt/bitnami/ctlscript.sh restart tomcat

Cambiar el teclado inglés
-------------------------
	Por defecto la máquina virtual viene configurada con teclado en inglés. 
	Para cambiarlo sería:
		sudo dpkg-reconfigure keyboard-configuration

Activar SSH
-----------
	Por defecto el servicio ssh viene desactivado. Se puede activar así:
		sudo mv /etc/init/ssh.conf.back /etc/init/ssh.conf
		sudo start ssh

Configuración de red en VMware
------------------------------
	Tarjetas de red con el VMware Bridge Protocol desactivado.
	Tarjetas de red con ip y dns automático.
	Network Adapter de la máquina virtual en modo brighed.
	
Configurar la red manualmente.
------------------------------
    Hay que editar el archivo interfaces, por ejemplo así:

	1- Editamos la interface de la tarjeta de red. En este caso la eth0 
		vi /etc/network/interfaces 
		
		Dentro del archivo debes buscar:
		auto eth0
		iface eth0 inet dhcp
		
		y sustituirlo por lo que corresponda en cada caso:

		auto eth0
		iface eth0 inet static
		address 192.168.1.40
		netmask 255.255.255.0
		gateway 192.168.1.1
		network 192.168.1.0
		broadcast 192.168.1.255
	
    2- Ahora editamos los DNS:
		vi /etc/resolv.conf
		
		nameserver = 8.8.8.8
		nameserver = 8.8.4.4 
	
	3- Por ultimo reiniciamos el servicio de red:
		/etc/init.d/networking restart 
		
Cambiar la jdk
--------------
	Descargar la deseada, en este caso queremos pasar de la 1.8 que nos traia 
	la máquina a la 1.7 así que descargamos al 1.7 de aquí
		http://www.oracle.com/technetwork/es/java/javase/downloads/jre7-downloads-1880261.html
		
	Lo más rápido es reemplazar el directorio /opt/bitnami/java por el nuevo. 
	Se puede hacer por consola tal que así:
		sudo mv /opt/bitnami/java /opt/bitnami/java8
		sudo mv /tmp/java /opt/bitnami/java
		sudo chown -R root /opt/bitnami/java	  (cambiar el usuario)
		sudo chown -R :root /opt/bitnami/java	(Cambiar el grupo)
		sudo chmod -R 777 /opt/bitnami/java
	
Añadir un módulo nuevo (Ej: nodejs)
-----------------------------------
	Descargarse de la página el *.run 
		https://bitnami.com/stack/nodejs/installer#linux
	Se puede utilizar para ello el comando wget si se quiere.
		wget https://bitnami.com/..................../bitnami-nodejs-5.4.0-0-linux.run
	
	Darle permisos:
		chmod 755 bitnami-nodejs-5.4.0-0-linux.run
		
	Ejecutarlo y seguir los pasos de instalación
		sudo /bitnami-nodejs-5.4.0-0-linux.run

Apagar la máquina virtual
-------------------------
	sudo poweroff


DOC:
https://wiki.bitnami.com/Virtual_Appliances_Quick_Start_Guide


https://bitnami.com/stack/tomcat/virtual-machine

10-enero-2016
admin

Como utilizar el Osmdroid Tile Packager

Se puede utilizar el Tile Packager para descargar las tiles que luego se utilizarán en las aplicaciones android. De tal forma que una aplicación que utilice Osmdroid funcione offline (sin conexión a internet).

Modo de ejecución:

set classpath=osmdroid-android-3.0.3.jar;osmdroid-packager-3.0.3.jar;
              slf4j-android-1.5.8.jar;sqlitejdbc-v056.jar

java org.andnav2.osm.mtp.OSMMapTilePackager 
    -u http://tile.openstreetmap.org/%d/%d/%d.png -t Mapnik 
    -d haarlem.zip -zmax 18 -n 52.4244 -s 52.3388 -e 4.6746 -w 4.5949

-u http://tile.openstreetmap.org/%d/%d/%d.png Patrón para obtener los tiles.
-t Mapnik Directorio temporal para la descarga. Debe ser el nombre del renderer si pretende usar el zip directamente en osmdroid.
-d haarlem.zip Archivo zip creado al finalizar.
-zmax 18 Nivel de zoom máximo para la descarga de tiles.
-n 52.4244 Coordenada norte.
-s 52.3388 Coordenada sur.
-e 4.6746 Coordenada este.
-w 4.5949 Coordenada oeste.

Documentación Oficial

7-enero-2016
admin

Ver ficheros abiertos en Windows 7

Para ver que ficheros hay abiertos y que proceso es el que los tiene abiertos se puede utilizar la aplicación Process Explorer.

Muy interesante cuando estamos desarrollando para comprobar de una forma cómoda que se están cerrando bien todas las conexiones con los ficheros. Lo he probado con Windows 7.

Link

4-enero-2016
admin

Picasso: Librería para manejar imágenes en Android

Picasso es una de las muchas librerías disponibles para la carga de imágenes en tu aplicación android. Con una simple línea de codigo como por ejemplo:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Te evita el trabajo que conlleva realizar la carga de la imagen de manera manual: memoria automática, almacenamiento en cache, transformaciones complejas usando el mínimo de memoria, …

//Ejemplo de transformación:
Picasso.with(context).load(url).resize(50, 50).centerCrop().into(imageView)
//Ejemplo añadiendo una imagen por defecto por si falla la descarga:
Picasso.with(this).load("http://www.host.com/imagen.jpg")
      .error(R.drawable.error)
      .fit().transform(new RoundedTransformation()).into(imageView);
//dependencia Maven
< dependency>
  < groupId>com.squareup.picasso< /groupId>
  < artifactId>picasso< /artifactId>
  < version>2.5.2< /version>
< /dependency>

Documentación Oficial

27-diciembre-2015
admin

Interface Parcelable en Android

Esta interface se usa en Android para poder pasar objetos entre las Activities. A continuación se muestra un ejemplo de uso paso por paso:

Paso 1/ Crear una clase que implemente el interface Parcelable

public class User implements Parcelable{
	private String id;
	private String name;
	private String direccion;
        //La clase Comentario también debería un objeto Parcelable
	private List< Comentario> comments;

        ....getters y setters....
}

Paso 2/ Implementar los métodos describeContents y writeToParcel

	@Override
	public int describeContents() {
		return 0;
	}
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(this.id); 
		dest.writeString(this.name);
		dest.writeString(this.direccion);
		dest.writeTypedList(this.comments);
	}

Paso 3/ Implementar un campo static llamado CREATOR

	public static final Parcelable.Creator< User> CREATOR = 
                                  new Parcelable.Creator< User>() {
	    @Override
	    public User createFromParcel(Parcel source) {
	        return new User(source);
	    }
	 
	    @Override
	    public User[] newArray(int size) {
	        return new User[size];
	    }
	 
	};


	private User(Parcel source) {
                // los campos se deben leer en el mismo orden que se han
                // escrito en writeToParcel
		this.id = source.readString();
		this.name = source.readString();
		this.direccion = source.readString();
		if (comments == null) {
			comments = new LinkedList< Comentario>();
		}
		source.readTypedList(comments, Comentario.CREATOR);
	}

Paso 4/ Para utilizarlo sería

//Al lanzar la nueva actividad se metería el objeto parcelable
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("variableUser", user); //user sería un objeto User
startActivity(intent);
//en el create de la actividad lanzada se extraería
public class OtherActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_second);
 
         User datos = getIntent().getParcelableExtra("variableUser");
     }
     ....
}

Documentación Oficial

25-diciembre-2015
admin

Cómo exprimir DuckDuckGo

DuckDuckGo (DDG) es un motor de búsqueda establecido en Valley Forge, Pensilvania, Estados Unidos, que utiliza la información de sitios de origen público (como Wikipedia) con el objetivo de aumentar los resultados tradicionales y mejorar la relevancia. La filosofía de DuckDuckGo hace hincapié en la privacidad y en no registrar la información del usuario. De esta forma los datos introducidos no son guardados ni utilizados salvo para el objetivo que el usuario quería: realizar una búsqueda.

Atajos
Se pueden utilizar ciertas teclas para moverse entre los resultados de búsqueda rápidamente:
– d: Busca más resultados en el sitio web resaltado.
– CTRL+ENTER: Abre resultado en una nueva ventana.
– ESC: Sale de la caja de búsqueda y va a los resultados.
– h: Posiciona de nuevo el cursor en la caja de búsqueda.
– r: Si existe, va a los relacionados.
– s: Si existe, va al enlace sugerido (errores de ortografía)
– t: Vuelve a la parte superior de la página.

Bangs
Los comandos Bang consisten en un operador formado por el símbolo ! más una palabra o conjunto de letras. Según el comando usado, realizaremos una acción determinada. De esta forma te permiten buscar en en buscadores externos.
Hay unos 7000 bangs disponibles catalogados por categorías. ver aquí.

DuckDuckGo Wikipedia
Guia de Trucos
Guia de trucos 2

20-diciembre-2015
admin

Añadir banner de publicidad Admob en Android

Documentación oficial

A modo de resumen sería:

1 – Incluir en el proyecto la depencia para utilizar Mobile Ads SDK.
‘com.google.android.gms:play-services-ads:8.3.0’

2 – Obtener el Ad Unit ID para tú aplicación se puede colocar en el strings.xml.
ca-app-pub-XXXXXXXXXXXXXXXX/NNNNNNNNNN

3 – Añadir en tu activity layout el AdView que contendrá el banner. (No olvidar incluir el namespace xmlns:ads=”http://schemas.android.com/apk/res-auto”)

    < com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    < /com.google.android.gms.ads.AdView>

4 – Cargar el adview en la activity.

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends ActionBarActivity {

    ...

    protected void onCreate(Bundle savedInstanceState) {
        ....
        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
    ...
}
15-diciembre-2015
admin

Error al intentar conectar a redes inalámbricas, al utilizar el asistente de Windows indica revise el artículo KB87122

Cuando en Windows XP al intentar conectar con redes inalámbricas se muestra el error:

“Windows no puede configurar esta conexión inalámbrica.
Si tiene habilitado otro programa para administrar esta conexión inalámbrica, use dicho software.
Si desea que Windows configure esta conexión inalámbrica, incicie el servicio Configuración inalámbrica rápida (WZC). Para obtener información acerca de cómo iniciar el servicio WZC, vea el artículo 87122 en Microsoft Knowledge Base en el sitio Web de microsoft.com.”

Se puede intentar solucionar solucionar haciendo lo siguiente:
1 – Ir a Panel de Control -> Herramientas Administrativas -> Servicios
2 – Buscar la opción de “Configuración inalámbrica rápida”, darle click al botón derecho y seleccionar propiedades.
3 – Una vez dentro de las propiedades, se debe buscar la casilla “Tipo de Inicio” y ponerlo en AUTOMATICO.

10-diciembre-2015
admin

Descargar imágenes de la web usando Python

Existen distintos métodos para descargarse imágenes de la web desde una aplicación python. A continuación vamos a exponer dos ejemplos:

Ej 1/ Utilizando el módulo httplib

import httplib

...

'''
   Se conecta con el servidor y se hace la petición de la imagen
'''
conn = httplib.HTTPConnection("www.url.com")
conn.request ("GET", '/img/imagen.jpg')
r = conn.getresponse()
	
'''
    se guarda la imagen en disco mediante la creación de un fichero
'''
fichero = file( '/home/img/imagen.jpg', "wb" )
fichero.write(r.read())
fichero.close()
...

Ej 2/ Utilizando los módulos PIL, urllib y StringIO

from PIL import Image
from urllib import urlopen
from StringIO import StringIO
 
'''
   Se descarga la imagen y se almacena en una cadena
'''
URL = 'http://www.url.com/img/imagen.jpg'
data = urlopen(URL).read() 

'''
   Se convierte a fichero con StringIO y luego se convierte en imagen
'''
file = StringIO(data) 
img = Image.open(file) 

'''
   Se almacena en disco
'''
img.save('/home/img/imagen.jpg')
Páginas:«12345678910...24»

Categorias

Linkedin