WordPress: “Briefly Unavailable for Scheduled Maintenance”
Este error puede aparecer en WordPress en el momento que falla alguna actualización, ya sea del propio wordpress o de un plugin.
Al realizar las actualizaciónes Wordpres crea un archivo en el llamado .maintenance (en la raiz del sitio). Este archivo es el encargado de mostrar el mensaje: “Briefly Unavailable for Scheduled Maintenance”. De tal forma que muestra ese mensaje en tu sitio en lugar de mostrar los errores de PHP mientras se produce la actualización de los archivos necesarios.
Una vez finalizada la actualización, el archivo se borra automáticamente. Si por lo que sea la actualización falla y ese archivo no llega a borrarse se debe borrar a mano. De otro modo sacará constantemente el mensaje de error. Una vez borrado es recomendable ejecutar las actualización que ha fallado para que la aplique correctamente.
Borrado de documentos en Alfresco
Por un lado hay que tener en cuenta que los documentos en alfresco no se borran realmente hasta que el usuario que los ha borrado o el administrador vacia la papelera de reciclaje. Ésta se vacia en la sección User Profile.
Por otro lado se debe tener en cuenta que lo que se hace es un borrado lógico. De tal forma que aunque no podamos verlos desde el interfaz de Alfresco, no se han borrado físicamente del disco. Se mantienen dentro del contentstore en estado huérfano ya que no quedan referencias a él en la base de datos.
Ahora bien, en Alfresco se ejecutan una serie de procesos automáticos de mantenimiento. Se definen en el fichero scheduled-jobs-context.xml que se apoya en el repository.properties para configurarse (localizables ambos en /Alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/). Entre ellos nos encontramos con:
– contentStoreCleanerTrigger: es el encargado de lanzar el bean contentStoreCleaner (definido en el content-services-context.xml) que se encarga de borrar los contenidos huérfanos del contentstore. Por defecto se ejecuta a las 4:00 AM cada día (0 0 4 * * ?). El parámetro system.content.orphanProtectDays establece el número mínimo de días que el contenido debe ser huérfano antes de poder eliminarlo, el valor predeterminado es de 14 días. Es decir, el documento permanecera 14 días en estado huérfano en el contentstore hasta que por fin la tarea Cleaner lo pase al contentstore.deleted.
Nota 1: Si la propiedad system.content.eagerOrphanCleanup está a true los documentos se moverán al directorio contentstore.deleted sin necesidad de la ejecución del contentStoreCleaner.
Nota 2: El contentstore.deleted es responsabilidad del administrador de borrarlo para liberar espacio.
Logging en python
Ejemplo de configuración de log para python. Se utiliza un fichero de configuracion llamado logging.conf, donde se definen dos manejadores uno a nivel de consola StreamHandler y otro a nivel de fichero FileHandler.
– StreamHandler: Escribirá en la salida estandar del sistema las trazas con nivel INFO.
– FileHandler: Escribirá en un fichero llamado Result_Operations.log las trazas con nivel DEBUG.
En ambos se formatean los mensajes para que sólo muestre el contenido del mensaje.
from logging import config .... logging.config.fileConfig('logging.conf') logger = logging.getLogger('root') logger.debug("mensaje para el FileHandler") logger.info("mensaje para ambos")
logging.conf
[loggers] keys=root [handlers] keys=FileHandler,consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=FileHandler,consoleHandler [handler_FileHandler] class=FileHandler level=DEBUG formatter=simpleFormatter args=("Result_Operations.log",) [handler_consoleHandler] class=StreamHandler level=INFO formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format= %(message)s datefmt=
Documentación oficial logging python
Documentación de los tipos de manejadores
SyntaxError: Non-ASCII character ‘\xe9’
En python para definir la codificación del archivo se puede colocar al inicio del archivo la siguiente línea de código.
# -*- coding: utf-8 -*-
De esta forma se solucionan los errores del tipo: Non-ASCII character ‘\xe9’
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.
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
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.
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.
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>
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"); } .... }
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places