All Posts By Jose Manuel Gilpérez Aguilar

Bucles en Python

Posted on 2 min read 17 views

Bucles

Bucle while

La forma de escribir el bucle while es la habitual, utilizando el símbolo dos puntos (:) tras finalizar la condición a cumplir para ejecutar el bucle y antes de indicar la acción a realizar durante el mismo. Dicha condición debe variar para que el bucle pueda cerrarse. Aquí vemos un ejemplo:

a = 0
while a<=20:
    print(a)
    a+=1
print ("Bucle terminado")

Bucle for

La forma de escribir un bucle for es siempre la siguiente:

for (nombre_del_dato) in (cadena, array, etc.) :
acción a ejecutarse

Aquí vemos algunos ejemplos:

a = [0,1,2,3,4,5]
for data in a:
    print(data)
print ("Bucle 1 for terminado")

for data in [0,1,2,3,4,5]:
    print(data)
print ("Bucle 2 for terminado")

for letter in 'string':
    print(letter)
print ("Bucle 3 for terminado")

for key,data in enumerate('cadena'):
    if key % 2 == 0:
        print data
print ("Bucle 4 for terminado")

Excepciones

Python permite el uso de excepciones mediante las sentencias tryexcept. Básicamente, estas sentencias permiten tomar un camino alternativo en caso de que se presente un error, además de permitir visualizar de un modo más amigable el tipo error que aparece en la ejecución. La estructura es la siguiente:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
except: 
    print("Ha ocurrido un error") # exception appear
else:
    for each in tuple:
        print (each)

También puede escribirse como:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
    for each in tuple:
        print (each)
except AttributeError as e: # mark the exception type as e
    print 'Ha ocurrido un error: ',  e # exception appear

Break, continue y else

Break es la sentencia para interrumpir un bucle. Aquí vemos un ejemplo:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        break
    else:
        print (int)

Del mismo modo, continue se utiliza para continuar el bucle:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        continue
    else:
        print (int)

Toma de decisiones en Python.

Posted on 1 min read 23 views

Toma de decisiones

Sentencias if… else … elif

La forma de crear las sentencias ifif… else es sencilla:

  • Después de la condición if, else o elif debe ir el símbolo dos puntos (:).
  • Las sentencias anidadas se crean mediante tabulaciones.

Aquí vemos algunos ejemplos:

a,b = 4.0,5.0
if ab: 
    c=a*b
    print c
elif (b>a): print (a+b)


var = 100
if var > 50:
   print "La variable es mayor de 50"
   if var == 100:
      print "La variable es 100"
   elif var == 150:
      print "La variable es 150"
   elif var == 200:
      print "La variable es 200"
elif var < 50:
   print "La variable es menor que 50"
else:
   print "No se ha podido encontrar la variable"

Una forma alternativa de escribir las sentencias if en una sola línea es la siguiente:

a,b = 0,1
var = "La sentencia es cierta" if a == b else "La sentencia no es verdadera"
print (var)

Resulta mucho más compacto y legible.

Sentencia switch

Python no tiene la función switch como por ejemplo PHP. Una forma de emular la sentencia switch es usar la función dict (diccionario). Aquí tenemos algunos ejemplos:

switch = dict( 
              one ="uno",
              two ="dos",
              three = "tres"
              )
var1 = "two"
print(switch[var1])

print(switch.get(var1,'no encontrada (valor por defecto)'))

var2 = "four"
print(switch.get(var2,'no encontrada (valor por defecto)'))

Operadores en Python

Posted on 2 min read 10 views

Operadores

Operadores aritméticos

Python tiene los operadores aritméticos habituales. Supongamos que a=9 y b=2.  La siguiente tabla muestra los operadores aritméticos principales:

Operador Símbolo Descripción Ejemplo
Suma + Suma los valores a ambos lados del operador a+b=11
Resta Resta el valor a la derecha del operador del valor a la izquierda a–b=7
Multiplicacion * Multiplica los valores a ambos lados del operador a*b=18
Division / Divide el valor a la derecha del operador entre el valor a la izquierda a/b=4.5
Módulo % Entrega el resto de la división entre el valor a la derecha y el valor a la izquierda del operador a%b=1
Exponente ** Calcula la potencia del valor a la izquierda del operador, siendo el valor a la derecha el exponente a**b=81
Cociente redondeado // Entrega el cociente de la división entre los dos operandos, eliminando los decimales. a//b=4

El orden de los operadores es el habitual en matemáticas y lenguajes de programación: el producto y la división tiene prioridad sobre la suma y la resta, y en caso de utilizar paréntesis, estos marcan la prioridad.

Operadores condicionales

Python tiene los operadores condicionales habituales. Supongamos que a=9 y b=2.  La siguiente tabla muestra los operadores aritméticos principales:

Operador Descripción Ejemplo
== Si los dos operandos son iguales el resultado es True y False en caso contrario (a == b) False
!= Si los dos operandos no son iguales el resultado es True y False en caso contrario (a != b) True
<> Si los dos operandos no son iguales el resultado es True y False en caso contrario (a <> b) True
> Si el valor a la izquierda del operador es mayor que el de la derecha el resultado es True y False en caso contrario (a > b) True
< Si el valor a la derecha del operador es mayor que el de la izquierda el resultado es True y False en caso contrario (a < b) False
>= Si el valor a la izquierda del operador es mayor o igual que el de la derecha el resultado es True y False en caso contrario (a >= b) True
<= Si el valor a la izquierda del operador es menor o igual que el de la derecha el resultado es True y False en caso contrario (a <= b) False

Variables en Python.

Posted on 11 min read 28 views

He seguido de forma acelerada este repaso de Python siguiendo el curso de Udemy Python for beginners. El curso no es nada profundo y se sigue a toda velocidad si se tienen conocimientos previos de programación. Por otro lado, no es completo, por lo que debe ser ampliado con otras fuentes. Tal vez la parte más complicada es el comienzo, en lo relativo a la instalación de PyDev en Eclipse para Mac.

 

 

Variables.

Es recomendable escribir las variables como CamelCaising o under_score para recordar mejor el significado de la variable.

Para asignar un valor numérico a una variable usamos el símbolo igual ( ) y puede visualizarse mediante el comando print:

Una variable se considera un objeto en Python, al ser un lenguaje orientado a objetos. Cada variable ocupa una posición de memoria que podemos conocer con la función id(NombreVariable). El tipo de variable se conoce mediante la función type(NombreVariable).

number = 500;
print(number);
print(id(number));
print(type(number));

Es posible declarar más de una variable en una sola línea:

a,b,c = 1,2,3
print a,b,c

Vemos que no es necesario incluir el paréntesis en la función print, pero si incluimos varias variables en el mismo print, estas deben ir separadas por comas.

Números

Los números pueden representarse como enteros (int)o como números en coma flotante (float).

Se puede convertir un número en coma flotante en un entero con la función int(NombreVariable). El número se trunca, no se redondea. Si se quiere redondear debe usarse la función round(NombreVariable) que deja el número con un real en coma flotante.

Igualmente para convertir un entero en coma flotante se utiliza la función float(NombreVariable).

a = 50
b = 50.75
print(type(a),a)
print(type(b),b)
c = int(b)
d = round (b)
print(type(c),c)
print(type(d),d)
e = float(a)
print(type(e),e)

Cadenas

Las cadenas (strings ) deben ir entre comillas simples o dobles.

También pueden usarse comillas triples para indicar multiples líneas.

a = "Esto es una cadena"
b = 'Esto es otra cadena'
c = '''
Esto en una cadena 
en varias
líneas '''
print(type(a),a) 
print(type(b),b)
print(c)

Es interesante poder introducir una variable dentro de otra cadena. Para ello usamos el símbolo % y una estructura especial:

a = "1960"
b = 'Naci en Madrid en %s ' %a
print(b)

Tuplas y Listas

Deben distinguirse entre tuplas y listas propiamente dichas. Las tuplas son como constantes, es decir, no pueden modificarse, mientras que las listas son como variables que podemos modificar y operar sobre ellas. Para declarar una u otra se usan paréntesis (tuplas) o corchetes (listas), respectivamente:

a = (1,2,3,4,5)
b = [1,2,3,4,5]
print (type(a),a)
print (type(b),b)
b.append(6)
print (b)

Podemos recuperar elementos de una lista mediante su índice, teniendo en cuenta que dichos índices comienzan en cero. Puede recuperarse un sólo elemento de la lista o un grupo de ellos.

a = [1,2,3,4,5]
print (a[2])
print (a[2:4])
print (a[2:5])
print (a[:4])

Nótese que el último valor del índice indicado no aparece. Es decir, indica el elemento de parada, pero ese elemento no aparece.

Al recuperar un grupo de elementos, puede  incluirse un tercer elemento entre los corchetes para indicar el salto entre un elemento y el siguiente:

a = [1,2,3,4,5,6,7,8,9,10,11]
print (a[2:8:2])
print (a[2::2])
print ([::2])
print ([:6:2]

En este caso estaremos recogiendo elementos de dos en dos. En el primer caso estamos indicando un elemento de comienzo y uno de parada; en el segundo solo el de comienzo, con lo que aparecerá los elementos de dos en dos desde el indicado para comenzar hasta el final de la lista; en el tercero no aparece ni comienzo ni parada, con lo que aparecerán todos los elementos de principio a fin de dos en dos. El último caso se deduce lógicamente de lo anterior.

También pueden recuperarse elementos en orden inverso usando índices negativos. De este modo empezamos a contar desde la derecha en lugar desde la izquierda de la lista, siendo el primer elemento el de índice -1. Es decir de izqueirda a derecha el primer índice es el 0 y de derecha a izquierda el -1.

a = [1,2,3,4,5]
print (a[-1])
print (a[-3])

Esto mismo también puede realizarse conociendo la longitud de la lista (el número de elementos) mediante la sentencia len, obteniendo el mismo resultado:

a = [1,2,3,4,5]
length = len(list)
print (length-1)
print (length-3)

Sin embargo, el primer método es más adecuado, ya que utiliza menos código.

Diccionarios

La forma de escribir los diccionarios es mediante llaves:

a = {'one':1,'two':2}
print (type(a),a)
b = {'id':7,'name':'Jose manuel'}
print (type(b),b)

Una forma alternativa de escribir los diccionarios es mediante la función dict:

dictiorany = dict(
                  one   =   1,
                  two   =   'two'
                  )
print (type(dictiorany),dictiorany)

Booleanos

Las variables booleanas solo pueden tomar dos valores, truefalse.

a = True
print (type(a),a)
b,c = 1,0
if b==c: 
        print( True) 
else: 
        print (False)

Una forma alternativa de escribir los diccionarios es mediante la función dict:

dictiorany = dict(
                  one   =   1,
                  two   =   'two'
                  )
print (type(dictiorany),dictiorany)

Alcance de las variables

Las variables pueden ser declaradas globaleslocales.  Las variables globales afectan a todas las funciones del código, mientras que las variables locales solamente afectan a aquella función donde han sido declaradas. Esto significa que si una variable global es modificada dentro de una función, el nuevo valor será el utilizado en una función posterior en la ejecución del código. Sin embargo, si una variable es local, será empleada únicamente dentro de la función en que la que se ha declarado.

Las variables locales son más seguras, dado que un error en una función sólo afectará a las variables locales de dicha función. Las variables globales son adecuadas por ejemplo cuando se trata de constantes que van a utilizar el mismo valor en cualquier punto del código.

Operadores

Operadores aritméticos

Python tiene los operadores aritméticos habituales. Supongamos que a=9 y b=2.  La siguiente tabla muestra los operadores aritméticos principales:

Operador Símbolo Descripción Ejemplo
Suma + Suma los valores a ambos lados del operador a+b=11
Resta Resta el valor a la derecha del operador del valor a la izquierda a–b=7
Multiplicacion * Multiplica los valores a ambos lados del operador a*b=18
Division / Divide el valor a la derecha del operador entre el valor a la izquierda a/b=4.5
Módulo % Entrega el resto de la división entre el valor a la derecha y el valor a la izquierda del operador a%b=1
Exponente ** Calcula la potencia del valor a la izquierda del operador, siendo el valor a la derecha el exponente a**b=81
Cociente redondeado // Entrega el cociente de la división entre los dos operandos, eliminando los decimales. a//b=4

El orden de los operadores es el habitual en matemáticas y lenguajes de programación: el producto y la división tiene prioridad sobre la suma y la resta, y en caso de utilizar paréntesis, estos marcan la prioridad.

Operadores condicionales

Python tiene los operadores condicionales habituales. Supongamos que a=9 y b=2.  La siguiente tabla muestra los operadores aritméticos principales:

Operador Descripción Ejemplo
== Si los dos operandos son iguales el resultado es True y False en caso contrario (a == b) False
!= Si los dos operandos no son iguales el resultado es True y False en caso contrario (a != b) True
<> Si los dos operandos no son iguales el resultado es True y False en caso contrario (a <> b) True
> Si el valor a la izquierda del operador es mayor que el de la derecha el resultado es True y False en caso contrario (a > b) True
< Si el valor a la derecha del operador es mayor que el de la izquierda el resultado es True y False en caso contrario (a < b) False
>= Si el valor a la izquierda del operador es mayor o igual que el de la derecha el resultado es True y False en caso contrario (a >= b) True
<= Si el valor a la izquierda del operador es menor o igual que el de la derecha el resultado es True y False en caso contrario (a <= b) False

 Comentarios

Los comentarios en una línea se incluyen con el símbolo #.

# Esto es un comentario y no se procesará en el código

Toma de decisiones

Sentencias if… else … elif

La forma de crear las sentencias ifif… else es sencilla:

  • Después de la condición if, else o elif debe ir el símbolo dos puntos (:).
  • Las sentencias anidadas se crean mediante tabulaciones.

Aquí vemos algunos ejemplos:

a,b = 4.0,5.0
if ab: 
    c=a*b
    print c
elif (b>a): print (a+b)


var = 100
if var > 50:
   print "La variable es mayor de 50"
   if var == 100:
      print "La variable es 100"
   elif var == 150:
      print "La variable es 150"
   elif var == 200:
      print "La variable es 200"
elif var < 50:
   print "La variable es menor que 50"
else:
   print "No se ha podido encontrar la variable"

Una forma alternativa de escribir las sentencias if en una sola línea es la siguiente:

a,b = 0,1
var = "La sentencia es cierta" if a == b else "La sentencia no es verdadera"
print (var)

Resulta mucho más compacto y legible.

Sentencia switch

Python no tiene la función switch como por ejemplo PHP. Una forma de emular la sentencia switch es usar la función dict (diccionario). Aquí tenemos algunos ejemplos:

switch = dict( 
              one ="uno",
              two ="dos",
              three = "tres"
              )
var1 = "two"
print(switch[var1])

print(switch.get(var1,'no encontrada (valor por defecto)'))

var2 = "four"
print(switch.get(var2,'no encontrada (valor por defecto)'))

Bucles

Bucle while

La forma de escribir el bucle while es la habitual, utilizando el símbolo dos puntos (:) tras finalizar la condición a cumplir para ejecutar el bucle y antes de indicar la acción a realizar durante el mismo. Dicha condición debe variar para que el bucle pueda cerrarse. Aquí vemos un ejemplo:

a = 0
while a<=20:
    print(a)
    a+=1
print ("Bucle terminado")

Bucle for

La forma de escribir un bucle for es siempre la siguiente:

for (nombre_del_dato) in (cadena, array, etc.) :
acción a ejecutarse

Aquí vemos algunos ejemplos:

a = [0,1,2,3,4,5]
for data in a:
    print(data)
print ("Bucle 1 for terminado")

for data in [0,1,2,3,4,5]:
    print(data)
print ("Bucle 2 for terminado")

for letter in 'string':
    print(letter)
print ("Bucle 3 for terminado")

for key,data in enumerate('cadena'):
    if key % 2 == 0:
        print data
print ("Bucle 4 for terminado")

Excepciones

Python permite el uso de excepciones mediante las sentencias tryexcept. Básicamente, estas sentencias permiten tomar un camino alternativo en caso de que se presente un error, además de permitir visualizar de un modo más amigable el tipo error que aparece en la ejecución. La estructura es la siguiente:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
except: 
    print("Ha ocurrido un error") # exception appear
else:
    for each in tuple:
        print (each)

También puede escribirse como:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
    for each in tuple:
        print (each)
except AttributeError as e: # mark the exception type as e
    print 'Ha ocurrido un error: ',  e # exception appear

Break, continue y else

Break es la sentencia para interrumpir un bucle. Aquí vemos un ejemplo:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        break
    else:
        print (int)

Del mismo modo, continue se utiliza para continuar el bucle:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        continue
    else:
        print (int)

Operaciones con listas

Vamos a ver diferentes operaciones con listas:

  • Añadir un nuevo elemento: append.
  • Extender una lista o unir dos listas: extend.
  • Añadir un nuevo elemento en un índice determinado de la lista: insert.
  • Editar un elemento en un índice determinado de la lista: =.
  • Borrar elementos de la lista identificados por su índice: del.
  • Borrar elementos de la lista identificados por su valor: remove.
  • Invertir el orden de los índices en la lista: reverse.
  • Ordenar una lista: sort.
  • Crear una nueva lista ordenada a partir de otra lista no ordenada: sorted.

Estos son algunos ejemplos:

list = [0,1,2,3,4,5,6,7,8,9,10,11] # create a list
list2 = [13,14,15,16,17,18,19,20] # create a second list
list.append(12)
print (list)
list.extend(list2)
print (list)
list.insert (6,5.5)
print(list)
list[6] = 33
print (list)
list[6] = 33/3
print(list)
del list[6]
print(list)
list.remove(11)
print (list)
list.reverse()
print(list)
list.sort()
print(list)
list.reverse()
list2 = sorted(list)
print(list2)

Recibiendo datos

Existe una diferencia importante en el comando a utilizar para recibir datos ya usemos Python 2.7 o Python 3.0 o superior. Para solicitar una entrada mediante el teclado se emplean dos sentencias diferentes:

  • Python 2.7: raw_imput.
  • Python 3.0: input.

Este es un ejemplo sencillo para Python 2.7:

print ('Hello JM')
raw_input('Press any key to continue')
print('Thanks')

Sin embargo, si podemos usar input en Python 2.7 para asignar el valor de una entrada a una variable:

data = input('What\'s your favorite number?\n')
data = int(data)*20
print('Your favorite number times 20 is {}'.format(data))

Funciones con cadenas de caracteres

Cuando una variable es una cadena de caracteres es tratada como si dichos caracteres formasen una lista. De este modo, cuando operamos sobre cualquiera de las dos líneas del siguiente ejemplo, string1string2, obtenemos el mismo resultado:

string1 = ['s','t','r','i','n','g']
string2 = 'string'
for letter in string1:
    print(letter)
for letter in string2:
    print(letter)

Otras funciones disponibles son las siguientes:

  • Contar el número de veces que aparece un carácter en una cadena: count.
  • Hacer que todas las iniciales de cada palabra aparezcan en mayúscula: title.
  • Convertir en mayúsculas sólo la primera leta de la cadena: capitalize.
  • Formar una cadena con los caracteres de una lista o una tupla: join.
  • Separar una cadena a partir de un carácter, creando una lista con cada uno de os elementos resultantes: split.
string = 'this is an example of a text string'
print(string.count('s'))
print(string.title())
print(string.capitalize())
string2 ='-'
sequence = ['j','o','s','e']
print(string2.join(sequence))
string3 =''
print(string3.join(sequence))
print(''.join(sequence))
data = string2.join(sequence)
sequence = data.split('-')
print (sequence)

Funciones de usuario

Estas son las funciones creadas por el usuario y que no están predefinidas en Python. La ventaja de las funciones es que las escribimos una vez y podemos usarlas tantas veces como deseemos.

La sintaxis básica de una función es la siguiente:

def function_name():
    string ='Hello'
    return string

print (function_name())

Dentro de la función pueden realizarse las operaciones que se deseen.

A la función se le pueden pasar tantos parámetros, separados por comas, como se deseen:

mylist = [1,2,3,4,5]
def my_function_name(list):
    list.append(6)
    return list

print (my_function_name(mylist))

otherlist = [7,8,9,10]

def other_function_name(list1,list2):
    list1.extend(list2)
    return list1

print(other_function_name(mylist,otherlist))

Instalar PyDev en Eclipse para Os X 10.10 Yosemite

Posted on 3 min read 26 views

El primer paso consiste en descargar Eclipse Classic. Se elige la versión Classic por ser la más limpia y adecuada para instalar posteriormente los plugins necesario para el lenguaje de programación deseado, en nuestro caso Python. A la hora de escribir este artículo, la última versión estable es la Eclipse Classic 4.4.2 Juno.

Una vez descargado Eclipse procedemos a su instalación. Eclipse se habrá guardado por defecto la carpeta Descargas. Al activar el fichero descargado, todo el paquete se guardará en una carpeta llamada Eclipse. Como sugerencia, pude moverse toda la carpeta de Descargas a Aplicaciones. Abriendo la carpeta encontraremos el ejecutable Eclipse.app que abriremos para completar la instalación. Durante esta se nos preguntará por la ubicación de la carpeta  donde se guardaran los archivos creados mediante Eclipse. Podemos ubicar dicha carpeta (workspace) o modificar su nombre si lo deseamos.

Una vez se ha realizado la configuración básica de Eclipse, pasamos a instalar PyDev. Para ello vamos a Help/Install New Software/ y arriba a la derecha encontramos la opción Add. Hacemos click y se abre una ventana donde se deben rellenar dos campos:

  • Name: PyDev.
  • Location: http://pydev.org/updates

Aparece una ventana con dos opciones. Señalamos solamente la primera (PyDev) y hacemos click en Next para continuar la instalación hasta finalizarla. De este modo ya tenemos instalado PyDev.

Si todo ha funcionado correctamente, en Eclipse/Preferencias veremos aparecer PyDev en el menú vertical a la izquierda de la ventana emergente. Si no aparece, tenemos un problema con la versión de Java instalada. PyDev necesita Java 7, ya sea el JRE o el JDK.

Para ver la versión de Java que estamos utilizando vamos a Terminal y ejecutamos

$ java -version

Si aparece

> java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

nos está indicando que trabajamos con la versión 6 que es la que viene por defecto en OS X 10.10 Yosemite.

En lugar de instalar el JRE, es más adecuado descargar e instalar el JDKen la versión 7 o superior. Actualmente la última versión es Java 8 que se puede descargar desde la página de Oracle. Elegimos la versión para Mac OS X de 64 bits: jdk-8u51-macosx-x64.dmg

Una vez descargada e instalada, veremos que se ha guardado en la siguiente ruta:

/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java

En Terminal veremos ahora las diferentes versiones instaladas:

/usr/libexec/java_home --verbose

con el siguiente resultado:

Matching Java Virtual Machines (3):
1.8.0_51, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
1.6.0_65-b14-466.1, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-466.1, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home

A continuación modificamos el archivo eclipse.ini para determinar la versión de Java que Elipse debe utilizar. Podemos encontrar el archivo eclipse.ini mediante ctrl-click  en el archivo de eclipse ejecutable Eclipse.app y seleccionando  Mostrar el contenido del paquete y navegando hasta Content/MacOS/. Abrimos el archivo con TextEdit y seguimos las instrucciones que nos indica Elipse para modificar el archivo. Concretamente, deben incluirse las siguientes dos líneas justo debajo de openFile:

openFile
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java

El archivo tendrá finalmente el siguiente código:

-startup
../../../plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.200.v20120913-144807
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java
-vmargs
-Xms40m
-Xmx512m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts

El último paso es reiniciar Eclipse. Una vez activo de nuevo, podemos dirigirnos de nuevo a Eclipse/Preferencias y finalmente encontraremos que PyDev se encuentra dentro de los lenguajes con los que podemos trabajar.

Instalar Python en Mac OS X 10.10 Yosemite

Posted on 2 min read 26 views

La última versión de Mac Os X tiene preinstalado Python2.7. Para comprobarlo abrir el Terminal y activar Phyton:

$ python

Veremos el siguiente mensaje:

Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Con esta versión de Python es posible trabajar sin instalar ni configurar nada más, siendo válida para el aprendizaje, pero no es la más adecuada para el desarrollo de aplicaciones para el mundo real. La última versión de Python 2 a fecha de hoy (03/08/2015) es la 2.7.10. Una cuestión a valorar sería la instalación de Python 3. En nuestro caso lo dejamos para más adelante, ya que nuestro propósito es trabajar con scripts ya desarrollados en Python 2.

Procedemos a la descarga de Python 2.7.10 para continuar con su instalación.

Es recomendable instalar una serie de herramientas y librerías antes de comenzar el desarrollo de aplicaciones Python.

En primer lugar, necesitamos instalar GCC (GNU Compiler Collection), que puede obtenerse descargando Xcode, el IDE de Apple para el desarrollo de aplicaciones para OS X, desde la App Store. Una vez descargado, Xcode debe abrirse para completar la instalación y aceptar el tipo de licencia. Una vez instalado podemos encontrarlo dentro de las aplicaciones del equipo.

A continuación instalamos  Homebrew desde el Terminal mediante:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

requiere password del equipo. Homebrew es un componente que nos permite la instalación de paquetes desde Terminal.

Ahora ya podemos instalar Python:

$ brew install python

Para comprobar que se instalado correctamente basta introducir el comando en el Terminal

$ python

Con lo que entraremos en la ejecución de Python, indicándonos en primer lugar la versión instalada:

Python 2.7.10 (default, Jul 13 2015, 12:05:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Para salir de Python ejecutamos el comando quit():

>>> quit()

Eso es todo por ahora.

Entrenamiento en la compasión en 15 días

Posted on 5 min read 11 views

La mayoría de nosotros entendemos que el ejercicio físico es una forma de mejorar nuestra salud. Sin embargo, habitualmente no ponemos la misma atención en algo tan importante como es la salud emocional. El hecho es que también podemos fortalecer nuestros músculos emocionales, entre ellos el de la compasión, por medio de un adecuado y sencillo entrenamiento.

La meditación en la compasión es una antigua practica contemplativa que fortalece los sentimientos de compasión hacia los demás. Este sentimiento es la respuesta emocional que nace del deseo de cuidar y ayudar a otra persona que se encuentra en un estado de angustia o sufrimiento por cualquier motivo. Con la práctica de la meditación se pretende que el sentimiento de compasión crezca y con ello que la persona sea mas propensa a mostrar una actitud de ayudar a los demás en la vida real.

En un estudio llevado a cabo por el equipo de Dr. Richard J. Davidson  en el Madison’s Center for Investigating Healthy Minds de la Universidad de Wisconsin, se enseño a un grupo de participantes a generar compasión por personas con las que mantenían diferente tipo de relaciones, desde aquellas a las que amaban, a otras con las que tenían dificultades. La práctica consistía en algo similar a la actividad deportiva, donde la marca a batir es cada vez más alta, siendo en este caso el músculo emocional el que debía ser fortalecido. Sentir compasión hacia personas con las que se mantenía una relación cada vez más difícil, incluso antagónica, era el mayor grado de dificultad. Otro grupo de participantes fueron entrenados únicamente en el control de sus emociones negativas, mostrando resultados distintos entre ambos grupos.Dr. Richard Davidson -  Madison’s Center for Investigating Healthy Minds - Universidad de Wisconsin

Ya se había demostrado anteriormente que la respuesta ante el sufrimiento de expertos meditadores, con un alto grado de entrenamiento en la meditación de la compasión, era notablemente diferente respecto los entrenados únicamente en el autocontrol. Sin embargo, el equipo del Dr. Davidson se planteó su efecto en personas ordinarias, con poco entrenamiento. De este modo, fueron seleccionados participantes sin experiencia previa en la meditación y divididos aleatoriamente en dos programas diferentes con el mismo tiempo de práctica de tan sólo 30 minutos diarios durante dos semanas. Un grupo seguiría un programa de entrenamiento en la meditación en la compasión y el otro en el control de la emociones negativas. El objetivo era observar su grado de altruismo y su actividad cerebral antes y después de este breve periodo de entrenamiento.

Después de estas dos semanas, el grupo entrenado en la práctica de la meditación en la compasión mostró un mayor altruismo en su actividad diaria, al tiempo que experimentó un mayor cambio en la medida de su respuesta cerebral ante imágenes de sufrimiento.

Este resultado viene a demostrar que la compasión es una habilidad que puede ser desarrollada y que la práctica de la meditación en la compasión puede alterar la forma en que nuestro cerebro percibe el sufrimiento y las acciones para aliviarlo.

La práctica de la meditación en la compasión consistía en observar los pensamientos y sentimientos que aparecían al imaginar una situación de sufrimiento en ellos mismos, en personas amadas, extraños u otros con los que tenían dificultades de relación, de forma progresiva. El entrenamiento tenía como primer objetivo generar un mayor grado de tolerancia hacia las propias reacciones, sin intentar eliminarlas o quedar atrapados en ellas. En un segundo paso se trataba de desear activamente que el sufrimiento de otros desapareciese, repitiendo mentalmente frases como “Ojalá seas libre de cualquier sufrimiento y tengas dicha y felicidad” al tiempo que mantenían la atención en su propio cuerpo, especialmente en la zona del corazón.

El grado de compasión que se experimenta por las personas amadas fue tomado como base y se trataba de extender dicho sentimiento hacia el resto de las categorías de personas. En la vida diaria es difícil encontrar un comportamiento altruista hacia personas que no conocemos. Por ejemplo, donar una cantidad significativa de dinero a un extraño en dificultades, no una limosna, es completamente inusual. En el experimento las personas con entrenamiento en la compasión demostraron una mayor generosidad entregando su dinero a personas anónimas con necesidades que el otro grupo.

Es de destacar que este mayor grado de altruismo está ligado a cambios físicos en el cerebro, tal como demostraron las pruebas de imagen por resonancia magnética funcional (IRMf) realizadas antes y después del entrenamiento. Los participantes observaron imágenes de personas sufriendo, como un niño llorando o alguien con un daño físico, y aplicaron en cada caso el método aprendido en el entrenamiento. El grupo de meditación en la compasión repetía mentalmente las frases empleadas durante su práctica, como “Ojalá estés libre del sufrimiento”. El grupo de meditación en las emociones negativas se decía a si mismo “Esta persona se recuperara de su dolor“.

Buddhist monk Matthieu Ricard

Concrétamente, se observó en las personas con mayor grado de altruismo un mayor cambio en su actividad cerebral, fundamentalmente en la zona parietal inferior del cortex, asociada con la empatía y la comprensión de los demás, en la zona dorso lateral prefrontal, relacionada con el control emocional, y en el nucleus accumbens, implicado en las emociones de recompensa.

Estos resultados reflejan que el entrenamiento en la compasión aumenta la capacidad de percibir el sufrimento ajeno activando los circuitos neuronales involucrados con la empatía, haciendo que su respuesta ante la necesidad ajena sea más activa. Estos resultados no se observaron en ninguna medida en el grupo entrenado en el control de las emociones negativas.

Por tanto, como conclusión, podemos decir que la compasión puede ser entrenada y desarrollada. Su aplicación puede ser beneficiosa para mejorar las relaciones y la comunicación en múltiples áreas como la sanidad, la educación o los negocios.

El entrenamiento en la compasión está disponible de forma gratuita para el público.

Como crear una cuenta de administrador en WordPress a través de MySQL

Posted on 1 min read 13 views

 

Para crear una nueva cuenta de administrador en WordPress a través de MySQL, deben seguirse los siguientes pasos:

  1. Acceder a la base de datos mediante phpMyAdmin.
  2. Ir al editor de SQL en la pestaña SQL del menú superior.
  3. Incluir los siguientes códigos SQL y hacer clic en continuar:
INSERT INTO `wp_users` (` user_login`, `user_pass`,` user_nicename`, `user_email`,` user_status`)
 VALUES ('nuevo_nombre_de_usuario', MD5 ('nueva_password'), 'Nombre y Apellido "," email@misitioweb.com', '0');
INSERT INTO `wp_usermeta` (` umeta_id`, `user_id`,` meta_key`, `meta_value`)
 VALUES (NULL, (SELECT MAX (id) DE wp_users), 'wp_capabilities', 'a: 1: {s: 13: "administrador"; s: 1: "1";}');
INSERT INTO `wp_usermeta` (` umeta_id`, `user_id`,` meta_key`, `meta_value`)
 VALUES (NULL, (SELECT MAX (id) DE wp_users), 'wp_user_level', '10');

En la primera de las sentencias deben sustituirse los siguientes datos por los deseados:

  • nuevo_nombre_de_usuario
  • nueva_password
  • Nombre y Apellido
  • email@misitioweb.com

Una vez realizada estas operaciones, iremos al administrador de WordPress y accederemos con la nueva información de acceso de administrador introducida.

Claves para cambiar de dominio sin perder posicionamiento

Posted on 7 min read 15 views

Los motivos por los que una empresa puede plantearse cambiar de dominio son diversos. Puede tratarse de una transferencia, un cambio de nombre o una migración. En cualquier caso,  se trata de mantener la reputación digital de la marca y hacer del cambio un proceso no traumático y, fundamentalmente, cambiar de dominio sin perder posicionamiento en Google.

Google entiende que el traslado de un sitio web puede realizarse sin o con cambios de URL. En el primer caso, hablamos simplemente de cambiar de proveedor de alojamiento, para lo que básicamente deberemos realizar dos tareas, subir el contenido al nuevo alojamiento y cambiar la configuración de DNS. Una vez que el sitio es visible en el nuevo alojamiento, puede eliminarse todo el contenido del alojamiento original. El segundo caso es el que nos interesa en este artículo y al que vamos a prestar mayor detalle.

Traslado de un sitio con cambios de URL

Consideremos que hemos decidido alojar todo nuestro contenido bajo unas nuevas URL, ya sea que hemos decidido utilizar HTTPS en lugar de HTTP, que vamos a usar un nuevo nombre de dominio – de misitioweb.com a misitioweb.net – o que se han creado URL amigables – de misitioweb.com/pagina.php?id=1 a misitioweb.net/pagina1.html. 

Los pasos a seguir son los siguientes:

  1. Subir el contenido al nuevo sitio.
  2. Configurar Webmasters Tools.
  3. Asignar las URL.
  4. Solicitar del cambio de dirección.
  5. Actualizar los enlaces entrantes.
  6. Supervisar el tráfico.

1. Subir el contenido al nuevo sitio.

El primer paso sería subir todo el contenido al alojamiento del nuevo dominio.

Durante el traslado, es recomendable bloquear el rastreo del sitio mediante la directiva noindex en el archivo robots.txt.

En caso de que algunas URL desaparezcan, es recomendable redirigirlas a alguna de las páginas nuevas, evitando usar la página de inicio como destino en este caso.

2. Configurar Webmasters Tools.

Un paso fundamental en el traslado es la correcta configuración de las Herramientas para Webmasters de Google, Webmasters Tools. Es muy importante verificar la propiedad tanto del sitio origen como de destino en todas sus variantes, es decir, tanto www.misitioweb.com como misitioweb.com.

Para verificar ambos sitios la mejor solución es darlos de alta en Google Analytics. De este modo podremos verificar las versiones www y sin www y posteriormente escoger una de las dos como predeterminada.  Otras soluciones de verificación son igualmente válidas, pero dado que necesitaremos usar Analytics para el seguimiento del sitio, de este modo ya lo tenemos solucionado.

Así mismo, la configuración debe ser la misma. Si se desea cambiar esta configuración, es más adecuado hacerlo una vez que el traslado se haya realizado con éxito. La configuración incluye los Parámetros de URL, la Segmentación geográfica o internacional, la frecuencia de rastreo y los enlaces rechazados. Obviamente, cuantas más especificaciones tenga la configuración, más laborioso será su implementación en el nuevo sitio.

Todo lo anterior supone que vamos a emplear un nuevo dominio o un dominio que no ha tenido ninguna penalización. En ningún caso debe realizarse un traslado antes de haber solucionado todos los problemas que pudiera tener el dominio destino.

3. Asignar las URL.

Lógicamente, debe haber una correspondencia entre las URL nuevas y antiguas, de modo que ninguna URL ya indexada por Google en la antigua configuración quede huérfana.

El caso más sencillo es aquel en el que simplemente se ha realizado un cambio de dominio – de misitioweb.com a misitioweb.net -, donde bastaría con realizar un redireccionamiento de un dominio a otro.

En traslados más complejos, la correspondencia debe establecerse de forma manual. Lo primero es tener un listado de las URL origen y destino, incluyendo no solamente las páginas, si no también las imágenes, archivos PDF o vídeos. En el dominio antiguo debe establecerse reglas de redireccionamiento usando un archivo .htaccess en el que se definan redireccionamientos 301. De este modo, el sitio web antiguo debe quedar configurado para dirigir a los usuarios y a Googlebot al nuevo sitio. Es recomendable mantener los redireccionamientos el máximo tiempo posible, e incluso indefinidamente.

Las URL de destino deben tener una metaetiqueta rel=”canonical” de autorreferencia y en el caso de ser un sitio multilingüe debe añadirse además rel=”alternate” hreflang=”es” (para español, en para inglés,  etc.).

Las nuevas URL se incluirán en un archivo sitemap.xml que será añadido en Google Webmasters Tools. Así mismo y en la misma cuenta, debe añadirse el sitemap.xml del sitio antiguo. Es decir, en la cuenta de Google Webmasters Tools del sitio nuevo deben incluirse los sitemaps de los sitios antiguo y nuevo. Esto ayuda a que los rastreadores detecten los redireccionamientos de las URL anteriores a las nuevas y facilita el cambio de sitio.

El tiempo que tarde Googlebot en detectar y procesar todas las URL depende de la cantidad de URLs. Es previsible obser var como los rankings  en la búsqueda de Google fluctuan durante el cambio, hasta que finalmente se estabilizan.

4. Solicitar el cambio de dirección.

Este paso es fundamental para minimizar el impacto en el actual ranking en los resultados de búsqueda de Google y que el buscador realice la indexación del nuevo sitio. El cambio de dirección sirve para notificar a Google las nuevas URL del contenido existente.

Es recomendable  transferir todas las URL al mismo tiempo para facilitar el funcionamiento de los algoritmos y que la actualización del índice de Google se realize más rápido.

Lo primero es configurar los archivos robots.txt de los sitios origen y destino para que Google pueda indexar el sitio completo. Esto implica eliminar todas las reglas, es decir, dejar el archivo en blanco, al menos temporalmente.

A continuación se puede solicitar el cambio de dirección en Google Webmasters Tools. Esta operación se realiza desde el sitio origen accediendo desde el icono del engranaje (parte superior derecha). Haciendo click en Cambio de Dirección, se trata de seguir las instrucciones indicadas. Es muy importante tener en cuenta que las directivas de redireccionamiento 301 de las URL antiguas a las nuevas deben estar activadas. En caso contrario el redireccionameinto no funcionará. Así mismo, el cambio de dominio debe solicitarse para la versión de URL preferida, tal como se ha debido indicar previamente en Google Webmasters Tools. 

En caso de error, puede solicitarse la anulación del cambio de dirección haciendo clic en Anular en la parte inferior de dicha pantalla.

El estado de índice actualizado dura 180 días y, durante este tiempo, el robot de Google deberá rastrear e indexar las páginas de la nueva dirección.

Después de realizar la transferencia, deben actualizarse tantos enlaces entrantes como sea posible.

Tendremos, por un lado, aquellos enlaces que nos sean de fácil acceso, como los que aparecen en nuestras redes sociales – Google+, Facebook, Twitter, LinkedIn o YouTube -, las campañas de Google Adwords u otras campañas publicitarias.

Por otro lado, tendremos enlaces en otros sitios web a los que será más difícil acceder. En primer lugar debemos tener un listado de todos estos enlaces y posteriormente intentar ponernos en contacto con sus propietarios para pedirles que actualicen sus enlaces y apunten al nuevo dominio. Esta no será una tarea fácil, pero

6. Supervisar el tráfico.

Una vez se han realizado todos los pasos  anteriores, es conveniente asegurarse de que el traslado se ha llevado a cabo correctamente. Para ello nuevamente pueden emplearse algunas de funciones que ofrece Google Webmasters Tools junto con Google Analytics

  • Sitemaps: el número de páginas indexadas en el nuevo sitio deberá ir aumentando a medida que disminuyen las indexadas en el sitio antiguo.
  • Estado de indexación: al igual que los sitemaps, la indexación deberá reflejar un descenso de las URL indexadas en el sitio anterior y un aumento en el nuevo.
  • Errores de rastreo: si todo es correcto, no deben presentarse errores de rastreo.
  • Consultas de búsquedas: a medida que se recupere la indexación y el ranking en los resultados de búsqueda en Google, las consultas de búsqueda indicarán un aumento en lasimpresiones de búsqueda y clics de las URL del sitio nuevo.
  • Google Analytics: mediante los informes en tiempo real de Google Analytics observaremos un descenso en el tráfico del sitio antíguo y un aumento en el tráfico del nuevo.

Resumen

Resumimos aquí los pasos a realizar para cambiar de dominio sin perder posicionamiento en Google:

  1. Subir el contenido al nuevo dominio.
  2. Verificar la propiedad tanto del sitio origen como de destino en todas sus variantes – www.misitioweb.com y misitioweb.com – en Google Webmasters Tools, asegurándonos de que la configuración sea la misma.
  3. Hacer un redireccionamiento 301 de un sitio a otro.
  4. Solicitar el cambio de dirección en Google Webmasters Tools.
  5. Actualizar los enlaces entrantes.
  6. Supervisar la indexación para verificar el cambio.

 

Instalación del Módulo de Redsys para Woocommerce

Posted on 2 min read 46 views

Existen plugins para incluir la pasarela de pago online de Redsys, asociada a un gran número de los principales bancos, dentro de la configuración de Woocommerce en WordPress. Sin embargo, en este caso abordamos la instalación de dicha formula de una forma manual, de acuerdo a las indicaciones de Redsys.

Utilizar este método manual y directo, sin necesidad de instalación de plugins, está motivado por la falta de soporte con que cuentan dichos plugins frente a actualizaciones de Woocommerce o WordPress. Seguimos las indicaciones de Redsys y aquí describimos el proceso hasta el resultado final.

Es importante saber que estos pasos deben repetirse en caso de una futura actualización de Woocommerce.

  1. Descargar el módulo de pago de REDSYS. Aquí puedes encontrar los módulos para otras plataformas.
  2. Descomprimir el archivo  colocar la carpeta redsys.
  3. Acceder por FTP a la siguiente carpeta en la instalación de WordPress: /wp-content/plugins/woocommerce/includes/ gateways/redsys
  4. Subir la carpeta redsys descomprimida.
  5. Abrir el fichero woocommerce.php localizado en /wp-content/plugins/woocommerce/woocommerce.php
  6. En el fichero anterior encontrar la función function includes() y al final de la misma incluir la siguiente instrucción
  7. 2. A continuación se inserta la siguiente línea de código PHP al final de la función:  include_once('includes/gateways/redsys/class-wc-redsys.php');

Con los pasos anteriores la pasarela ya ha sido integrada en Woocommerce, siendo ahora necesario configurarla.

  1. En el administrador de WordPress, acceder a WooCommerce/Ajustes/Finalizar Compra.
  2. En el campo Entorno de Redsys debe elegirse sis-d para entorno de pruebas y sis para entorno real.
  3. El código FUC es el código del comercio que indicado por el banco y que nos sirve para identificarnos.
  4. La clave secreta de encriptación también ha debido ser suministrada por el banco.
  5. El número de terminal es 1.
  6. El tipo de firma debe ser Ampliada.
  7. El tipo de transacción: se indica normalmente 0.

Con estas indicaciones se integra fácilmente la pasarela en nuestro comercio Woocommerce.

Allowed memory size exhausted WordPress

Posted on 1 min read 10 views

Nuestras amigas de Luna de Papel, han vuelto a tener un problema en su blog creado en WordPress, esta vez con el acceso al administrador. Parece ser que es un problema habitual encontrarse con la pantalla en blanco sin saber lo que está sucediendo. Sin embargo, si accedemos al archivo error_log que WordPress genera, encontramos el siguiente mensaje:

PHP Fatal error:  Allowed memory size of 41943040 bytes exhausted (tried to allocate 122880 bytes) in ....

Después de alguna búsqueda, parece ser el problema está relacionado con conflictos del archivo cache.php. La solución es sencilla: abrimos el archivo wp-includes/cache.php e incluimos al comienzo del mismo, inmediatamente después de la siguinte línea de código
ini_set('memory_limit','64M'); // set memory to prevent fatal errors

En mi caso, he resuelto el problema con sólo incluir esa línea, pero en caso de que vuelva a dar problemas podemos añadir también un fichero .htaccess y un fichero php.ini en el directorio wp-includes.

El código del archivo .htaccess incluiría la siguiente directiva:
# set memory limit for cache.php
php_value memory_limit 64M

El archivo php.ini incluiría las siguientes líneas:
;; set memory limit for cache.php
memory_limit = 64M

Debe notarse que en este caso he necesitado fijar el valor en 64M, dado que el error me aparecía para una memoria de 41943040 bytes (42M) Igualmente podrían fijarse otros tamaños de 8, 12, 16, 32, 64, 128, ...etc., dependiendo del error.

Eliminar el signo de interrogación en una URL mediante htaccess

Posted on 1 min read 18 views

Me ha llevado un rato encontrar en Google como eliminar el signo de interrogación en una URL mediante mod_rewrite.

El problema era el siguiente. Por un 404 necesito redirigir

http://www.tulunadepapel.com/tienda/manualidades/?pagina=3

a

http://www.tulunadepapel.com/manualidades-para-ninos-p3/

La solución es la siguiente:

RewriteCond %{QUERY_STRING} ^pagina=(.*)$
Rewriterule ^tienda/manualidades/? http://www.tulunadepapel.com/manualidades-para-ninos-p%1/? [R=301,L]

Lo más importante es añadir el símbolo de interrogación al final de la URL de destino.

La idea la he encontrado en Apache Web Server Forum y de hace cinco años!

Todo sea por las chicas de Luna de Papel y su buen trabajo en materia de educación infantil.