• Shortcuts : 'n' next unread feed - 'p' previous unread feed • Styles : 1 2

» Publishers, Monetize your RSS feeds with FeedShow:  More infos  (Show/Hide Ads)


Date: Wednesday, 19 Mar 2014 17:31
Il y a un an, Mark Shuttleworth d'Ubuntu / Canonical annonçait avec un certain triomphalisme que Microsoft n'avait plus une part de part de marché dominante dans l'informatique personnelle, fermant ainsi le bug n°1 à l'origine d'Ubuntu. Effectivement le boom d'Android et d'IOS ont rejeté les parts de marché de Windows bien en arrière.
Est ce une victoire pour le consommateur ? Dans un certain sens, oui, car un choix de plateformes permet d'éviter un monopole de l' accès à l'information.
Y a-t-il derrière un succès pour le logiciel libre ? Faiblement, il s'agit toujours globalement de plateformes fermées, le cœur libre de IOS (Darwin) et celui d'Android (ASOP) se réduisant à une part de plus en plus congrue.
On peut observer cette évolution des parts de marché de façon très intéressante en consultant les statistiques de fréquentations de Wikipedia triées par système d'exploitation.

On se rend alors compte que Windows est en dessous de 50% de la barre des visites, Android tournant à 11% et les distributions Linux autour de 1% (FreeBSD et OpenBSD faisant une performance honorable en apparaissant même dans ces statistiques ... )
N'en doutant pas, une grande part des utilisateurs d'IOS vus dans ces statistiques on peut sans doute un PC quelque part,  mais alors ces statistiques indiquent que le PC est beaucoup moins utilisé, et recouvre alors bien moins d'importance.
Il y a quatre ans, Windows caracolait encore en tête avec 87 % des visites ...
Author: "Emmanuel Kasper"
Send by mail Print  Save  Delicious 
Date: Saturday, 28 Dec 2013 14:56

Comme je l’expliquais dans le post précédent, je suis passé chez SFR/neuf avec un forfait fibre. La box de l’opérateur, la neufbox donc, ne supportant pas de mode bridgé, quelques opérations sont nécessaires à une intégration cohérente dans votre réseau domestique.

Je me suis grandement inspiré de cette excellente documentation pour réaliser le bypass de la neufbox, cependant plusieurs éléments du tutoriel ne sont plus d’actualité. Je ne rentrerai donc pas dans le détail théorique puisque l’article de neufbox4.org est parfaitement explicite, mais focaliserai sur les méthodes à mettre en œuvre pour faire rentrer votre neufbox dans votre réseau local.

Première chose, donner du lien à la nb6. Ceci est très simplement réalisé par un serveur DHCP, ISC DHCP dans mon cas, présent dans pkgsrc/net/isc-dhcpd. J’ai isolé la neufbox dans un VLAN dedié, untagged coté équipement, tagged sur mon switch. Cette opération n’est absolument pas nécessaire, mais j’aimais assez l’idée d’isoler l’équipement de l’opérateur. Après avoir ajouté le vlan dans la liste des interfaces gêrées par le serveur DHCP dans /etc/rc.conf:

isc_dhcpd_flags="vlan2 vlan3 vlan9"
isc_dhcpd=YES

On ajoute un subnet dédié :

subnet 192.168.9.0 netmask 255.255.255.0 {
        default-lease-time 3600;
        max-lease-time 3600;

        range 192.168.9.1 192.168.9.10;
        option routers 192.168.9.254;
        option domain-name-servers 192.168.9.254;
        # needed for sfr neufbox
        option nis-domain "ftth_axione_omniswitch";
        allow unknown-clients;
}

Et dans la foulée, on s’assure que la box aura toujours la même IP dans ce range :

host neufbox {
        hardware ethernet 34:85:14:85:52:27; # cette MAC est évidemment fausse
        fixed-address 192.168.9.1;
}

Une fois le port “fibre” (gris) de la box branché à votre switch, un redémarrage plus loin, les 3 leds vertes en façade devraient être allumées.

Si vous souhaitez accéder à l’interface de la neufbox, sachez qu’elle est accessible depuis le switch intégré (ports bleus) sur l’adresse IP 192.168.1.1. Ceci est modifiable via le lien http://192.168.1.1/network/lan (ce lien n’est pas présent dans le menu).

L’aspect moins simple de l’opération concerne la VoIP. Je vous renvoie à la section “réseau local” de l’article précedemment cité pour comprendre le pourquoi de ce qui suit, mais pour faire court, la box ne disposant pas de son IP publique SFR, il faut intercepter son traffic sortant vers l’infrastructure de l’opérateur, et modifier le contenu des requêtes envoyées afin d’y inclure notre IP publique.

J’ai réalisé ce tour de passe-passe sous NetBSD, à l’aide de pf et nginx. On redirige tout d’abord le traffic HTTP en provenance de la neufbox sur un port spécifique de l’interface loopback :

neufbox_if="vlan9"
# [...]
rdr pass on $neufbox_if proto tcp from 192.168.9.1 to any port 80 -> \
        127.0.0.1 port 89

Puis dans le fichier de configuration nginx, on ajoute un nouveau serveur muni d’une location / :

    server {
        listen 127.0.0.1:89;
        server_name foo *.neufbox.neuf.fr;

        access_log  /var/log/nginx/neufbox.access.log;
        error_log  /var/log/nginx/neufbox.error.log;

        resolver 127.0.0.1;

        location / {
                if ($args ~ "^ip_data=[^&]*&ip_voip=[^&]*&ip_tv=[^&]*&(.*)$") {
                        set $others $1;
                        set $nip "ip.publique.neuf"; # a modifier avec votre IP
                        rewrite /(.*) /$1?ip_data=$nip&ip_voip=$nip&ip_tv=$nip&$others? break;
                }
                proxy_redirect off;
                proxy_pass http://$host;
        }
    }

Merci à Adrien ze pour le coup de main sur la réécriture. En effet, alors que je bataillais sur le mécanisme de rewrite, ze a découvert que cette méthode de nginx ignore purement et simplement les arguments d’une URI, d’où la nécessité de passer par un ifqui match l’URL à modifier.

Un reboot de la neufbox et un tcpdump -A -ni bien placé devraient vous démontrer que la box est désormais capable de télécharger une foule d’informations la concernant, de mettre à jour son firmware et surtout, de s’informer sur les mécanismes SIP en place chez l’opérateur.

La box étant derrière un routeur et accédant à l’Internet à travers du NAT, il est utopique d’imaginer que la voix passera sans sourciller. Car si en effet la signalisation (SIP, donc) passe sans broncher (voyant allumé), si vous tentez de passer un coup de fil, vous ne recevrez ni tonalité, ni son, pas plus que vous n’en emmétrez, simplement parce que le RTP ne parvient pas jusqu’à la box.

Pour résoudre ce casse tête, plusieurs actions sont nécessaires. En premier lieu, l’installation de l’excellent serveur proxy SIP/RTP siproxd, disponible dans la plupart des systèmes de paquets. Sous NetBSD, il est présent dans pkgsrc-wip. Bon en fait il était pété, je l’ai réparé, je suis sur le point de le commit.
La configuration du logiciel est assez simple :

if_inbound  = vlan9 # interface neufbox
if_outbound = vlan8 # interface publique
sip_listen_port = 5060
daemonize = 1
user = nobody
rtp_port_low  = 7070
rtp_port_high = 7089
outbound_proxy_host = fixed.p-cscf.sfr.net
outbound_proxy_port = 5060

Afin d’autoriser le traffic RTP vers notre proxy sur les ports allant de 7070 à 7089, nous ajoutons à notre pf.conf :

# RTP / siproxd
pass in quick on $ext_if proto udp from any to any port 7069 <> 7090

L’adresse du proxy SIP fixed.p-cscf.sfr.net est fournie par la réponse à l’une des requêtes HTTP effectuées par la neufbox à son démarrage. Et justement, c’est cette adresse qu’il va nous falloir modifier pour que la neufbox interroge notre serveur siproxd plutot que ceux de SFR directement.

Dans de précédentes versions des neufbox, il suffisait de remplacer l’adresse du proxy SIP par celle désirée, mais la normalisation et plusieurs protocoles sont passés par là. Ainsi la box ne se contente-t-elle pas uniquement d’interroger un simple serveur SIP passé en argument mais réalise plutôt une requête DNS de type SRV à la recherche d’une entrée _sip._udp dans le sous domaine passé en paramètre. Cela se traduit par les lignes suivantes dans la zone DNS qui régit le réseau domestique :

$ORIGIN sip.mon.domaine.local.
@                       A       192.168.9.254
_sip._udp               SRV     10 1 5060       sip.mon.domaine.local.

192.168.9.254 est l’IP sur laquelle écoute le service siproxd.

On y est presque.

Il nous reste à modifier le contenu des informations renvoyées par l’infrastructure SFR afin de remplacer les entrées relatives au proxy sip par notre propre proxy. Ceci est à nouveau réalisé par le biais de nginx et en particulier du module sub_filter. Notez qu’il est possible que votre installation de nginx ne possède pas ce module par défaut, auquel cas il faudra recompiler ce dernier avec le flag --with-http_sub_module (oui je vais l’ajouter dans pkgsrc/www/nginx :). On modifie la configuration précédemment enregistrée :

        location / {
                if ($args ~ "^ip_data=[^&]*&ip_voip=[^&]*&ip_tv=[^&]*&(.*)$") {
                        set $others $1;
                        set $nip "ip.publique.sfr";
                        rewrite /(.*) /$1?ip_data=$nip&ip_voip=$nip&ip_tv=$nip&$others? break;
                }
                proxy_redirect off;
                proxy_pass http://$host;
                sub_filter fixed.p-cscf.sfr.net</proxy> sip.mon.domaine.local</proxy>;
                sub_filter_once off;
                sub_filter_types application/xml;
        }

Une fois de plus, on redémarre notre pauvre neufbox dont elle doit se demander ce qu’elle a bien pu faire dans une vie antérieure pour mériter ça… and voila !

Notez que les logs de siproxd affichaient un “can’t resolve ims.mnc010.mcc208.3gppnetwork.org “ qui est le realm utilisé pour l’authentification SIP, et que j’ai donc ajouté à mon /etc/hosts l’entrée suivante :

172.26.235.91   ims.mnc010.mcc208.3gppnetwork.org

car c’est l’adresse qui semblait être appelée par la neufbox en mode “direct”, mais je n’ai aucune certitude quand à l’exactitude de ce mapping. Le realm ne devrait de toutes façons être d’aucune utilité au proxy local, l’ajout statique de cette entrée n’a donc probablement d’intérêt que de m’éviter des Gigaoctets de logs.

Update Nicolas Sapa m’informe sur Twitter qu’il est parfaitement normal que l’adresse 3gpp ne soit pas resolue hors du GPRS roaming exchange, aussi serait-il probablement plus judicieux de la faire résoudre sur une adresse locale quelconque.

The post Bypass neufbox 6 avec NetBSD appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Tuesday, 24 Dec 2013 13:26

Il y a deux ans ½, je m’extasiais sur le “fibrage” de mon immeuble par Free. Naïf, je me disais à l’époque que l’Appel n’allait donc pas tarder, que le plus dur était fait, que bientôt oui bientôt, j’allais bénéficier des tuyaux de Free Infrastructure en utilisant la lumière. Naïf iMil, eternel naïf.

Régulièrement depuis cette date, j’appelle. Tous les deux ou trois mois. Et on me dit d’attendre. Que ça va plus tarder. Et j’attendais.

Et puis le mois dernier, je passe mon appel routinier, et cette fois du nouveau: “ah mon bon monsieur, votre immeuble n’est pas éligible à la fibre optique.”. Je rétorque qu’ils doivent faire erreur, qu’ils ont eux même fibré mon immeuble, ce à quoi on me répond “oui… je comprend… je répète votre demande monsieur Heitor” (oui les téléconseillers de Free ils répètent. Tout le temps.) “vous souhaitez savoir si vous êtes éligible à la fibre, et je vérifie sur mon ordinateur… voila… donc Monsieur Heitor votre immeuble n’est pas éligible à la fibre”.

Ok.

Donc, incrédule, je vais sur le site de SFR, et je rentre mon numéro de téléphone: “Bonne nouvelle ! vous êtes éligible à la fibre 1Gbps !”. Bordel cul.

Je me tâte une fois, deux fois, et j’appelle. C’était le 28 Novembre. Depuis ce matin, une fibre arrive jusqu’à mon local informatique, délivrant 300Mbps down et 50 up. Service irréprochable, les installateurs étaient très sympas, et en 1h tout était posé.

Si d’aventure un corp (placer ici une musique type “apparition divine”) Free lisait ce post, sachez qu’un tant soit peu d’information, de transparence (vous rechercherez ce mot sur le wiktionnaire) aurait probablement calmé mes ardeurs. Les miennes et celles des 4 potes qui ont fait de même.

J’étais chez Free, et finalement j’ai compris.

Le petit hint spécial NetBSD, pour se passer de la neufbox et récupérer l’IP publique en dhcp directement sur votre passerelle, créez le fichier /etc/ifconfig.iface (où iface est le nom de votre interface reliée au boitier fibre) :

up
!dhcpcd -i neufbox_NetBSD_gateway-foo@bar.org $int

Executez la commande dhcpcd précédente manuellement si vous ne souhaitez pas rebooter.

The post Vous n’êtes pas éligible à la fibre ©Free appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Sunday, 22 Dec 2013 09:57

It’s been going on in my mind for a while, and I finally dove into Android development. As always when I put my hands on a new language / system, I had a basic need; this time I wanted to develop a simple init system that would resist my various ROMs flashing, i.e. a program that would not be located in the /system partition of the Android OS, but instead would be a package, an apk, that would read init scripts from the sdcard.

After two weeks of reading and learning Android basics, I came out with a very basic piece of code I called RcRun, which will read the content of a rc.d directory located on the primary sdcard (using Environment.getExternalStorageDirectory().toString() from java‘s Android modules) and will execute them when the BOOT_COMPLETED broadcast message is received. It will run as UID 0 using the su command (I’m using chainfire‘s SuperSU). Of course this means RcRun needs your ROM to be rooted.

There’s still a lot of work before I commit this to the official Android Market, aka Google Play, and possibly F-Droid, but RcRun is already usable for its primary goal. I run dropbear from there, plus various operations such as mounting the external’s DCIM directory on the primary sdcard DCIM.

You can fetch the apk from here and read the source code here; please be indulgent as this is my first piece of Android code ever.

The post A whole new (Hello) World appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Thursday, 28 Nov 2013 10:42
Vous avez un nom de domaine enregistré chez gandi.net ? Vous avez besoin d'un nom de domain pour une machine perso sur une ligne ADSL ? Rien de plus simple !

Créer d'abord une clé d'API sur https://www.gandi.net/admin/api_key

Puis on crée via l'interface web une entrée initiale pour la machine qui nous intéresse (par exemple monpc.mydomain.com) sur https://www.gandi.net/admin/domain

On télécharge le script python qui va accèder à cette API:
git clone https://github.com/lembregtse/gandi-dyndns.git /usr/local/src/gandi-dyndns
ln -s  /usr/local/src/gandi-dyndns/gandi-dyndns  /usr/local/bin/gandi-dyndns

Premier jet en ligne de commande ( vous devez utilisez la clé de production pour que ca marche)
gandi-dyndns --api=123rdyy --domain=mydomain.com --record=monpc

On ajoute dans la crontab le script suivant pour actualiser toutes les heures:

dans un fichier /etc/cron.hourly/gandy

#!/bin/sh
/usr/local/bin/gandi-dyndns --api=123rdBy --domain=mydomain.com --record=monpc > /var/log/gandy.log

Enjoy your dyndns !
Author: "Emmanuel Kasper"
Send by mail Print  Save  Delicious 
Date: Sunday, 24 Nov 2013 13:09

Considering latest Google Chrome’s bugs with Tweetdeck, which I use a lot, I decided to switch back (until next time) to Mozilla Firefox. That was anyway a move I wanted to do as Google is gaining too much knowledge about me…

While restoring my various logins and passwords on Firefox, I leaned about Firefox Sync, but most of all, about the ability to run my own Sync server.

While there’s a good official documentation on how to achieve this, I heard that ownCloud has a plugin for that. And as I wanted to give that software a serious try for a couple of months, that was the way to go.

ownCloud installation is pretty straightforward, but as soon as I created the first (Admin) user, I’ve been bitten by a bug: The login screen had a redirect loop to itself. Reading many bug reports about this, I finally understood that ownCloud does not cope well with HTTP Basic Authentication. Thing is, my ownCloud instance is running as a subdirectory of a private HTTPS section of my server, protected with a password. The workaround consists in adding:

Allow from all
Satisfy Any

to ownCloud‘s .htaccess file.

Regarding sessions, do not forget to set the session.save_path variable to a directory which is writable by PHP, either apache‘s UID if you’re running mod_php or PHP-FPM‘s UID.

Another misbehavior I experienced was related to the way my website is hosted. The website you’re reading has an nginx reverse proxy in front of it, and that reverse proxy is actually an SSL termination. i.e. ownCloud has no clue it is visited using HTTPS, and that caused many glitches, especially with Mozilla Sync, which is the reason why I began all of this work.

A simple workaround consists in adding the following directive to ownCloud‘s htaccess:

SetEnv HTTPS on

in order to inform PHP that the client is actually using HTTPS.

The last bug is known and (apparently) fixed in ownCloud-6 branch: The admin panel will complain about WebDAV being broken (“Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken”), which is actually untrue, there’s a closed ticket about ownCloud behavior when behind a reverse proxy.

FYI, the ownCloud instance is running on NetBSD, and is rendered by Apache 2.4 and PHP 5.4.

The post ownCloud workarounds appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Sunday, 08 Sep 2013 07:31
I have just released a new version of lshell 0.9.16. Lots of new code, and code cleanup has been done in this version. Many bugs have been corrected, and some new features. Here is the complete changelog: === v0.9.16 14/08/2013 === * Added support to login script. Thank you Laurent Debacker for the patch. * [...]
Author: "Ignace Mouzannar"
Send by mail Print  Save  Delicious 
Date: Thursday, 29 Aug 2013 12:12

 Accélération 3D:

apt-get mesa-utils
glxinfo | grep render
 
direct rendering: Yes
OpenGL renderer string: Gallium 0.4 on AMD RV710
    GL_EXT_vertex_array_bgra, GL_NV_conditional_render,

AMD RV710 étant ici le chipset de la carte graphique.

Accélération Video  (hardware scaling)

xvinfo | grep Adaptor
  Adaptor #0: "Radeon Textured Video"

Accélération 3D pour OpenGL ES ( pour systèmes embarqués / ARM)

es2_info | grep RENDERER
GL_RENDERER: Gallium 0.4 on AMD RV710
Author: "Emmanuel Kasper"
Send by mail Print  Save  Delicious 
Date: Tuesday, 27 Aug 2013 22:40

Normalement, après imports de la caméra Sony HDV, vous vous retrouvez avec une multitude de fichiers .mov suivant cette nomenclature suivante: ‘clip-yyyy-mm-dd hh;mm;ss.mov‘.

Pour ranger les fichiers rapidement dans des répertoires ‘clip-yyyy-mm-dd‘, voici le script à lancer à la racine du répertoire où se trouve tous les fichiers HDV :

#!/bin/bash
/bin/ls *.mov | awk '{ print $1 }' | sort | uniq | while read splitter;
do
        echo "SPLIT $splitter";
        mkdir $splitter 2> /dev/null
        /bin/ls ${splitter}*.mov | while read filename;
        do
                echo "MOVE '$filename' to DIRECTORY '${splitter}'"
                mv "${filename}" "${splitter}/"
        done
done
Author: "prae"
Send by mail Print  Save  Delicious 
Date: Tuesday, 27 Aug 2013 20:10

Après un import iMovie (ou autres), vous vous retrouvez avec une bibliothèque d’évènements qui comportent un symbole « warning » et les previews de vos rushes sont en rouges avec « Fichier manquant ».

Capture d’écran 2013-08-27 à 14.12.21

C’est simplement un petit défaut dans l’import de Final Cut Pro.

Pour cela, allez dans votre disque comportant vos rushes iMovie :

Capture d’écran 2013-08-27 à 14.14.22

Sélectionnez l’ensemble des fichiers comportant vos rushes (ici des .mov)

Capture d’écran 2013-08-27 à 14.15.36

Allez dans le répertoire « Final Cut Events », puis dans le répertoire correspond à votre évènement (ici « R13″), enfin déposez-les dans le répertoire « Original Media » :

Si vous revenez sur « Final Cut » et vous verrez que vos rushes seront maintenant visibles directement dans Final Cut.

Note pour ceux qui ont trop de rushes

Si vous avez trop de bibliothèques contenant des rushes, j’ai concocté un script pour une migration définitive entre iMovie et FinalCut.

Notice

  • Vous devez déjà commencer l’import des rushes entre iMovie et FinalCut via FinalCut
  • N’utilisez ce script que si vous voyez « Fichier manquant » dans vos bibliothèques
  • Les répertoires « iMovie Events » et « Final Cut Events » doivent être dans le même répertoire racine.
  • Le script ne déplace que les fichiers contenant les rushes, il ne va pas créer les bibliothèques adéquates, pour cela, utilisez l’import via FinalCut et finalisez l’import des fichiers manquants via ce script.
  • Ce script est un script shell, il n’y a donc pas d’interface graphique.
  • Ce script n’offre aucune garantie, à vos risques et périls: Pensez donc à faire un backup avant (je sais, je fais ouvertement peur :)

Pour l’utilisez, téléchargez-le et sauvegardez-le à la racine où se trouve vos deux répertoires « iMovies Events » et « Final Cut Events ».

Quand cela est fait, passez par le Finder. Vous devriez voir que l’icône est noir. Double-cliquez dessus, un terminal va s’ouvrir et va migrer vos rushes dans les bons répertoires.

Exemple :

Scanning .//Final Cut Events
Find rushes into 'R01' on your iMovie Libraries...
Find rushes into 'R02' on your iMovie Libraries...
Find rushes into 'R03' on your iMovie Libraries...
Find rushes into 'R04' on your iMovie Libraries...
Find rushes into 'R05' on your iMovie Libraries...
Find rushes into 'R06' on your iMovie Libraries...
Find rushes into 'R07' on your iMovie Libraries...
Find rushes into 'R08' on your iMovie Libraries...
Find rushes into 'R09' on your iMovie Libraries...
Find rushes into 'R10' on your iMovie Libraries...
Find rushes into 'R11' on your iMovie Libraries...
Find rushes into 'R12' on your iMovie Libraries...
Find rushes into 'R13' on your iMovie Libraries...
Move './/iMovie Events.localized/R13/clip-2013-08-11 10;40;36.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 10;40;36.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 10;41;31.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 10;41;31.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 10;47;59.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 10;47;59.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 10;48;30.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 10;48;30.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 10;55;41.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 10;55;41.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 11;53;43.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 11;53;43.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 11;54;11.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 11;54;11.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 11;54;22.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 11;54;22.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 11;54;37.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 11;54;37.mov'
Move './/iMovie Events.localized/R13/clip-2013-08-11 11;55;13.mov' => './/Final Cut Events/R13/Original Media/clip-2013-08-11 11;55;13.mov'

PS: Si en cliquant dessus, le fichier s’ouvre dans un éditeur de texte, rendez le script exécutable. Soit via « Lire les informations », soit via le Terminal « chmod +x migration_iMovie_FinalCut.csh »

Author: "prae"
Send by mail Print  Save  Delicious 
Date: Sunday, 25 Aug 2013 11:48

Like every year, my trusty Fonera 1 running OpenWrt Kamizake repeats the nearest signal to my Hotel room. Until now, my lovely Sol Bahia had an open WiFi access, which was trivially configured in OpenWrt, but this year, they changed their access point to a Zyxel Prestige 650HW-33 (don’t ask) which is “secured” (yeah, right) with WEP. Why am I writing an article about this? because I tend to never use WEP and forget how to configure it on my router everytime. Also, that protocol is so widely not recommended, that there’s almost no documentations on how to set it up properly, but as a matter of fact there are so many hotels and people still using that unsecure protocol that it’s worth writing a reminder.

So here’s the relevant portion of my OpenWrt Kamikaze 7.0.9 /etc/config/wireless for a WEP client:

config wifi-iface
        option device   wifi0
        option ifname   ath1
        option network  wan
        option mode sta
        option ssid "Sol Bahia"
        option encryption "wep"
        option key "1"
        # needs to be in hex: echo -n '12345'|hexdump -e '5/1 "%02x" "\n"'
        option key1 3132333435
        option txpower 18

The tricks are:

  • You can have more that one key declared, so you’ll have to give the index of the key to use.
  • That key is to be declared as keyX, X being the index previously chosen
  • The key can’t be written as a plain string, if the password is a string, you’ll have to hexdump it:
$ echo -n '12345'|hexdump -e '5/1 "%02x" "\n"'

The /etc/config/network for that link is trivial:

config interface wan
        option ifname   ath1
        option proto    dhcp

There you go, hopefully I won’t forget it next time :)

Now to the beach.

The post OpenWrt WEP client appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Saturday, 17 Aug 2013 10:02

I need vacations, I really do.

Yesterday night, I decided to upgrade my home’s Internet gateway from NetBSD 6.0 to 6.1. As I already had some success with jmmv‘s sysupgrade, I simply ran

# sysupgrade auto ftp://ftp.fr.NetBSD.org/pub/NetBSD/NetBSD-6.1/amd64

… on an i386 machine. That obviously lead to massive failure such as:

/bin/ls cannot execute elf binary

As I still had an SSH session opened on that server, my first thought was to use /rescue‘s binaries, which are statically linked, but guess what, /rescue is also part of base.tgz, the first set installed by sysupgrade(8). Doomed? not yet. I remembered that my gateway mounts /usr/pkgsrc over NFS, from my NetBSD NAS. So I fetched i386‘s base.tgz on the NFS server, extracted /rescue/sh and /rescue/tar, copied them to /usr/pkgsrc and made sh suid root so I could call tar with the -C / flag in order to replace amd64 binaries. For some reason, rescue‘s tar would not gunzip base.tgz, I really was not brave enough to dig into this, so I gunzipped it on the NFS server.

$ /usr/pkgsrc/tmp/sh
# tar xvfp base.tar -C /

That worked, and I was able to run sysupgrade(8) again, this time with the good architecture.

Within a week, I’ll be sunbathing in Ibiza, I think I deserved it.

The post /rescue to the rescue appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Sunday, 28 Jul 2013 23:05

I’m slowly migrating some parts of my personal Wiki to Github using their own markdown syntax. Before committing, I wanted to make sure the docs look like they should. Here’s a small Flask snippet I wrote in order to achieve this:

from flask import Flask, request
import markdown

app = Flask(__name__)

@app.route('/', methods = ['GET'])
def index():
    with open(request.args.get('md'), 'r') as f:
        md = f.read()
    <html>
        <body>
        {0}
        </body>
    </html>
    '''.format(markdown.markdown(md, ['fenced_code']))

if __name__ == '__main__':
    app.run(debug=True)

Python Markdown has an extension called fenced code blocks which supports Github‘s tidle (```) syntax, thus making this small program’s output similar to what the doc will finally look like.

The post Github flavored markdown with python appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Saturday, 27 Jul 2013 11:35

So last week I had that massive presentation to do and was already depressed to click on the Impress icon. So I took a couple of hours to dig into those various HTML5-enabled presentation systems and came across reveal.js. An impressive piece of software that somewhat changed my life forever: Never more am I to fight with misplaced bullets and erroneous indentation, reveal.js permits to create your slides using markdown. Yes, reveal.js is that cool. Using the external markdown capability, I simply edit a .md file which is rendered by the js engine. As I still (and probably for long) use ISO-8859-15 as my main charset, I also pushed a patch to the author which permits to specify included file charset (I learned that AJAX queries use UTF-8 by default).

So while at it, I’ve enabled this very blog with markdown capabilities too, this blog post is actually using that syntax thanks to WP-Markdown. Comments and posts are now markdown enabled, enjoy!

The post Markdown everywhere appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Saturday, 06 Jul 2013 10:38

At ${DAYWORK}, I am writing a simple Flask web frontend for our new information system. I wanted to have a simple authentication method and so I found the Flask-Login extention for Flask which takes care of user validation, session remembrance , and has a callback method in order to plug the authentication on whatever backend you’d like.

I came up with that little piece of code which makes Flask-Login check a user / password couple against a LDAP server, and validates a user regarding its user ID:

# add Flask-related imports before this point
from flask.ext.login import LoginManager, login_user, UserMixin, \
    login_required, logout_user, current_user
from wtforms import Form, TextField, PasswordField, validators
# simpleldap is way more convenient than python-ldap
import simpleldap

# initialize the Flask app
app = Flask(__name__)

# initialize the login manager
login_manager = LoginManager()
login_manager.init_app(app)

ldapsrv = 'ldap-server.address'
basedn = 'ou=users,dc=company,dc=net'


def ldap_fetch(uid=None, name=None, passwd=None):
    try:
        if name is not None and passwd is not None:
            l = simpleldap.Connection(ldapsrv,
                dn='uid={0},{1}'.format(name, basedn), password=passwd)
            r = l.search('uid={0}'.format(name), base_dn=basedn)
        else:
            l = simpleldap.Connection(ldapsrv)
            r = l.search('uidNumber={0}'.format(uid), base_dn=basedn)

        return {
            'name': r[0]['uid'][0],
            'id': unicode(r[0]['uidNumber'][0]),
            'gid': int(r[0]['gidNumber'][0])
        }
    except:
        return None


class User(UserMixin):
    def __init__(self, uid=None, name=None, passwd=None):

        self.active = False

        ldapres = ldap_fetch(uid=uid, name=name, passwd=passwd)

        if ldapres is not None:
            self.name = ldapres['name']
            self.id = ldapres['id']
            # assume that a disabled user belongs to group 404
            if ldapres['gid'] != 404:
                self.active = True
            self.gid = ldapres['gid']

    def is_active(self):
        return self.active

    def get_id(self):
        return self.id


@login_manager.user_loader
def load_user(userid):
    return User(uid=userid)


class LoginForm(Form):
    username = TextField("Username", [validators.Length(min=2, max=25)])
    password = PasswordField('Password', [validators.Required()])


@app.route("/", methods=["GET", "POST"])
def login():
    form = LoginForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(name=form.username.data, passwd=form.password.data)
        if user.active is not False:
            login_user(user)
            flash("Logged in successfully.")
            return redirect(url_for("some_secret_page"))
    return render_template("login.html", form=form)


@app.route("/logout", methods=["GET", "POST"])
@login_required
def logout():
    logout_user()
    return redirect(url_for("login"))

In short, when a user authenticates on the login form, its password is checked against the corresponding LDAP dn when the user object is created. When an id is checked by the load_user callback, the same kind of object, User, is built, only using a user ID. Both methods use the same function, ldap_fetch which replies a dict containing the necessary informations in order to build a User object.

The post LDAP Flask-Login snippet appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Date: Thursday, 27 Jun 2013 00:10

Alors, puisque j’aime la rigueur des chiffres, j’ai fait un petit calcul sur la base des commissions d’attributions des aides pour la numérisation des salles de cinéma en France délivrées par le #CNC.

En tout et pour tout, 59.493.086 € ont été dépensé pour la numérisation de 957 salles de cinéma par le CNC.

Soit 60% du budget à la numérisation des salles de cinéma a été dispatché sur 957 salles en France déjà. (budget total: 100M€)

Année 2010 1.521.744 € 25 salles
Année 2011 19.936.488 € 318 salles
Année 2012 29.104.277 € 479 salles
Année 2013 8.930.577 € 135 salles

Le tableau complet: cnc-numerisation.htm
Le fichier CSV complet: cnc-numerisation.csv

Author: "prae"
Send by mail Print  Save  Delicious 
Date: Wednesday, 26 Jun 2013 10:34
En cherchant comme automatiser la création de machines virtuelles, je me suis penché sur libvirt, l'outil de virtualisation générique pour contrôler KVM, Xen, VmVare et quelques autres.

En combinant l'installeur virt-install avec un fichier preseed qui permet d'automatiser l'installation sur Debian, on peut créer sa propre machine virtuelle sans toucher une seule fois le clavier !
C'est assez impressionnant de voire l'installeur configurer le réseau, partitionner le système, installer le système sans aucune intervention utilisateur. La commande suivant installera un système Debian minimal avec openssh, et les comptes root/root et user/user

La Machine Virtuelle ainsi créée est ensuite controlable avec virt-manager, pour peu que votre utilisateur soit membre du groupe livirt.


Remarques, questions, suggestions ? Plutot que de laisser un commentaire qui passera ici peut etre ici inaperçu, contactez moi @formicapunk sur Twitter !
Author: "Emmanuel Kasper"
Send by mail Print  Save  Delicious 
Date: Thursday, 20 Jun 2013 14:50

J’ai été voir le film « Room 237« , le documentaire sur le film Shining de Stanley Kubrick.

Documentaire intéressant les 20 premières minutes, puis après, cela part sur des délires complotistes où chaque symbole du film Shining est trituré, tiré par les cheveux et déplacé dans un autre contexte et si possible le plus éloigné possible.

Tout y passe: Les illuminatis, les évènements de la seconde guerre mondiale, les massacres des indiens, la mission Apollo (pour ceux qui ne savent pas, y’a une théorie comme quoi, c’est Stanley Kubrick qui a filmé en studio la mission Apollo sur la lune), le gouverment US, etc…

Dans le top des « QUOI?! » (en noir, les thèses des interviewés, en bleu, mes commentaires):

  • La Room 237: le chiffre 237(.000) est en fait la distance entre la terre et la lune, Kubrick voulait nous donner un signe de sa participation au tournage.

    Bon, après vérifications, la distance c’est 384.400 km. Conversion en miles: 238(.855). Putain Kubrick s’est trompé de chambre, le con…

  • La Room 237: Sur le porte-clef dans une des scènes, on voit l’inscription « ROOM N°237″. Si on prend O,O,M et N, ca fait.. MOON !

    Capture d’écran 2013-06-20 à 13.25.49

    Oui, et si on fait R,O,N,O, ca fait Renault, Et Renault a fait l’Espace… tout est lié qu’on vous dit !

  • La Room 237: Si on calcule 2x3x7: Ca fait 42. Référence à la seconde guerre mondiale.

    Oui, sinon 42, c’est aussi la réponse à la grande question sur la vie, l’univers et le reste, le numéro de l’appartement de Fox Mulder, le numéro de la dernière armure de Tony Stark dans le film Iron Man 3 et l’âge de l’un des techniciens sur le plateau. Sûrement un illuminati lui aussi

  • La Room 237: Le chiffre 237 est le numéro du plateau où s’est tourné la mission Apollo.

    Ouah, vous vous rendez compte, il y a quelque part dans le monde, un studio qui possède 237 plateaux ! je suis sûr que ca ferait des jaloux chez Pinewood ou chez Cinecitta.

  • Stanley Kubrick a participé au tournage d’Apollo, parce que si on prend une photo d’une des missions, on voit une lumière étrange qui se trouve identique dans 2001, l’odyssée de l’espace. Et que si on zoome, on voit des symboles illuminatis.

    Le gars arrive à faire un zoom extrème sur une photo sous-exposée. Et voit des … trucs… qu’il a lui-même incrusté autour du point blanc.

  • Des éléments sont le symbole phallique et sexué du désir de l’auteur.

    Comme ici :



    et la moquette :

    Capture d’écran 2013-06-20 à 13.19.47

    heuu… ou simplement une moquette moche de la fin des années 70… Sans plaisanter, comment on peut voir un symbole phallique sur une bannette à papier ?

  • Dans les fondus entre scènes, tu peux voir des symboles des illuminatis, des évènements de la seconde guerre mondiale, ou des gens qui ont des valises que c’est probablement une référence à la seconde guerre mondiale.

    Le visage et la moustache:

    Capture d’écran 2013-06-20 à 14.04.21

    Le fondu sur le triangle:

    Avant:
    Capture d’écran 2013-06-20 à 14.07.16

    Pendant:
    Capture d’écran 2013-06-20 à 14.07.35

    Si vous comprendez pas, fumez un bon coup. Sinon pour être sérieux, Kubrick était très intéressé par l’architecture, la colorimétrie, la dimension dans le champs visuel et l’aspect final de ses images, donc normal qu’un plan juxtapose un autre afin de rendre la transition plus fluide à l’oeil.

  • Que les gens circulant dans l’entrée de l’hôtel sont étranges, ils se déplacent de façon précise et chronométrée.

    ON APPELLE CELA DE LA MISE EN SCÈNE, STUPIDE COMPLOTISTE !!! Regardes Tonton Stanley donner des ordres aux comédiens: Making Of

  • Y’a un gars qui a eu l’idée de jouer le film à l’endroit et en surimpression à l’envers. Et que parfois, en se croisant, on voit des trucs étranges, comme le visage d’un dictateur à moustache, des symboles illuminatis (oui encore), ou tout autre symbole étrange.

    Exemple:

    Bon, le gars est gentil, mais il monte les deux films sur des timecodes qu’il a choisi arbitrairement et en virant le générique. Même l’auteur semble ne pas croire à sa propre connerie.

  • Danny (le gamin) se planque dans un four pour échapper à son père, le symbole-lien avec la seconde guerre mondiale.

    En fait, il se planque dans une armoire basse de cuisine, mais c’est pas grave: four, armoire, lit, table basse, ventilo, tout cela se ressemble, c’est à cause d’Ikea et des norvégiens ou des suédois, enfin tout cela se ressemble…

  • Que Danny a été violé parce que Jack lit un playgirl daté et qu’un des articles de cette époque parle d’inceste.

    Capture d’écran 2013-06-20 à 13.15.28

    Heu… franchement là, j’ai décroché, je suis allé me faire un shoot de vodka pour être dans le même trip que les auteurs… A aucun moment, on ne parle, ni n’évoque cela. Surtout que le « ghost » de Jack, c’est d’être ancien alcoolique et d’avoir été violent par accident sur Danny. Mais à aucun moment, on n’évoque un abus sexuel sur lui.

  • Que l’enfant passe du RDC au 3eme, c’est intriguant et « blah blah blah » (mettez des thèses complotistes dedans…)

    En fait, les gars ont zappé la section « Le montage au cinéma ».

  • Des éléments dans le décor change. Ce qui montre que « blah blah blah ».

    Avant:

    Capture d’écran 2013-06-20 à 13.33.50

    Après:

    Capture d’écran 2013-06-20 à 13.33.32

    Idem qu’au dessus, mais rajoutez une pincée de sel. Pas un seul moment les gars ne se disent que peut-être ce sont des erreurs de montage et/ou de scripte.

  • On voit Stanley Kubrick dans un des nuages au début du film.

    Capture d’écran 2013-06-20 à 13.43.07

    « Dites non à la drogue »

    Entre nous, je cherche encore son visage dans les nuages. Si vous le trouvez, n’hésitez pas à commenter…

  • Que le patron de l’hotel ressemble à JFK, donc lien avec le gouvernement, donc lien avec le programme Apollo.

    Capture d’écran 2013-06-20 à 13.20.55

    Je viens de finir la bouteille de vodka, vous pouvez m’en rapporter une si vous passez à la cuisine ?

  • L’ascenseur sanglant ne s’ouvre pas totalement. C’est parce que les Hommes se cachent les yeux sur leur passé.



    Ou alors, si l’équipe technique n’ouvrent pas complètement les portes, c’est pour cacher la technique qui se trouve hors plateaux… derrière les portes, vous savez, les gros tubes qui stockent la flotte rougeâtre pour l’effet d’épouvante de dedans du film d’épouvante ?

  • L’homme à tête fendue à la fin du film: Un des auteur-complotistes a écouté une fois son enfant lui raconter une histoire – qu’il a inventé – sur un homme qui se prend un eclair sur la tête et de son crane sort un petit homme. L’auteur-complotiste nous fait une relation entre l’histoire de son fils et celui du gamin dans Shining qui parle à un ami imaginaire.

    Capture d’écran 2013-06-20 à 14.02.49

    Wait, wait… Encore maintenant, je comprends pas le lien logique entre les deux histoires, et qu’est ce que cela prouve ? que son fils est un putain de psychopathe en imaginant des gens se prenant des éclairs sur la gueule ?!

  • Et que la date de fin 1921 fait liaison avec 1941…

    Capture d’écran 2013-06-20 à 14.04.57

    pourquoi ? comment ? on n’en sait rien, mais on s’en fout puisque c’est un complôt des chinois du FBI, on vous dit…

  • Etc, etc… Et cela continue jusqu’à la fin du documentaire. Au point où j’ai complètement décroché les 10 dernières minutes, je crois

Bref, le documentaire enchaîne des thèses complotistes complètement tirées par les cheveux. Heureusement, le réalisateur est conscient des délires des gens qu’il a interviewé: « Les théories du complot, un sport américain.

Un article qui reprend une partie des thèses : All play and no work? ROOM 237.


Dans les trucs positifs du film (donc les 20 premières minutes) :

  • Les dispositions des pièces dans l’hôtel un peu étrange, notamment le bureau du patron (cf. video qui en traitait déjà à l’époque),
  • La symbolique du Minotaure (quoique tiré aussi un peu par les cheveux)
  • Le fait de voir que Danny (le gamin) nous manipule tous et provoque la folie de son père pour mieux le tuer de façon subtile (course dans le labyrinthe)
  • Une scène m’a toujours perturbé dans Shining, c’est celle du cuisinier qui revient à l’hôtel sous la neige et il croise un accident de voiture: La scène ne servait à rien. Dans le documentaire, un des gars évoque le conflit entre Kubrick et Stephen King sur le scénario. Et la voiture accidentée semble être celle définie par Stephen King dans le roman. (à confirmer),
  • L’engueulade entre Jack et sa femme à propos de responsabilité et de contrat. L’échange est véritablement étrange, en effet. Un des gars évoque les paroles de Kubrick envers sa femme (là, ca se tient, pourquoi pas) … pour le tournage de la mission Apollo (et c’est là, que ca part en cacahuète…),
  • Le générique de fin. (parce que c’est la fin et qu’on est saoulé par tant de conneries)

Sinon, on regarde aussi le Making Of :







Mon sentiment à la fin du film:










PS:

Un élément que j’ai vu en revisionnant le film, c’est le petit coup d’oeil de Jack à l’équipe technique…


En image arrêtée :

Capture d’écran 2013-06-20 à 13.47.28

PS2:

Désolé pour l’affichage un peu pourri et les images mal calées.

Author: "prae"
Send by mail Print  Save  Delicious 
Date: Thursday, 06 Jun 2013 21:26

I’ve been learning and diving into SaltStack for about a month now, for both work and personal interest, that thing simply rocks. In the meantime, I’ve contributed a couple of modules, like bridging and Xen support, plus a couple of grains improvements for NetBSD.

But most of all, I’ve been preparing my ${DAYJOB} infrastructure for Salt, and I must say this has been much easier than I thought, thanks to this beautifully designed piece of code.
One aspect I’d like to share is the simple way I found to make a minion dynamically configured, through custom-made grains.

Like many companies, we have an Information System, which has a bunch of informations about everything on our network, and among those, the roles of the virtual machines which are started. Those informations are made available to a minion through an HTTP server, which will recognize the minion’s REMOTE_ADDR and tell him what are its «roles».

The webserver is our always-favorite nginx, which interfaces a WSGI server, uWSGI.

nginx‘s configuration is simple:

location / {
        include uwsgi_params;
        uwsgi_pass unix:///var/run/uwsgi/app/is/socket;
}

uwsgi application’s .ini is pretty trivial too:

[uwsgi]
workers = 2
log-date = true
plugins = python
chdir = /var/www/is
module = is

A very simple python script using web.py resides in /var/www/is and gives the minion which will query him a YAML structured output containing, among other data, the minion‘s roles.

I wrote a basic grain module which retrieves those informations and make them available as grains for the minions:

$ cat _grains/is_http.py 

import requests
import yaml

def more_infos():
        '''
        Returns the minion's roles and stuff.
        '''
        r = requests.get('http://private.fqdn/')

        return yaml.load(r.text)

After deploying that grain module via salt '*' saltutil.sync_grains, the minions are now aware of what they’re meant to do, thus making a generic top.sls easy to write.

Thanks to Jinja2, a sls file can be made more dynamic, and we can write a very complex scenario within a couple of lines:

$ cat top.sls 
base:

  {% set states = salt['cp.list_states'](env) %}

  '*':
    - common
    {% if 'roles' in grains %}
    {% for role in grains['roles'] %}
    {% if role in states %}
    - {{ role }}
    {% endif %}  # state exists
    {% endfor %} # for roles
    {% endif %}  # role exists

  'virtual_subtype:Xen PV DomU':
    - match: grain
    - domus

  {% if grains['host'] in states %}
  {{ grains['host'] }}:
    - {{ grains['host'] }}
  {% endif %}

There we go, for every role a minion has, we can add a sls to match that role globally, as we can also add a very specific, host-related sls. Beautiful and handy, that’s what Salt is.

Update for Salt 0.15.3

Since Salt 0.15.3, a sls file can’t reference an non-existent state anymore, thus the additional checks in order to get sure the target state actually exists.

The post SaltStack: dynamic sls (updated for 0.15.3) appeared first on Emile "iMil" Heitor 's home.

Author: "iMil"
Send by mail Print  Save  Delicious 
Next page
» You can also retrieve older items : Read
» © All content and copyrights belong to their respective authors.«
» © FeedShow - Online RSS Feeds Reader