Archief voor november 2007

Maizena. Altrament conegut com a fluid no-newtonià

november 23, 2007

16 paquetets de Maizena (or so)
Una galleda d’aigua (or so)
Molts físics (or so xDDD)

Para todo lo demás…
Sant Albert 2007

Scripts àudio

november 12, 2007

M’estava avorrint una mica, així que vinc a spammejar una mica al meu propi blog (diguem intel·ligent). No tinc massa coses interessants a dir (res!), així que deixaré dos scripts cutres que vaig mig fer-mig pillar d’internet fa uns quants dies per convertir els arxius àudio en format m4a d’una carpeta a mp3*. La cosa aquesta ho passa primer a wav, i després a mp3, però què hi farem: funciona, tu, que d’això es tracta.

*L’objectiu era, naturalment, aconseguir-ho en .mp3 per posar-ho al (reproductor) MP3, valgui’s la redundància.

Primer ve aquest,

#!/bin/bash
# Convertir m4a a wav

for i in *.m4a; do
out=$(echo $i | sed -e ’s/.m4a//’)
mplayer -ao pcm:file=”$out.wav” “$i”
done

I després aquest,

#!/bin/bash
# Convertir wav a mp3

for i in *.wav; do
out=$(echo $i | sed -e ’s/.wav$//’)
lame -h -b 192 “$i” “$out.mp3″
done

I ja està.

Hi heñó, hók un heny!

Sticky bit

november 11, 2007

Ahir vaig haver de crear una partició de dades nova, perquè això està ple de merda tinc totes les particions bastant plenes. El que passa és que segueixo “massa” sèries i encara no puc gravar cap DVD, perquè només porten de l’ordre de 7 capítols per sèrie, i encara no ocupen un DVD per sèrie (i fer-ho barrejat és un merder). I no, no tinc cap mega-disc-dur de 300.000 GB per guardar-ho xDDD.

Així que, doncs això, toca fer una altra partició de dades. La filosofia que segueixo des de fa un cert temps és la de fer “petites” particions de dades d’uns 20 GB.

El que m’interessa també, donat que al cap i a la fi hi va a parar música i vídeo i aquestes coses, és tenir-ho més o menys compartit entre els diversos usuaris del PC (bàsicament ho miro jo i ja està, però és una cosa que volia fer de totes maneres xD), així que vaig fer un grup nou, anomenat “compartit” (què original), al qual hi pertanyen els usuaris que m’interessa.

Després és qüestió de remenar els permisos d’aquest grup: lo mínim és tenir accès de lectura, i el d’escriptura en principi no hi hauria d’estar, perquè no interessa que qualsevol usuari del grup pugui esborrar el que un altre hi ha posat. La idea és poder accedir al que ja hi ha, poder afegir coses noves, fins i tot potser modificar el que hi ha [modificar NO és el mateix que esborrar; per exemple si hi ha un arxiu de text, es pot modificar el que hi ha escrit (afegir text, i sí, esborrar també, però se suposa que hi ha una certa bona fe xD) sense eliminar-lo] però no eliminar el que no et pertanyi. La clau d’això la proporciona el bit “sticky”.

Per exemple, les dues particions de dades el sistema que he descrit, són aquestes:

drwxrwxr-t  2 root compartit  4096 2007-11-11 13:37 estanteria
drwxrwxr-t 18 root compartit  4096 2007-11-10 21:23 soterrani

El “soterrani” és la partició de dades que ahir vaig veure que estava plena, i l’”estanteria” és la nova que vaig crear per seguir omplint de merda. En efecte, la merda que hi vaig posar ahir és aquesta:

    eduard@math:/media/estanteria$ ls -l
total 1435416
-rw-rw-r– 1 root compartit 366782464 2007-11-08 19:58 CSI – 08×06 – Who & what.avi
-rw-rw-r– 1 root compartit     46926 2007-11-10 22:00 CSI – 08×06 – Who & what.srt
-rw-rw-r– 1 root compartit 366786560 2007-11-06 19:48 House – 04×06 – Whatever it takes.avi
-rw-rw-r– 1 root compartit     59171 2002-01-01 05:45 House – 04×06 – Whatever it takes.srt
-rw-rw-r– 1 root compartit 367575294 2007-11-10 06:30 Stargate Atlantis – 04×07 – Missing.avi
-rw-rw-r– 1 root compartit       835 2007-11-10 21:31 sticky.txt
-rw-rw-r– 1 root compartit 367136140 2007-11-09 05:32 Without a Trace – 06×06 – Where & Why.avi

Com podem veure, tenen permisos d’escriptura i lectura tant l’usuari root com el grup compartit. Però (i aquí ve el kit de la qüestió) com que el directori “estanteria” (i per tant tots els arxius de dins*) té el bit sticky activat per l’usuari root, això vol dir que els usuaris que pertanyin al grup compartit tindràn els mateixos permisos que l’usuari que va ‘crear’ l’arxiu (en aquest cas, qui l’hagi mogut/baixar/copiat/etc. dins de l’”estanteria), ergo el root, amb la seguretat que no podràn esborrar res que no els pertanyi.

* Si l’”arxiu” és un directori, aleshores hem d’aplicar també el bit sticky al directori, ja que sinó els arxius de dins el directori sí que es podràn esborrar)

En efecte, si intentem esborrar alguna cosa…

    eduard@math:/media/estanteria$ rm *
rm: no s’ha pogut eliminar «CSI – 08×06 – Who & what.avi»: Operation not permitted
rm: no s’ha pogut eliminar «CSI – 08×06 – Who & what.srt»: Operation not permitted
rm: no s’ha pogut eliminar «House – 04×06 – Whatever it takes.avi»: Operation not permitted
rm: no s’ha pogut eliminar «House – 04×06 – Whatever it takes.srt»: Operation not permitted
rm: no s’ha pogut eliminar «Stargate Atlantis – 04×07 – Missing.avi»: Operation not permitted
rm: no s’ha pogut eliminar «sticky.txt»: Operation not permitted
rm: no s’ha pogut eliminar «Without a Trace – 06×06 – Where & Why.avi»: Operation not permitted

… no ens deixa!

També estaria bé improvitzar un petit script (si l’aconsegueixo fer en python, em tremparia més que en bash) per automatitzar una mica la tasca de modificar els permisos i tot això.

De moment faig això…

sudo chown -R root /media/estanteria
sudo chgrp -R compartit /media/estanteria
sudo chmod -R g+w /media/estanteria/

… però interessa currar-s’ho una mica més.

En fi, això és tot.

PS: Per si a algú li interessa, el contingut del arxiu “sticky.txt” és això que vaig escriure quan se’m va encendre la bombeta de tot això del sticky bit:

eduard@math:/media/estanteria$ cat sticky.txt
He activat l’sticky bit en aquest directori i els seus subdirectoris, de tal
manera que es pot afegir material i modificar-lo, però no esborrar-lo.

Per exemple, podem afegir arxius (documents de text, per exemple) de manera que
els altres usuaris podràn consultar-ho però no esborrar-ho.

En definitiva, es una mesura de seguretat preventiva però no restrictiva,
per la qual cosa és un invent molt útil.

—————————————————————————————–

Per exemple, proveu de modificar aquest arxiu
(afegint alguna cosa al final, preferiblement).
[S'hauria de poder]

Ara però, proveu d’eliminar-lo!
[No s'hauria de poder]

Ara sí, a cascar-la.

Abans però, un últim comentari: Let Windows try that! xDD

Collonades amb Python (2.0)

november 7, 2007

Més tonteries.

Ara he començat a fer una mariconada en Python, per reproduïr música randòmicament [semi]aleatòriament.

Bàsicament tinc algunes carpetes de música a /home/eduard/nevera/Musica, i estic intentant fer que el mplayer m’ho reprodueixi.

Aquí va el primer intent, cutre (com tot) per a reproduïr una cançó (wow, tu, quin nivell ¬¬) d’un directori escollit a l’atzar.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from os import *
from random import choice

directori = ‘/home/eduard/nevera/Musica/’
musica = listdir(directori)

chdir(directori+choice(musica))
system(‘mplayer ‘+’”‘+choice(listdir(getcwd()))+’”‘)

La segona versió, és més de lo mateix (reproduïr una cançó a l’atzar), però fent que el programa vomiti la llista dels directoris a mode de menú, per poder escollir.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from os import *
from random import choice

directori = ‘/home/eduard/nevera/Musica/’
musica = listdir(directori)

#Llista de directoris de música
print “\nLlista de directoris”
print “——————–\n”

for i in range(len(musica)):
print str(i)+” “+musica[i]

#Escollir directori
n = int(raw_input(“\nEscull el directori: “))

#Moure’s dins del directori
chdir(directori+musica[n])
getcwd()

#Reproduir música del directori
system(‘mplayer ‘+’”‘+choice(listdir(getcwd()))+’”‘)

Collonades amb Python (1.0)

november 7, 2007

Ahir, en comptes d’estar estudiant, que és el que toca, vam inventar un programeta Python per dominar el món.

Bé, no tant…

El que fa la merda aquesta (joder, ja parlo com cert professor d’electrodinàmica) és fer quatre guarrades amb el gnuplot. Bàsicament agafa una funció f(x) [en aquest cas, \sin(x^2), per dir algo], et demana un nombre de punts n, i crea un arxiu de dades amb les parelles de valors (x,y) de 1 fins a n-1. Després crida al sr. gnuplot (bé, primer hem escrit un script gnuplot de manera cutre, després el cridem) i pinta aquestes parelles (x,y), i exporta la gràfica a un postscript molt maco. Finalment es van obrint els .ps amb el visor de documents evince [Linux only :P ]. Els .ps es guarden dins del mateix directori, també (més útil que no anar escopint l’evince per pantalla, btw).

En fí, aquí tenim la joia de la corona:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from math import *

#Definim la funció que representarà el gnuplot
def funcio(x):
return sin(x**2)

#Obrim l’arxiu de dades que omplirà el programet
dades=open(‘gnuplot.dat’,'w’)

#Introduïm el nombre n de punts que iterarem la funció
n=int(raw_input(‘Nombre de punts: ‘))

#Bucle de n fins a 1000 (nombre arbitràriament ‘gran’)
while n < 1000:
for i in range(1,n):
dades.write(str(i)+’ ‘+str(funcio(i))+’\n’)

#Manera cutre de fer un script gnuplot dins d’aquest programa Python
script=open(‘gnuplot.gnu’, ‘w’)
script.write(str(“set term postscript enhanced color”+’\n’))
script.write(str(“set output ‘gnuplot”+str(n)+”.ps’”+’\n’))
script.write(str(“plot ‘gnuplot.dat’”+’\n’))
script.write(str(“exit”+’\n’))
script.close()

#Cridar l’script anterior i obrir els postscript creats amb l’evince
ordre=str(‘evince’+’ ‘+str(“gnuplot”+str(n)+”.ps”+’ &’))
os.system(‘gnuplot gnuplot.gnu’)
os.system(ordre)
# os.system(‘ps2pdf gnuplot.ps’)
n = n + 10

#Tancar l’arxiu de dades abans de sortir
dades.close()