vendredi 30 novembre 2007

Support de table pour parabole TV...

Il n'est parfois pas possible de fixer une parabole TV en façade. Il existe des pieds à poser sur le sol :



Mais, à l'intérieur, cela ne fonctionne pas très bien. Il est difficile de rapprocher le pied de la fenêtre et si la fenêtre n'est pas perpendiculaire à la direction du satellite, on ne parvient pas à le capter. D'où l'idée de fabriquer un support à poser sur un appui de fenêtre :



En utilisant le petit 'passet' (belg.), on peut enjamber le chassis pour le poser sur l'appui de fenêtre :



(Il s'agit ici de la parabole de 60 cm du récepteur 'free-to-air' Lidl à 99.00 euros (2007))

Avec le 'satellite-finder', il est assez facile de retrouver les satellites dans son ciel. On peut utiliser une boussole, mais on le sent mieux avec des références astronomiques comme la position du Soleil, de la Lune ou de constellations facile à repérer dans un ciel de ville, malgré la pollution lumineuse.

Petits thermomètres amusants...

Un petit bricolage sans prétention et sans grande difficulté : mesurer la température grâce à un capteur Dallas-Maxim One-wire DS18S20.

Il suffit de faire un petit montage avec quatre diodes et une résistance à mettre sur le port série d'un PC. Le logiciel existe dans les dépôts Ubuntu; il suffit de faire 'apt-get install digitemp'... (qui fonctionne également avec l'interface USB)

Ce qui est extraordinaire, c'est que ce composant minuscule mesure la température et l'envoie sous forme digitale sur une ligne série quand il est interrogé. Il est alimenté par la ligne série ('alimentation parasite') et, comme chaque composant possède un identificateur unique, on peut en placer plusieurs sur une même ligne. Ils ne coûtent que trois dollars et on peut obtenir des échantillons gratuits chez le fabricant (Dallas-Maxim).

Tout est décrit sur http://martybugs.net/electronics/tempsensor/

Le DS18S20-P est vraiment très petit:



Un premier montage très simple à base de 'sucres':



Avec des petites Zener, il est possible de tout caser dans le capot du DB-9 (mais je n'en ai pas trouvé de bonnes, celles-ci n'ont pas fonctionné...):



Un premier 'log' de température : je prends le composant entre le pouce et l'index quelques instants et le relâche. Il y a environ deux secondes entre deux mesures:

dimanche 29 juillet 2007

PHP+gettext

Quand cela fonctionne, c'est facile. Le problème, c'est qu'il suffit d'un grain de sable pour que cela ne fonctionne pas et c'est impossible à débugger (cela fonctionne ...ou non). Comme d'habitude, je ne garantis pas que c'est exactement ce qu'il faut faire, mais ça fonctionne 'chez moi'... (remarquez les 'echo'; quand il y a une erreur, c'est le silence; quand tout va bien, on obtient un texte)

Sur Ubuntu/Dapper Drake/6.06, soit un fichier /var/www/tests/xgt.php

<html>
<head> </head>
<body>
<?php
echo setlocale(LC_ALL, "fr_BE.utf8")."<br/>";
echo bindtextdomain('xgt', './xoflocale')."<br/>";
echo textdomain('xgt')."<br/>";
print(_("coucou"));
?>
</body>
</html>

Quelques remarques :

  • Le 'fr_BE.utf8' se trouve dans la liste donnée par '$ locale -a'

  • Le répertoire './xoflocale' est relatif à l'endroit où se trouve le fichier .php; dans ce cas-ci : /var/www/tests/xoflocale/.

  • Le fichier de traduction se trouve alors en /var/www/tests/xoflocale/fr/LC_MESSAGES/xgt.mo


Le fichier 'xgt.mo' est généré comme suit

cd /var/www/tests
mkdir -p xoflocale/fr/LC_MESSAGES
# extraire les textes à traduire
xgettext -o xoflocale/fr/LC_MESSAGES/xgt.po xgt.php
#
cd xoflocale/fr/LC_MESSAGES
# éditer le fichier .po pour
# - changer CHARSET par UTF-8
# - mettre la traduction
# "coucou"
# "traduction de coucou"
msgfmt -o xgt.mo xgt.po

Ensuite, (probablement,) redémarrer 'apache'

sudo /etc/init.d/apache2 restart

Et, si tout va bien, http://localhost/tests/xofgettext.php donne

fr_BE.utf8
/var/www/tests/xoflocale
xgt
traduction de coucou


xof

vendredi 27 juillet 2007

PHP+mySQL

On suppose que l'on a une table 'code_postal' avec les champs 'code' et 'nom' dans une base de données locale...


<html>
<head>
<title>Simple Test mySQL/PHP</title>
</head>
<body>
<h1>Le plus simple...</h1>
<?php
$link = mysql_connect("localhost", "nom_utilisateur", "mot_de_passe");
mysql_select_db("nom_base_de_donnee", $link) or die(mysql_error());
$query = "SELECT * FROM `code_postal` order by 'nom'";
$result = mysql_query($query, $link) or die($query . " - " . mysql_error());

$nbResults = mysql_num_rows($result);
echo "Nombre de lignes : ". $nbResults;
echo "<br /><br />";

while ($tab = mysql_fetch_array($result))
{
echo $tab['code']." - ".$tab['nom'];
echo "<br />";
}
mysql_close($link);
?>
</body>
</html>


NB: Pour des raisons pratiques et de sécurité, il est préférable de mettre les paramètres 'user', 'password' et 'database' dans un fichier inclu, inaccessible via le web:


<-- fichier "messecrets.inc" -->
<?php
$db_user="monlogin";
$db_password="monmotdepasse";
$db_name="mabasededonnees";
?>

et de faire un

<?php
include("messecrets.inc");
?>


Pour créer un utilisateur sur mySQL, on peut simplement faire :

mysql -p -u root
mysql> grant select on mabasededonnee.* to monlogin@localhost identified by 'monmotdepasse';


Où 'root' est le super-utilisateur mySQL (ou, quelqu'un ayant les privilèges suffisants pour faire un 'grant select' sur 'mabasededonnee').

mardi 24 juillet 2007

La base d'AJAX : XMLHttpRequest()

Un exemple très (trop) simple d'utilisation de XMLHttpRequest() sous Firefox (*). Quand on clique sur 'click-me', la fonction click() va chercher la page supplement.php avec XMLHttpRequest(). Le résultat s'affiche dans une boîte d'alerte...


<html>
<head>
<title>Simplest AJAX</title>
<script>
function click()
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
alert(xmlHttp.responseText);
var resp = xmlHttp.responseXML;
var z = resp.getElementsByTagName("tagada");
alert(z[0].childNodes[0].nodeValue);
}
}
xmlHttp.open("GET", "http://localhost/tests/supplement.php");
xmlHttp.send(null);
}
</script>
</head>
<body>
<h1>A (very) simple use of XMLHttpRequest()</h1>
<p style="background-color:yellow;" onclick="click()">click-me</p>
</body>
</html>


Avec, sur le serveur, supplement.php qui fournit une page de type 'text/xml' pour pouvoir utiliser responseXML.


<?php
header("Content-Type: text/xml");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>
<xml>
<tagada>
haha...
</tagada>
<tagb> Ho </tagb>
</xml>



(*) Pour IE et Firefox, il faut remplacer la ligne

var xmlHttp = new XMLHttpRequest();

par

var xmlHttp = null;

if(window.XMLHttpRequest) // Firefox
xmlHttp = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}

...Quand on peut faire simple...