3ENGINE

Programación y otros cachivaches

Archivo

Página 18/104

Tecnologia

Plugin para comparar código en Notepad++


Notepad++ es un editor de texto y código fuente ligero y robusto muy utilizado hoy en día que desafortunadamente sólo está disponible para Windows. Aunque los linuxeros tenemos gedit que puede hacer lo mismo e incluso mas!.

Cómo instalar el plugin para comparar código en Notepad++

Notepad++ dispone de infinidad de plugins. Si necesitamos comparar archivos y no nos apatece instalar mas aplicaciones, podemos instalar el plugin npp compare. Hay dos modos de instalar el plugin, o bien mediante el gestor de plugins que se encuentra en Plugins >> Plugin Manager o bien descargar directamente el plugin de la web del autor

Si optamos por descargar el plugin de la web del autor, tendras que descomprir el zip y copiar el contenido en una carpeta llamada plugins que se encuentra dentro de la carpeta donde tienes instalado Notepad++ (normalmente esta carpeta se encuentra en /Archivos de programa/Notepad++)

Una vez instalado el plugin, aparecerá una nueva opción Compare dentro de la opción de menú Plugins

comparar código en Notepad++

Ahora abrimos los dos archivos y seleccionamos la opción Compare

comparar código en Notepad++

Por defecto vemos que el plugin tambíen resalta las líneas de texto donde hay diferencias en el número de espacios. En mi opinión, si los que queremos comparar es código fuente, normalmente esta opción mas que ayudar, molesta. Por suerte es posible desactivar esta opción. Para ellos vamos a la opción Compare deseleccionamos la opción Ignoring Spacing:

comparar código en Notepad++




Tecnologia

Solución al error “Fatal error: Allowed memory size» de WordPress


Si te aparece un error “Fatal error: Allowed memory size» en WordPress, por ejemplo, al añadir una imagen o al instalar un nuevo plugin en tu cuenta wordpress. Es debido a que has superado el limite de memoria reservada para PHP y necesitarás aumentarla. Te proponemos distintas soluciones.

error “Fatal error: Allowed memory size ... exhausted"

Soluciones al error “Fatal error: Allowed memory size»

Conectate mediante un cliente FTP (por ejemplo Filezilla) a tu cuenta de hosting y prueba con alguna de las siguientes soluciones:

  1. Edita el archivo wp-config.php que se encuentra en la carpeta raíz de tu blog y añade al final define(‘wp_memory_limit’,’XXM’); donde XXM es la cantidad en MB de memoria que necesitas:
    /** WordPress absolute path to the WordPress directory. */if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
    /** Sets up WordPress vars and included files. */require_once(ABSPATH . 'wp-settings.php');
    
    define('wp_memory_limit','80M');

    Si no se soluciona, prueba con define(‘WP_MAX_MEMORY_LIMIT’, ‘XXM’);

    /** WordPress absolute path to the WordPress directory. */if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
    /** Sets up WordPress vars and included files. */require_once(ABSPATH . 'wp-settings.php');
    
    define('WP_MAX_MEMORY_LIMIT', '80M');
    
  2. Edita el archivo .htaccess que se encuentra en la carpeta raíz de tu blog (es posible que esté escondido) y añade la línea php_value memory_limit XXM :
    <IfModule mod_rewrite.c>
    php_value memory_limit 64M
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
  3. Prueba a aumentar la memoria especificada en el archivo default-constants.php que se encuentra en la carpeta wp-includes. Edita la línea 9 marcada donde, en el ejemplo, pone define(‘WP_MEMORY_LIMIT’, ’48M’); aumentando la memoria por la que necesites:
    function wp_initial_constants() {
    global $blog_id;
    
    // set memory limits
    if ( !defined('WP_MEMORY_LIMIT') ) {
    if( is_multisite() ) {
    define('WP_MEMORY_LIMIT', '64M');
    } else {
    define('WP_MEMORY_LIMIT', '48M');
    }
    }
    
    if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
    define( 'WP_MAX_MEMORY_LIMIT', '256M' );
    }
    

    Si tu wordpress es multisite, entonces tendrás que modificar la línea 7 donde pone define(‘WP_MEMORY_LIMIT’, ’64M’);




Tecnologia

Como configurar Outlook por IMAP con Thunderbird


Al añadir una cuenta de correo en modo automático en Thunderbird, si la cuenta lo permite, nos dejará elegir como correo entrante POP o IMAP. Pero por algún motivo, al añadir una cuenta Outlook/Hotmail sólo tiene la opción de buzón POP

configurar Outlook por IMAP con Thunderbird

Diferencia entre POP e IMAP

De modo resumido, un buzón POP descarga el mensaje a nuestro PC eliminándolo del servidor, mientras que en un buzón IMAP (mas moderno) los mensajes permanecen en el servidor. Esto significa que si utilizas POP los mensajes que descargues ya no estarán disponibles si accedes a la cuenta desde otro dispositivo, y tiene la ventaja que es mas mas difícil que superes el limite de tu cuenta de correo. En cambio si utilizas IMAP, los mensajes ocuparán sitio en el servidor, pero podrás acceder a los mensajes desde mas de un dispositivo a la vez.

Configurar Outlook por IMAP con Thunderbird

Para configurar Outlook por IMAP con Thunderbird tendrás que hacerlo manualmente:

Usuario: cuenta de correo
Contraseña: contraseña asociada a la cuenta
Correo entrante:
Dirección: imap-mail.outlook.com
Puerto: 993
Tipo de Cifrado: SSL
Correo saliente:
Dirección: smtp-mail.outlook.com
Puerto: 587
Tipo de Cifrado: TLS




Tecnologia

Cómo traducir textos con python y Google Translate


Si necesitas traducir textos a otros idiomas de manera totalmente automática, Google ofrece la API de su producto Google Translate. Pero tienes que saber que necesitas una API Key de Google y que es de pago.

Una alternativa gratuita es hacer uso de técnicas de Web Scraping para simular que nuestra aplicación es un humano navegando por la Web y recopilar información de forma automática.

 traducir textos con python y Google Translate

Es posible traducir textos con python y Google Translate. Se trata de simular los siguientes pasos:

  1. Entrar en la página del traductor Google Translate.
  2. Introducir el texto original que queremos traducir.
  3. Indicar el idioma de origen o decirle que detecte el idioma en el que está escrito.
  4. Indicar el idioma destino.
  5. Traducir.
  6. Recoger el texto traducido.
  7. Recoger el idioma de origen si le dijimos a Google Translate que detectara el idioma.

Para implementar todos los pasos necesitamos estas librerías de Python:

  • urllib para codificar los parámetros GET.
  • urllib2 para modificar la cabecera HTTP y enviar la petición GET (Request).
  • re para adaptar la respuesta (Response) mediante el uso de expresiones regulares.
  • json para deserializar la respuesta a un objeto Python.

Si te falta alguna de estas librerías utiliza pip como gestor de paquetes e instalalas.  Este enlace te explica cómo instalar pip.

El código, mas abajo comento cómo funciona:

from urllib import urlencode
from urllib2 import urlopen, Request
import re
import json
def get_google_translate(text, translate_lang, source_lang=None):
    if source_lang == None:
        source_lang= 'auto'
    params = urlencode({'client':'t', 'tl':translate_lang, 'q':text.encode('utf-8'),
                       'sl':source_lang})
    http_headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)"}
    request_object = Request('http://translate.google.com/translate_a/t?'+params, 
                     None, http_headers)
    try:
        response = urlopen(request_object)
        string = re.sub(',,,|,,',',"0",', response.read())
        n = json.loads(string)
        translate_text = n[0][0][0]
        res_source_lang = n[2]
        return True, res_source_lang, translate_text
    except Exception, e:
        return False, '', e

En la línea 14 se hace la petición GET donde se le pasa la cabecera modificada para simular que nuestra rutina es un navegador Web. Como parámetros GET se le pasa el texto a traducir así como el idioma de destino y el idioma de origen o ‘auto’ para que detecte el idioma.

La respuesta es un array en el formato javascript:

[[[«Happy Birthday!»,»С днём рождения!»,»»,»S dnom rozhdeniya!»]],,«ru»,,[[«Happy Birthday!»,[4],True,False,627,0,3,0]],[[«С днем рождения !»,4,[[«Happy Birthday!»,627,True,False],[«Happy birthday»,0,True,False]],[[0,16]],»С днём рождения!»]],,,[],1]

Necesita de una pequeña adaptación para ser un JSON compatible y de esto se encarga la línea 15 de código mediante una expresión regular que añade un cero a cualquier aparición de item vacío. La línea 16 deserializa el JSON para después leer el texto traducido y el idioma de origen.

Test:

result, code, text = get_google_translate(u'Hola Mundo!', 'en')
print result, code, text
result, code, text = get_google_translate(u'Hello World!', 'es')
print result, code, text
result, code, text = get_google_translate(u'привет мир', 'en')  
print result, code, text
result, code, text = get_google_translate(u'مرحبا العالم', 'en') 
print result, code, text
result, code, text = get_google_translate(u'Ciao Mondo', 'pt', 'it') 
print result, code, text

En todas las traducciones, excepto en la última, indicamos que detecte automáticamente el idioma del texto a traducir.

Resultado:

True es Hello World!
True en ¡Hola Mundo!
True ru hello world
True ar Hello world
True it Olá Mundo

Comprobamos que detecta que el idioma de origen es el español (es), inglés (en), ruso (ru) y árabe (ar) respectivamente. Por último indica que el idioma es el italiano (it) que es el indicado. Ahora podemos traducir textos con python y Google Translate fácilmente.