Let the Good Times Roll !
Ici et là, au gré des vents – Daymz.com

Reference thread: http://www.runeaudio.com/forum/post7636.html#p7636

OK, I`ve spent the entire day on this because I just hate the auto-play on boot behavior. I do want the state saved to keep the existing playlist, but in my case, resuming play on boot makes no sense at all (ex: power outage at night – boom, sound system starts blasting music I was listening to some other day)

The fix is in several parts:
1) make sure that the mpdstate file is on « pause » at startup
2) remove a play command in orion_optimize.sh

The following tutorial was done on RuneAudio 0.3 for Raspberry PI.

Part 1 : Change mpdstate before mpd starts

When mpd quits, it saves it states to the state file (/var/lib/mpd/mpdstate). If your device rebooted while it was playing, we will want to have it chagned to pause in order ot avoid mpd restart play.

Create a new script and save it somewhere (example here: /home/user/mpd_state_pause). The script will modify the mpdstate file so that the mpd state is always « paused »

#!/bin/sh

# Modify MPD's state file to ensure current state is "pause"
sed -i 's/^\(state: \).*/\1pause/' /var/lib/mpd/mpdstate

Now, let’s run that script before starting mpd. The best way is to use systemctl’s ExecStartPre directive. Modify /usr/lib/systemd/system/mpd.service to add the ExecStartPre line below: (don’t forget to change the path of the script to the location you chose earlier)

[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStartPre=/home/user/mpd_state_pause
ExecStart=/usr/bin/mpd --no-daemon

[Install]
WantedBy=multi-user.target

Part 2 : Fix the orion_optimize.sh script

Even though I did Part 1, I could see in the UI that MPD was being restarted, and oh no, play resumed. It took me a freakin’ while, but I eventually found out that /var/www/command/rune_SY_wrk was calling /var/www/command/orion_optimize.sh, and at line 159, that script was calling « mpc play ».

Comment out « mpc play » at line 159.

Part 3 : Test your setup

Go to the RuneAudio web UI, put a couple tunes/web radios in the queue, hit Play. Now reboot the device.

Once rebooted, the queue should still contain all your files, but play will not resume. It will be paused.

Enjoy!

------

I’ve been meaning to use my DNS323 NAS as some Private Cloud Sync for files I wanted to share-and-sync across several computers on my LAN, while retaining a centralized backup with weekly snapshots.

This is the second part of the howto. The first discusses the process of building Unison (and OCAML) for the DNS-323.

If your DNS-323 doesn’t have FFP and SSH setup and enabled already, please review one of the many howto’s available on the internet.

Building Unison for the DNS-323

This part has been covered in details in the First Part of this Howto. Please read the following article: « Building Unison for the D-Link DNS-323 NAS for 2-way Sync »

Prerequisites for Unison on your Windows 8 Computer(s)

Step 1: Making a permanent storage for root’s home on the DNS-323

By default, the DNS-323’s root home is setup in a volatile portion of the filesystem. Everything gets reset when the DNS-323 reboots. We need a permanent storage on the DNS-323 for root in order to get SSH’s key login and Unison’s synchronization data.

The following is a self-made hack, it just works so I didn’t bother looking for other methods. We will simply copy the existing root’s home to the NAS’s hard drive, and link the new home.

Login to your DNS-323’s SSH shell:


# cd /
# mkdir /ffp/home
# mv /home/root /ffp/home/
# ln -s /ffp/home/root /home/root

Now, we will create a small startup script to relink the permanent storage at boot up. Create and edit the following file: /ffp/start/homesetup.sh. Its content should be:


#!/ffp/bin/sh

# Relink root's home on ffp
rmdir /home/root
ln -s /ffp/home/root /home/root

Let’s make the file executable and we’re all done:


# chmod +x /ffp/start/homesetup.sh

Step 2: Install Cygwin on the Windows 8 Computer(s)

I had issues with the SSH client that is built-in with Unison (it kept crashing with out of memory errors, on a 8GB computer). I also read several articles that recommended using Cygwin’s SSH instead, so here it goes.

Download and install either setup-x86.exe or setup-x86_64.exe from Cygwin’s Installation page.

The installation process is pretty straightforward. For the purpose of this howto, here are some of the parameters of my installation:

  • I installed the x86_64 version
  • I used a destination folder of « C:\Program Files\Cygwin\ »
  • I selected the libssh and openssh packages in the additional packages (don’t know if they were necessary)

Step 3: Setup SSH login using keys

Because we will want to setup Unison as an automated script, we will need to have a password-less login to SSH. We will achieve that with SSH keys.

First, login to your DNS-323 by SSH. We will create an identification key for SSH sessions. When the ssh-keygen executable asks for your passphrase, make sure to hit Enter without a password.


# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/root/.ssh/id_rsa.
Your public key has been saved in /home/root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@dns323.mynetwork.local

The steps above created two files in your .ssh/ directory. The one we will be most interested in is id_rsa.pub. It will allow root@dns323.mynetwork.local to login to SSH with the key file instead of a password:


ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEArkwv9X8eTVK4F7pMlSt45pWoiakFkZMw
G9BjydOJPGH0RFNAy1QqIWBGWv7vS5K2tr+EEO+F8WL2Y/jK4ZkUoQgoi+n7DWQVOHsR
ijcS3LvtO+50Np4yjXYWJKh29JL6GHcp8o7+YKEyVUMB2CSDOP99eF9g5Q0d+1U2WVdB
WQM= root@dns323.mynetwork.local

Now, we need to enable key-logins in the SSH parameters, and reboot the NAS in order to restart the SSH service with the new parameters.

First, let’s enable the key parameters. Open the /ffp/etc/ssh/sshd_config file in your favorite editor and make sure the following lines are uncommented:


RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Second, let’s make sure that the key we created earlier is authorized and we will reboot:


# cd /ffp/home/root/.ssh
# cp id_rsa.pub authorized_keys
# reboot

Next, wait until the DNS-323 is finished rebooting (it takes about a minute) and open a Cygwin Terminal on your Windows 8 computer. We will transfer the .id_rsa.pub file that was just generated.


Daymz@Windows8 ~ $ mkdir /home/Daymz/.ssh
Daymz@Windows8 ~ $ cd /home/Daymz/.ssh
Daymz@Windows8 ~/.ssh $ sftp root@dns323.mynetwork.local
Connected to dns323.
sftp> get .ssh/id_rsa*
Fetching /mnt/HD_a2/ffp/home/root/.ssh/id_rsa to id_rsa
/mnt/HD_a2/ffp/home/root/.ssh/id_rsa 100% 1675 1.6KB/s 00:00
Fetching /mnt/HD_a2/ffp/home/root/.ssh/id_rsa.pub to id_rsa.pub
/mnt/HD_a2/ffp/home/root/.ssh/id_rsa.pub 100% 401 0.4KB/s 00:00
sftp> quit
Daymz@Windows8 ~/.ssh $ cp id_rsa.pub authorized_keys
Daymz@Windows8 ~/.ssh $ chmod 0600 *
Daymz@Windows8 ~/.ssh $ chgrp Users *

Now, we should be able to login as root on the DNS-323 without a password.


Daymz@Windows8 ~ $ ssh root@dns323.mynetwork.local
root@dns323:/mnt/HD_a2/ffp/home/root# Exit
Connection to dns323 closed.
Daymz@Windows8 ~ $

Disclaimer: be very careful to keep that id_rsa file private. Anyone who can access that file will be able to login to your DNS-323 as root.

Install Unison on the Windows 8 Computer(s)

Step 1: Download and install Unison

Download Unison for Windows from its Official web site. It will send you to the official Windows binaries download site. At time of writing, Unison v2.40 is the latest version.

Unison’s installation process is very simple and straightforward:

  1. Unzip Unison-2.40.102.zip
  2. Create a « Unison » folder in C:\Program Files\
  3. Copy the Unison 2.40 executables in C:\Program Files\Unison\
  4. Create a shortcut to C:\Program Files\Unison\Unison-2.40.102 Gtk+.exe on your desktop or Start Menu

Step 2: Configure Unison

Unison will store all synchronization rules in a file called a Profile. These files are stored in the User’s directory within a « .unison » folder and they carry the .prf extension.

For the purpose of this Howto, we will create a profile in C:\Users\Daymz\.unison\Dns323.prf and it will contain the following configuration details:


# Folders to synchronize
root = C:\Users\Daymz\Documents\SynchronizedFolderOnWindows8Computer\
root = ssh://root@dns323.mynetwork.local/mnt/HD_a2/SynchronizedFolderOnServer/

# SSH arguments: use cygwin's ssh and enable compression (-C)
sshcmd = c:\progra~1\cygwin\bin\ssh.exe
sshargs = -C

# Folders to exclude
ignore = Path {FolderThatWillNotBeSynchronized}

# Fastcheck
fastcheck = true

# Prevent chmod issues
perms = 0
dontchmod=true

# Work silent
batch=true

# Prevent deletion of all files if all files are localy deleted
confirmbigdeletes=true

# When running from the command line be silent, only show errors
silent = true

# Use file time not folder time for changes
times=true

The most notable portions of the Profile are:

  • root: these two root lines set the path to the local folder to synchronize (on the Windows 8 computer) and the remote folder (on the DNS-323 through SSH)
  • sshcmd and sshargs: make sure the path to Cygwin’s ssh executable is the « short » path with no space (do a dir /x on a Windows command line to view short filenames. The -C argument enables SSH compression
  • ignore: allows you set up exclusions. I recommend using Unison’s GUI to set these up, or to read Unison’s documentation

Let’s test this out by launching the Unison GTK executables, opening the Dns323 profile we just created and synchronizing for the first time. If everything works fine, there should be no errors and synchornization should work flawlessly.

Step 3: Setup Unison as a Scheduled Task

Once you’ve verified that your dns323 Profile works fine in Step 2, we will automate this by creating a Scheduled Task:

  • Click Start -> Control Panel -> Administrative Tools -> Task Scheduler
  • Select Task Scheduler Library
  • Select Create Basic Task on the right pane
  • Choose a name for the Task (e.g. « Unison DNS323 »)
  • Select how often files should be synchronized (e.g. « Daily » – you can easily change that afterwards)
  • Select « Start a program » for the type of task to perform
  • For the Program/Script, browse to Unison text version’s executable (e.g. « C:\Program Files (x86)\Unison\Unison-2.40.102 Text.exe »)
  • Type  » -silent Dns323″ for the arguments (IMPORTANT: the second argument, Dns323, is the name of the profile file you created in Step 2 above – e.g. the Prf filename without extension)
  • Optionally, edit the task you just created to change the recurrence of the synchronization (e.g. how often it’s done)

If there is enough interest, I will create a new article to explain the backup-snapshot-diff process on the DNS-323.

------

I’ve been meaning to use my DNS323 NAS as some Private Cloud Sync for files I wanted to share-and-sync across several computers on my LAN, while retaining a centralized backup with weekly snapshots.

Unison is the perfect tool for this operation. It has a client and server model and runs on Linux and Windows. Problem #1: Unison is not available as a package for the DNS-323. Problem #2: Unison’s source is coded in OCAML. Problem #3: OCAML is not available as a DNS-323 package. Problem #4: Lack of any howto to build the OCAML compiler.

Installing OCAML v3.12.1 on the DNS-323

Step 1: Prerequisites

First, you must have fun_plug installed with all up-to-date packages rsync’d. I will not cover this as it’s already widely available from numerous blogs.

Second, let’s make sure you have all the necessary build tools. I hope I didn’t miss any.


# cd /ffp/pkg/packages
# funpkg -i binutils-2.18.50.0.1-4.tgz automake-1.10.1-2.tgz autoconf-2.61-2.tgz flex-2.5.33-5.tgz bison-2.3-3.tgz patch-2.5.9-3.tgz gcc-4.1-2.tgz gettext-0.17-2.tgz make-3.81-3.tgz uclibc-0.9.29-7.tgz kernel-headers-2.6.9.1-2.tgz bash-3.2-3.tgz

Step 2: Getting the source code for OCAML v3.12.1

At the time of writing, OCAML v4.01 is available. I decided to stick with v3.12 as I feared some potential backward compatibility issues with a new (recent) major revision.


# mkdir /mnt/HD_a2/build
# cd /mnt/HD_a2/build
# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz
# tar xvzf ocaml-3.12.1.tar.gz

Step 3: Build and install OCAML v3.12.1

In the commands below, we will first set the temporary directory to point to that of ffp’s tmp on the hard disk, in order to avoid out of space errors. Second, we will configure the build process specifically for the DNS-323.


# cd /mnt/HD_a2/build/ocaml-3.12.1
# export TMPDIR=/ffp/tmp
# ./configure -prefix /ffp -no-curses -no-tk -no-shared-libs -host arm-unknown-linux-uclibc -cc gcc\ -msoft-float

Next we will start the build process. I will leave out the « opt » builds (native) since I got too many errors and just gave up on it. You will notice an error while building « world » and « opt » (./build/ocamlbuild-byte-only.sh / make[1]: *** [ocamlbuild.byte] Error 1). Just ignore it, the most important components are still properly built. As a result, make install will also fail, but then again, the binaries we’re after have already been successfully built at that point.


# make world
# make opt
# make install

Done. OCAML v3.12.1 is now (at least partially) installed on your DNS-323.

Installing Unison v2.40 for the DNS-323

Unison’s home is http://www.cis.upenn.edu/~bcpierce/unison/. The latest stable version at time of writing is 2.40.102


# cd /mnt/HD_a2/build/
# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
# tar xvzf unison-2.40.102.tar.gz

We will now start the build and install process.


# cd /mnt/HD_a2/build/unison-2.40.102
# make UISTYLE=text NATIVE=false STATIC=true
# make UISTYLE=text NATIVE=false STATIC=true install

The make will produce some errors as it will attempt to copy the executable (and other files) to the home directory of the current user. We don’t mind, we just need the « unison » executable.


# cd /mnt/HD_a2/build/unison-2.40.102
# cp ./unison /ffp/bin/
# chmod +x /ffp/bin/unison

Congratulations

You have now installed Unison v2.40 successfully on your D-Link DNS-323 NAS.

Next: Install and Configure Unison on your Windows 8 Computers

Here is the follow-up to this article: Installing Unison for 2-way Sync between Windows 8 and a DNS-323 NAS

 
References:

  • http://forum.dsmg600.info/viewtopic.php?id=6678
  • http://www.crutzi.info/unison/binary/armel
------

I’ve recently tried a number of GroupWare platforms (among others: Zimbra Open Source Edition and of course Microsoft Exchange) to integrate Vircom’s Anti Spam Software, modusGate. I’ve been a long time adopter of Linux (in particular Ubuntu, or Red Hat before) for servers so I was very familiar with openssl and the creation of certificate requests, local certificate authorities and self-signed certificates. But creating a self-signed certificate for Exchange 2003-2007-2010-2013 on Windows? No idea! It ended up to be pretty easy actually but I still spent way too many hours figuring it out. Hopefully, this article will guide you in the process to avoid you waste as much time as I did.

My test environment was similar to that of many organisations: the mail/groupware server is part of a LAN domain (MyNetwork) and subnet (/24), has an NetBios name (WellsFargo), a fully qualified internal hostname (wellsfargo.mynetwork.local) and a fully qualified hostname for public and external use (webmail.mycompany.com). I won’t get into the basics of managing multiple domains (internal/external) and assume you are familiar with the situation.

One of the requirements for the SSL certificate is that it has to work both internally (for employee’s computers on the LAN) and externally for public/roaming access (employees on the road, work at home). Since the default Exchange setup creates a certificate that is bound only to the local hostname (wellsfargo) and fully qualified hostname (wellsfargo.mynetwork.local), browsers and mobile devices popped up SSL certificate errors (identity theft) or just plain failed (Android mobile) when accessing the webmail externally on https://webmail.mycompany.com

Self-signed certificates are generally not recommended for production environments because they will make browsers issue a warning about the certificate not being issued by a recognized CA (Verisign, Thawte, etc.) but given the extreme price CA charge for SSL certificates, there are a couple scenarios when it totally makes sense:

  • For a Limited Access environment: there are a number of known computers that will access the webmail. You just need to install the certificate (and its CA cert) on each computer that will access the https server
  • For a Test environment

Here is a step-by-step guide and how to create your own self-signed certificate (for free) using Windows (I used 2003 but this should work on 2008 as well) and Exchange 2003-2007-2010.

(1) Open an Exchange Management Shell (go to the Start Menu -> Microsoft Exchange). You can also start a standard Powershell 2.0 Console and load the Exchange addin by issuing the PS cmdlets:

[PS] C:\\> add-PSSnapin *exchange*
[PS] C:\\> Get-PsSnapIn -Registered

(2) Within the Exchange Management Shell (EMS) List the existing certificates and the services they are enabled for using:

[PS] C:\\>Get-ExchangeCertificate
Thumbprint Services Subject
————— ———— ———-
27A2E4F546791A7D079E24FAD2EC4599B8D95152 IP.WS CN=wellsfargo

(3) In EMS, create a new Certificate Request with Alternate Domain Names (for your internal and external hostnames)

[PS] C:\\> New-ExchangeCertificate -generaterequest -subjectname “dc=com,dc=mycompany,o=My Company Inc,cn=webmail.mycompany.com” -domainname webmail.mycompany.com,webmail.mynetwork.local,wellsfargo.mynetwork.local,wellsfargo -PrivateKeyExportable $true -path certrequest_wellsfargo.csr

You will now have a new Certificate Request that has been saved in the CSR file “C:\\certrequest_wellsfargo.csr”. A new Get-ExchangeCertificate cmdlet command will show the new list of cerficates, which includes the new certificate request. At this point, the CSR has not been certified, so it can be used.

NOTE: There are many other ways to create a Certificate Request on Windows and IIS but I would highly recommend this method as this is the only one I could find that lets you specify a list of alternate domain names (which is a requirement for multiple organisations running internal/private and external/public networks in parallel).

(4) In order to perform the signing of the CSR, you will need to install Microsoft’s Certificate Services on your machine. To do so, open the Control Panel, go to Add/Remove Windows Components and make sure that “Certificate Services” is checked.

Windows will ask you if you want to install ASP. Hit “Yes” as it is required. The next screen will prompt you for the type of CA you want to setup. Select “Enterprise root CA” and click “Next”.

You will then be prompted to enter information about the Certificate Authority (CA):

  • Common name for this CA: wellsfargo.mynetwork.local
  • Distinguished name suffix: DC=mynetwork,DC=local
  • Validity period: 5 years

Click “Next”. The following screens lets you customize database and logs path, leave as default and hit “Next” again, and let Windows install the necessary components.

(5) We will now login to the Microsoft Certificate Server. Open up an Internet Explorer browser window (as I found out the MS Cert Server doesn’t fully support FireFox and I suppose, neither Chrome) and type this URL: “http://wellsfargo.mynetwork.local/certsrv” or, if your server is only configured to support SSL as is the default for a dedicated Exchange machine, “https://wellsfargo.mynetwork.local/certsrv”. You will be asked for your Domain credentials, enter them.

(6) Click the “Request a certificate” link and on the next screen click “advanced certificate request”. In the Advanced Certificate Request page, click the “Submit a certificate request by using a base-64-encoded CMC or PKCS #10 file, or submit a renewal request by using a base-64-encoded PKCS #7 file.” option.

(7) Open the “” certificate request file you created in Step 2 in Notepad. It will look like this:

——-BEGIN NEW CERTIFICATE REQUEST——-
OTAuMjBABgkrBgEEAYI3FRQxMzAxAgEBDA9mYXJnby5pZHlsZS5sYW4MC0lEWUxF
ggEughF3ZWJtYWlsLmlkeWxlLmNvbYIPd21haWwuaWR5bGUuY29tgg9mYXJnby5p
ZHlsZS5sYW6CD3dtYWlsLmlkeWxlLmxhboIPZmFyZ28uaWR5bGUubGFugg5tYWls
qw8xdFg6L4eNMqvrW3ZOUb06Du2WOkN8A4mghgFCUDvBihyMVY6nczx+qvJkwPBo
[........]
ZHlsZS5sYW6CD3dtYWlsLmlkeWxlLmxhboIPZmFyZ28uaWR5bGUubGFugg5tYWls
qw8xdFg6L4eNMqvrW3ZOUb06Du2WOkN8A4mghgFCUDvBihyMVY6nczx+qvJkwPBo
——-END NEW CERTIFICATE REQUEST——-

(8) Paste the complete certificate request into the “Saved Request:” box of the Microsoft Certifcate Services web page. Select “Web Server” for the “Certificate Template” and click “Submit”.

(9) Once your certificate has successfully signed and generated, select “Base 64 encoded” option and click “Download certificate”. Save the file on your computer as “C:\\certselfsign_wellsfargo.cer

(10) Go back to the Exchange Management Shell (EMS) and Import the newly self-signed certificate:

[PS] C:\\> Import-ExchangeCertificate -path c:\certselfsign_wellsfargo.cer -friendlyname “My Company WellsFargo”

(11) Verify the certificate has been properly imported and retrieve its Thumbprint with:

[PS] C:\\> Get-ExchangeCertificate
Thumbprint Services Subject
————— ———— ———-
9799CEEBEA4FFADE068FC73FE63EB0495DD4F8A0 ..... CN=webmail.mycompany.com, O=My Comapny Inc, DC=mycompany, DC=com

86214B8F1951E8B062955835D0C4C62D89E8D83F ..... CN=wellsfargo.mynetwork.local, DC=mynetwork, DC=local
27A2E4F546791A7D079E24FAD2EC4599B8D95152 IP.WS CN=wellsfargo

The newly certificate is the one we registered the request for using the public hostname (webmail.mycompany.com). The other new certificate is the certificate for the CA we installed through Microsoft Certificate Services.

(12) The last step is about enabling the new certificate for all services we want to use. In our case, I will enable it for IIS (https), POP, IMAP and SMTP.

[PS] C:\> Enable-ExchangeCertificate -thumbprint
9799CEEBEA4FFADE068FC73FE63EB0495DD4F8A0 -services “IIS,POP,IMAP,SMTP”
[PS] C:\> Get-ExchangeCertificate
Thumbprint Services Subject
————— ———— ———-
9799CEEBEA4FFADE068FC73FE63EB0495DD4F8A0 IP.WS CN=webmail.mycompany.com, O=My Comapny Inc, DC=mycompany, DC=com

86214B8F1951E8B062955835D0C4C62D89E8D83F ..... CN=wellsfargo.mynetwork.local, DC=mynetwork, DC=local
27A2E4F546791A7D079E24FAD2EC4599B8D95152 ....S CN=wellsfargo

 

You’re now all done. Your internal “https://wellsfargo.mynetwork.local” and your external “https://webmail.mycompany.com” will both be valid certificates which will let your clients connect through Outlook, through Outlook Web Access (OWA) and through Outlook Anywhere (RPC over HTTPS) for mobile devices.

As noted earlier, browsers will still issue a warning that the certificate was signed by a recognized Certificate Authority (CA) such as Verisign or Thawte. You can override this warning by manually importing both the Webmail CER (certselfsign_wellsfargo.cer) and the CA certificate into all your client computers.

On Linux, I used to create and sign my certificate so they are valid for a couple years, in order to avoid having to recreate them periodically. This is something that I wasn’t able to do with this process. During the self-signed certificate creation, I never saw any option to specify an expiration date (or a duration). Does anyone know how ?

——-BEGIN NEW CERTIFICATE REQUEST——-
------

Avatar 3D (2009)Juste un mot: WOW!  Le film est superbe, tant au niveau de l’histoire, des effets spéciaux, du son que… de la technologie 3D.  Fini le temps des lunettes avec un oeil bleu et un oeil rouge, bienvenue aux lunettes RealD! Le résultat est phénoménal!

À voir absolument au cinéma, en 3D !

Technologie 3D de RealD: époustouflant!

C’est vraiment dommage que les téléviseurs actuels ne puissent pas afficher cette technologie de RealD.  En effet, les films « normaux » sont tournés en 24 fps (images par secondes) et la technologie RealD utilise deux séries de frames (une pour l’oeil gauche et une pour l’oeil droit) les polarisant de façon circulaire (sens horaire pour l’oeil droit, et antihoraire pour l’oeil gauche) résultant ainsi en 144 fps!  Nos lecteurs BluRay et télévisions actuelles ne sont pas capable d’afficher les images à cette vitesse et avec ce multiple de 24 fps.  Bref, c’est bien dommage.

Je n’en dis pas plus, mais je le conseille très fortement ! Même Julie, qui n’est pas une fan de science-fiction, a adoré le film et le 3D !


------

V - The Original Mini SeriesDe toutes les miniséries de science-fiction, V – The Original Mini-series et V – The Final Battle, sont très certainement parmis mes préférées!

Pour ceux qui ne connaissent pas, V – The Original Mini-series est une série de 3h15 diffusée par NBC en 1983.  La suite, V – The Final Battle a été diffusée en 1984 et a une durée de 4h30.  Il y a aussi eu une autre saison ensuite, que je n’ai jamais vue et qui paraît-il, n’en vaut pas la peine du tout.

J’avais originalement vu cette série lorsque j’habitais encore en France, et j’avais tout bonnement adoré.  Vers le milieu des années 1990, les séries ont été transférées sur VHS et je m’étais alors empressé d’acheter les cassettes (que j’ai encore quelque part dans une boîte), de revoir, et d’apprécier tout autant.

L’histoire commence lorsqu’une série de vaisseaux de l’espace se positionnent au dessus de toutes les métropoles et capitales de la planète.  Ces Visiteurs prétendent alors être de bonne foi, venus en paix afin d’aider les terriens.  Des bandes d’humains soupconneux de leur bonne foi s’organisent un peu partout sur la planète et se rendent compte que les Visiteurs ne sont pas exactement ce qu’ils prétendent être et que leur motifs réels représentent une menace sérieuse à l’humanité.

Diana et les VisiteursDes extra-terrestres reptiliens qui engloutissent des souris et des oiseaux, ça vous rappelle vaguement quelque chose ?

Diana, la commandante des Visiteurs… ?

La séquence du film ou une humaine accouche du fruit de l’amour entre elle et un Visiteur … ?

Une peau d’écailles vertes sous une pellicule à la ressemblance de peau humaine … ?

Des yeux reptiliens … ?

Et pourquoi tout d’un coup est-ce que je me remémore cette série en particulier ?  Tout simplement parcequ’hier, en regardant la première de FlashForward que j’avais enregistré (qui soit dit en passant, s’annonce très très bien! J’ai déjà hâte au 2è épisode, ce qui est plus que je peux dire pour la majorité des autres séries cuvée automne 2009).  En regardant FlashForward donc, je suis tombé sur cette bande annonce, un peu par chance car je passe d’habitude toutes les publicités à vitesse Grand V !

Eh oui, un autre remake !  V en version 2009 ! Je n’en reviens toujours pas et j’ai vraiment très hâte au 3 novembre.   À cause des Olympiques (j’hais les Olympiques), ABC passera quatre épisodes en novembre, et la série reviendra seulement au mois de mars 2010.

Il semblerait que le nouveau producteur de la série ait décidé de ne pas suivre l’histoire de la série originale, mais de créer sa propre histoire basée sur l’originale.  Il semblerait même que les motifs des Visiteurs aient changé, mais ça, seul l’avenir le dira.

Voici un vidéo trailer de 2m50s de la nouvelle série… (un autre est disponible sur le site de V à ABC.com sur le lien ci-bas)

Voici plusieurs liens pour ceux qui désireraient plus d’infos à ce sujet:

ABC.com: V (2009)

SciFiCool.com: ABC to Remake V for TV

ABC to Break up V Debut

Moi qui trouve qu’il manque cruellement de bonne séries de Science-Fiction (les dernières que j’ai aimées ont été les Babylon 5 et les Star Trek: The Next Generation, Star Trek: Deep Space Nine et Star Trek: Voyager – ainsi que plusieurs autres de façon plus épisodique comme Lois & Clark – The New Adventures of Superman (très épisodique), Smallville, Heroes), je suis soudainement servi avec des projets qui semblent avoir beaucoup de potentiel:  Smallville semble avoir repris du galon, l’arrivée imminente V, le prometteur FlashForward.   Finalement, l’automne 2009 va peut-être être bien intéressant après tout !  En espérant que ce remake de V ne soit pas décevant….

Parlant de tout ça, je suis aussi tombé sur un article de 2008 indiquant qu’il y aurait possiblement un film du producteur original de la série V (Kenneth Johnson) mais de là à dire que c’est autre chose qu’un projet ou qu’une rumeur…

------

Here is a little background information.

I am running two 5.0M/800k DSL lines in my home as my internet connection (not that it matters really but for the sake of information: one is on my phone line, the other is a dry line).  In order to use these as a single bonded connection, I’ve setup an Asus WL-520GU running Tomato/MLPPP v1.21-mp3alpha4.   I won’t get into any details as to how to set-up a multi-link MLPPP connection using that specific firmware as tons of documentation and howtos can easily be found using Google.

There is one problem with a multi-link MLPPP connection using Tomato/MLPPP v1.21-mp3alpha4 though.  While it’s possible to access one of the two DSL modems from the LAN (using the Basic -> Network : Route Modem IP option), it’s impossible to access the second DSL modem (at least using a Thompson ST516 DSL modem since it’s supposedly impossible to change its IP address).  Believing that last bit of information, I tried to fiddle with various routing and masquerading options, which all failed.

I was about to give up when I thought I should validate every piece of information I had assumed was true.  Starting with changing the IP address of a ST516.  Needless to say, I should have done that earlier.  It’s perfectly possible, and valid, to change/add/delete IP settings on a ST516.  At least using firmware revision 6.2.29.2 (which is what I’m running).  Once you’ve logged in the CLI through telnet, type « ip iplist » :

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

Now, you can add a new IP address to the modem’s interface by typing « ip ipadd » :

{user}=>ip ipadd
intf = LocalNetwork
addr = 10.0.1.138
[netmask] = 255.255.255.0
[pointopoint] =
[addroute] =
:ip ipadd intf=LocalNetwork addr=10.0.1.138/24

You can verify everything by entering the « ip iplist » command again :

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.1.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

Now that you’re back at the CLI prompt, and if you’re satisfied with the settings, type « saveall » and when the prompt returns, power the DSL modem off, wait a couple of seconds, and power it back on.  Once the modem has booted and launched all its daemons and services, you will be able to telnet to the modem again, and enter the « ip iplist » command to verify that the IP information was indeed saved properly.

OK.  So, the ST516 can indeed (at least nowadays) let the user modify IP settings. Great news.

Note that all this information is available on the Thompson ST5x6 CLI User Manual (PDF).

If you can’t seem to be able to use the « ipadd » command, then I would suggest you attempt to update your ST516’s firmware to the version I’m using: v6.2.29.2, or maybe a later one would work as well if you can’t locate this specific revision.

Now, let’s go on with the topic of this article.

1. Topology

For the sake of this article, let us assume that your LAN is on the ever popular 192.168.1.0/24 subnet, and that your Tomato/MLPPP router is at 192.168.1.1.  By factory defaults, each one of the Thompson DSL modems will be assigned two IP addresses: 192.168.1.254/24 and 10.0.0.138/24.  The interface names your modems are connected to within Tomato/MLPPP will vary according to the hardware you are running.  In my case, on the Asus WL-520GU, I used the WAN and LAN1 ports, which leads to interfaces « br0 » and « br1 » (pay attention to this, I originally lost a lot of time thinking they were « br1 » and « vlan1 » as per many, many web pages articles and forum discussions).

                                 [ 192.168.1.254 ]
                                 [   10.0.0.138  ]
                                 [ DSL MODEM # 1 ] <---->  ( Dry DSL Line )
                                       | (br1/wan port)
                                       |
[       LAN      ]   <========>  [ MLPPP ROUTER ] 
[ 192.168.1.0/24 ]               [ 192.168.1.1  ]
                                       | (br0/lan1 port)
                                       |
                                 [ DSL MODEM # 2 ] <---->  ( Phone DSL Line )
                                 [ 192.168.1.254 ]
                                 [   10.0.0.138  ]

2. Objectives

What we want to do here is to be able to reach DSL Modem #1 and DSL Modem #2, each on a unique IP address, from both the router’s shell and from the LAN.   If possible, we will want to retain the router’s factory default settings of 10.0.0.138 and 192.168.1.254 as well, in case we ever forget these new IP settings, or whatever else.  This is the topology we want (note that you can feel free to change IP subnets and addresses I’ve used, it shouldn’t change anything in the end, just make sure they end up as new unused subnets so routing is easily done):

                                 [   10.0.1.138  ]
                                 [ 192.168.1.254 ]
                                 [   10.0.0.138  ]
                                 [ DSL MODEM # 1 ] <---->  ( Dry DSL Line )
                                       | (br1/wan port)
                                       |
[       LAN      ]   <========>  [ MLPPP ROUTER ] 
[ 192.168.1.0/24 ]               [ 192.168.1.1  ]
                                       | (br0/lan1 port)
                                       |
                                 [ DSL MODEM # 2 ] <---->  ( Phone DSL Line )
                                 [   10.0.2.138  ]
                                 [ 192.168.1.254 ]
                                 [   10.0.0.138  ]

What I’ve done here is basically setting an objective of setting one additional unique IP address and subnet on each modem:
– DSL Modem # 1 will carry the 10.0.1.138 (on its own unique 10.0.1.0/24 subnet)
– DSL Modem # 2 will carry the 10.0.2.138 (on its own unique 10.0.2.0/24 subnet)

You could choose another 192.168.X subnet instead of the 10.0.X subnet (.2.0/24 and .3.0/24) as long as they are encompassed in the default gateway routing of your LAN’s PCs (and that the default gateway is the MLPPP router – if that is not the case, you will need to set explicit routing rules on each of your PC you want access to the modem).

3. Howto

3.1  Setting up DSL Modem #1’s additional IP address and subnet

Let’s get started. If you used the « Route Modem IP » option set to 10.0.0.138 on the MLPPP Router (in Basic -> Network), you should be able to connect to one of the two DSL modems.  So let’s start with this one. We will want to add a new IP address within a new subnet (10.0.1.138 in 10.0.1.0/24) :

user@mlppp-router# telnet 10.0.0.138

Escape character is '^]'.

Username : user
Password : ***********
------------------------------------------------------------------------

                             ______  SpeedTouch 5x6
                         ___/_____/\
                        /         /\  6.2.29.2
                  _____/__       /  \
                _/       /\_____/___ \  Copyright (c) 1999-2007, THOMSON
               //       /  \       /\ \
       _______//_______/    \     / _\/______
      /      / \       \    /    / /        /\
   __/      /   \       \  /    / /        / _\__
  / /      /     \_______\/    / /        / /   /\
 /_/______/___________________/ /________/ /___/  \
 \ \      \    ___________    \ \        \ \   \  /
  \_\      \  /          /\    \ \        \ \___\/
     \      \/          /  \    \ \        \  /
      \_____/          /    \    \ \________\/
           /__________/      \    \  /
           \   _____  \      /_____\/
            \ /    /\  \    /___\/
             /____/  \  \  /
             \    \  /___\/
              \____\/

------------------------------------------------------------------------

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

{user}=>ip ipadd
intf = LocalNetwork
addr = 10.0.1.138
[netmask] = 255.255.255.0
[pointopoint] =
[addroute] =
:ip ipadd intf=LocalNetwork addr=10.0.1.138/24

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.1.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

{user}=>saveall
{user}=>

3.2  Setting up DSL Modem #2’s additional IP address and subnet

Now that we’re done setting up DSL Modem #1, we will want to setup DSL Modem #2. You can either connect the DSL Modem’s ethernet port directly into your LAN (in a switch port) or, as I did, just swap the DSL Modem #1 and DSL Modem #2’s ethernet cables on the router (eg: the cables on the WAN and LAN1 ports of the router if you use an Asus WL-520GU like myself).

Repeat the above steps on DSL Modem #2 above, except we will setup the 10.0.2.138 address on subnet 10.0.2.0/24 (or 255.255.255.0 if you prefer this notation).  When you do the « iplist » below, make sure you don’t see a « 10.0.1.138 » line, if this is the case, then you are connected to the wrong modem, so double check your cables.  Before trying to connect, wait for about 30-45 seconds as the DSL modem will somehow re-initialize itself and will not start answering telnet requests right after you plug the Ethernet cable in.

user@mlppp-router# telnet 10.0.0.138

Escape character is '^]'.

Username : user
Password : ***********
------------------------------------------------------------------------

                             ______  SpeedTouch 5x6
                         ___/_____/\
                        /         /\  6.2.29.2
                  _____/__       /  \
                _/       /\_____/___ \  Copyright (c) 1999-2007, THOMSON
               //       /  \       /\ \
       _______//_______/    \     / _\/______
      /      / \       \    /    / /        /\
   __/      /   \       \  /    / /        / _\__
  / /      /     \_______\/    / /        / /   /\
 /_/______/___________________/ /________/ /___/  \
 \ \      \    ___________    \ \        \ \   \  /
  \_\      \  /          /\    \ \        \ \___\/
     \      \/          /  \    \ \        \  /
      \_____/          /    \    \ \________\/
           /__________/      \    \  /
           \   _____  \      /_____\/
            \ /    /\  \    /___\/
             /____/  \  \  /
             \    \  /___\/
              \____\/

------------------------------------------------------------------------

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

{user}=>ip ipadd
intf = LocalNetwork
addr = 10.0.2.138
[netmask] = 255.255.255.0
[pointopoint] =
[addroute] =
:ip ipadd intf=LocalNetwork addr=10.0.2.138/24

{user}=>ip iplist
Interface                            Type            IP-address       P-t-P IP | Mask
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.0.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet        10.0.2.138       255.255.255.0
1   LocalNetwork. . . . . . . . . .  Ethernet       *192.168.1.254    255.255.255.0
0   loop. . . . . . . . . . . . . .  Internal        127.0.0.1        255.255.255.255

{user}=>saveall
{user}=>

3.3  Setting up the MLPPP router to properly route packets to/from the DSL modems

Now, each one of the modem has been properly setup.  Restore the cables as they were before (eg: swap them again).

Login to your Tomato/MLPPP router’s web interface and go to Administration -> Scripts.   In the « Init » tab, add the following lines:

# Wait until system has booted and is settled down, all services up and running
sleep 5
# Add route to 10.0.1.138 (DSL Modem #1) on BR1
ip addr add 10.0.1.10/24 dev br1 brd +

# Add route to 10.0.2.138 (DSL Modem #2) on BR0
ip addr add 10.0.2.10/24 dev br0 brd +

What we just did here is we added a new IP address on the same subnet as each one of the modems, on their respective interfaces (br1 has a new IP address of 10.0.1.10 on the 10.0.1.0/24 subnet used by the 10.0.1.138 DSL Modem #1 ; and same thing with br0 for DSL Modem #2 on 10.0.2.0/24 subnet)

Remember that the interfaces names (br1 and br0) may vary in your setup, so feel free to experiment a bit with other interfaces if this doesn’t work (both for the script in this « Init » tab and for the « Firewall » tab just below here)

Now, hit the « Save » button at the bottom-right of the page.  Wait until the settings are saved (the MLPPP router will display a message on a yellow background next to the « Save » button when it’s done saving).

Click the « Firewall » tab and add the following to the firewall script:

# Add 10.0.1.138 route to DSL Modem #1 on BR1
/usr/sbin/iptables -I POSTROUTING -t nat -o br1 -d 10.0.1.0/24 -j MASQUERADE  

# Add 10.0.2.138 route to DSL Modem #2 on BR0
/usr/sbin/iptables -I POSTROUTING -t nat -o br0 -d 10.0.2.0/24 -j MASQUERADE

This will allow your LAN to access both DSL modems using their 10.0.X.138 addresses.   Hit the « Save » button and wait until the settings are saved.

3.4  Verifying connectivity

Now let’s test things out.  Login the MLPPP router and connect to DSL Modem #1 by issuing the « telnet 10.0.1.138 » shell command.  Once logged in to DSL Modem #1, issue the « ip iplist » command and verify that it’s all good as set (eg: 10.0.0.138, 10.0.1.138, 192.168.1.254 and 127.0.0.1).  Do the same for DSL Modem #2 with « telnet 10.0.2.138 » and verify the IP list (which should be 10.0.0.138, 10.0.2.138, 192.168.1.254 and 127.0.0.1)

Repeat the test by logging to each of the two DSL modems from a computer on your LAN (you can use the free Putty SSH and Telnet client).

It’s now time to make sure all your settings were properly saved throughout this article.  Power off the MLPPP router.  Power off DSL Modem #1 and DSL Modem #2.  Wait a few seconds.  Power DSL Modem #1 and DSL Modem #2 back on.  Power the MLPPP router back on.  Wait until everything has settled down (about 30-45 seconds, maybe more) and try the telnet to 10.0.1.138 and 10.0.2.138 again from a PC on your LAN.

If something goes wrong, make sure you read this article properly.  Feel free to ask questions here but note that you will have to rely on other people’s comments as I don’t plan to support this method very much (which doesn’t mean I won’t, but don’t expect it!).

4. Connecting with DMT

Now that both your DSL modems are accessible from your LAN, you can use DMT to connect to the modems and monitor pertinent data.  I’m personally using DMT v7.35 for Thompson SpeedTouch 516, 536, 546, 585, 608, 706, 716 and 780.

Enter the IP address of DSL Modem #1 (10.0.1.138), your user name and password, and hit « Connect« .  Once connected, disconnect and repeat for DSL Modem #2 (10.0.2.138).

DMT stores the last connected IP and restores it when the program is restarted, so if you want to avoid having to change a digit in the IP address, or for any other reason, just make copy the DMT folder as DMT.Dry for example, and make a shortcut to DMT.exe in each folder so that the shortcut reads DMT Phone and DMT Dry for instance.  This you will have access to both modems easily.

5. Conclusion

I hope this article helps.  The reason I wrote all this down is that I searched for a while for a solution on the net, but nothing I could find would work with the ST516 — mainly because everyone assumed it was impossible to change or add IP addresses and/or used conflicting IP addresses and subnets.

If you appreciated this, feel free to drop a « Thanks! » comment below.

------

Télécommunications: Québec veut améliorer la protection du consommateur
Enfin !

Avec le projet de loi 60, le gouvernement du Québec décide donc de surveiller nos géants des télécommunications d’un peu plus près ! Espérons que cela mettra fin aux abus de nos compagnies de téléphone, de mobilité et d’internet.

Voici un extrait du communiqué de presse de l’Office de la Protection du Consommateur:

Québec, le 16 juin 2009 – La ministre de la Justice et Procureure générale du Québec, madame Kathleen Weil, a annoncé aujourd’hui le dépôt, à l’Assemblée nationale, du projet de loi modifiant la Loi sur la protection du consommateur et d’autres dispositions législatives. Le projet de loi accorde de nouvelles protections plus complètes et plus efficaces aux consommateurs québécois. « Le Québec a toujours été un leader en matière de protection des consommateurs. Par ce projet de loi, notre gouvernement veut offrir à la population du Québec, et plus particulièrement aux jeunes consommateurs, une protection additionnelle », a indiqué la ministre de la Justice.

[…]

Les mesures proposées aujourd’hui sont importantes, d’abord parce qu’elles visent à améliorer l’équilibre des droits et des obligations entre les consommateurs et les commerçants, mais aussi parce qu’elles proposent des solutions à des problèmes d’actualité dénoncés par les consommateurs.

Ainsi, le projet de loi propose des mesures concernant la téléphonie cellulaire. Il en prévoit d’autres permettant de s’assurer que le consommateur donne un consentement davantage éclairé avec, entre autres, de nouvelles obligations pour le commerçant d’inclure tous les frais dans le prix affiché et d’informer le consommateur de l’existence d’une garantie légale. De plus, le changement législatif proposé encadre les pratiques en matière de cartes cadeaux visant, notamment, à interdire qu’elles comportent une date d’échéance. « Ces mesures assurent une protection efficace des consommateurs québécois dans un contexte de libre-marché » a souligné la ministre.

Source: Office de la Protection du Consommateur (www.opc.gouv.qc.ca)

Pour lire le communiqué au complet, voir le lien suivant sur le site de l’OPC:

http://www.opc.gouv.qc.ca/WebForms/CommuniquePresse/CommuniquePresse.aspx?id=573&Mois=6&Annee=2009

Canoe a aussi publié un article sur le sujet:

Les mesures proposées ciblent les renseignements que les entreprises doivent divulguer dans les contrats et cherchent à interdire les clauses à caractère abusif, notamment en ce qui a trait à la résiliation de contrat et les indemnités imposées au consommateur qui veut résilier son contrat.

Mme Weil a souligné que le secteur des télécommunications a connu une nombre croissant des plaintes de consommateurs, au point de représenter le deuxième domaine en importance à ce chapitre, auprès de l’Office de la protection du consommateur l’an dernier, après la vente et la réparation d’automobiles.

Source: Canoe (canoe.com), article de La Presse Canadienne

Voici le lien vers l’article au complet:

http://canoe.com/techno/nouvelles/archives/2009/06/20090616-123707.html

Un article plus complet est aussi disponible sur le sitede l’Union des Consommateurs:

http://www.consommateur.qc.ca/union-des-consommateurs/?p=328

Dont voici un extrait:

Le projet de loi 60 prévoit que les entreprises seront soumises à des obligations précises d’information; elles ne pourront plus ne donner aux consommateurs que les seuls renseignements qui mettent leur offre en valeur, comme c’est le cas actuellement; il sera interdit aux commerçants, sauf exception, de modifier unilatéralement les contrats; les pénalités de résiliation de contrat seront strictement encadrées, ce qui pourrait permettre enfin à la concurrence de jouer avec plus de vitalité.

Source: Union des Consommateur (www.consommateur.qc.ca)

En gros, Québec propose de surveiller de près les Rogers, Bell et Videotron de ce monde afin qu’ils ne puissent plus avoir des clauses cachées, des frais de résilitations abusifs et tous ces mécanismes écrits en lettres minuscules dans un contrat de 10 pages miniaturisé sur une page simple 8.5″x11″ qui font en sorte que le consommateur est à la merci des ces grosses compagnies.

Une affaire à suivre !

------
Avr
21

Ca coupe, ça coupe!

Le 21 avril, 2009 par

Ca fait quelques temps que je n’ai pas écrit sur le blog.  Suite à l’achat de la maison, j’ai été très occupé avec l’emménagement, les rénos, etc.

Ceci dit, je devrais avoir un peu plus de temps dans les jours à venir pour finir d’emménager.  Je viens de me faire couper mon poste au travail.

Je suis donc au chômage.  Vive l’économie florissante…

------

Aujourd’hui est un grand jour. La météo des prochains 10 jours semble clémente aux yeux d’un motard du Québec. Voici donc la transcription « motardienne » des prévisions météo actuelles:

C’est simple non ?

------