Retraite du programmeur (Code Retreat)

Le 8 décembre se déroulait le Global Day of Code Retreat, ou « Journée globale de la retraite du programmeur », une intense journée de pratique sur les aspects fondamentaux du développement logiciel. L’évènement organisé à Montréal par Mathieu Bérubé a été annoncé dans plusieurs communautés locales de programmeurs, et une vingtaine de personnes étaient présentes.

Mathieu a animé la journée, en présentant d’abord le concept et les commanditaires: Wajam et La Maison Notman. Les programmeurs ont pu s’exprimer sur leurs préférences de langage, ce qui a facilité la création d’équipes tout au long de la journée.

Les règles sont simples: deux personnes implémentent le jeu Game of Life pendant 45 minutes, puis effacent le résultat. Chaque « pratique » est suivie d’une courte rétrospective en groupe. Avant de recommencer, Mathieu proposait une variante pour la prochaine pratique, et de nouvelles équipes se formaient.

Image

Ruby implementation at the 2011 Global Day Of Coderetreat in Toronto. Picture courtesy of R.T. Lechow (Flickr).

Je suis allé là-bas pour pratiquer mon Scala et affiner ma démarche de résolution de problèmes. J’ai programmé avec de gens voulant apprendre Scala, ou qui connaissent déjà bien, comme Alex.

Bien qu’à chaque fois nous implémentions la même chose, l’approche n’était jamais la même. C’était toujours piloté par des tests, mais le point de départ n’était jamais le même, et les suggestions de Mathieu faisaient qu’on se creusait un peu les méninges à chaque fois.

45 minutes, ça passe vite, mais c’est suffisant pour implémenter l’essentiel de l’algorithme. Quoique en paire avec quelqu’un qui essaie le langage pour la première fois, c’est plus long. J’ai aussi fait une implémentation en Java, et bien que j’aie une dizaine d’années d’expérience en Java, j’ai senti que j’allais moins vite qu’en Scala.

Les programmeurs présents connaissaient une large palette de langages, et ça a été une occasion d’en essayer plusieurs (moins pour moi). J’ai eu une petite intro à Clojure, et si j’étais resté jusqu’à la fin, j’aurais pu assister à la séance en Haskell sur le projecteur, donnée par Christian Lavoie.

Je recommande cette expérience à tous les programmeurs!

Publié dans Uncategorized | 1 commentaire

CrashPlan is slowing down my computer

The advertisement says it is « designed not to », but it does. Using scripting ninja skills (and Ubuntu – sorry Windozers and MacOSers), one can reduce the amount of disk scratching by telling CrashPlan to be IO-nice, with the ‘ionice’ command. Open up /usr/local/crashplan/bin/CrashPlanEngine and add this line right before ‘echo « OK »‘:

if [[ $! -gt 0 ]]; then
    echo $! > $PIDFILE
    ionice -c 3 -p `cat $PIDFILE`
    echo "OK"
  else
    echo "FAIL"
  exit 1
fi

This changes the priority of the CrashPlan process to access the disk only when no other process needs access. In other words, CrashPlan should only « work » when your computer is idle.

Publié dans Ubuntu | Tagué | Laisser un commentaire

Jouer simultanément sur haut-parleurs et écouteurs avec Ubuntu Lucid

La version Lucid d’Ubuntu installe dorénavant un panneau de préférences PulseAudio qui permet en deux clics de faire sortir la musique ou les vidéos sur deux appareil distincts. La méthode plus compliquée que j’avais décrite il y a un an peut être oubliée.

Il suffit maintenant de cliquer sur l’îcone de haut-parleur, puis sur « Préférences du son », et de cocher « Simultenaous output ».

Préférences du son

Publié dans Non classé | 4 commentaires

Linking two Trixbox servers

We have a Trixbox server at the office, and I have one at my home too. They have been working fine independently of each other for a while, but I figured if they could talk to each other over the internet instead of our VoIP provider, I could save few bucks each year and get a higher geek score.

Well, there’s a good reason I wanted this: I wanted my home extension to not only ring my cell phone, but also my office phone, but the office has a single number and a menu where you have to compose an extension. I haven’t found how to tell Trixbox to compose an extension after dialing a number, so linking both Trixbox server made sense.

I’m going to describe how I did it, because I need to explain this to a co-worker, and there’s generally a lack of good documentation on the internet.

My office has a static IP address, so my home server will be connecting to the office. This should fit most people with dynamic IP addresses at home. I did this from the office and created an SSH tunnel to the web interface of my trixbox home server: ssh -L8080:trixbox:80 me@home.

Open UDP port 4569 in the office firewall

Open UDP port 4569 in the office firewall and map it to your Trixbox server. This will allow anyone on the internet to connect to your Asterisk server with the IAX2 protocol. To increase security, I suggest you limit who can connect to the block of IP addresses of your ISP, or to your IP address it you have a fixed IP address.

Create an extension in the office server

On your office Trixbox web interface, enter Admin mode and go to PBX > PBX Settings, then go in Extensions, click Add Extension and pick Generic IAX2 Extension. Enter your real name in the Display Name, put your home phone number in User Extension, create a password (numeric only?) in the field named secret and click Submit. Apply your changes.

Add a trunk in your home server

On your home Trixbox web interface, enter Admin mode and go to PBX > PBX Settings, then go in Trunks, click Add Trunk and Add IAX2 Trunk.

In the Outbound Caller ID field, enter Your Name . Enter office for the Trunk Name and fill the PEER Details form by specifying your office IP address or host name for the host, the extension number you just created on you office server for the user, and the extension password for the secret.

Name your USER Context something like office-in, and fill the USER Details just like you did with PEER Details, except this one doesn’t need the host. Next, fill the Register String with « extension:password@host_or_ip », where host_or_ip is the host or IP address of your office. Submit and apply your changes.

Check that the IAX2 connection was made

On your home Trixbox web interface, enter Admin mode and go to PBX > PBX Status, and in the IAX2 Registry section, check that you new trunk is in state Registered. If it is not, I suggest you check the logs of both the office and the home server to figure out what went wrong. This is where you need ninja skills. Leave a comment here if you need help.

Create an inbound route at home

Now, if someone composes your new extension at work, it will reach your home server, but you’ll get a message saying « All circuits are busy » because you haven’t said where to route the call. On you home server, you need to go to PBX > PBX Settings, Inbound Routes and click Add Incoming Route. Enter « office » in Description.

Ideally, you would specify a DID Number, but I’m not yet sure what the office server passes in so I left it blank for now. This means the Inbound route will match all incoming calls. I also have other routes with a DID Number specified and they are still functional, so the catch-all shouldn’t be a problem for you too.

Now choose what you want to do. Most likely, you’ll want to ring an existing extension, or a ring group. Submit and apply your changes. From the office, calling the IAX2 extension should ring your home extension. If it doesn’t, check the logs on both servers and mentally prepare yourself to bang your head on a wall. Fortunately, I didn’t have to.

Create an outbound route at home

Now that you can call your extension at home, you’ll want to be able to call the office from home. For this, you need a new Outbound Route. Go to PBX > PBX Settings, Outbound Routes and click Add Route. A nice name for this would be « office ». As for the Dial Patterns, I have three:

5141234567
5141234567|XXX
7|.

The first line means the route will match that exact number. The second line is mostly useful if I don’t have line three, which is a shortcut for line two: Dialing any number prefixed with « 7 » will be sent to your office server with the « 7 » stripped.

Next, the Trunk Sequence only needs your Office trunk. Submit and apply your changes. Go home and dial « 7 » followed by an extension that exists at your office. If it doesn’t ring, bang your head in the wall. If it doesn’t make it work, bang again. You know how this works. Did I mention to check your asterisk log files?

You’re done!

Well, perhaps not. Anyway, this should have helped getting you pretty close to what you wanted.

I did more: I added « 7203# » in the follow-me settings of my home extension. « 7 » selects the office trunk, 203 is my office extension, and the pound sing tells Trixbox this is not an extension, but an external call. It means someone calling me at home will also ring my office phone. Since the follow-me also includes my cell phone (« 95141234567# »), I’m reachable more than ever.

At the office, my follow-me settings also include my cell phone, and now include the IAX2 extension of my home server. I’m reachable more than ever.

Feel free to share your questions as a comment below, share your experiences, or copy/modify/translate this post to a wiki or else. I’m also reachable through micro-blogging at Identi.ca. There is a real lack of good Trixbox recipes!

Publié dans Configuration, Recette | Tagué , , , | 7 commentaires

PulseAudio pour jouer simultanément sur plusieurs sorties

Mise à jour: Jouer simultanément sur haut-parleurs et écouteurs avec Ubuntu Lucid

J’ai plusieurs sorties audio sur mon ordinateur: une intégrée à la carte mère, deux sur une carte d’extension PCI, et un casque d’écoute branché en USB. Ça fait un petit bout de temps que j’aimerais pouvoir jouer ma musique sur toutes ces sorties en même temps, quitte à mettre au minimum le volume des appareils non-voulus.

Avec Debian, dans Ubuntu, y’a un panneau de préférences pour le son, où je peux indiquer ce qui joue chaque catégorie de son. Je l’utilisais assez souvent pour changer entre haut-parleurs et casque d’écoute pour en mettre le raccourci dans un panneau du bureau. Ça reste insuffisant pour mes besoins.

En installant les programmes de configuration de PulseAudio, j’ai réussi à faire jouer Rhythmbox sur toutes mes sorties, simultanément. J’ai cherché PulseAudio dans l’ajout/suppression de programmes, mais pour ceux qui préféreraient copier-coller, voici l’équivalent en ligne de commande:

sudo apt-get install `apt-cache search PulseAudio|grep ^pa|cut -d ' ' -f1

ou plus explicitement:

sudo apt-get install padevchooser paman paprefs pavucontrol pavumeter

Puis, dans Applications, Son et vidéo, il y a maintenant « PulseAudio Device Chooser » qui ajoute une icône dans la barre de notification du panneau. En cliquant sur « Configure Local Sound Server », vous verrez un onglet « Simultaneous Output ». Activez cette option. Maintenant, il faut dire à Gnome d’utiliser PulseAudio en allant dans Système, Préférences, Son. Dans la liste de périphériques de sortie, il y a maintenant « Serveur de son PulseAudio ».

Pour une raison que j’ignore, j’ai dû redémarrer mon PC pour que PulseAudio démarre correctement. Pour voir si le serveur PulseAudio est démarré, dans l’applet PulseAudio, cliquez sur Manager. Si vous êtes connecté, c’est qu’il roule!

Pour finir, toujours dans l’applet, choisissez « Simultaneous output » dans « Default Sink ».

Paramètres PulseAudio

Publié dans Configuration, Fonctionnalité, Son | 1 commentaire

Sonnerie distincte

J’annonçais dans mon billet précédent que j’allais passer à la voix sur IP. Une raison de le faire était que ma blonde et moi pourrions avoir chacun notre numéro personnel « universel ». Mon numéro sonnerait à la maison, sur mon cellulaire et au bureau de façon simultanée. Le numéro de ma blonde sonnerait aussi à la maison, puis sur son cellulaire à elle, et à son bureau quand j’aurai trouvé comment passer son extension.

Ça veut dire que nos deux numéros vont sonner à la maison, et je voulais essayer d’avoir deux sonneries distinctes, pour ne pas avoir à me jeter sur le téléphone quand ce n’est pas pour moi. Certains parents font la même chose pour leurs enfants à la maison…

En cherchant un peu, j’ai trouvé qu’il suffisait d’aller dans Inbound Routes dans la configuration PBX de mon Trixbox, et de spécifier Bellcore-r2 dans l’option Alert Info. Ça correspond au Ring2 Name dans la configuration de mon adaptateur Linksys PAP2T, dans l’onglet Regional. Chaque numéro de téléphone aura sa route dans le Trixbox, donc pourra définir sa sonnerie.

La difficulté a été de comprendre la séquence de sonnerie associée. La première, celle par défaut sur mon Linksys PAP2, est définie par 60(2/4). J’ai cherché fort la signification de ces chiffres, sans succès. J’ai donc décidé d’expérimenter en appelant avec mon cellulaire.

Le premier nombre semble être le nombre de répétitions de la séquence entre parenthèses. L’exemple ci-haut sera donc répété 60 fois. Le chiffre suivant définit la durée de la sonnerie, suivi de la durée du silence, toujours en secondes. Les fractions décimales sont permises.

On peut avoir une séquence plus complexe en séparant les sonneries par une virgule. Pour ma sonnerie personnelle, j’ai opté pour 60(1/0.2,0.5/0.2,0.5/2). J’entendrai d’abord une sonnerie d’une seconde, un très court silence, un petit coup, un très court silence, un autre petit coup, puis un silence reposant de deux secondes. Après, le cycle reprend avec un coup d’une seconde, et ainsi de suite.

Publié dans Journal | Tagué | Laisser un commentaire

Voix sur IP: flexibilité

Ça fait plus d’un an que je suis envieux de ceux qui se sont installés un serveur Asterisk pour recevoir et faire des appels par VoIP (Voix sur IP). Ça a commencé avec la présentation de Fabian Rodriguez au CRIM, puis Mathieu Lutfy m’a parlé de son installation à la maison. Au début de l’année, un collègue a installé TrixBox pour le bureau, et a acheté des téléphones IP. Cette semaine, mon cousin m’a demandé que je l’aide à faire la même chose à son bureau, alors c’était l’occasion rêvée pour m’équiper moi aussi!

J’ai donc installé TrixBox sur un vieux Celeron 500MHz avec 128Mo de RAM. L’installation est très facile grâce au CD fourni, qui s’installe sur la totalité du disque dur. Un login root en console permet d’obtenir l’adresse IP fournise par mon serveur DHCP, et à partir de là toute la configuration de fait par l’interface web. J’ai pris un compte VoIP à-la-carte chez Unlimitel, ce qui me donne un numéro de téléphone pour 2.50$ par mois, et les appels à 1.1¢ la minute. J’ai configuré une extension qui fait sonner un « softphone » Ekiga et mon cellulaire en simultanné grâce au Follow-Me.

J’ai commandé un adaptateur Linksys PAP2T qui donne deux lignes pour connecter deux téléphones ordinaires (PSTN). Je vais y connecter les téléphones de la maison. Nous utilisons la même chose au travail pour envoyer des Fax. L’installation fut un charme. Une fois l’appareil branché dans le réseau, il suffit de brancher un téléphone dans la prise Ligne 1 et entrer **** (quatre étoiles) suivi de 110# pour connaître l’adresse IP qu’il a obtenu du serveur DHCP.

Ensuite, en utilisant Firefox, j’ai pu entrer le minimum pour que l’appareil s’enregistre auprès du serveur Asterisk: SIP Port=5060, Proxy=(adresse IP du serveur Asterisk), password, User ID & Auth ID (la même chose).

Seul problème: j’ai entré des mauvais paramètre la première fois, et après avoir corrigé ça j’ai dû débrancher et rebrancher l’appareil pour qu’il tente à nouveau l’inscription auprès du serveur.

Avec tout ça, j’espère pouvoir faire quelques économies, mais ce qui promet le plus est la flexibilité que ça m’apportera. Déjà, avec un seul numéro on peut me rejoindre chez moi et sur mon cellulaire, et bientôt s’ajoutera le bureau quand j’aurai réussi à faire communiquer les deux serveurs Asterisk pour que les appels passent par internet. Autre avantage, ma boîte vocale Asterisk peut m’envoyer mes messages vocaux par courriel, en fichier attaché, ce qui simplifie la prise des messages.

J’ai hâte de pouvoir laisser tomber Primus! Mais pour ça, je vais devoir payer une ligne sèche… à suivre!

Publié dans Journal | Tagué | 1 commentaire