53 post/s with categoría Programación


Convén usar o botón/ligazón «Ler máis» na portada dunha web?

A resposta non é un simple si ou non, vai depender de varios factores, por exemplo se buscamos clics ou amosar moitos posibles artigos, esta opción pode ser interesante.

Se os artigos non son moi extensos ou presentamos noticias máis ou menos breves penso que é mellor prescindir do seu uso, ter que saír da portada para ler o resto da noticia é incómodo, obriga a máis clics. Por unha banda hai que saír da portada e logo ó volver, hai que buscar o punto onde se estaba, se estamos ó principio da portada aínda pode vale, pero se estamos en noticias de abaixo (máis antigas) xa é máis molesto, isto dese o móbil é peor xa que adoita haber unha soa liña. Aínda así, seguro que hai a quen lle gusta...

A práctica do «Ler máis» a modo de ver o artigo completo (cousa distinta é o uso para que presente información complementaria e ligue a outras partes da web ou externas) pode empregarse para obter a máis clics do visitante, para logo contalos nas estatísticas, amosar máis anuncios...

As web de noticias poden usar o «Ler máis» para dificultar que sexan copiadas as noticias completas de xeito doado por robots para replicalas noutros sitios.

Desde o punto de vista dos buscadores, estes indexan mellor o contido da portada se está o texto completo do artigo.

Como desvantaxe está que cando se accede á páxina inicial do sitio, se hai textos moi logos en cada publicación (manuais, artigos moi extensos...) a carga pode ser pesada e lenta, neste caso pode que sexa xustificado o uso de ler máis ou facer os títulos ligables á publicación completa. Este acurtado tamén permite que o visitante vexa máis doadamente múltiples publicacións e polo tanto sexa máis posible que faga clic nalgunha.

Miña opinión é que hai que tratar de poñerse no lugar do visitante e ver en cada caso que é o que lle pode resultar máis cómodo e agradable.

Fontes:
ux.stackexchange.com
webmasters.stackexchange.com

Migrando de python2 a python3

Notas de cousas que foron xurdindo...

Para a conversión «automática» está a función:

$ 2to3 -w cartafol

A opción -w fai que amais de amosarse por pantalla se escriban no ficheiro as modificacións.

Neste caso ó poñer un cartafol o 2to3 revisa todos os ficheiros do cartafol e subcartafoles contidos.

Ordenación

Ordenar a lista [3, 1, 'T', 5, 2, 4] en python 2.7.13 é doado, chega con aplicar a función sort().

Python 2.7.13
>>> datos = [3, 1, 'T', 5, 2, 4]
>>> datos.sort()
>>> datos
[1, 2, 3, 4, 5, 'T']

Isto en python 3 non funciona porque a lista contén números e cadeas de texto, polo que dá erro.

Python 3.5.3
>>> datos = [3, 1, 'T', 5, 2, 4]
>>> datos.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()

Buscando a solución que máis me gustou foi a fornecida por Siva TP en stackoverflow.

A cousa quedou así:

ints = list(filter(lambda x: type(x) == int, datos))
strs = list(filter(lambda x: type(x) == str, datos))
datos = sorted(ints) + sorted(strs)

Para dicionarios hai outras solucións que de momento no probei como a que indica peterbe.

Ordenando unha lista de listas

Por exemplo:

Python 2.7.13
>>> datos = [['mazas', 5], ['peras', 4], ['laranxas', 6]]
>>> datos.sort(lambda x, y: cmp(y[1],x[1]))
>>> datos
[['laranxas', 6], ['mazas', 5], ['peras', 4]]
Python 3.5.3
>>> datos = [['mazas', 5], ['peras', 4], ['laranxas', 6]]
>>> datos.sort(lambda x, y: cmp(y[1],x[1]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must use keyword argument for key function

a solución neste caso é por exemplo:

Python 3.5.3
>>> datos = sorted(datos, key=lambda x: -x[1])
>>> datos
[['laranxas', 6], ['mazas', 5], ['peras', 4]]

Isto está a ordenar polo segundo elemento das listas de xeito descendente (neste caso porque é un valor numérico), tamén se podería ordenar por dous campos por exemplo:

datos = sorted(datos, key=lambda x: (-x[1], x[0])

Fonte: L3viathan en stackoverfolow

Escribindo nun ficheiro comprimido gz

datos = "cadea de texto"
with gzip.open(filename, 'wb') as f:
    f.write(datos)
    f.close()

Neste caso ó escribir (f.write()) o erro era:

memoryview: a bytes-like object is required, not 'str'
A solución empregar a función encode()
datos = "cadea de texto"
with gzip.open(filename, 'wb') as f:
    f.write(datos.encode())
    f.close()
Fonte: stackoverflow.

Para converter unha cadea de tipo byte en string , ven ser a inversa do caso anterior, sería:

value = value.decode('utf-8')

Fonte: stackoverflow.

Activar o atallo para duplicar a liña no Eclipse no escritorio XFCE

O atallo do eclipse para duplicar unha liña é «Control+Alt+Frecha Arriba», e resulta que no contorno de escritorio XFCE ese mesmo atallo serve para ir ó espazo de traballo superior o que fai que o do eclipse non funcione.

Para solucionar isto, no meu caso optei por borrar o atallo do XFCE. Para elo fun ó xestor de xanelas, logo á lapela teclado onde buscando la lista atopei o susodito atallo o cal limpei premendo o botón Limpar.

Fonte: Superuser.com

Engadindo un segundo dominio ó servidor

Neste caso o sitio vai estar só no porto seguro (443 que é o https). Nun artigo anterior xa comentei como certificar o servidor polo que neste só comentarei como obter o certificado para o novo dominio. O proceso que seguín é o seguinte:

No meu caso un servidor con Debian 9 Stretch

Engadín o novo dominio noficheiro hosts:

# nano /etc/hosts

e engadín a liña:

127.0.0.1www.novo-sitio.com

Engadín un novo sitio no apache, para elo executei a orde:

# nano /etc/apache2/sites-available/novo-sitio.conf

Dentro puxen:


    ServerAdmin webmaster@novo-sitio.com
    ServerName www.novo-sitio.com
    ServerAlias www.novo-sitio.com

    # As catro liñas de abaixo son para o certificado SSL/TLS
    SSLEngine On
    SSLCertificateFile    /var/lib/acme/live/www.novo-sitio.com/cert
    SSLCertificateKeyFile /var/lib/acme/live/www.novo-sitio.com/privkey
    SSLCertificateChainFile /var/lib/acme/live/www.novo-sitio.com/fullchain

    DocumentRoot /home/www-data/novo-sitio

    
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    
    
    CustomLog /var/log/apache2/access_novo-sitio.log common
    ErrorLog /var/log/apache2/error_novo-sitio.log

O seguinte paso que fixen foi solicitar o certificado para o novo sitio, para elo:

# acmetool want www.novo-sitio.com

Logo comprobei o estado dos certificados no equipo:

# acmetool status

Debería aparece o anterior dominio do aloxado no servidor máis o novo sitio que acabo de dar de engadir.

De seguido comprobei a configuración do Apache coa orde:

# apache2ctl configtest

Debería aparecer como resultado «Syntax Ok»

Se todo está ben, recárgase o Apache:

# service apache2 reload

Personalizar o mapa do teclado en Debian 9 Stretch

As veces podemos querer modificar algunhas teclas para ter caracteres máis accesibles. É por iso que existen distintas variantes das distribucións xerais, unhas poden ser para mellorar a dispoñibilidade do idioma no que se escribe, outras en función das tarefas que se realizan por exemplo dvorak para os escritores de texto, para os que fan programación...

No meu caso quixen facer unha variante programador que afecta ás teclas que están a carón do ñ. Estas teclas son as únicas que implica empregar a mesma man para o seu uso. As teclas que se premen coa man esquerda e Alt Gr (que se preme coa esquerda) non foron alteradas.

selecionar_teclado

O proceso para engadir esta variante foi:

Modificar o ficheiro /usr/share/X11/xkb/symbols/es engadindo seguinte texto:

partial alphanumeric_keys
xkb_symbols "esp" {

    include "es(basic)"

    name[Group1]="Spanish (Spain, programmer)";   
    key <AD11>	{ [ asterisk, bracketleft, dead_grave, dead_abovering ] };
    key <AD12>	{ [ plus, bracketright,  dead_circumflex, dead_macron ]	};
    key <AC11>	{ [ dead_acute, braceleft,  ccedilla ]	};
    key <BKSL>	{ [ dead_diaeresis, braceright, Ccedilla ]	};
};

Modificar os ficheiros do cartafol /usr/share/X11/xkb/rules/ chamados base.lst e evdev.lst engadindo o seguinte texto no apartado ! variant:

  esp             es: Spanish (Spain, programmer)

Modificar os ficheiros do cartafol /usr/share/X11/xkb/rules/ chamados base.xml e evdev.xml engadindo o seguinte texto no apartado <variantList>:

        <variant>
          <configItem>
            <name>esp</name>
            <description>Spanish (Spain, programmer)</description>
            <languageList>
              <iso639Id>esp</iso639Id>
            </languageList>
          </configItem>
        </variant>

Unha vez feito o anterior xa se pode seleccionar o teclado desde o menú Configuración->Teclado->Disposición

selecionar_teclado

Substituir salto de liña por salto de parágrafo no libreoffice

No menú Atopar e substituír, premer en Outras opcións, activar as expresións regulares

En buscar poñer: [\n]

En substituír poñer: \n (sen as chaves)

Isto é útil cando pegamos texto dunha web, correo electrónico, editor de texto simple... con saltos de liña.

Instalar wxpython phoenix no Debian 9 Stretch baixo Python 3

Non logrei que funcionase dentro da contorna virtual, polo que o instalei fora. Para que compile é preciso instalar previamente os seguintes paquetes:

$ sudo apt-get install python3-gst-1.0 gstreamer1.0 
$ sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
$ sudo apt-get install libgtk2.0-dev libwebkitgtk-dev libwebkitgtk-3.0-dev
$ sudo apt-get install mesa-common-dev libglu1-mesa-dev

Logo instalei o pip para python 3:

$ sudo apt-get install python3-pip

E finalmente:

$ sudo pip3 install --upgrade --pre -f https://wxpython.org/Phoenix/snapshot-builds/ wxPython

Instalou!!

user@debianstretch:~$ sudo pip3 install --upgrade --pre -f https://wxpython.org/Phoenix/snapshot-builds/ wxPython
[sudo] password for user: 
Collecting wxPython
  Using cached https://wxpython.org/Phoenix/snapshot-builds/wxPython-4.0.0b2.dev3307+d7cae3f.tar.gz
Requirement already up-to-date: six in /usr/lib/python3/dist-packages (from wxPython)
Building wheels for collected packages: wxPython
  Running setup.py bdist_wheel for wxPython ... done
  Stored in directory: /root/.cache/pip/wheels/84/7f/a5/c8259920ef35976c848549797679223097cb7bd964a492d505
Successfully built wxPython
Installing collected packages: wxPython
Successfully installed wxPython-4.0.0b2.dev3307+d7cae3f
user@debianstretch:~$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>> wx.version()
'4.0.0b2.dev3307+d7cae3f gtk3 (phoenix)'
>>> 
user@debianstretch:~$

Para usar as wxpython dentdro de virtualenv fixen unha ligazón, no meu caso, en debian 9 Stretch, foi:

ln -s /usr/local/lib/python3.5/dist-packages/wx* /home/usuario/.virtualenvs/app-py3/lib/python3.5/site-packages/

warning: implicit declaration of function 'g_sprintf'

Compilando o xfce4-timer-plugin (v 1.6.0), xurdeume este erro. A solución foi engadir esta liña ó principio do documento, debaixo da liña #include

#include <gtk/gtk.h>
// Engádese a liña de abaixo
#include <glib/gprintf.h>  // for gcc's warning: implicit declaration of function 'g_sprintf'

Instalación do certificado Let's Encrypt para o sitio web

Deixo aquí unhas notas de como instalar un certificado de servidor seguro de Let's Encrypt á meu sitio web. Let's Encrypt fornece certificados para os nosos servidores de balde (gratis).

Inicialmente probei o instalador certbot mais non me foi ben, non acababa de verificar o sitio. Logo vendo algún foro de web2py vin que recomendaba o uso de acme que foi o que finalmente empreguei para obter o certificado do sitio web.

Preparación do cartafol para verificar que o sitio é meu

O primeiro que tiven que facer foi crear un cartafol para que Let's Encrypt puidese verificar que o dominio é meu. Normalmente sería indicar o cartafol raíz do sitio web, por exemplo «/var/www/», no meu caso ó usar web2py, a solución pasa por crear un alias no sitio na configuración do apache, no meu caso foi engadir dentro do virtualhost o seguinte alias tal como indican na guía de acme:

Para apache 2.4 en diante:

Alias "/.well-known/acme-challenge/" "/home/www-data/lets_encrypt/"
<Directory "/home/www-data/lets_encrypt">
  AllowOverride None
  Options None
  Require all granted
</Directory>

Para apache 2.2 e anteriores:

Alias "/.well-known/acme-challenge/" "/home/www-data/lets_encrypt/"
<Directory "/home/www-data/lets_encrypt">
  AllowOverride None
  Options None
  # Order allow, deny  OLLO! no meu caso tiven que comentar esta liña
  Allow from all
</Directory>

Instalación de acme

Para elo seguín as instrucións indicadas na guía:

# echo 'deb http://ppa.launchpad.net/hlandau/rhea/ubuntu xenial main' > \
 /etc/apt/sources.list.d/rhea.list
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \
9862409EF124EC763B84972FF5AC9651EDB58DFA
# apt-get update
# apt-get install acmetool

Unha vez instalado executei a orde:

# acmetool quickstart
  • Tipo de certificado que queremos: opción 1, live
  • Como imos verificar o sitio: opción 1, WEBROOT
  • Indico a ruta que indiquei no alias (na configuración do apache): /home/www-data/lets_encrypt/

Con isto queda o sitio verificado, o seguinte paso é a solicitude dos certificados, para elo empregase a orde:

# acmetool want www.damufo.com

Se quixese tamén o certificado para o sitio sen as www empregaría a orde:

# acmetool want damufo.com www.damufo.com

Os certificados obtidos son gardados en «/var/lib/acme/live/www.damufo.com/».

Para ver o estado dos certificados solicitados, emprégase a orde:
# acmetool status

Finalmente queda engadir os certificados ó virtualhost seguro do apache (o do porto 443), para elo engádese dentro das etiquetas de dito virtualhost o seguinte:

SSLEngine on
SSLCertificateFile    /var/lib/acme/live/www.damufo.com/cert
SSLCertificateKeyFile /var/lib/acme/live/www.damufo.com/privkey
SSLCertificateChainFile /var/lib/acme/live/www.damufo.com/fullchain

Deixo aquí esta ligazón sobre a configuración do SSL do apache que fornece Mozilla por se é de interese.

Finalmente queda comprobar que a sintaxe do ficheiro apache está ben, para elo empregase a orde:

# apache2ctl configtest

E se todo está ben, reiniciase o apache coa orde:

# service apache2 restart

Se tivese outro sitio (outro dominio no mesmo servidor)

# acmetool want www.outro-dominio.com

Se quixese borrar o certificado dun dos sitios, faise con unwant

# acmetool unwant www.damufo.com

Forzar https e uso de www no Apache

Deixo aquí estas notas de como configurar o Apache para forzar ó sitio a usar https e que o emprego de www. antes do nome de dominio.

Para elo fixen uso do módulo Rewrite do Apache.

O primeiro foi engadir dentro de <VirtualHost *:80> as liñas:

 RewriteEngine on
# Forzar o emprego de https
  RewriteCond %{HTTPS} off
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

Con isto, o tráfico é redirixido do porto 80 ó 443 que é o que emprega a conexión segura https.

Logo, queda forzar ó emprego de «www.» no caso de non estar presente antes do nome do dominio, para elo engadín dentro de <VirtualHost *:443> as liñas:

RewriteEngine on
  #Forzar o emprego de www.
  RewriteCond %{HTTP_HOST} ^damufo.com [NC]
  RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI}

Se, pola contra, quixese forzar ó NON emprego de «www.» antes do nome do dominio, no canto de engadir o de arriba, o que faría sería engadir:

  RewriteEngine on
  # Forzar o emprego de non-www
  # RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
  # RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

É imporante que dentro do virtualhost estea establecido o nome do servidor, no meu caso:

ServerName damufo.com
Amosando 1 a 10 de 53