abr.
27
2012
0

Com baixar-se un vídeo de TV3 a la carta

Això que us explicaré ara només es de forma demostrativa, recordeu que heu de respectar sempre els drets d’autor i les condicions que imposi TV3 amb els seus vídeos.

I ara, anem al gra.

Pas 1 – Aconseguir l’identificador del vídeo

Primer de tot heu d’arribar a la URL individual del vídeo en qüestió, aquesta ha de tenir una forma tipus:

http://www.tv3.cat/3alacarta/#/videos/1234567890
o
http://www.tv3.cat/videos/1234567890/alguna-cosa-bla-bla-bla

L’únic que realment us importa es el ID del vídeo, en aquest cas seria: 1234567890

Pas 2 – Aconseguir ruta de streaming del vídeo

Un cop tinguem el ID del vídeo escriurem en el navegador la següent ruta:

http://www.tv3.cat/su/tvc/tvcConditionalAccess.jsp?ID=1234567890&QUALITY=H&FORMAT=MP4

Remplaçant on diu ID=******* pel nostre número que hem aconsegui en el pas 1.

En aquesta ruta us sortirà per pantalla tot tipus d’informació en un format que es diu XML.

El que us interessa és una cosa com això:

rtmp://mp4-500-str.tv3.cat/ondemand/mp4:g/tvcatalunya/4/6/1234567890.mp4

busqueu-ho, no costa gens perquè és la ruta d’on fer streaming amb aquest vídeo en qüestió.

Pas 3 – Descarregar el fitxer via streaming

Aquest tercer pas es el més complicat i cal l’ajuda d’un programa extern. Si treballeu amb Windows podeu utilitzar el rtmpdump

A. Podeu descarregar el ZIP del rtmpdump d’aquesta página: http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.1d-windows.zip
B. Descomprimiu aquest ZIP en un directorio, per exemple c:/rtmpdump
C. Obriu una finestra de línea de comandes: Inici / Executar i escriviu “cmd” + Intro.
D. Aneu al directori on heu descomprimit rtmpdump: “cd x:/rtmpdump”
E. Un cop al directori teclegeu la següent comanda:

rtmpdump -r “rtmp://mp4-500-str.tv3.cat/ondemand/mp4:g/tvcatalunya/4/6/1234567890.mp4” -o video-tv3.mp4

On posareu la ruta que heu obtingut abans i el fitxer on voleu desar el vídeo.

I ja està! Només cal esperar…

Written by in: General |
des.
02
2010
0

Manifest per una Xarxa Neutral

Com molts d’altres he decidit adherir-me al Manifest sobre la neutralitat de la xarxa.

Els ciutadans i les empreses usuàries d’Internet adherides a aquest text manifestem:

  1. Que Internet és una Xarxa Neutral per disseny, des de la seva creació fins a la seva actual implementació, en la qual la informació flueix de manera lliure, sense discriminació alguna en funció d’origen, destinació, protocol o contingut.
  2. Que tots els usuaris, emprenedors i empreses d’Internet han pogut definir i oferir els seus serveis en condicions d’igualtat portant el concepte de la lliure competència fins a extrems mai abans coneguts.
  3. Que Internet és el vehicle de lliure expressió, lliure informació i desenvolupament social més important que tenen ciutadans i empreses. La seva naturalesa no ha de ser posada en risc en cap concepte.
  4. Que per possibilitar aquesta Xarxa Neutral les operadores han de transportar paquets de dades de manera neutral sense erigir-se en “duaners” del tràfic i sense afavorir o perjudicar a uns continguts per sobre d’uns altres.
  5. Que la gestió del tràfic en situacions puntuals i excepcionals de saturació de les xarxes ha d’escometre’s de forma transparent, d’acord a criteris homogenis d’interès públic i no discriminatoris ni comercials.
  6. Que aquesta restricció excepcional del tràfic per part de les operadores no pot convertir-se en una alternativa sostinguda a la inversió en xarxes.
  7. Que aquesta Xarxa Neutral es veu amenaçada per operadores interessades a arribar a acords comercials pels quals es privilegiï o degradi el contingut segons la seva relació comercial amb l’operadora.
  8. Que alguns operadors del mercat volen “redefinir” la Xarxa Neutral per manejar-la d’acord amb els seus interessos, i aquesta pretensió ha de ser evitada; la definició de les regles fonamentals del funcionament d’Internet ha de basar-se en l’interès d’els qui la usen, no d’els qui la proveeixen.
  9. Que la resposta davant aquesta amenaça per a la xarxa no pot ser la inacció: no fer gens equival a permetre que interessos privats puguin de facto dur a terme pràctiques que afecten a les llibertats fonamentals dels ciutadans i la capacitat de les empreses per competir en igualtat de condicions.
  10. Que cal instar al Govern a protegir de manera clara i inequívoca la Xarxa Neutral, amb la finalitat de protegir el valor d’Internet de cara al desenvolupament d’una economia més productiva, moderna, eficient i lliure d’ingerències i intromissions indegudes. Per a això cal que qualsevol moció que s’aprovi vinculi de manera indissoluble la definició de Xarxa Neutral en el contingut de la futura llei que es promou, i no condicioni la seva aplicació a qüestions que poc tenen a veure amb aquesta.
Written by in: General |
gen.
13
2010
0

Portades de llibres

Actualment estic treballant per la Xarxa de Biblioteques Públiques de la província de Barcelona. Una de les coses divertides que he fet és muntar una aplicació que busca les portades dels llibres en el nostre repositoris de portades i després en altres repositoris externs gratuïts.

L’aplicació te una ordre de prioritats i va saltant de repositori en repositori fins que troba la portada del llibre.

A més te un sistema de cache que guarda les portades durant un cert temps i s’estalvia de fer tota la cerca per tota la xarxa cada cop que algú demana una portada.

Per si algú li és útil a continuació explicaré com trobar les portades de llibres en diferents mides a partir del ISBN (codi del llibre) amb PHP en els següents repositoris externs gratuïts.

1. Amazon
2. Library Thing
3. Open Library
4. Google Books

Nota: Tots els scripts que escric són versions simplificades i tenen un propòsit instructiu. No em faig responsable de la seva utilització en un lloc real tot i que, en teoria, haurien de funcionar correctament xD

Amazon

El repositori de Amazon és el millor i força senzill. Per aconseguir la portada d’un llibre simplement has de construir una URL de la següent forma.


//ISBN exemple
$isbn=’1555705189’;

//Imatge petita, uns 50 x 75px
$url["petita"]='http://images.amazon.com/images/P/'.$isbn.'01.THUMBZZZ';
//Imatge mitjana, uns 110 x 160px
$url["mitjana"]='http://images.amazon.com/images/P/'.$isbn.'01.MZZZZZZ';
//Imatge gran, uns 320 x 500 px
$url["gran"]='http://images.amazon.com/images/P/'.$isbn.'.01.LZZZZZZ';

El que nosaltres fem, com que tenim el sistema de cache, es agafar la imatge més gran el primer cop, utilitzant la llibreria GD2 per generar les imatges derivades en les mides que necessitem, guardar-les en el nostre servidor i després anar servint les derivades de la cache del servidor en la mida adequada.

Per als repositoris extern tenim configurada la cache amb una vida de una setmana, així que si Amazon canvia una portada triguem una setmana en enterar-nos però podem servir imatges molt ràpidament perquè no hem d’esperar a que Amazon ens torni la portada cada cop que algú la vol veure.

Què passa si Amazon no te la portada del llibre que els demanem?

Doncs Amazon ens retorna un gif transparent 1×1 píxel com a portada.

Evidentment el que volem es detectar-ho, descartar la imatge i saltar al següent repositori per seguir buscant la portada en altres llocs.

Hi ha moltes maneres de fer això però una de les mes ràpides es connectar-nos utilitzant Curl i llegir la capçalera de la petició HTTP sense ni tan sols baixar-nos la imatge.

Podríem fer la petició HTTP, rebre la resposta i mirar la mida de la imatge però seria una mica mes lent.

La gestió de peticions HTTP la tenim plenament desenvolupada en cUrl així que podem treure partit d’aquesta llibreria per fer això i per altres altres coses com: com simular la connexió des d’un navegador per evitar que el repositori extern ens bloquegi o controlar millor el timeout i evitar que una caiguda dels servidors de Amazon o certs problemes en la xarxa provoquin lentituds en la nostre aplicació de portades.

La nostre solució per assegurar un servei relativament ràpid i constant es descartar totes les imatges mes petites de 1000 bytes (per eliminar els gifs 1×1 transparents d’imatge no trobada y les imatges utra-petites en mala qualitat) i descartar també les peticions HTTP que porten més d’un segon i encara no s’han resolt per impedir que problemes de lentitud en repositoris externs ens afectin a nosaltres excessivament… i tota aquesta validació la fem sense baixar-nos realment la imatge, només demanant la capçalera de la petició HTTP a l’Apache.

A mode d’exemple, podríem construint una funció de validació de la imatge via cUrl i retorna true o false segons si troba la imatge, aquesta es adequada i el servidor extern respon en un temps acceptable (menys d’un segon).


function validaImatge($url)
{
$check=false;
$ch = curl_init($url);
//per rendiment no necessitem descarregar el cos
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Volem que ens torni la capçalera
curl_setopt($ch, CURLOPT_HEADER, 1);
//Volem que salti si hi ha redireccions
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//Timeout de 1 segon
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
//Simulem una connexió des d’una navegador per evitar bloquejos
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4");
$data = curl_exec($ch);

if ($data !== false) {
$info = curl_getinfo($ch);
if ($info[http_code]==200 && $info[download_content_length]>1000)
{
$check=true;
}
}
curl_close($ch);
return $check;
}

Problemes d’Amazon, els ISBNs?

Amazon te alguns problemes coneguts amb la cerca per ISBN.

Per exemple, els llibres tenen dos sistemes de codis, l’antic el ISBN de 10 dígits i el nou, el ISBN de 13 dígits.

En teoria tot ISBN de 10 dígits te el seu equivalent de 13 dígits (al revés no), pel que qualsevol repositori hauria de ser capaç de trobar la portada d’un llibre tant si li poses el ISBN 10 dígits com el 13 dígits, però mentre que amb alguns repositoris com el Google Books sí que funciona així amb Amazon no.

Quan cerques la portada d’un llibre amb el ISBN de 13 dígits molts cops no troba la portada, i en canvi si proves el seu ISBN equivalent de 10 dígits si que et torna una portada.

Així que… com solucionem aquesta limitació d’Amazon? Doncs no ens queda més remei que cercar la portada del llibre amb el ISBN que tinguem i si aquest és el de 13 dígits i no ha trobat la portada calcular el seu ISBN equivalent de 10 dígits i buscar-la a mirar si amb aquest tenim sort.

Calcular el ISBN de 10 dígits a partir del de 13 dígits podem fer servir quelcom tan senzill com això:


//ISBN exemple 13 dígits
$isbn='9780739360385';
echo "ISBN: $isbn ";

//Amazon, no troba ISBN10 i ISBN13 indistintament i cal cercar portades
//Si es un ISBN-13 amb equivalent a ISBN-10 el calculem
if (strlen($isbn)==13 && substr($isbn,0,3)=='978' && is_numeric(substr($isbn,3,9)))
{
$isbn10=substr($isbn,3,9);
for ($i = 0; $i < 9; $i++) { $sum=$sum+substr($isbn10,$i,1)*$i;
}
$numcontrol=$sum % 10;
if ($numcontrol==10){$numcontrol='x';}
$isbn10=$isbn10.$numcontrol;
echo " ISBN-10 $isbn10";
}

Així podem afegir en les rutines de la nostre aplicació que quan es tracti d’Amazon quan busqui amb el ISBN13 sinó troba la portada del llibre busqui també amb el ISBN10 a veure si tenim sort.

Library Thing

Aquesta gent tenen una API que funciona igual que el servei de Amazon però t’has de registrar (http://www.librarything.es/) i posar el teu codi d’usuari en la URL.

A més tenen una limitació en el nombre d’imatges que et serveixen per usuari (100 imatges per dia), en aquest moment la cache resultarà molt útil! Millor poder agafar 1000 imatges diferents cada dia que no gastar la teva quota servint 1000 vegades la mateixa imatge!


//ISBN exemple
$isbn=’1555705189’;
//La teva clau d’usuari de la Library thing
$key=’************************’;

//Imatge petita
$url["petita"]= 'http://covers.librarything.com/devkey/'.$key.'/small/isbn/'.$idisbn;
//Imatge mitjana
$url["mitjana"]='http://covers.librarything.com/devkey/'.$key.'/medium/isbn/'.$idisbn;
//Imatge gran
$url["gran"]='http://covers.librarything.com/devkey/'.$key.'/large/isbn/'.$idisbn;

Evidentment, si volguéssim la mateixa funció d’abans de validaImatge() també funcionaria en aquest cas.

En cas de no trobar una portada fan el mateix que Amazon, tornar-te un gif transparent de 1×1 píxel.

Problemes de la Library Thing, errors d’idioma?

Aquest repositori de portades esta construït pels usuaris així que podem patir alguns errors d’usuaris que pugen portades equivocades, etc… al tractar-se d’una comunitat nosaltres mateixos podem contribuir-hi i intentar esmenar els errors/problemes.

A nosaltres el problema que mes ens ha afectat són les portades d’edicions equivocades. Es força comú que busquis la portada d’un llibre de l’edició en català o castellà i et retorni la portada de l’edició anglesa i com que tenim bibliotecaris molt exigents aquest tipus de problemes han provocat que al final desactivéssim aquest repositori, una llàstima perquè realment tenen moltes portades.

Open Library

La Open Library es un altre projecte obert de comunitat d’usuaris molt semblant al de la Library Thing.

La seva API funciona de forma molt semblant i quan no troba una portada, enlloc de retornar-te un píxel transparent simplement no et retorna res.


//ISBN exemple
$isbn='1555705189';

$url["petita"]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-S.jpg';
$url["mitjana"]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-M.jpg';
$url["gran"]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-L.jpg';

Problemes de la Open Library, la petició http?

A més, aquest repositori te una altre diferència amb la resta. No sé si te a veure amb el fet que utilitza Lighthttpd enlloc d’Apache però resulta que no retorna la mida del fitxer en la capçalera de la petició HTTP.

Això pot ser que no t’afecti en res segons la teva implementació o pot ser un problema si vols utilitzar una funció exactament com la funció de validaImatge() que he posat anteriorment perquè en aquest cas sí que necessites descarregar el cos de la petició HTTP per saber si el que t’està tornant te les característiques que t’interesen o no.

En aquest cas hauríem d’eliminar el paràmetres de la connexió d’abans:

curl_setopt($ch, CURLOPT_NOBODY, 1);

Per especificar-li que sí que volem el cos de la petició http, i després, si volem midar la miad, enlloc de comprovar el tamany del fitxer que ens anuncien en la capçalera $info[download_content_length] hauríem de mirar la mida del cos de la petició http descarregada $info[size_download].

Per exemple, podríem arreglar la nostre funció anterior de validació de la imatge perquè funciones sempre descarregant tot el body i anés correctament amb qualsevol d’aquests tres repositoris (renunciant a una certa millora del rendiment en el cas de Amazon i Library Thing):


function validaImatge($url)
{
$check=false;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4");
$data = curl_exec($ch);

if ($data !== false) {
$info = curl_getinfo($ch);
if ($info[http_code]==200 && $info[size_download]>1000)
{
$check=true;
}
}
curl_close($ch);
return $check;
}

o enlloc de passar-li només la URL li podem donar informació a la nostre funció sobre el repositori i obtenir el millor dels dos mons. Fer la comprovació ràpida de la capçalera per Amazon y la Library Thing i la comprovació un pel mes lenta del cos de la petició per la Open Library:


//Valida que es recupera una imatge correcta en aquella URL
function validaDades($url,$repo) {
$check=false;
$ch = curl_init($url);
//Tots els repositoris menys la open library tornen el tamany del fitxer en el header
//per rendiment no necessitem descarregar el cos en alguns casos
if ($repo!='olib'){
curl_setopt($ch, CURLOPT_NOBODY, 1);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4");
$data = curl_exec($ch);

if ($data !== false) {
$info = curl_getinfo($ch);
if ($info[http_code]==200 && ($info[download_content_length]>1000 || $info[size_download]>1000)) {
$check=true;
}
}
curl_close($ch);
return $check;
}

Problemes de la Open Library, imatges indegudes?

Un altre problema greu de la Open Library es el mal us que en fan alguns usuaris. Sembla que hi ha alguns usuaris malintencionats que es dediquen a penjar imatges inadequades amb insults, xenòfoges, etc. Suposo que per fer alguna gracieta.

A diferència de la Library Thing o d’altres comunitats virtuals aquí ni tan sols necessites estar registrat per contribuir amb una nova portada.

El resultat final és que els vàndals ho tenen molt fàcil per fer les seves gracietes. En el moment en que es detecta una imatge indeguda es esborrada amb una certa celeritat però sempre corres un cert risc que un usuari busqui un llibre i aparegui alguna imatge indeguda.

Google Books

Aquest potser es el repositori mes complicat d’implementar amb PHP. Tenen una API senzilla pensada per funcionar amb Javascript així que si vols treballar amb PHP has de fer certs malabarismes.

La seva alternativa es una llibreria per PHP per accedir a la seva informació carregant una classe en PHP anomenada Zend_Gdata_Books (http://code.google.com/intl/es-ES/apis/books/docs/gdata/developers_guide_php.html)

Jo us explicaré com aconseguir la portada del llibre de Googl Books a través del seu WebService de RSS.

No és la forma recomanada ni suportada per Google però pot ser una alternativa si no et vols instal·lar totes les seves llibreries i el seu framework.

La idea consisteix en buscar el llibre a través dels seus webservices i després mirar quina URL te la portada, i treballar una mica aquesta URL per obtenir les diferents mides de la portada.

La URL en qüestió on hi ha la informació del llibre en XML és:


//ISBN exemple
$isbn='9780739360385';

$url1='http://books.google.com/books/feeds/volumes?q=isbn:'.$isbn;

Aquí podem parcejar el XML per transformar-ho en un array o en un objecte o podem anar a saco i utilitzar expressions regulars per trobar la URL de la imatge de la portada del llibre si aquesta existeix (que es el que faré aquí sota).

No es un script elegant però hauria de funcionar:


//ISBN exemple
$isbn='9780739360385';

//Url del feed de Google
$data='http://books.google.com/books/feeds/volumes?q=isbn:'.$isbn;

//Recuperem el XML
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $data);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4");
$data = curl_exec($ch);
curl_close($ch);

if ($data !== false) {
//Busquem la imatge derivada
preg_match("/
]*thumbnail[^>]*>/",$data,$match1);
preg_match("/href='[^']*'/",$match1[0],$match2);
$origen=array('href=','\'','&');
$desti=array('','','&');
$data = str_replace($origen,$desti,$match2[0]);
if (strlen(trim($data))>0){
echo "Portada petita: <img src="'$data'" alt="" />";
$data = str_replace('zoom=5','zoom=1',$data);
echo "Portada mitjana: <img src="'$data'" alt="" />";
$data] = str_replace('zoom=5','',$data);
echo "Portada gran: <img src="'$data'" alt="" />";
} else {
echo "Error: No te imatge de portada";
}
} else {
echo "Error: URL incorrecte o llibre no trobat";
}

A partir d’aquí podem fer moltíssimes coses, per exemple, un cercador de portades de llibre a partir del ISBN seria tan senzill com, per exemple, fer:


//ISBN
$isbn='1555705189';
//Clau d’usuari de la Library Thing
$key='***********';

//Amazon
$repo[0][0]='Amazon';
$repo[0][1]='http://images.amazon.com/images/P/'.$isbn.'.01.THUMBZZZ';
$repo[0][2]='http://images.amazon.com/images/P/'.$isbn.'.01.MZZZZZZ';
$repo[0][3]='http://images.amazon.com/images/P/'.$isbn.'.01.LZZZZZZ';

//Open Library
$repo[1][0]='Open Library';
$repo[1][1]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-S.jpg';
$repo[1][2]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-M.jpg';
$repo[1][3]='http://covers.openlibrary.org/b/isbn/'.$isbn.'-L.jpg';

//Library Thing
$repo[2][0]='Library Thing';
$repo[2][1]='http://covers.librarything.com/devkey/'.$key.'/small/isbn/'.$isbn;
$repo[2][2]='http://covers.librarything.com/devkey/'.$key.'/medium/isbn/'.$isbn;
$repo[2][3]='http://covers.librarything.com/devkey/'.$key.'/large/isbn/'.$isbn;

//Google Books
$repo[3][0]='Google Books';
$data='http://books.google.com/books/feeds/volumes?q=isbn:'.$isbn;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $data);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4");
$data = curl_exec($ch);
curl_close($ch);

if ($data !== false) {
preg_match("/
]*thumbnail[^>]*>/",$data,$match1);
preg_match("/href='[^']*'/",$match1[0],$match2);
$origen=array('href=','\'','&');
$desti=array('','','&');
$data = str_replace($origen,$desti,$match2[0]);

if (strlen(trim($data))>0) {
$repo[3][1] = $data;
$repo[3][2] = str_replace('zoom=5','zoom=1',$data);
$repo[3][3] = str_replace('zoom=5','',$data);
}
}

//Genera el HTML amb totes les imatges
//Bucle per cada repositori
if (isset($repo)){
foreach ($repo as $control) {
//Bucle per cada element del repositori
$titol=true;
foreach ($control as $item) {
if ($titol) {
$contingut .='<h2>'.$item.'</h2>';
$titol=false;
} else {
$contingut .= '<img src="'.$item.'" alt="" /> ';
}
}
$contingut .= '<br>';
}
}

echo '<html><body>'.$contingut.'</body></html>';

I avui ja n’hi ha prou de parlar del món dels repositoris gratuïts de portades de llibres 😀

Written by in: General |
des.
07
2009
0

Maleïda a amb accent obert!!!

Porto tot el matí barallant-me amb una tonteria de programa que s’envia dades entre dos servidors.

El problemà està en la codificació del joc de caràcters, no s’entenen entre ells i no hi ha manera de fer una conversió més o menys automàtica.

Un servidor Sun Solaris envia les dades en utf-8 cap a un Red Hat però aquest es pensa que estan en ascii perquè “misteriosament” li arriven les dades en utf-8 però no en multibyte sinó en unibyte.  O sigui, que tinc un utf-8 però convertit a ASCII byte a byte ignorant que el utf-8 es multibyte i un caracter pot tenir de 1 a 4 bytes.

Total, que al final m’he tingut que fer la meva pròpia funció de conversió de caràcters en php ignorant totes les funcions que ja estàn pensades per fer aquestes coses rollo mb_detect_encoding(), iconv(), utf8_encode(), utf8_decode, etc…

La cosa estava tan xupada com imprimir per pantalla tots els caràcters especials i anar-los convertint un per un al que tocava. En 5 minuts tenia muntada la funció però funcionava??? Doncs no!!! Convertia correctament tots els caràcters excepte la à amb accent obert!!!

Com??? Per què??? Després de barrallar-me amb la maleïda “à” una bona estona he fet un descobriment que m’ha donat la solució, el codi ascii segons la extensió que facis servir tens un o més caràcters per definir l’espai en blanc. En el meu cas el 32 i el 160!!!

En el meu programa jo li deïa que la “Ã ” en realitat era la “à” i no funcionava perquè agafava el 32 com a codi per l’espai en blanc, enlloc del 160 que m’interessava en aquest cas. Total, que al final he pogut solucionar especificant quin dels dos possibles caràcters d’espai en blanc era l’adïent al convertir.

“Ô.chr(160)

Quedant la cosa de la següent manera:

$origen=array(‘Ã’.chr(160), “á”, “ä”, “è”, “é”,”ë”, “ì”, “í”, “ï”, “ò”, “ó”, “ö”, “ù”, “ú”, “ü”, “ç”, “ñ”, “À”, “Á”, “Ä”, “È”, “É”, “Ë”, “ÃŒ”, “Í”, “Ï”, “Ã’”, “Ó”, “Ö”, “Ù”, “Ú”, “Ãœ”, “Ç”, “Ñ”);

$desti=array(“à”, “á”, “ä”, “è”, “é”, “ë”, “ì”, “í”, “ï”, “ò”, “ó”, “ö”, “ù”, “ú”, “ü”, “ç”, “ñ”, “À”, “Á”, “Ä”, “È”, “É”, “Ë”, “Ì”, “Í”, “Ï”, “Ò”, “Ó”, “Ö”, “Ù”, “Ú”, “Ü”, “Ç”, “Ñ”);

$var = str_replace($origen, $desti, $var);

Written by in: General |
ag.
14
2007
0

La web de festa major ja torna a rutlla :D

Si us heu fixa't la web de la Festa Major anava molt bé i tot era molt maco però ahir al matí i especialment avui al matí ha començat a anar lenta, lenta i mes leeeeeeeeeeeeeenta.

Sembla mentida la mania que te la gent per visitar tots plegats al mateix moment a la mateixa hora 😀 (cosa normal). Al final aquest matí hem tingut la web uns 30 minuts desconectada per fer una actuació que sembla que portaria una millora… hem triplicat la RAM del servidor!!! (de fet cantava que n'hi havia massa poca) ole ole ole!!! Quan mirava la memoria abans estava utilitzant el Swap intensivament però amb l'ampliació després marcava Swap: 0k used! 😀

Sembla que la cosa ha millorat moltíssim i ara ja torna a rutllar bé!!! Si heu tingut problemes d'accés aquest matí o us queixaveu que anava molt lenta, la cosa ja esta resolta .)

Written by in: General |
jul.
26
2007
0

Sóm burros

Avui vull parlar de la conexió a internet. Tots som conients que els preus de qualsevol servei en un país i en un altre poden variar molt, sobretot en funció dels sous i el cost de la vida. Però és que en aquest aspecte vivim en un món al revés, l'exemple d'espanya és brutal, tenim un dels costos més elevats de connexió a la xarxa de tota europa i a sobre un dels pitjors serveis i una de les velocitats de conexió més baixes!

Si fem la comparativa amb altres païssos veïem que realment estem fatal. Compare'm, per exemple, amb un païs que el tenim just al costat i que en teoria te un nivell de desenvolupament tecnològic inferior a nosaltres. Estic parlant de Portugal.

Doncs resulta que la velocitat mitjana de conexió a internet a Espanya és de: 1,2 Mbps … i la de portugal? 8,1Mbps. És lamentable! I passo ja de parlar de Finlandia amb una velocitat mitjanan de conexió de 21,7 Mbps.

I quan veïem que la qualitat i la velocitat de conexió a la xarxa a Espanya esta per la cua mundial, ens podem fixar en el preu i que trobem? Doncs estem pagant a uns 12€ la mega!!! Molt bé! Un dels costos més cars de tota europa! El pitjor servei i el més car! Perfecte!

A més, no entenc com tenen el valor de dir-li "conexió de banda ampla" perquè segons els criteris americans la conexió de la xarxa espanyola NO pot considerar-se una conexió de banda ampla per no garantir el mínim de velocitat mitjana de 2Mbps. O sigui, tenim una "banda ampla" lenta i cara que de fet no és una banda ampla, però que em redefinit les velocitats mínimes que ha de complir una banda ampla per poder dir-li "banda ampla", trist!

I ara veïem el model a seguir: Japó. Allí els internautes poden disfrutar d'una velocitat mitjana de conexió de 100 Mbps a un preu de 16 cèntims d'euro al mes per mega!!! Veïeu la diferència? 16 centims enfront a 12 euros pel mateix.

Això sí! Telefonica és el segon operador més ric de tota europa, el primer és Deutsche Telecom que es troba en retrocés i no és el més rentable perquè telefónica ja és l'operador més rentable de tota europa!!! 52.900 millones de euros de facturació al 2006, 6.000 millones de euros de beneficis nets amb un creixement de beneficis del 26% respecta del 2005, etc.

Que fàcil que és fer negoci donant un mal servei i cobrant-lo a preu d'or. 

Written by in: General |
jul.
22
2007
20

No tots som iguals davant la llei

Article 14 de la constituació espanyola:
Los españoles son iguales ante la ley, sin que pueda prevalecer discriminación alguna por razón de nacimiento, raza, sexo, religión, opinión o cualquier otra condición o circunstancia personal o social.

 

Portada del Jueves

 

Mentida! Tots sóm iguals davant la llei sempre que no siguis el rei ni ningú de la seva familia. Si aquesta portada ha de provocar que retirin una revista, tanquin la web i el jutje requereixi la identitat del dibuixant perquè el jutgin és per flipar.

I el més trist de tot, ho acceptem, ho tolerem i no fem res… i a les pròximes eleccions a seguir votant als partits monarquistes.

Que mou a una persona a voler que una familia, que no és la seva, visqui del cuento i tingui més drets que ningú? Que mou a les persones a voler i defensar la monarquia, quan ells no hi pertanyen? Que mou a les persones a voler que NO tots siguem tractats igual davant la justicia? Que li passa a aquesta societat que més del 80% de la gent vota partits monarquics? No ho entenc.

La igualtata o desigualtat és una qüestió purament cultural, però pensava que aquests conseptes estaven molt més arrelats a la nostre societat. És veu clarament que no. 

Written by in: General |
febr.
26
2007
3

Test per l’Alzheimer

Avui m'ha arribat un test que en teoria es fa servir per diagnosticar Alzheimer. A veure qui és capaç de llegir aquest text! En teoria tots, eh!

Test Alzheimer

Written by in: General |
gen.
30
2007
0

Estic pendent de…

Drupal 5.1 Released!
Event module (5.x) en desenvolupament
Content Construction Kit (5.x-1.2) Released!
Traducció de Drupal 5.x al català en desenvolupament

Lifetype 1.2 en desenvolupament

PhpBB 3 (beta5) en desenvolupament

Gallery 2.2 (RC1) en desenvolupament

Written by in: General |
nov.
09
2006
4

Parlant de croquetes

Pels que teniu algun dubte de On es realitzarà la I Trobada Croquetaire, a quí teniu el mapa:

I pels que no sapigueu què es farà exactament, aquí teniu una petita mostra:

Written by in: General |

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com

Aneu a la barra d'eines