Python VS PHP

Aquí teniu un petit script en Python (en sessió interactiva):

>>> llista1 = [('Antoni', 15), ('Pepa', 4), ('Josep', 28)]
>>> print " ".join('Bon dia, el/la %s té %d anys.' % (nom, edat) for nom, edat in llista1)

Bon dia, el/la Antoni té 15 anys. Bon dia, el/la Pepa té 4 anys. Bon dia, el/la Josep té 28 anys.

Sembla molt facil, oi? Anem a provar quin sería l’equivalent en PHP…

<?PHP
$llista1 = array(
array('Antoni', 15),
array('Pepa', 4),
array('Josep', 28),
);

foreach($llistal1 AS $array) {
echo 'Bon dia, el/la ',$array[0],', té ',$array[1],' anys. ';
}
?>

Caram, doncs si que ha quedat llarg, eh? I quin és més fàcil de llegir? :)

Bé, només volia deixar una petita tonteria ara que fa dies que no escrivia res aquí. Això sí, d’aquí poc sentireu d’algun projecte :). Vinga, així es queda el post, que es tard. Bona revetlla a tothom!

Primeres passes cap a mestre de l’univers

Hugolp: Ets un aprenen de màster de l'univers aleshores
RainCT: Sip
Hugolp: Realment no pensava que en ma vida diría alguna cosa com la frase anterior :-S

Doncs això. Després de ja haver-me interessat pel tema del «packaging» un parell de vegades anteriorment, finalment m’he decidit a mirar d’ajudar a solucionar els bugs dels paquets que hi ha a l’Ubuntu.

Als que no ho sàpiguen, l’enigmàtic nom d’aquesta entrada prové del nom que rep el grup que fa aquesta tasca: MOTU (Masters of the Universe), fent referència al repositoris «universe» i «multiverse».

Amb l’ajuda d’alguns MOTUs com l’Emmet Hikory (persia), el Laserjock, l’Hobbsee, el Lutin i d’altres que segur que em deixo, he començat a treballar en diversos bugs (coses petites, com ara programes que no surten al menú, etc.) com per exemple aquest, que ja està corregit a la propera versió d’Ubuntu (la Gutsy), i a portar actualitzacions de paquets de Debian a Ubuntu.

Estic aprenent molt amb això i és un experiència que trobo molt positiva, així que tinc la intenció de continuar fent bastant més feina d’aquesta. Per a tots aquells a qui també els interessin aquestes coses, aquí teniu uns quants enllaços (en anglès):

Contribuir a MOTU

Exemples pràctics de com fer diverses tasques

Els «tags» que accepta el Launchpad i la importància dels bugs

Les diferents categories per als menus i les especificacions per als arxius que les creen

Accedir a un ordinador remot via SSH

Continuo descobrint noves possibilitats de GNU/Linux, i la més recent és la d’accedir a un altre PC a través d’Internet (sempre i quant aquest estigui encés). Àixò es fa utilitzant SSH que, si els dos PC’s tenen Ubuntu (amb Debian suposo que també servirà) s’instal·la simplement triant el paquet ‘ssh’ al Synaptic (o bé sudo apt-get install ssh) a la terminal.

Un cop fet això, en el millor dels casos ja ens hi podrem connectar escrivint ssh usuari_remot@IP_PC_remot. Per tal d’esbrinar l’IP de l’ordinador, n’hi ha prou amb buscar-la entre els resultats que retorna l’ordre “ifconfig” (és l’«inet addr») o bé entrar en alguna pàgina que te la digui. En el cas de que la teva adreça IP sigui dinàmica (és a dir, que canvia cada cop que et connectes), pot interesar-te utilitzar un servei de DNS com ara DynDNS, que (sense pagar res) et permetrà accedir al teu ordinador a l’adreça elTeuNom.dyndns.org.

Un cop introduida l’ordre anterior (ssh usuari@ip), et demanarà la contrassenya i ja estaràs dins el PC. Si no és així, possibilement et dirà «connection refused»; si aquest és el cas, si tens un router el motiu és que aquest està interceptant la connexió. Per solucionar això, has d’entrar a la pàgina de configuració del router i configurar-lo per tal que t’envii tot el que arriba al port 22; això pot variar segons el model (gràcies a en carlesoriol per ajudar-me amb això!).

Molt bé, ja hi estas connectat. Però, no et molesta això d’haver de posar la contrassenya cada cop? Doncs això té fàcil solució, simplement t’has de generar una clau RSA fent “ssh-keygen” a la terminal (quan pregunti la contrassenya, deixa-la en blanc *), “scp ~/.ssh/id_rsa.pub usuari@ip” per enviar-la a l’ordinador remot i, a l’altre PC (pots connectar-t’hi com abans) fer “cat id_rsa.pub >> .ssh/authorized_keys2“. Com pots comprovar, ara si tornes a connectar-t’hi ja no et demana la contrasenya. (Nota *: fer això pot suposar un risc de seguretat, ja que si algú aconsegueix la teva clau RSA podrà accedir-hi; millor protegeix la clau amb contrasenya i fes servir el seahorse per tal que se’n recordi i no l’hagis d’introduir cada cop).

També pots montar carpetes remotes per poder-hi accedir de forma normal, però no he tingut la necessitat de provar-ho; si t’interresa, sobre SSHFS. Si estas preocupat per la seguretat, pots consultar aquest article.

Si vols poder activar i desactivar l’acces remot via SSH fàcilment pots fer servir aquest script bash que he fet. Baixa‘l, descomprimeix-lo, si vols edita els arxius hosts.deny.ON i hosts.deny.OFF, executa “sudo ./install” estant en el directori on l’has descomprimit i ja podras canviar entre els dos modes utilitzant sshSwitch a la terminal, o forçar una opció amb “sshSwitch on” / “sshSwitch off“.

Obtenir vídeos del YouTube en format .ogg (en Linux)

Actualització:  He creat un programa amb interfície gràfica per a baixar els vídeos.

Bé, doncs avui us donaré un petit script amb el qual podeu baixar un vídeo des del YouTube i convertir-lo en .ogg (o .avi, si ffmpeg2theora no està instal·lat). Si no utilitzes Linux o simplement no tens ganes d’instal·lar res, dóna una ullada a la pàgina KeepVid.

Primer de tot, necessites descarregar un script d’en Ricardo Garcia (que he trobat en un post d’en Fabián Rodríguez al planet anglès d’Ubuntu). Per a això, introdueix aquestes línies a la terminal:

wget http://www.arrakis.es/~rggi3/youtube-dl/youtube-dl -c
chmod a+x ./youtube-dl
sudo mv ./youtube-dl /usr/local/etc/youtube-dl.py

A continuacuió, descarrega el conversor a .ogg i aconsegueix el meu script:

sudo apt-get install ffmpeg2theora
wget http://utils.eurion.net/hosted/youtube -c
sudo mv ./youtube /usr/local/bin/youtube
sudo chmod a+x /usr/local/bin/youtube

I ja està! Ara sempre que trobis un vídeo que t’agradi al YouTube només has d’anar a la terminal i escriure-hi “youtube [i l'identificador del vídeo, que trobaràs a l'URL de la seva pàgina de visualtizació]“, si tot va bé te’l trobaràs amb format .ogg (o .avi) a la teva carpeta d’inici.

Utilitzant Adaptadors Bluetooth a Ubuntu Linux…

Avui he provat de connectar el PC amb el mòbil per primer cop, per tal de descarregar-ne unes fotografies, i per a això he utilitzat un Adaptador Bluetooth USB que m’ha deixat un amic (una peça semblant a un Pendrive però més petita, que val al voltant d’uns 15€; la majoria d’ells arriben fins a uns 100 metres de distància). La veritat és que he quedat sorprès de la facilitat amb què l’he pogut utilitzar a l’Ubuntu, però de totes formes aquí us deixo una explicació de com fer-ho (a la Feisty):

Instal·lació:

1. Obre una terminal i executa-hi: sudo apt-get install bluetooth gnome-bluetooth libbluetooth2 obexftp.

2. També recomano fer (i si hi hagués problemes i us heu saltat aquest pas proveu a fer-lo també, no ho he provat sense): sudo apt-get install obexfs obexpushd openobex-apps gnome-vfs-obexftp. Entre d’altres, això et permetrà navegar per les carpetes del dispositiu remot des del Nautilus entrant a la ruta “obex:///”.

3. Els passos 1 (i 2) no tardaran gaire, ja que són tot coses que ocupen molt poc (i algunes ja venen pre-instal·lades). A continuació, si teniu un dongle bluetooth (és a dir, un “bitxo” extern), executa (també a la terminal): sudo /etc/init.d/bluetooth restart.

4. (Com el punt anterior, aquest tampoc cal si tens un portàtil amb Bluetooth integrat.) Ara comprova que el dispositiu ha estat detectat. Per això executa l’ordre “lsusb” (pot tardar un temps); sortirà alguna cosa semblant a això: Bus 006 Device 003: ID 1310:0001 Roper Class 1 Bluetooth Dongle.

5. També executa “hcitool dev“. Sortirà alguna cosa com “hci0 00:0A:28:61:2F:A5“. La seqüència aquesta, amb el format aa:bb:cc:dd:ee:ff és l’identificador mac del dongle; en cas de que tot fossin zeros torna al punt 3.

Connectant al mòbil
A continuació tot farà referència a telèfons mòbils, encara que hauria de funcionar igual amb els altres dispositius amb capacitat Bluetooth.

6. Per tal de detectar l’aparell, has de fer-lo visible (“descobrible) als altres i abans que la seva visibilitat expiri executar això a la terminal: hcitool scan. L’operació tardarà uns pocs segons i buscarà tots els aparells propers; si no trobés el teu, torna a efectuar aquest punt des del principi, aquest cop corrent una mica més. Un cop tinguis el nombre mac del teu mòbil, apunta’l.

7. Ara, per tal que es carreguin les eines que has instal·lat al punt 2 (i 3), reinicia el GNOME. Per fer això, prem alhora les tres tecles [Ctrl] + [Alt] + [Borrar], i veuràs com la pantalla queda negra i al cap d’uns pocs segons torna a demanar-te el nom d’usuari i la contrasenya. Aquest cop, quan s’iniciï la sessió t’apareixerà una nova icona al panell superior: la del Bluetooth.

8. (No estic segur si aquest pas és necessari, però el poso per si de cas. Executa això a la terminal, sudo hidd –connect aa:bb:cc:dd:ee:ff, substituint aa:bb:cc:dd:ee:ff pel codi mac que has aconseguit al punt 6.)

9. Tot seguit, si no n’estàs segur, comprova que el teu mòbil sigui compatible. Per a això, utilitza l’ordre sdptool browse aa:bb:cc:dd:ee:ff (on aa:bb:cc:dd:ee:ff, el nombre mac). Això provocarà l’aparició d’un munt d’informació – els serveis de que disposa el mòbil; assegura’t que hi apareix “Service Name: OBEX File Transfer” i “Service Name: OBEX Object Push“.

Perfecte: Ja pots començar a transferir dades!

Treballant amb Bluetooth

Per tal de rebre un llistat de les carpetes que hi ha al mòbil utilitza l’ordre “obexftp -b aa:bb:cc:dd:ee:ff -l” (la L per “list”). Per veure el contingut d’una carpeta en concret, “obexftp -b aa:bb:cc:dd:ee:ff -l la/carpeta”.

Per descarregar un arxiu del mòbil, un cop en saps el directori (consulta el paràgraf anterior per descobrir com fer-ho), pots utilitzar aquesta ordre per transferir l’arxiu que vulguis a la carpeta actual: “obexftp -b aa:bb:cc:dd:ee:ff -g carpeta/arxiu.extensió” (la G per “get”).

I, per últim, per enviar-hi un arxiu utilitza “obexftp -b aa:bb:cc:dd:ee:ff -B X -p /carpeta/arxiu.extensió” (la P per “put”). On hi ha la X has de posar-hi el canal de del OBEX Object Push, que t’apareixerà entre les dades que dona la 9a instrucció d’aquest text, poc després de la línia on surt “Service Name: OBEX Object Push“.

El primer cop que realitzis una d’aquestes ordres (en la tercera potser no, però amb les altres si) segurament el mòbil et dirà que s’ha de vincular al dispositiu, i et demanarà confirmació. A continuació, et demanarà la contrasenya Bluetooth; en aquest camp pots escriure-hi el que vulguis, “1234” mateix ja serveix. Un cop introduït allà, sota el panell superior et sortirà una notificació emergent dient que s’ha d’introduir una contrasenya i al fer-hi clic s’obrirà una finestra demanant-la: allà hi has d’escriure exactament el mateix codi que al mòbil. Un cop fet això, ja estaran vinculats i no et molestarà més, encara que, depenent del telèfon, pot ser que demani permís cada cop que vols fer alguna cosa.

Descarregar tots els arxius d’un directori

Pot ser que tinguis sort i utilitzant “carpeta/*.*” puguis baixar tot el contingut d’una carpeta de cop, però en cas de que això falli (com m’ha passat a mi) hi ha una solució, i aquesta és un script que he fet :). El programet està fet en PHP, així que si no el teniu instal·lat teniu dues opcions: o bé feu sudo apt-get install php5 i instal·leu aquest des dels dipòsits; o us baixeu el XAMPP for Linux, el descomprimiu al directori /opt (us caldràn permisos d’administració per a això, també), i l’inicieu amb “sudo /opt/lampp/lampp start”.

Un cop tingueu PHP activat (o si ja l’hi teníeu) descarrega el codi d’aquest script meu, que està sota llicència GPL, aquí: getDirFromCell, descomprimeix l’arxiu getDirFromCell.php on vulguis, edita’l amb el gEdit (o algun altre programa com el Bluefish Editor o el Geany) i canvia les 3 variables de configuració:

$mac: El identificador mac del teu mòbil.
$path: El directori del que vols descarregar els arxius (no s’inclouen subdirectoris).
$overwrite: Si vols que es sobreescriguin arxius existents (per no descarregar dos cops el mateix o borrar arxius que tinguin el mateix nom) (true / false).

Finalment executa l’ordre “php /carpeta/getDirFromCell.php” o “/opt/lampp/bin/php-5.2.1 /carpeta/getDirFromCell.php”, tenint el mòbil encès i a prop, i la transferència començarà. Tingues en compte que pot ser que el mòbil et demani permís per a cada arxiu so?licitat, però sempre és millor que haver d’escriure el nom de cadascun individualment. També pensa que els arxius apareixeran al directori on estàs quan executes l’ordre.

Nota (05/05/2007): He actualitzat el script i ara té l’opció de recursivitat i de “mode debug”.


(Fonts d’Informació:
BluetoothSetup i Como Bluetooth en Ubuntu 2.)

 
Skip to toolbar