Implantación (deployment) de wheezy.web con apache

Wheezy.web tal como indica a páxina do proxecto é lixeiro, de alto rendemento, infraestrutura web WSGI de alta competencia cos principais recursos para construír unha web moderna.

Partindo de cero comecei polo que indican en wheezy.web, instalar mediante o:
# easy_install wheezy.web

Instalando a versión wheezy.web 0.1.485 sobre python2.7. A versión do SO é un Debian Jessie instalado ad hoc para facer probas con esta infraestrutura web.

Logo puxen no cartafol /home/www-data/probaweb2/ os ficheiros wsgihandler.py e o hello.py

Nesta entrada Empregar wsgi en modo demo xa comentei como configurar o apache.

O wsgihandler.py contén:

import os
import sys

home = '/home/www-data/'
sys.path.append(home + 'probaweb2')
os.chdir(home + 'probaweb2')

from hello import main

def application(environ, start_response):
    environ['SCRIPT_NAME'] = ''
    return main(environ, start_response)

E o hello.py é o Hello world de wheezy.web:

""" Minimal helloworld application.
"""

from wheezy.http import HTTPResponse
from wheezy.http import WSGIApplication
from wheezy.routing import url
from wheezy.web.handlers import BaseHandler
from wheezy.web.middleware import bootstrap_defaults
from wheezy.web.middleware import path_routing_middleware_factory


class WelcomeHandler(BaseHandler):

    def get(self):
        response = HTTPResponse()
        response.write('Hello World!')
        return response


def welcome(request):
    response = HTTPResponse()
    response.write('Hello World!')
    return response


all_urls = [
    url('', WelcomeHandler, name='default'),
    url('welcome', welcome, name='welcome')
]


options = {}
main = WSGIApplication(
    middleware=[
        bootstrap_defaults(url_mapping=all_urls),
        path_routing_middleware_factory
    ],
    options=options
)


if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    try:
        print('Visit http://localhost:8080/')
        make_server('', 8080, main).serve_forever()
    except KeyboardInterrupt:
        pass
    print('\nThanks!')

Logo tocou reiniciar o apache:

# service apache2 restart

E no navegador ir á ip do servidor seguido de /proba, por exemplo: http://localhost/proba

Empregar wsgi en modo demo

Neste artigo explican como empregar o mod_wsgi en modo demo e cun número fixo de fíos. Polo que entendo o número fixo de fíos fai que a xestión dos mesmo sexa fixo evitando que sexa apache quen os xestione o que fará que se aforre uso de CPU.

No ficheiro do sites-enable engadín dentro do :

        WSGIDaemonProcess proba user=www-data group=www-data \
	 	 processes=2 threads=15 display-name=%{GROUP}
        WSGIProcessGroup proba
        WSGIScriptAlias /proba /home/www-data/probaweb/wsgihandler.py
        WSGIPassAuthorization On
        <Directory "/home/www-data/probaweb">
          AllowOverride None #isto non teño claro que sexa necesario
          <Files wsgihandler.py>
            Require all granted
          </Files>
        </Directory>

No ficheiro /home/www-data/probaweb/wsgihandler.py puxen:

# -*- coding: utf-8 *-*

import os, sys

sys.path.append('/home/proba/probaweb')

def application(environ, start_response):

    output = "Hello world!"
    start_response('200 OK',
                   [('Content-Type',
                     'text/html; charset=utf-8')])

    return output

Extraer audio dun video desde debian

Tiña un vídeo ó cal quería extraerlle o son. Sobre todo para que me ocupase menos para elo, primeiro instalei o ffmpeg:

# apt-get install ffmpeg

Tendo en conta que o ficheiro a converter se chamaba video_a_extraer_audio.mp4, logo executei a orde:

$ ffmpeg -i  video_a_extraer_audio.mp4 audio_extraido.mp3

Con isto pasoume o son ó ficheiro chamado audio_extraido.mp3 o cal puiden reproducir sen problema algún.

mysqltuner tuneando mysql/mariadb!

Instalación, como usuario root executamos:

# cd /usr/local/bin
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
# cd /usr/local/bin
# wget http://mysqltuner.pl/mysqltuner.pl
# chmod +x mysqltuner.pl

Execución:

# /usr/local/bin/mysqltuner.pl

VirtualBox 4.3.32

Despois de actualizar o Debian de Wheezy a Jessie deixaron de funcionar os controladores USB polo que non podía conectar nada ó sistema operativo convidado.

Resulta que o problema estaba en que no Jessie a versión do VirtualBox é a 4.3.32, máis as guest additions que están dispoñibles son as 4.3.18 a versión que lle corresponde non está polo menos eu no a atopei.

Buscando logrei atopar un sitio para a súa descarga, o iso está aquí:

http://download.virtualbox.org/virtualbox/4.3.32/

Instaleinas e novamente volveu funcionar a detección de dispositivos USB!!

Engadir atallos para recortar e redimensionar o Mirage

Este pequeno aplicativo para ver imaxes o cal permite modificacións básicas como recortar e redimensionar non ven con atallos de serie para estas funcións.

Iso fixo que mirase de engadirllas. Resulta que é moi doado grazas a python, a miña linguaxe de programación favorita.

Para elo fun modificar ó ficheiro mirage.py que está en /usr/lib/python2.7/dist-packages/mirage.py e modifiquei as liñas 355 e 356 engadindo os atallos, quedaron así:

('Crop', None, _('_Crop...'), '<Shift>X', _('Crop Image'), self.crop_image),
('Resize', None, _('R_esize...'), '<Shift>R', _('Resize Image'), self.resize_image),

Outro cambio que realicei no meu caso é

crop_pixbuf, image_width, image_height = self.get_pixbuf_of_size(self.currimg_pixbuf_original, 400, self.zoom_quality)

por:

crop_pixbuf, image_width, image_height = self.get_pixbuf_of_size(self.currimg_pixbuf_original, 700, self.zoom_quality)

Instalar última versión de LibreOffice no Debian Jessie

Comecei por actualizar as fontes de software cos Backports

# nano /etc/apt/sources.list

Hai varios sitios que os fornecen, elixín este:

# Backports
deb http://ftp.es.debian.org/debian jessie-backports main contrib non-free
deb-src http://ftp.es.debian.org/debian jessie-backports main contrib non-free

Gardei as modificacións (Ctrl+O Enter Ctrl+X) e actualicei a base de datos.

# apt-get update

Logo instalei a última versión de LibreOffice desde os “Backports”:

# apt-get -t jessie-backports install libreoffice

Finalmente e co obxectivo de eliminar paquetes obsoletos executei:

# apt-get upgrade

Feito!

Nalgún sitio vin que recomendaban volver a comentar os backports e facer novamente un apt-get update.

Fonte: linuxgnublog

Como montar disco vdi (do virtualbox)

Deixo aquí esta receita.

Lista de discos duros do VirtualBox:

$ VBoxManage list hdds

Da orde de arriba obtemos o UUID:

$ VBoxManage clonehd 01dd352c-3e15-4887-9cb7-dadf0b22f64e imaxe.img -format RAW

Monta a imaxe xerada:

# cd m/media
# mkdir imaxe
# mount -o loop,offset=32256 imaxe.img /media/imaxe

Fonte: espaciolinux.com

Pasar argumentos no Bind con wxPython

Sobre isto atopei esta resposta en stackoverflow a cal me pareceu moi elegante.

A primeira proposta é facer uso de lambda, que emvolba a función e pase outro argumento non especifico de WX:

button = wx.Button(self, 10, "Default Button", (20, 20))
        self.Bind(wx.EVT_BUTTON, lambda event: self.on_click(event, 'algun_valor'), button)

def on_click(self, event, somearg):
	 pass

No caso de que sexa algo moi recorrente fai a proposta dunha función de propósito xeral:

class foo(whateverwxobject):
    def better_bind(self, type, instance, handler, *args, **kwargs):
        self.Bind(type, lambda event: handler(event, *args, **kwargs), instance)

    def __init__(self):
        self.better_bind(wx.EVT_BUTTON, b, self.on_click, 'algun_valor')

Instalar Keepassx 2.0 beta1 no Debian Jessie

Despois de ter instalado o Keepassx 2.0 alfa no Debian Wheezy, agora tocou instalar a seguinte versión do Keepassx na seguinte versión do Debian, a Jessie.

Os pasos que seguín foron: descarguei o ficheiro fonte do Keeepassx, descomprimín e fun ó cartafol descomprimido desde a consola, aí:

$ mkdir build
$ sudo apt-get install cmake build-essential qt4-qmake libgcrypt11-dev zlib1g-dev libqt4-dev checkinstall
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=DEBUG -DWITH_GUI_TESTS=ON
$ sudo make
$ sudo checkinstall

Neste ultimo punto doume o erro: Version Number Does Not Start With Digit

Para elo lancei novamente o

$ sudo checkinstall

e ó principio da a opción de mudar a descrición da versión, aí puxen «2.0.0-beta1» e xa compilou.

Amosando 31 a 40 de 324