jcatala.net

Compartint el coneixement

UNIX

GNU/Linux

Drupal i PHP

XHTML/CSS

Python

Android

Viatges

Off Topic



El meu Twitter El meu Flickr El meu Youtube El meu Instagram El meu Linkedin El meu Tumblr El RSS de la pagina
Logo Jcatala

Limitant el número de caràcters a les descripcions de les notícies de Klaku

26 de Setembre de 2016 per joan

Limitant el número de caràcters a les descripcions de les notícies de Klaku
Per tal de maquetar bé el llistat de notícies populars i notícies pendents o ĵuŝaj novaĵoj, aleshores tant des del PHP/MySQL he limitat a 180 caràcters des de la part del Frontend de Bootstrap com ara, he limitat el formulari d'inserció de les notícies.

El javascript que controla el textarea fent un contador i, si es passa de 180 caràcters atura l'escriptura i pinta el text de color roig:

<script type="text/javascript">
function limita(elEvento, maximoCaracteres) {
  var elemento = document.getElementById("camp_priskribo");

  // Obtener la tecla pulsada
  var evento = elEvento || window.event;
  var codigoCaracter = evento.charCode || evento.keyCode;
  // Permitir utilizar las teclas con flecha horizontal
  if(codigoCaracter == 37 || codigoCaracter == 39) {
    return true;
  }

  // Permitir borrar con la tecla Backspace y con la tecla Supr.
  if(codigoCaracter == 8 || codigoCaracter == 46) {
    return true;
  }
  else if(elemento.value.length >= maximoCaracteres ) {
    return false;
  }
  else {
    return true;
  }
}

function actualizaInfo(maximoCaracteres) {
  var elemento = document.getElementById("camp_priskribo");
  var info = document.getElementById("info");

  if(elemento.value.length >= maximoCaracteres ) {
    info.innerHTML = "<font color='red'>Maksimume "+maximoCaracteres+" literojn</font>";
  }
  else {
    info.innerHTML = "Eblas skribi "+(maximoCaracteres-elemento.value.length)+" pliajn literojn";
  }
}
</script>

I el HTML de Bootstrap és el següent:

<textarea class="form-control" id="camp_priskribo" name="camp_priskribo" placeholder="Skribu la titolon"  onkeypress="return limita(event, 180);" onkeyup="actualizaInfo(180)"></textarea>

<div id="info">Eblas skribi maksimume 180 literojn</div>

Script amb Python per a crear al vol un llistat de més de 100 VirtualHosts per a l'Apache Web Server

21 de Setembre de 2016 per joan

Python per a generar els VirtualHosts a Apache Web Server
Avui hem fet un script per a exportar 120 webs que tenim a un servidor amb NGINX a un altra amb Apache Web Server, per a provar el rendiment, entre d'altres coses. Com tenim una base de dades amb el nom dels dominis, el codi del directori on els tenim albergats, hem fet un script per a que ens munte els VirtualHosts automàticament.

Repensant KLAKU des de zero amb Bootstrap, PHP i Javascript

20 de Setembre de 2016 per joan

KLAKU.NET

Després d'un estiu on cada setmana anava avançant alguna funcionalitat durant algunes hores lliures que trobava, vaig anar fent coses com Migrant un Drupal complet a un nou Drupal o nodes entre distints Drupals && Evolució, anades d'olla i millores al projecte web Klaku.net && Exportant tots els valors dels vots de Vote up/down de Drupal a una base de dades externa && Exportem dades des de Drupal 6 a un repositori central CSV i importem en les noves taules ara ja tenim funcionant KLAKU amb Bootstrap i PHP des de zero.

El sistema de puntuació es made in Joan sense widgets ni snippets externets, els ususaris i contrasenyes són els usuaris de l'antiga Klaku amb Drupal, encara que ara amb encriptació SHA1 més un algoritme propi per complicar-ho més, jeje, també les notícies, les categories i els comentaris són heretats de l'antiga web.

Encara queden algunes coses per fer, com urls netes, un sistema anti-spam, i altres coses, i també vindran problemes i petades màximes de coses que tal vegada no s'han analitzat bé, però ja està tot en marxa i a bon ritme ho anirem implementant.

Canviant des de la consola característiques dels camps de les taules a MySQL

19 de Setembre de 2016 per joan

Canviant les característiques dels camps de les taules a MySQL

Ahir vaig detectar que les contrasenyes dels usuaris de Klaku, amb SHA1 i un algoritme de cifrat propi, eren massa llargues, i necessitava ampliar les característiques del camp de les contrasenyes. Per això aquestos apunts d'ací baix per a canviar, des de la consola del terminal, alguns camps de les meues taules i les seues característiques.

La manera de renombrar el nom i les característiques d'un camp seria:

ALTER TABLE nom_de_la_taula CHANGE camp camp_canviar noves_propietats;

Tal com veieu a la captura del terminal, ho vaig fer amb:

ALTER TABLE uzanto CHANGE pasvorto pasvorto varchar(200);

Si vullguerem afegir una columna que siga la clau primària:

ALTER TABLE nom_de_la_taula ADD PRIMARY KEY(nom_columna);

Si vullguerem que una taula numèrica tinga un valor autoincremental a partir del número 390 (per exemple) seria:

ALTER TABLE nom_de_la_taula AUTO_INCREMENT=390;

Si volem canviar el nom i el tipus de data d'una columna (el primer exemple que he mostrat):

ALTER TABLE nom_de_la_taula CHANGE nom_antic_columna nom_nou_columna VARCHAR(20);

Mostrant un block colapsat dins d'un Panel de Drupal fàcilment

16 de Setembre de 2016 per joan

Mostrant un block colapsat dins d'un Panel de Drupal fàcilment

La idea és fer un formulari de satisfacció baix de totes les pàgines, però que ens aparega colapsat, i quan l'usuari fa clic sobre el títol, es desplega i et mostra el formulari pertinent.

Caldrà tenir instal·lat el Webform, per als formularis, el Panels Style Collapsible i el Collapsiblock, perquè els webform els transformarem a Block, i el farem amb l'efecte "collapsible".

L'afegim al Panel, com de costum, a la secció 'miscelanious', i una vegada el tenim posicionat, modifiquem la part de l'estil i li direm collapsible. I ja està.

Mostrant un block colapsat dins d'un Panel de Drupal fàcilment

Si volem que el formulari no es mostre a totes i cada una de les webs, anirem a la part de configuració del Block (perquè recorda que hem convertit eixa regió del Panel en un block) i afegim les pàgines que volem amagar, com de costum es fa als Blocks de Drupal.

Finalment, com que tenim una web amb el mòdul i18n en dues llengues, he tocat les regles de visibilitat per a que es mostre un formulari en castellà quan estem a la llengua espanyol, i un formulari en català quan l'usuari navega en català.

Un script monitoritzador que m'avisa si tinc el meu servidor web caigut

15 de Setembre de 2016 per joan

Avui hem preparat un script que ens avisa de si caigudes les 118 webs que portem. La idea no és monitoritzar cada web per separat, sinó directament el servidor web.

L'script en qüestió mira l'estat 200, si és distint aleshores ens envia un correu. Ací tens el llistat de tots els estats de l'HTTP. I ací el codi:

#!/usr/local/bin/bash
url="LA_TEUA_WEB.net";
response=$(curl -s -I -L $url | grep HTTP);

status=${response#* };
status=${status:0:3};

if [ "$status" != "200" ]
then
   echo "ATENCIÓ: LES WEBS MUNICIPALS ESTAN CAIGUDES. HI HA ALGUN PROBLEMA AL SERVIDOR WEB." | mail -s "LES WEBS NO ESTAN FUNCIONANT" "EL_TEU_EMAIL@dipcas.es"
fi

He ficat l'script al directori /usr/bin de la meua Raspberry domèstica amb FreeBSD que tinc 24x7 funcionant, nuvolet.benicass.im. A continuació li donem permisos totals d'execusió:

# chmod 777 /usr/bin/script_pwm_caigut.sh

Finalment afegim una línea al crontab per a que es vaja executant cada 5 minuts:

*/5 * * * *     /usr/bin/script_pwm_caigut.sh

I ja està pujat al meu repositori d'scripts del GIT https://github.com/joancatala/scripts-sepam
Ja tenim configurat el robotet.

Recuperant discos durs, tarjetes SD i dispositius USB defectuosos

13 de Setembre de 2016 per joan

Recuperar disc dur USB dades
En aquest xicotet article vull explicar algunes maneres de recuperar fitxers o particions de distints dispositius informàtics.

Ja fa temps, vaig recuperar les fotos David (aka Cholpo), perquè quan estava a Aquarama va obrir la càmera i crashhhh. La càmara ja no reconeixia cap de les 200 fotos que havia fet durant les seues vacances per Benicàssim. Però bé, amb recuva es pot arribar a veure les fotos, encara que el format de la SD card estiga trencat. Lo únic [important] és no tornar a encendre la càmara i fer fotos.

Provant Pico TTS per a que l'ordinador parle

10 de Agost de 2016 per joan

Ahir al matí vaig crear un script que agafa les últimes incidències del Mantis Bug Tracker i l'ordinador les parla amb Festival o Mbrola. I avui he provat també una altra manera d'obtenir el resultat de text en veu computeritzada, amb Pico TTS (libttspico0 a Debian GNU/Linux), però úniques llengües vàlides són: en-US / en-GB / de-DE / es-ES / fr-FR / it-IT.

Amb cat exemple.txt | xargs -I exemple.txt -0 pico2wave -l ca-ES -w resultat.wav exemple.txt podem obtenir alguns exemples:

Test 1

pico2wave -l es-ES -w audio.wav "No es una voz perfecta pero no está nada mal. Se comprende perfectamente, pronuncia suficientemente bién las palabras. Entona bastante bién las frases y, en general, se asemeja a una voz humana, pese a no serlo." && aplay audio.wav

Test 2

pico2wave -l es-ES -w audio.wav "Los informáticos trabajan en diversas áreas de la información tecnológica, desde el amplio mundo del software, hasta el hardware, la electrónica y el mundo de los sistemas de redes." && aplay audio.wav

Test 3

pico2wave -l es-ES -w audio.wav "Soy una voz computerizada, parecida a festival o a Mbrola, pero un poco más mejorada. ¿No te parece?" && aplay audio.wav

Parlant amb Mbrola les noves incidències del Mantis Bug Tracker

9 de Agost de 2016 per joan

Situació: tenia un parell d'hores lliures aquest matí d'agost, i m'he fet un script que agafa les incidències del Mantis Bug Tracker (des dels titulars RSS) amb curl, i comprova si hi ha una nova, en cas de que sí, l'ordinador parlarà amb espeak i mbrola, el sintetizador lliure de veu computeritzada. ;-)

Tinc les tres veus, la del speak amb festival, la del mbrola es1 i la del mbrola es2:

Veu Festival
espeak.mp3 + un exemple

Veu Mbrola es1
mbrola-es1.mp3 + un exemple

Veu Mbrola es2
mbrola-es2.mp3 + un exemple

I ací l'script (amb el RSS llevat, perquè és el meu usuari):

#!/bin/bash

# Comprovacio 2 on creem el fitxer /tmp/segon_resultat.txt
curl -s 'xxxxxx_aci_el_teu_RSS__xxxxxx' |sed 's/</\n/g'|grep 'title>'|sed -e '/^\// d' -e 's/title>/ /g'| head -n 5 | iconv -f utf-8 -t utf-8 > ~/segon_resultat.txt

# Li llevem les dues primeres linies on diu "MantisBT sepam - INCIDENCIAS"

tail -n+3 ~/segon_resultat.txt >> ~/segon_resultat2.txt
rm ~/segon_resultat.txt

# Netejem el fitxer per a llevar-li el numero de ticket

cut -c 11- ~/segon_resultat2.txt > ~/segon_resultat.txt
rm ~/segon_resultat2.txt

# Ara anem a comparar-los: resultat.txt i segon_resultat.txt i si son distints crearem "resultat_final.txt" amb
# les incidencies noves del Mantis.

grep -Fvf ~/primer_resultat.txt  ~/segon_resultat.txt > ~/resultat_final.txt

# Ara anem a contar les linies del fitxer final "resultat_final.txt" i si tenim al menys una, avisarem de que anem a parlar.

contadorLinies=$(cat -n resultat_final.txt | tail -n 1 | cut -f1 | xargs)

if [ $contadorLinies \> "0" ];
   then
echo "es major que 0"
sed -i '1s/^/Nueva incidencia en el Mantis. \n/' ~/resultat_final.txt
   else
echo "no es major que 0"
fi;

# Aquest 'sed' ens serveix per a esborrar la paraula 'Privado' del títol, que sempre deixa l'RSS del Mantis
cat ~/resultat_final.txt | sed -e 's/\<Privado\>//g' > resultat_final2.txt

# Ara parlem amb mbrola i tornem a fer sonar el 'beep' per acabar
mv ~/resultat_final2.txt ~/resultat_final.txt
cat ~/resultat_final.txt |  espeak -v mb-es1


# Esborrem els fitxers generats (execepte primer_resultat.txt, que és el controlador
# amb les últimes incidències) i tanquem.
mv ~/segon_resultat.txt  ~/primer_resultat.txt
rm ~/resultat_final.txt

Un botó amb colors degradats amb CSS3

26 de Juliol de 2016 per joan

Ací un truquet per tenir botons, estil bootstrap, amb CSS3, on podem fer degradats entre dos colors i tenir un borde distint.

El botonet seria:

<p class="submit">
<input type="submit" name="login" class="button" value="Entrar" />
</p>

I afegiriem un exemple d'estil per als degratats de la següent manera:

.button{
  border: solid 1px #da7c0c;
  background: #f47c20;
  background: -webkit-gradient(linear, left top, left bottom, from(#91dc5a), to(#32a1ca));
  background: -moz-linear-gradient(top,  #91dc5a,  #32a1ca);
  filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#91dc5a', endColorstr='#32a1ca');
  color: #fff;
  padding: 7px 12px;
-webkit-border-radius:4px;
   -moz-border-radius:4px;
        border-radius:4px;
  float: right;
  cursor: pointer;
}

.button:hover{
  background: #f47c20;
  background: -webkit-gradient(linear, left top, left bottom, from(#91dc5a), to(#32a1ca));
  background: -moz-linear-gradient(top,  #91dc5a,  #32a1ca);
  filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#91dc5a', endColorstr='#32a1ca');
}