Planet freenode

February 05, 2018

freenode staffblog

Celebrating FOSS, and twenty years of Open Source

For the last few days I (and several of the freenode volunteers) have had the absolute pleasure of spending time with a wide range of freenode users over at FOSDEM in Brussels. FOSDEM has always provided us with an excellent opportunity to catch up, not only with one another but also with sponsors, group contacts and others.

I would like to extent heartfelt thanks to the incredible organisers and volunteers, speakers and attendees who make FOSDEM (and other such events) possible, and I would also like to thank those of you who took the time to speak with us, provide feedback, thoughts and words of appreciation. It is nice to be reminded that you appreciate the freenode project, and that you feel it adds some value.

We often find that a large proportion of our time is spent dealing with spam or other problematic behaviour, and it is all too easy to forget that the incredibly small minority of users that create issues are just that, a minority, and that the vast proportion of our userbase consists of amazing human-beings who collaborate on exciting, important and curious projects. And perhaps we also sometimes forget to show our appreciation of the incredible work you all undertake within the FOSS and peer-directed project spaces.

On Saturday, I joined Laura Czajkowski, Leslie Hawthorn, Deb Nicholson, VM Brasseur and many others in song as we came together to sing Happy Birthday to Open Source to mark that it had been 20 years since the term was first coined. It felt fitting that this should take place not only during FOSDEM, but also during Free and Open Source Software Month. So once more, Happy Birthday Open Source!

To celebrate Free and Open Source Software Month, Private Internet Access is running a promotion this month, with savings of up to 62% if you take out an annual subscription here.

We'd love to hear about, and help highlight any other similar promotions run by other companies that are doing something similar to celebrate FOSS month! Please do let us know ([email protected]) or via IRC if you are doing something cool, and would like us to share it with our community!

by christel at February 05, 2018 11:19 PM

December 23, 2017

erry's blog

5 Helpful Linux Shell Tricks You May Not Know About

These are just 5 helpful Linux tricks I’ve picked up in my career and thought would be nice to share, in case there are others that don’t know about them!

  • Did you know that you can use cd without any arguments to go back to your home directory?
  • You can use cd - to go back to the previous directory you were in! If you do it again after the first time, you can switch back and forth.
  • On a similar note, there is actually a directory stack. You can use pushd instead of cd to go to another directory and add it on to your stack. You can see your stack with dirs and use popd to take the topmost directory off the stack and go back to the directory before it.
  • You can use history to see your command history. It should give you a list of numbers and corresponding commands. Then you can use !(the number) to repeat a command. For example, in the following scenario:
    $ history
    101 ls
    102 ssh [email protected]
    103 cd ~/Downloads

    In this scenario, you’d use !103 to repeat the command cd ~/Downloads.

  • You can use CTRL-R to search backwards in your command history. I’ve found this incredibly helpful! You could, for example, press CTRL-R followed by the word git to find the previous git push command in your history instead of typing the whole command in again. Save seconds from your day!

I’ve also made a video if you want to see those tricks in action! Enjoy!

by Errietta Kostala at December 23, 2017 05:48 PM

December 22, 2017

erry's blog

Getting started with express and typescript

Getting started with express and typescript

I recently started an ExpressJS project, and I wanted to use Typescript, as I thought my project would benefit from the typed language and stricter structure.

I had a bit of trouble setting up when following other tutorials, so of course the right thing to do was to write my own.

This is a continuation of my previous tutorial, so I’ll assume you at least have node installd – if not follow my guide to getting started with nodejs first.

It also assumes you have some basic knowledge of express and typescript already, so it’s not about these components but rather about putting them together.

You want to start a new project, and install express as usual:

npm init
npm install --save express hbs
npm install --save-dev @types/express @types/node

The latter command will install typescript type definitions for express and node

Now you can write your typescript classes and use express. This is a basic hello world page, src/app.ts:

import * as express from "express";
import * as path from "path";

class App {
    public express;

    constructor() { = express();

    // This serves everything in `static` as static files
    private prepareStatic(): void {, "/../static/")));

    // Sets up handlebars as a view engine
    private setViewEngine(): void {"view engine", "hbs");"views", path.join(__dirname, "/../src/views"));

    // Prepare the / route to show a hello world page
    private mountHomeRoute(): void {
      const router = express.Router();
      router.get("/", (req, res) => {
              message: "Hello World!"

export default new App().express;

You don’t need to do everything that I’m doing here, you could only keep the call to mountHomeRoute() and you’d still get your hello world app.

You can also see that you can still use express features like the router and views the same way as you would with plain javascript!

Once you’ve written your class to set up the express app, all you need is server.ts to start the server.

import app from "./app";

const port = process.env.PORT || 3000;

app.listen(port, (err) => {
  if (err) {
      return console.log(err);

  return console.log(`server is listening on ${port}`);

Now that you have your typescript written, you can compile it into plain javscript.

First of all, you need typescript if you haven’t got it yet:

npm install -g typescript

This should give you the tsc command. Now, to compile all of your files under src, you can do the following:

tsc --outDir dist src/**/*

This tells the typescript compiler to compile all the files inside src/ to the dis directory. If you look at dist, it should have your generated files:

$ ls dist
app.js  server.js

Now to start your app you need to run the server.js file, which is the compiled javascript (not server.ts):

node dist/server.js

And if you navigate to http://localhost:3000/, you should see your app!

If you run your app using nodemon, it will automatically be restarted every time you re-compile, so all you need to do is re-run tsc.

Configuring the compiler

If you don’t want to have to run tsc --outDir dist src/**/* you can configure the compiler so you don’t have to give the options every time.

All you have to do is create tsconfig.json with the options you want:

    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "dist",
        "sourceMap": true,
        "baseUrl": ".",
        "paths": {
            "*": [
    "include": [
    "exclude": [

The outDir option should be familiar from default; by setting this to dist, tsc will automatically put all your generated files in the dist directory.

include tells the compiler where to look for typescript files, in this case src/**/*.

"targer": "es6" is also important if you want es6 support.

If you want to see the full documentation for tsconfig.json, you can find it in the typescript hadnbook.

Once you have tsconfig.json ready, you can just use tsc to compile your code without having to manually specify options.

Next steps

From here on you should be ready to go! For more information, check out the following:

by Errietta Kostala at December 22, 2017 10:12 PM

December 08, 2017

erry's blog

Getting started with nodejs, nvm, npm

Getting started with NodeJS, nvm, npm.

I’ve recently been playing with NodeJS, and wanted to share my findings. This is just a quick ‘hello world’ tutorial on getting started. I (as of writing) code perl for a living, so you should definitely take my word on nodejs ;). Ok, enough joking around, let’s get to it!


First of all, I can thoroughly recommend using the node version manager, nvm – even if you are only working on a single, small project. nvm manages different versions of nodejs installations on your system. While you don’t have to use it and can use pre-compiled binaries (or packages) or compile node yourself, my personal advice is to use it. The reason for this is that nodejs moves very quickly, and you may sooner or later run into having to run two applications that support different major versions of nodejs. While, in an ideal world, everyone would upgrade their dependencies, reality is often different. By using nvm, you can easily install and manage different versions of node in your system, potentially saving yourself headaches from these problems.

You can install nvm with a single command, curl -o- | bash. If you’re alergic to magic curl | sh scripts, you can also perform a manual installation


With nvm

If you’ve got nvm, nodejs is really easy to install! just run nvm install --lts to retrieve the latest long term support version.

Without nvm

(Skip this if you used nvm)

If you can’t or don’t want to install nvm, you can install nodejs from


npm is the node package manager, and you get it automatically when you install nodejs. It’s how dependencies are managed in the node.js world – if your software depends on a third-party library (such express) you will usually find a package that you can install from the npm registry. This gives an easy and standard way of managing third-party dependencies.


Your app’s dependencies are kept in package.json. You can tell npm to install and automatically save something to this file. For example:

npm install --save express

Will install express and save it as a dependency in package.json. Now, every time someone downloads your software, they can automatically install all of your dependencies by just doing npm install.

Hello world

Now that you finally have everything you need, you can start writing code!

For example, here’s a very simple hello-world.js:

console.log("Hello world!"); // Very simple!

You can run this with node hello-world.js

Using modules

Remember npm from earlier? You may be wondering: “Where do the modules I install go? How do I use them”?

npm installs modules in the ./node_modules subdirectory of your project root.

To use a module installed by npm you can just require it – for example const express = require("express") will load express. You don’t need to tell node where to look – it already knows to look in ./node_modules.


Now, this is a simple express app, let’s call it hello-express.js

// Load express
const express = require('express');
const app = express();

// Start listening on port 3000
app.listen(3000, () => console.log('App started'));

// Set up your routes.
app.get('/', (req, res) => res.send('Hello World!'));

app.get('/page', (req, res) => res.send('Second page'));

You can run your app like the previous one: node hello-express.js

You can now visit your server at http://localhost:3000/. Magic!

[email protected] [2]  ~/hello % curl http://localhost:3000 
Hello World!

[email protected] [2]  ~/hello % curl http://localhost:3000/page
Second page

A bit more express

You can also define your routes in separate files – this makes things cleaner. For example, consider routes/account.js

const express = require('express');
const router = express.Router();

router.get('/', function (req, res) {
    res.send({ users: [1, 2, 3] });

router.get('/:user_id', function(req, res) {
    const user_id = req.params.user_id;

    const users = {
        1: { name: 'John', surname: 'Doe'  },
        2: { name: 'Jane', surname: 'Doe'  },
        3: { name: 'Best', surname: 'User' },
    if (!users[user_id]) {
       res.json({ error: `User id ${user_id} not found` });
    } else {

module.exports = router;

Now in your main file, add:

const accountRoute = require('./routes/account');
app.use('/account', accountRoute);

This will allow your app to serve /account and /account/(user id)

$ curl http://localhost:3000/account/  
curl http://localhost:3000/account/2 

Next steps

Now that you know the basics, what’s next?

I also want to make a tutorial for a simple Typescript + express app, since I’ve been working on that, so watch this space :)

Until next time!

by Errietta Kostala at December 08, 2017 06:55 PM

December 05, 2017

freenode staffblog

"Joe-Job" spam on other networks referring to freenode

It has come to our attention that someone is going around other IRC networks, spamming channels with racist messages which suggest that they are promoting a channel here on freenode, and that we are aware and supportive of such.

We are monitoring the situation, but there's little we can do when they're targetting other networks, but we'd like to clarify that we of course do not support any racist or hate-inciting behaviour, which is strictly against our terms of use, and that the channel(s) referenced in the spam messages are in no way connected to the spam - rather they are innocent victims of a "Joe Job" designed to disrupt them as well as freenode.

Since there's little we can do to stop it on other networks, reporting each individual sighting, particularly in #freenode, is of limited value and likely to cause more noise than signal, but feel free to message a staffer (use the /stats p command to see who's available) if you have concerns, or particularly if you are part of the oper/staff team on another affected network and want to talk to us.

by bigpresh at December 05, 2017 09:00 AM

November 15, 2017

freenode staffblog

On Shadowbans

It's recently come to our attention that an unintended effect of combining channel modes allowed channel operators to set undetectable bans and quiets on users.

freenode considers this to be, in short, antithetical to our values and approach to moderation. While we recognise the challenges of moderating large channels, we urge channel operators to be as transparent as possible, and believe that users should be aware of moderation action taken against them.

In light of this, we are deploying a change to the $j extban. As of tomorrow UTC, $j will ignore ban exceptions set on the target channel, seeing the same effects as an uninvolved user checking its ban list.

This was always the intention in enabling $j. I apologise on behalf of the staff team for any confusion this may have caused.

by edk at November 15, 2017 11:59 PM

November 03, 2017

erry's blog

Perl Dependency Management

I did a talk on Perl Dependency management and using Carton at the technical meeting in Steptember.

This is the talk:

You can see my slides here.

by Errietta Kostala at November 03, 2017 01:04 PM

August 25, 2017

freenode staffblog

freenode #live - even more confirmed speakers

Yesterday, we announced more confirmed speakers for the freenode #live conference taking place at the At-Bristol Science Centre in Bristol, UK on 28-29th October this year.

Today we are happy to announce more speakers:

  • Chris Lamb - Currently the Debian Project Leader, Chris is a freelance computer programmer, author of dozens of free projects, and contributor to hundreds of others. Chris has spoken at numerous conferences, including LinuxCon China, HKOSCon,, DjangoCon Europe, OSCAL, multiple DebConfs, Software Freedom Kosovo, foss-north & FOSS'ASIA.
  • Philipp Krenn - part of the infrastructure team and a Developer Advocate at Elastic, spreading the love and knowledge of full-text search, analytics, and real-time data. He is a frequent speaker at conferences and meetups about all things search & analytics, databases, cloud computing, and devops.
  • Oliver Gorwits - Oliver has a background in computer networks and is a senior IT manager at a major weather forecasting centre in the UK. For over 20 years he's worked with software as a hobby and contributed to open source, mainly in Perl, and now leads the Netdisco project.

Still more to come

With still more speakers to be announced soon, keep your eyes out for more announcements coming soon - and get your ticket now to secure your place!

Get your tickets now!

Want to watch these talented speakers? Get your tickets now to ensure you have the chance to experience these and the other speakers and workshops to be announced soon!

Exhibit your project or sponsor the event

If you represent a FOSS project and would like to exhibit, please contact us - FOSS projects exhibit for free, and it's a great way to meet your current users and attract others!

Corporate sponsors are very much welcomed also, with a variety of sponsorship packages available providing different exposure levels to a FOSS-centered, technical audience - get a warm fuzzy feeling by supporting the community which most likely contributed in no small way to the success of your business!

For any questions, please feel free to email us - [email protected] - or join us in #live on freenode!

We look forward to seeing you there.

by bigpresh at August 25, 2017 11:15 PM

August 23, 2017

freenode staffblog

freenode #live - more confirmed speakers

The freenode #live team are excited to announce more confirmed speakers for the freenode #live conference taking place at the At-Bristol Science Centre in Bristol, UK on 28-29th October this year, with plenty more still to be announced.

Of the variety of speakers, talks and workshops we've had submitted, we're pleased to announce the following confirmed lineup:

Keynote speakers

  • Deb Nicholson (Community Outreach Director for the Open Invention Network, winner of several awards including the O'Reilly Open Source Award)
  • Karen Sandler (Executive Director of the Software Freedom Conservancy, former executive director of the GNOME Foundation)
  • Matthew Garrett (technologist, programmer, and free software activist - a major contributor to various projects including Linux, GNOME, Debian, Ubuntu and Red Hat. He is a recipient of the Free Software Award from the Free Software Foundation for his work on Secure Boot, UEFI, and the Linux kernel.

Confirmed talks

  • James Wheare (founder of IRCCloud)
  • Christopher Baines (Debian packager, OSM contributor)
  • Kaspar Emanuel (freelance electronic design engineer and software developer working on projects ranging from musical instruments to robots to Braille displays)
  • Nathan Handler (freenode staff member, Ubuntu and Debian GNU/Linux Developer, Site Reliability Engineer at Yelp)
  • Errietta Kostala (Perl developer at FairFX London, keen open source contributor including Mozilla)
  • Maxigas (postdoctoral researcher at the Universitat Oberta de Catalunya and a fellow at Central European University)
  • Michael Walker (working on a Ph.D, open source contributor, started Arch Hurd distribution, author of Déjà Fu Haskell concurrent testing library)

More to come...

Another 12+ talks yet to be confirmed will be announced soon, plus workshops on various topics.

Get your tickets now!

Want to watch these talks and/or take part in these workshops? Get your tickets now to ensure you have the chance to experience these and the other speakers and workshops to be announced soon!

Exhibit your project or sponsor the event

If you represent a FOSS project and would like to exhibit, please contact us - FOSS projects exhibit for free, and it's a great way to meet your current users and attract others!

Corporate sponsors are very much welcomed also, with a variety of sponsorship packages available providing different exposure levels to a FOSS-centered, technical audience - get a warm fuzzy feeling by supporting the community which most likely contributed in no small way to the success of your business!

For any questions, please feel free to email us - [email protected] - or join us in #live on freenode!

We look forward to seeing you there.

by bigpresh at August 23, 2017 10:00 PM

August 17, 2017

freenode staffblog

Spambot attack

Earlier this morning, the freenode network was hit by a fairly extensive spambot attack, the spambots were distributing links to images that users have reported as containing child pornography images. Naturally, we are escalating the attack to law enforcement, but we would strongly encourage users to be vigilant and careful not to open links from users you do not know.

While the attacks are ongoing we have chosen to update the default umodes for users to include +R, please note that this means you will not receive messages from unregistered users and you will need to /mode yournick -R in order to allow those to come through. If you choose to set yourself -R, please be cautious of clicking on any links from unregistered users that you do not know.

At the height of the attack, one of the klines set resulted in a utility bot attempting to ban all users connected to the network, I can only apologise for this and we are looking into what happened.

Again, apologies for the disruption and please be cautious.

by christel at August 17, 2017 10:05 AM

August 10, 2017

erry's blog

Mojo VS Catalyst Lightning talk

I did a lightning talk at The Perl Conference in Amsterdam, Mojo VS Catalyst. Feel free to download the slides .

by Errietta Kostala at August 10, 2017 06:31 PM

July 27, 2017

Deedra's blog

long overdo update

so I decided to make my tablet my main computer. I had a lot of reasons for this but needless to say it’s slowly coming together. I needed to find a WordPress app and kept putting it off in favor of other things. There will be more updates coming soon so stay tuned!

by deedra at July 27, 2017 08:08 AM

July 24, 2017

freenode staffblog

freenode #live - Opening Keynote

We are delighted to announce the first of our keynotes for the freenode #live conference taking place at the At-Bristol Science Centre in Bristol, UK on 28-29th October this year. We have more keynotes to announce and these will be announced over the next couple of weeks. We also hope that you will join our brilliant line-up of speakers, and that you are considering submitting a talk.

The opening keynote is a thoroughly inspiring woman with extensive experience of the various aspects of the free software communities, and we are really excited to welcome none other than the glorious Deb Nicholson to Bristol in October.

Deb Nicholson Bio Picture

Deb Nicholson is a free software policy nerd and passionate community advocate. She is the Community Outreach Director for the Open Invention Network, the largest patent non-aggression community in history which serves Linux, GNU, Android and other key FOSS projects. She’s won the O’Reilly Open Source Award, one of the most recognized awards in the FOSS world, for her work on GNU MediaGoblin and OpenHatch. She is a founding organizer of the Seattle GNU/Linux Conference, an annual event dedicated to surfacing new voices and welcoming new people to the free software community. She also serves on the Software Freedom Conservancy's Evaluation Committee, which acts as a curator of new member projects. She lives with her husband and her lucky black cat in Cambridge, Massachusetts.

Get your tickets now to lock in to the early bird price and ensure that you have the chance to listen to Deb, and the other keynotes and speakers at freenode #live this October.

P.S. freenode will be at DEFCON25 this weekend (27-30th July 2017), do come find us in the vendor area and say hi, grab some stickers or get your hands on our limited edition freenode t-shirts!

by christel at July 24, 2017 10:52 PM

freenode at DEFCON25

DEFCON25 takes place at Caesar's Palace in Las Vegas on 27-30 of this month. freenode will be there—will you?

This year, freenode will have a booth in the vendor village—come have a chat with us, grab some stickers or get your hands on a limited edition freenode t-shirt!

freenode #live - October 28-29th 2017

Only a few more days to lock in to the special early bird ticket price! Get your tickets now, and don't forget to make a CFP submission if you fancy giving a talk.

Stay tuned, we're excited to be announcing the keynote speakers in the next few days!

by christel at July 24, 2017 03:04 PM

July 18, 2017

freenode staffblog

Exhibiting at freenode #live

You might have seen our latest blog post, where we announced the registration and call for participation for the freenode #live conference that takes place at the At-Bristol Science Centre in Bristol, UK on October 28-29th this year.

The freenode network plays host to a variety of free and open source software and other peer-directed projects. We would love to see your project come exhibit at freenode #live and we invite you to e-mail us at [email protected] if you are interested in coming along to showcase your project and meet like-minded FOSS enthusiasts.

We aim to ensure that the freenode #live conference remains affordable and accessible to the entire community, and to that end there is no exhibition charge for nonprofits and unincorporated FOSS projects.

While we are taking a grassroots approach with our conference, this does not mean that there is no space for corporate exhibitors and we recognise that the conference may provide opportunities for you too, and we would also like to welcome you to drop us a line to find out about our corporate exhibition packages or to tailor one specific to your company. Prices remain low also for corporate entities and we would love to see both types of exhibitor in Bristol on October 28 and 29th.

You can register and submit a response to our CFP here and we hope to start announcing keynote speakers and exhibitors soon. Please do keep an eye on the website though, we will also be opening up for nominations shortly as we will be presenting two awards as part of freenode #live, including the Rob Levin Memorial Community Award! Perhaps you know someone who has made great contributions to your community, or even a project that has redefined the community spirit in a positive way? Have a think about who YOU will be nominating!

by christel at July 18, 2017 09:29 AM

July 13, 2017

freenode staffblog

freenode #live - Registration and CFP now open

The inaugural freenode #live conference takes place at At-Bristol in Bristol, UK from Saturday 28 to Sunday 29 October 2017. Both days will include talks and workshops, and we look forward to this community-focused gathering.

Tickets are now on sale and there is a special Early Bird price until 31 July and we are also taking submissions for the call for participation, we have three tracks to choose from (FOSS and Community, Privacy and Security and Making and Remixing) and we look forward to receiving your submission.

We will be making every effort to ensure that freenode #live is as inclusive an event as is possible and we encourage the minorities within our community to attend and to submit proposals.

What are we looking for?

We are looking for proposals for talks, workshops and other events and as a community-focused organisation, freenode is committed to ensuring that this conference is open to YOUR ideas! The more varied the programme, the better.

Perhaps you have something you would like to share with the community? We welcome proposals on all subjects and at any level of technical expertise, please do not feel constrained by the track subjects. We are keen to hear about your experiments, your discoveries, solutions, achievements and even your failures. We want to hear about “how to get started with X,” “how to use Y,” and “what we learned from working on Z”.

We want you to come teach us something new, we want you to make us think and we want you to make us laugh. Go ahead and submit a proposal for a talk, we’d love to hear your ideas.

Perhaps you could lead a tutorial on something of relevance to the freenode communities or the FOSS ecosystem? Why not throw your ideas in the hat and submit a proposal to hold a workshop?

Have a completely different idea? Is there something you would love to see happen at freenode #live? Let us know! We’re open to all ideas!

We want to hear from you, if you are planning to come to the event then you are very much part of the community and as such this is very much your conference. We want to hear from you regardless of whether you are a seasoned speaker or if this is the first time you are considering getting up in front of an audience. The freenode community is friendly and welcoming.

The CFP closes on 15 August 2017.

Together with our main sponsor and co-host of this year’s event, Private Internet Access, we very much look forward to welcoming you all to Bristol in October!

If you have any questions, please do not hesitate to drop us a line to [email protected]

by christel at July 13, 2017 07:35 PM

freenode #live - Registration and CFP now open

The inaugural freenode #live conference takes place at At-Bristol in Bristol, UK from Saturday 28 to Sunday 29 October 2017. Both days will include talks and workshops, and we look forward to this community-focused gathering.

Tickets are now on sale and there is a special Early Bird price until 31 July and we are also taking submissions for the call for participation, we have three tracks to choose from (FOSS & Community, Privacy & Security and Making & Remixing) and we look forward to receiving your submission.

We will be making every effort to ensure that freenode #live is as inclusive an event as is possible and we encourage the minorities within our community to attend and to submit proposals.

What are we looking for?

We are looking for proposals for talks, workshops and other events and as a community-focused organisation, freenode is committed to ensuring that this conference is open to YOUR ideas! The more varied the programme, the better.

Perhaps you have something you would like to share with the community? We welcome proposals on all subjects and at any level of technical expertise, please do not feel constrained by the track subjects. We are keen to hear about your experiments, your discoveries, solutions, achievements and even your failures. We want to hear about “how to get started with X,” “how to use Y,” and “what we learned from working on Z”.

We want you to come teach us something new, we want you to make us think and we want you to make us laugh. Go ahead and submit a proposal for a talk, we’d love to hear your ideas.

Perhaps you could lead a tutorial on something of relevance to the freenode communities or the FOSS ecosystem? Why not throw your ideas in the hat and submit a proposal to hold a workshop?

Have a completely different idea? Is there something you would love to see happen at freenode #live? Let us know! We’re open to all ideas!

We want to hear from you, if you are planning to come to the event then you are very much part of the community and as such this is very much your conference. We want to hear from you regardless of whether you are a seasoned speaker or if this is the first time you are considering getting up in front of an audience. The freenode community is friendly and welcoming.

The CFP closes on 15 August 2017.

Together with our main sponsor and co-host of this year’s event, Private Internet Access, we very much look forward to welcoming you all to Bristol in October!

If you have any questions, please do not hesitate to drop us a line to [email protected] or hop into #live and chat with us.

by christel at July 13, 2017 07:35 PM

June 29, 2017

freenode staffblog

Policy Updates

When the website was redesigned back in 2016, we made the decision to publish very limited policy for a period to allow us a chance to review our policies and guidelines, most of which were written over a decade ago. We have now completed our review and updated the policies accordingly.

by christel at June 29, 2017 11:26 AM

June 07, 2017

erry's blog

Perl Dependency management with Carton

The perl depenendency management tool Carton allows not only easily separating dependencies for different applications or parts of the system, but also easily deploying an application and handling its dependencies.
Using Carton is extremely straight-forward for anybody who’s used cpanm to manage dependencies before.

Installing and using your application

The first step is to write a cpanfile:

requires 'LWP', '6.26';
requires 'DBIx::Class', '0.082840';
requires 'Config::ZOMG', '1.000000';

Then in order to install the dependencies on your development machine you can run `carton install`. This will install the dependencies in a folder called ‘local’ inside your source directory – that means your globally installed perl modules are untouched!
It’s worth noting that you won’t be able to run your application as you normally would (perl because perl won’t know where to load the dependencies from. Instead, you will now have to prefix everything with carton exec, e.g. carton exec perl!

Version Control

Once you’ve ran carton install, you’ll notice a file, `cpanfile.snapshot` has been created. That does not only include your dependencies, but also the dependencies of these dependencies, at the correct versions. That means you don’t have to worry about writing down every single version or risking having the version of a dependency change in the future – everything is permanently recorded for you.
You will want to add this file to version control:

git add cpanfile cpanfile.snapshot

If your application ever needs a new dependency, all you have to do is tweak the cpanfile, re-run carton install and commit the changes to cpanfile.snapshot.
When another developer checks out the repository, they have to run carton install to get the dependencies, and use carton exec like you did.


There are two ways of installing your dependencies: one is to get the dependencies from the Internet and the other to keep them locally.
If you want to do the former, your deployment process just has to pull the latest version of the repository and do:

carton install --deployment

(And of course run the application with carton exec).
If you don’t want to get the dependencies from the Internet, your deployment process will have to run carton bundle before deployment.

This will bundle your dependencies into the vendor/ folder. This folder will then have to be copied on to your production machine. Once there, you can run carton install --deployment --cached.

In conclusion, carton is an extremely useful and easy-to-use tool. The only part that was difficult for me was figuring out working versions of the dependencies, but that is something one has to do when writing a list of dependencies either way. I certainly recommend it to anyone wishing to use modern Perl deployment practices!

by Errietta Kostala at June 07, 2017 06:49 PM

June 03, 2017

Deedra's blog


over the past several months a lot has happened.I had surgery in march to remove my gastric pacemaker, ended up with an infection that seems to be going away now. A couple of days ago i came back to freenode staff and enjoy it.

I’ve always loved the open source comunity but when i got sick, i dropped out of it completely. My health has been stable for a good 3 years now or so and i’ve finally got the energy to get involved again. I had been staff for in years past and the other day everyone let me come back and i really love it.

Oh sure you’ve got your bad users on irc but the majority of the folks i’ve spoken with have been extremely nice and helpful. The staff is also great to work with and i hope it stays that way.

I took up knitting several years ago but never started making any real progress till now. I’m excited now because we just might have a knitted bath mat for the bathroom in the next couple months depending on how fast i can actually go.

So all in all things are good and i’m happy with it. Chris and i have our 6 year aniversery of being together on june 4. we may have a friend come down to stay and that will be fun.

by deedra at June 03, 2017 07:38 PM

why did this have to happen?

now onto a serious topic that has been bothering me for a long time now. The friends who gave me all of that yarn that opens so many possibilities of what i can make were evicted from our complex after living there for 36 years. The reason why? 1 case of bed bugs that no one knows where it came from. This family still can not find a place to live after searching for months because they’re on a fixed incom and the rent here has skyrocketed. When we moved in we were paying 495/month now we’re paying 625, and when we sign our next lease, we’ll be paying over 700.

1 this family never should have been kicked out but they’re being blamed for something that they may not even have done.2, I keep asking myself if there are other reasons that the complex is doing it.

I feel angry and frustrated over this because we have no way to help them and it just feels so wrong that this is happening to them. I keep asking why, and i still have no real answers. I do hope however they can find a place to stay.

by deedra at June 03, 2017 07:37 PM

chronic pain

chronic pain is one of those thing i live with on a constant basis I have damage to my spine from sliding down a flight of stairs on my spine because i missed a step when i got up to hit the bathroom one night when i was 20. Now there are several things they do to keep me comfortable one is a tens unit. it’s taken a while to find the right tens unitbut i’ve found what works and i’ll use it. in fact i practically live with the thing on.

The downside to living with the thing on is that i go through a lot of electrodes. Probably more then most people would use, however i’d rather be comfortable then having injections every 3 months, and taking narchotics to control the pain.

They have me on neurontin to deal with the nerve damage and diflocanac to deal with the inflamation and arthritus and tylanol if needed. There are some other things involved but while i have really bad days like today for the most part i’m comfortable enough and i can manage.

Of course this is the point where someone speaks up and says “but you have legal weed in oregon, why dont you smoke weed to help things. my response to that is a couple things. 1 i seem to react badly these days to weed and 2 our rent here is 625 a month for a 1 bedroom there’s no way we could afford it if we wanted to.

I used to have a blog where i would review marijuana strains but i dont keep the blog any more do to my not being able to experiment with it to try and review the different strains.

by deedra at June 03, 2017 07:36 PM

my thoughts on web accessibility

in the past year or 2 the internet or rather the web hasdeclined rather seriously in it’s accessibility for blind users. people want javascript because it’s supposed to make things “better” however it makes the web very very hard for a blind person to use. I can give some examples of this…

scaleway has a great service but i can’t sign up for any of their services because there’s no way for me to click on the terms of service thing in order to sign up. I was frustrated horribley by this because i really wanted to try their service because their prices are really nice. In the end though i think i got a better deal with going with
prgmr their prices are decent though they do not give quite the space and ram that scaleway gives, but they are on freenode, and that makes it worth it to me.

another example of how bad web accessibility has gotten is in a certain browser. The google-chrome browser is said to have accessibility features under linux but in reality none of them work. The google tts doesn’t work period and since they no longer support speech-dispatcher even though the bug might be fixed by now that made them stop using it in the first place, they still no longer support it. This leaves blind users with only 1 option for a web browser that’s graphical on linux and that’s firefox. Firefox is a decent browser all in all, but google’s screen reader made the web much easier to use.

My final example of how much web accessibility has degraded is godaddy the domain service. I tried to register the other day because i remembered how decent their service was when i had another domain there and it was insanely dificult to use. Why isn’t registered with godaddy? one simple reason. I couldn’t click on a no thanks button if i had just checked out i’d have had all of their packages and plans that go along with the domain and i did not want those.

There’s my thoughts on web accessibility and i think it’s only going to get worse before it gets better. Google really needs to fix their shit though There needs to be a browser that can keep up with the way the web is changing and google chrome on the desktop seems to do that in windows and mac os so, why not linux?

by deedra at June 03, 2017 07:36 PM


I love to knit. I started knitting a couple years back but couldn’t get the hang of it. I moved onto crocheting and that was worse. but when i went back to knitting it was a bit like my eyes had opened and it was patheticly simple.

I’m not sure why that is, but that’s how it happened. Right now i’ve got a bathmat i’m in the process of knitting and i’ve got a blanket and some other things to make and plenty of yarn to do it with.

Oddly enough all of my yarn is blue. Maybe different shades of blue but that’s the color. I think i bought them that way to have them match but it’s just weird having only 1 color.

I started knitting because a friend of mine told me how much fun she had with her knitting but she didn’t have a lot of time to do it i told her i wanted to learn and try it and she was all for teaching me. In the end it took her help the help of another friend, and a book for children that teaches children how to knit. Who says you can’t read a childrens book as an adult.:P

Later on i descovered that if i knit my angziety isn’t nearly so bad. that was just more motivation to knit. It helps keep the panick attacks from taking over and it is something fun to do.

Oh, the cats think it’s fun to watch me knit you would think they would attack the yarn, but they dont.

by deedra at June 03, 2017 07:35 PM

freenode radio

back in around 2002 freenode tried to have it’s own radio type thing. It was called fnr. Essentially several people did shows through out the weeks and it was a lot of fun. It was hard work though and i suspect was stressful on everyone.

I had a blast doing it and part of me is a bit sad that it didn’t work out but it was easy to get burnt out even though it was fun.

I kept the archives of my show and have posted them here for those who want to listen to them.

click here for fnr archives
leave a comment i’m curious how many freenode users remember this.

by deedra at June 03, 2017 07:34 PM

what’s a kittyrat?

I’m sure that by now people are asking me why i chose the domain name What’s a kittyrat? a kittyrat is a cat who’s got a long body and an extremely long tail. That’s how chris and i define a kittyrat anyway. our cats have really long tails and bodies and they know how to stretch and take up half the bed with out trying.

Many times i’ll see bastet stretched out with her body draped over the cat tower like she wants to take up as much space as she can. So, that’s a kittyrat for you I’ll try to include links to their pictures but since the domain hasn’t gone live yet I have to wait till the dns propogates

by deedra at June 03, 2017 07:34 PM

reflections on blogs and facebook

so i ent out this morning for a junk food run. e had no poer thanks to a transformer bloing and e’re aiting on a package for part of our dinner tonight so e decided on junk food. On the way home from the store, i started to think. I dont really care for facebook, never have. I’m purposely moving my blog to so this way folks can comment on it if they choose such as family. I think this is a nice way for my friends and family to keep track of me but also to be able to leave comments or feedback.

I’m eventually going to put the blog on but if i’m going to set up wordpress and php and mysql then i want to do it right. Happy reading!

by deedra at June 03, 2017 07:24 PM

April 20, 2017

mquin's blog

#500words day 7

Made it to the last day of the challenge. It's been an enjoyable week. I've not been finding it easy to find things to write about but I am proud at having managed it. I think I will try to continue for as long as I can.

I ran again this morning having taken a rest day yesterday. Pleasantly the weather had improved and it was much warmer than the near-zero temperatures I experienced the last time I was out. I feel that I'm getting back into a groove with it and my times have subtly, but steadily improved over the course of the week.

Related to running, I made a useful discovery that Garmin Connect, the web application that supports my GPS has, at some point in the last couple of years, gained the ability to synchronise with Runkeeper. I use both of these tools for a couple of reasons - partly because when I started running initially I was tracking my runs using a smartphone and used Runkeeper to do that, and partly to keep my data in more than one place to mitigate the risk that one of the applications might go away of lose data.

Up until now I'd been making use of a third-party application to pull the log files from my watch and upload them to Runkeeper in a manual process separate from Garmin's automatic synchronisation to Garmin Connect. I'd been struggling to get the site to work properly having made a recent switch from Firefox to Safari as my day to day browser and this led be to discover that this proccess was no longer necessary. Having authorised the connection between the two web applications the synchronisation process happens almost immediately after I connect the watch to my computer.

The outside world continues to be alarming, a situation that I don't imagine will improve in the next six weeks before the election or really any time soon. Despite all the rhetoric about 'control' over the last couple of years it feels to me that there is an utter absence of it, and we have politicians doing what the have the ability to do with little regard for whether what they are doing is going to be good for the country as a whole in the long, or even short, term.

I'm doing my best to stay positive, but I'm increasingly feeling the urge to keep my head down and my friends close in whatever ways I can.

Had a bit of a panic with these writings yesterday as I somehow managed to end up with an empty file in place of what I'd written on day 5. Fortunately after a lot of head scratching and fiddling around with git and Time Machine in the hope of recovering it I noticed that it was still present, unsaved, in a tab in my editor. Phew. I gather that there are a couple of extensions for Atom to autosave work-in-progress so I'll be exploring those soon.

(500 words) 2017-04-20 0815

April 20, 2017 07:15 AM

April 19, 2017

mquin's blog

#500words day 6

Well, yesterday got off to an unexpectedly interesting start. Over the long weekend one of our systems at work developed an unusual fault which, thanks to a combinations of factors, resulted in the generation of something upwards of 64 thousand email messages to a mailing list that I am on. It took about 90 minutes for my system to process, and then delete all of this.

In the meantime, our Prime Minister announced that she would be making announcements on the steps of 10 Downing Street later in the morning. There was a flurry of speculation on social media as to what sort of announcement might be forthcoming with some being ruled out as having precedent for being made in parliament or elsewhere.

While this was going on I was listening to a presentation by our sales and integration contacts from Hewlett Packard. We're reaching the point where the c7000 BladeSystems that make up the majority of our infrastructure will be coming up for replacement and HP are keen for us to adopt their replacement product - HP Synergy. It does look like an interesting setup, at least from the marketing pitch. The prime selling point is the management system (which exists for the more recent pieces of c7000 equipment, but as we have little of these we have not looked into using it yet) which looks to have a lot of features that will reduce the amount of piecemeal work involved in day-to-day management and operation of the systems, and has deep integration with HP's counterpart storage product - 3par - which we have been making increasing use of. I'm not sure if or when we will be likely to buy into it - technology being useful is one question, funding purchases of it particularly in the current political and economic climate (more on this in a moment) is an entirely different one.

So we returned from the presentation (complete with complimentary donuts) to find that Theresa May had announced that she would be pushing for a General Election to be held in a few weeks time on June 8th. The UK notionally has fixed term parliaments, introduced by new legislation introduced in 2010 to ostensibly prevent a Prime Minister from calling an early election on a whim. The act, however, has provision for an early vote in the event of a non-functional government or a vote in favour of a General Election with a significant parliamentary majority. It is expected the the Labour opposition will support such a vote in this instance, so we're off to the races.

The impression I'm getting from the papers is that this move has been taken by the Prime Minister in an attempt to strengthen her position against other factions within her party. Whether this is the case and whether it will work is anyone's guess. From my own perspective I'm not sure what would be a good outcome. I've got serious reservations about the Labour party but they might be the least worst result. The Liberal Democrats position seems to be rallying following the EU membership vote but how this will translate into parliamentary seats, and what they'll be able to do with those seats, remains to be seen.

In Scotland it will be interesting in itself, with the very real possibility that the SNP will take the entire country, but as we have seen since 2015, controlling every seat in Scotland actually gives them very little influence in Westminster.

As seems to be the permanent state of affairs - Interesting Times.

(591 words) 2017-04-19 0759

April 19, 2017 05:07 PM

April 18, 2017

mquin's blog

#500words day 5

Ran again this morning. Crikey it's cold today, just below zero according to the weather forecast and it certainly felt like it.

Yesterdays lunch was lovely. We were at a place called Mango, in Longcroft, which has an interesting combination of Indian and Italian dishes on its menu. Our party opted for the Indian options and I had the increasingly ubiquitous Haggis Pakora to start, followed by a slow cooked lamb dish that was most delicious - on the spicier side and incredibly tender.

During lunch Laura asked, to my surprise, whether I would like to continue on to Glasgow after the meal to see The Handmaiden. After a little time wandering around the shops as we arrived early, and having bumped into an old friend, we arrived at the GFT.

The Glasgow Film Theatre, to give it its full name, is one of my favourite venues. We're quite spoiled, really, having several wonderful independent cinemas within short driving distance of us in addition to a number of large multiplexes.

The Handmaiden turned out, as I had hoped, to be an interesting film. Drawing from a Sarah Waters novel originally set in Victorian England it transplants the action to Korea and Japan during the Japanese occupation of the Korean Peninsula, and follows what presents itself initially as a caper to steal the fortune of a lonely heiress but which quickly pivots into a much more complicated tale. It's difficult to describe much more of the film without ruining the surprises but suffice to say both myself and Laura enjoyed it, and I'd certainly like to see it again.

I'm going to suggest that we take in Ghost in the Shell this evening as it will be one of the last showings of it locally, as I would still like to see it on a big screen.

Before we went out yesterday I indulged in a another little bit of media consumption and re-watched the first episode of Mad Men which has recently become available on Netflix. I watched the show when it originally aired on Sky Atlantic some years ago and I was curious to see how it had held up against my memory of it. Being a period piece it doesn't particularly date beyond the appearance and performance of the actors differing from my memories of the later series of the show. I found it fascinating again, as I did first time round, how the showrunners set about establishing the setting from the outset, from the obvious things such as the widespread use of cigarettes (blending into Don's challenge to market Lucky Strikes in a regulatory environment which even then was getting hostile towards cigarette advertising), to references to the then recent wars and towards the end of the show Richard Nixon's upcoming election campaign against John F Kennedy.

I'm glad to say that the show feels as good as I remembered it - always a risk when rewatching stuff that without the benefit of novelty it will not hit the same notes. I'm not sure whether I will continue and rewatch more of the show or not - lots of other things to watch and read that I haven't seen before.

(538 words) 2017-04-18 08:21

April 18, 2017 07:21 AM

April 17, 2017

mquin's blog

#500words day 4

I thought about running again this morning but decided that it would be better to take a day and ease my self into it - I don't want to do myself an injury by pushing too hard when I've not been running much lately.

Yesterday didn't quite follow the plan I had expected and we didn't, in the end, take in a movie. Hopefully we'll get a chance to see the films later in the week.

I did watch the Silverstone 6 Hour race which was quite enjoyable, with a close finishes in all of the classes (assisted slightly by a safety car period midway through the race, needed for clean-up following a quite alarming crash by one of the Toyota prototypes). There was plenty of action throughout the race, part of the big draw of multi-class sports car racing for me is that even if the head of the race isn't particularly interesting there is likely to me something else going on elsewhere in the race.

I also watched the Formula 1 race which while not quite as interesting did have its moments, and it is encouraging to see the Ferrari team taking race wins and Red Bull looking close, rather than the procession of Mercedes wins that we saw last year.

Today we'll be having lunch with Laura's parents and some of her family and friends, not for any particular occasion just happenstance that a number wished to get together around the same time. They're all good people so it should make for an enjoyable day.

I'll be back to work tomorrow, and I'm going to have to resume my Open University work. Having submitted an assignment last week I decided to leave it aside for this weekend and get back into it in the evenings from here forward. I'm starting to feel a bit more settled in the work than I was when I started. The module I'm working on is centred on an I.T. project and is meant to be student led. One side effect of this is that in the early stages everything has felt a bit me vague than I've gotten used to OU modules being.

From the comments on the module Facebook group it sees I'm not alone in that perception which is at least reassuring. I'm confident now that I'm starting to get a feel for it that I'll be able to make better progress than I have so far, particularly now that I seem to finally be getting over the winter cold that's been dragging me down and cutting into my study time these last months.

I'm finding the "don't edit" rule of this challenge to be a little, well, challenging. Used to being able to skim over what I've written and make changes as I go along. Thinking about it this may be an element of procrastination in this - moving words around when I've run out of things to say rather than writing new ones.

(500 Words) 2017-04-17 0753

April 17, 2017 06:53 AM

April 16, 2017

mquin's blog

#500words day 3

It's been a busy morning already. I managed to drag myself out for a run just after sunrise, my first since participating in the Southampton Parkrun while we were in the city for Minamicon back in March. It was very pleasant to be out while it was still very quiet and there was little traffic on the roads. On venturing out again to collect my paper having eaten it also appears I managed to just miss a rain shower.

I seem to be talking about habits quite a lot in these posts to far, and running is one that is perhaps a good example of the problem I have with routines - I can be good when I've settled into them, doing something in the same way every day or almost every day becomes easy. When I break a routine, however, it can be difficult to get back into that. I found this when I stopped running after the clocks changed a few years ago and it became to dark in the evening to use my usual route. I avoided a break for a little bit longer last year by taking to treadmill running at the University sports center but again while I was away for a little while over Christmas I lapsed and found it very difficult to motivate myself to get back into it again.

I don't know if there is a solution to that, other than avoiding taking breaks in the first place.

It was nice to get out and about yesterday although Laura was not feeling well enough to come with me, even if it was just to run a couple of errands. It's always nice to spend time with my parents and I'm very thankful of the good relationship I have with them.

We are hoping to catch a couple of movies a the cinema over the next couple of days - 'The Handmaiden' which is a Korean film inspired by the Sarah Waters novel 'Fingersmith', which received very interesting reviews when it screened at film festivals a few months ago, and the live action remake of Ghost in the Shell which despite controversy regarding its casting has been received favourably by friends of mine whose opinions I trust.

It's a busy weekend on the motorsports calendar, with sports car and single seater racing at Silverstone as well as a Formula One race. I decided not to take in any race weekends this year as I wanted to concentrate on my studies but I will admit that I'm a little sad not to be enjoying the proceedings from trackside. Fortunately there is good coverage on TV and online, and while I was driving yesterday I was keeping up with the European Le Mans series race thanks to Radio Le Mans' commentary - the best pictures, in their own words, are on radio.

I should confess that I cheated a little bit on the rules this morning, reporting my run to Facebook before I started writing this, but I resisted the urge to read anything.

(514 words) Sunday 2017-04-16 0819

April 16, 2017 07:19 AM

April 15, 2017

mquin's blog

#500words day 2

On to day 2 of #500words.

I'm feeling quite tired this morning. I stayed up later than I expected to last night and for some reason did not sleep well, just couldn't seem to settle for some reason.

I have stuck to the rule, resisting the urge to dive into my phone after silencing its alarm this morning, and nor have I opened my email.

It looks like it is sunny outside. I think we are going to visit my parents later today so some pleasant weather would be good. We'll be dropping off presents for my niece who has her birthday this weekend and chocolate eggs for her and the rest of my sisters' kids.

Yesterday I'd mentioned how this might fit into another practice that I am working on and in fact it fits into two, although one of them I had lapsed from slightly.

I've never been a brilliant speaker. In particular when I was younger I suffered from stammering and while this has subsided as I have gotten older - I think in part due to being a bit more confident in myself - I do still have troubles with speaking too fast or not clearly enough, particularly when I am nervous or stressed.

What I have been doing to try and work on that is making short audio recordings, just a couple of minutes, of myself speaking out loud while I try to do so clearly and confidently. To that end I have a dynamic vocal microphone mounted on my desk where I've had an audio mixer as part of my sound set up for some time. Along with the computer this gives me a easy way to make recordings.

Up until now I have been mostly speaking about the recording process and any changes I had made to approaching it, along with reading from news articles that interested me on the particular day in question.

Yesterday I read out the first of my #500days posts, and I also experimented with video recording this as well, having figured out a way to use the mounting hardware I have to position my webcam alongside the microphone.

While not quite as strange as listening to my own voice used to be, probably because we're all long used to mirrors, there is something odd about watching yourself speak. I suppose I'll get over that in time if I continue with this.

Despite the aim of this being to create some space from the clamouring of social media it's not easy to not think about the news. I'd probably describe myself as a realist than a pacifist - I think armed conflict should be a last resort but I don't feel we'll ever live in a world where it is completely off the table. What I don't understand it folks, particularly those with power and responsibility, who would charge into war with gleeful abandon. Our history is more than littered with tragedies where all too frequently the success has paled into insignificance next to the cost in human lives.

That's me done for today, time to see what the morning brings.

(526 Words)

Saturday 2017-04-15 0733

April 15, 2017 08:48 AM

April 14, 2017

mquin's blog

The #500words project

The other day, I read a post on medium by Remittence Girl setting out the idea, and some rules for writing a little bit every day, 500 words, before doing anything else, and in particular before getting involved in social media.

This isn't a new or unique idea, many writers and journalists have promoted the idea of a daily writing habit, and there are modern incarnations of the idea including Jeff Goins' 500 words a day challenge and 750 words.

Writing is a bit of an odd thing for me: I do it a lot - my job make extensive use of email and I spend quite a bit of my leisure time on IRC. In my academic work I've usually gotten encouraging feedback about the basic quality of what I've written, but even after six years of Open University study I don't feel that I really understand how to 'write like an academic'. I've made attempts at journaling before, both online and more recently on paper but sticking to the habit, and finding things that I wish to write about, was hard.

As it happens, this might dovetail with another bit of, personal development I suppose you could call it, that I've been working on - rising early. In my adult life at least I've never considered myself to be much of a morning person, and both staying up late and sleeping late have tended to be a pattern that I've fallen in to. With a 9-5 job that has tended to result in mornings that are a rush to get washed and dressed before dashing out the door.

So, for a few weeks now I've been getting up at 0500, which has been harder some days that others. This gives me plenty of time before I need to leave to get ready, have a cooked breakfast if I feel like it, collect my newspaper and listen to the radio, all at a relaxed pace. I've considered taking the time to got for a run but I'm leaving that until the weather warms up a bit.

With that extra time in the morning journaling feels like something I should be able to do, and getting my own thoughts down before I dive into the news and social media ought to be interesting.

Remittence Girl's suggestion is to do this for a week, so I will endeavour to stick to that and should it work out I'll see if I can keep going. I'm writing this in my ikiwiki blog but I've not yet decided whether I will publish it. Blogging is a little bit performative and comes (to me, anyway) with a pressure to write in a way that has a purpose, which feels at odds with what the #500words concept is about. I might publish some posts but not others, or put them up in batches rather than as a day-by-day thing.

This feels to me like a good start and I now have an idea of how much I'll need to write. Now to commit it and see if my ikiwiki still works after two years of neglect.

(523 words)

April 14, 2017 07:50 AM

April 12, 2017

freenode staffblog

PIA and freenode joining forces

I am incredibly excited to be able to share some amazing news with you today. For the last few years, Private Internet Access has been a dedicated supporter of the freenode project and we are delighted to be able to announce that freenode is now officially part of the PIA family.

freenode has been providing services to Free and Open Source Software projects, peer-directed projects and other projects that have a broadly licensed output for the past 18 years, and there is a great deal of overlap between the visions and missions of the two organisations, as well as the projects and organisations the two organisations have supported, albeit in very different ways over the years.

Rob (lilo) founded freenode with the aim of providing a useful service to Free and Open Source Software communities, peer-directed projects and others and I think he would be proud of the growth we have experienced over the years if he were still here to see it.

When I took over freenode following his death, my personal circumstances were very different from what they are now. I had time—oodles of it—and volunteering for freenode was very much a pleasure (by all means, it still is! Otherwise I wouldn't be here). However, over the years, times changed, the project grew, demands grew, my own responsibilities changed, both professionally and personally and I, along with several other senior freenode volunteers, found that we no longer had quite the same amount of time and energy to dedicate to the project.

Following discussion and deliberation we have decided to formally (and legally) ally ourselves with PIA. Freenode will continue to operate as a not-for-profit entity under the same management, with the same principles, but PIA's involvement going forwards will provide us with opportunities and resources that we could previously only dream of. PIA will provide an operating budget, mentorship and support that will allow freenode to implement some of the projects and ideas that have previously been on the backburner due to constraints in terms of volunteer time and resources.

Why? What is the incentive for PIA?

Private Internet Access is committed to bringing the internet back to its original state, where being online meant being in your own private world, exploring, learning and creating. PIA is serious about supporting organisations and individuals that it considers to be in alignment with its mission and freenode is one such project.

The founders of PIA feel that freenode has helped a number of open source projects progress, that freenode helps the community produce the pieces that make the internet work smoothly, piece by piece, and that it empowers people.

For PIA, this is about giving back, giving back to freenode and to the communities that they consider vital to their success and to their mission.

The freenode project would be nothing without its communities. All of our volunteers come from projects that use freenode, projects we are passionate about and projects we want to see continue to succeed.

As part of the PIA family, we can guarantee that the freenode project will continue to operate and that we will have the support and resources to further improve the services that we offer to FOSS communities and others, doing our bit to ensure that you can all continue doing what you do best—making the internet and the world a better place.

What next?

There will be few noticeable changes in terms of day-to-day operations, the freenode project will continue to operate with much the same structure and volunteer base as it does now. We anticipate that group registration will become a quicker process and we look forward to implementing and announcing new features in the future.

On a personal level, I have joined PIA as a full-time employee and I will be holding a dual role. I will continue to head up the freenode project and you will no doubt see and hear more of me as my availability and involvement increases. Some of you might also find yourselves dealing with me in my new role as Director of Sponsorship and Events at Private Internet Access, where I will be heading up the work we undertake to support organisations, campaigns and events globally.

This means that you may bump into me at various conferences throughout the year, and if you do, please do come have a chat—whether about PIA, freenode or the weather!

On the subject of conferences, I am also extremely happy to announce that freenode #live will be taking place at At-Bristol in Bristol, UK on 28-29th October 2017. We will shortly be making a separate announcement as we open up registration and call for papers and I look forward to seeing you there.

Please do not hesitate to drop me a line (/msg christel) on IRC if you have any questions.

Do keep an eye out for more exciting news!

by christel at April 12, 2017 08:03 PM

April 03, 2017

erry's blog

Experimenting with App::Spec

I recently attended a tech meeting of London Perl Mongers (strongly recommended if you happen to be a Perl developer by the way). Amongst other things, I was introduced to App::Spec. App::Spec is a tool that allows you to specify your program’s commands, parameters, options, the values they can take, etc. with through a yaml file. Not only that, but it can also generate a bash file that provides tab-completion, which is clearly the most important thing in the world.

(If you’re interested in the tiny app I wrote for the blog post, the full code is at

To get started, you need App::AppSpec (confusingly), which provides the commandline tool, appspec. Once you have it, ‘man appspec’ is a good companion on how to use it, but the most basic thing, creating a skeleton app, can be done with just:

appspec new --class App::Converter --name

(Obviously replace your classname and script name).

This will generate everything you need to get started:

$ tree
├── bin
│   └──
├── lib
│   └── App
│       └──
└── share

4 directories, 3 files

Let’s create a basic unit converter, that converts between centimetres, metres, and kilometres (Those who prefer imperial measures are free to modify as required :P)

What I want to do in the end is to be able to do

perl -Ilib ./bin/ convert --from km --to cm 100

To convert 100 km to cm, for example.

After experimenting, I have modified the YAML (share/ file thusly:

appspec: { version: '0.001' }
class: App::Converter
title: 'app title'
description: 'app description'

  summary: Convert
  op: convert
    name: "from"
    type: "string"
    summary: "Unit to convert from (cm, m, km)"
    required: true
      - cm
      - m
      - km 
    completion: true
    name: "to"
    type: "string"
    summary: "Unit to convert to (cm m, km)"
    required: true
      - cm
      - m
      - km
    completion: true
    name: amount
    summary: The amount to convert
    required: true
    type: integer

The ‘subcommand’ is what gives my program the ability to do ./bin/ convert. Right now, my program does only one thing, but I could add more ‘subcommands’ in the future.

The options and parameters are pretty self-explanatory, other than the ‘values’ part. I couldn’t find out what goes in those values, so after looking at the examples and applying a healthy dose of RTFS it turns out they can be ‘op’ (which will call a function with the same name in your module to retrieve an arrayref of parameters/options), ‘ enum’ (which requires an array of possible values in the yaml file), and ‘mapping’ which takes key/value pairs of options.

In this case, I just used enums, which is the simplest option.

When I run ./bin/ now, it will automatically require the specific options and values. For example, if I run without an amount, it will exit with the following:

Usage:  convert <amount> [options]

amount * The amount to convert

--from * Unit to convert from (cm, m, km)
--help -h Show command help (flag)
--to * Unit to convert to (cm, m, km)
Error: parameter 'amount': missing
An example of error messages output after running the script with incorrect parameters.

It also provides pretty colours!


Now that my spec is ready, it’s time to write my actual program.

Not much to mention here, really. The only things to keep in mind is that it needs to subclass ‘App::Spec::Run::Cmd’. Then, everything that has an ‘op’ in the yaml file (for example  my ‘convert’ operation has an op of ‘convert’) needs to have a subroutine with the same name in the module. Finally, it will be passed ($self, $run), where $run (An App::Spec::Run object) can be used to retrieve ->options and ->parameters amongst other things.


package App::Converter;
use strict;
use warnings;
use feature qw/ say /;
use base 'App::Spec::Run::Cmd';

sub convert {
  my ($self, $run) = @_;
  my $options = $run-&gt;options;
  my $parameters = $run-&gt;parameters;

  my $to = $options-&gt;{to};
  my $from = $options-&gt;{from};

  my $amount = $parameters-&gt;{amount};

  my $multiply = 1;

  # Convert to CM first

  if ($from eq 'm') {
   $multiply = 100;
  } elsif ($from eq 'km') {
   $multiply = 1000000;

  my $cm = $amount * $multiply;

  $multiply = 1;

  if ($to eq 'm') {
   $multiply = 1/100;
  } elsif ($to eq 'km') {
   $multiply = 1/1000000;

  my $answer = $cm * $multiply;

  say $answer;


(Kind of a dumb programme, but it’s just a proof of concept).

As for bin/, I pretty much left it at the default, just made sure the $specfile was pointing to the right file.

Using my script now yields resutls:

perl -Ilib ./bin/  convert --from cm --to m 100
perl -Ilib   ./bin/  convert --from m --to km 100
perl -Ilib  ./bin/  convert --from km --to cm 100

And finally, we can get to bash completion! App::AppSpec can be used to generate a completion script:

$ appspec completion share/ --bash  > # Ignore the errors..

Then you can do :


And now your ./bin/ will have auto completion!

$ export PERL5LIB=$PERL5LIB:/home/errietta/App-Converter/lib
$ chmod +x bin/

./bin/ <TAB>
convert -- Convert 
help -- Show command help 

./bin/ convert --<TAB>
--from -- Unit to convert from (cm, m, km) 
--help -- Show command help 
--to -- Unit to convert to (cm, m, km)

In closing, App::Spec makes it easy to define your script’s parameters and options with a yaml file, plus provides some goodies like auto-completion. It’s certainly something I want to look into more; however be warned that it does have ‘Experimental’ written all over it :P


If you’re interested in the tiny app I wrote for the blog post, the full code is at

by Errietta Kostala at April 03, 2017 04:09 PM

February 17, 2017

freenode staffblog

Django AMA

Start thinking of tricky questions! Once again the freenode community team is pleased to announce another Ask Me Anything (AMA). This time Django will be our guest. Read more about them in the blog post published last week.

This is your chance to ask Django all your questions about them: How do they utilize freenode? How can you contribute? And just who are these Django Girls we've heard so much about? Anything that you would be interested in learning about them, here's your opportunity!

The AMA is scheduled to take place on Wed Feb 22 18:00:00 UTC, 2017, so grab your calendar and make sure you don't miss it. You can watch the AMA in #freenode-ama and participate by asking questions in #freenode-ama-questions during the session. In the meantime be sure to visit their channel, #django, and get a head start on everyone else!

We hope to hold more Ask Me Anything sessions in the future. If this is something your project would be interested in, please reach out to us in #freenode-community or at [email protected].

by Swant at February 17, 2017 05:55 PM

February 08, 2017

freenode staffblog

Django and freenode

For nearly twelve years, the Django Project has endeavoured to improve "the web framework for perfectionists with deadlines." Django is a high-level Python Web framework that encourage rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. Of course, it's free and open source.

I’m contracted full-time by the Django Software Foundation as a fellow, to manage some of the administrative and community management tasks of the Django project to support rapid development of Django itself. The fellowship program has a major positive impact on how Django is developed and maintained, and I’d encourage any large open source project to consider a similar program.

The Django community is vibrant across the globe, with many annual conferences and local meetups. Sprints are often held at these events, but Django’s development is mainly coordinated remotely, so good communication tools are important to us.

How Django uses freenode

Our community support channels include #django and the django-users mailing list. Discussions about the development of Django itself are held in #django-dev and the django-developers mailing list. #django-sprint provides a chat for sprint participants, including those who want to join remotely. Finally, private discussions of the Django team are held in the #django-core channel.

To keep our community safe and welcoming, Django's Code of Conduct applies to all spaces managed by the Django project or Django Software Foundation (DSF). This includes IRC, the mailing lists, the issue tracker, DSF events, and any other forums created by the project team which the community uses for communication.

What's next for Django?

We're currently working toward releasing Django 1.11, our next long-term support release, in April. This will be the last version of Django to support Python 2.7. Meanwhile, Django's master development branch is targeting Django 2.0 and will support Python 3 only. More details are available on our roadmap.

If you’re interested in learning more about Django, try our tutorial. If you’re already a Django user and want to start contributing, our documentation is extensive, including advice for new contributors.

by Tim Graham (timograham) at February 08, 2017 07:00 PM

January 21, 2017

freenode staffblog

Fedora AMA

The freenode Community Team is pleased to announce a new opportunity to learn about one of our many groups on freenode. Justin W. Flory (jflory7) from the Fedora project has agreed to follow-up on his recent blog post with an "Ask Me Anything" (AMA) session.

For those of you who might not be familiar with an AMA, as its name suggests, it is an opportunity for you to ask the Fedora project all of those questions that you have been wondering. You can ask about the project itself, how they utilize freenode, ways to start contributing, or any other topics you might be interested in learning more about.

The session is scheduled to take place on Wed Jan 25 18:00:00 UTC 2017. You can watch the AMA in #freenode-ama and participate by asking questions in #freenode-ama-questions during the session.

We hope to hold more Ask Me Anything sessions in the future. If this is something your project would be interested in, please reach out to us in #freenode-community or at [email protected].

by Nathan Handler (nhandler) at January 21, 2017 03:24 PM

January 07, 2017

erry's blog

Debugging with the JavaScript debugger

The Javascript debugger is a great tool for seeing how an application or page behaves or solving a problem when it’s not behaving the right way – without consoie.log all over the place. In this article we will have a look at how it is used.

Let’s have a look at how you would use the JS debugger to understand how a page works (maybe you’re not the one who wrote it, but needs to debug it!)

Here’s the following page:

A page with a header saying 'hello world', a text input field, and a button that changes the header text to the value of the text field when pressed.

JS debugging – main application frontend

This page is very simple: you just type a value in the text field and click on ‘change header’ and the text in the header changes to whatever you typed in your text box. Let’s use the JS debugger to examine how it actually works.

First of all, let’s bring up the JS debugger. This can be done simply by bringing up the chrome developer tools (ctrl+shift+I, or right click the page and click ‘inspect element’), and then clicking ‘sources’. You now need to find the javascript file that is being used, which for our case is test.js, and click on it.

The JS debugger

The JS debugger

Yes, it’s a very dumb script and we’re re-inventing the wheel with ‘$_’, but that’s not the point here. Let’s have a look instead at what the various things in the debugger do.

A trained eye will of course be able to understand what’s going on by just reading the script, but let’s pretend that it’s not so easy because we’re dealing with a much bigger, much more complicated page.

Spotting event listeners


Obviously, we know that the text changes when we press the button, so the first thing I would do is to look for event listeners. If you look at the Chrome console, there is a ‘global listener’s section on the right hand side. Ok, so we don’t see our click listener yet, but there’s the listener for ‘load’.

If you click the ‘Window’ under the ‘load’, you get the option to remove the listener, and also some information about the event:

JS debugger - event lsteners

JS debugger – event lsteners

The easiest way to understand what the event does is to right click on ‘handler’ , and click ‘show function definition’. The JS debugger will then scroll to the part of the script where the event listener is, and highlight, of course, our window.addEventListener(‘load’, function() { .. }) code, indicating that that’s the function we want to look at.

Another way to easily spot event listeners is adding a breakpoint on specific types of listeners, which means that the javascript execution will stop when one of those listeners is triggered. Let’s try that out!

In ‘event listener breakpoints’, you can scroll down to ‘mouse’ and click (heh) ‘click’

Event breakpoints

Event breakpoints

Then as soon as you click the button on the page, you will see that the javascript execution is paused, and your debugger will highlight the ‘changeme()’ function in blue, hinting that execution has stopped at that point. This means that that function is being called when the button is clicked – and you now know how the button works and what the function does! (the ‘paused on a “click” event listener’ on the right explains why it stopped to make things less confusing as well)

Breakpoint triggered

Breakpoint triggered

I’ll get to how to take advantage of breakpoints shortly, but first I want to get to a few more ways of adding breakpoints.

Adding break points

So you can trap certain kinds of events, and you’ve probably noticed the ‘pause’ icon on the top right which will just make your code stop when you catch an exception, but what other ways of adding break points have we got?

You can make your javascript code stop at any one line by simply clicking on that line in the debugger (you can remove it the same way if you don’t need it later):

I've clicked on line 7 so the debugger will stop on line 7

I’ve clicked on line 7 so the debugger will stop on line 7

You can do the same by just adding the line ‘debugger;’ anywhere in your code, which I find more convenient some times:

Adding 'debugger' adds a breakpoint.

Adding ‘debugger’ adds a breakpoint.

Taking advantage of breakpoints

Ok, so we can add breakpoints, but they’re not much use if we don’t know what to do with them. So what’s the big deal with them?

First of all, you can see the value of any part of an expression by highlighting it. For example you can highlight “$_(‘header’)” and see that it has resolved to an element. You can also right click the selected text and click ‘evaluate in console’ to immediatelly run the same expression in the JS console and see its result.

Highlighting values in the debugger

Highlighting values in the debugger

Once you’ve stopped at a break point, you can also break again at the next statement, tracing code statement-by-statement, which is really handy. Let’s look at these buttons:

Debugger buttons

Debugger buttons

The second and third buttons (‘step over next function call’ and ‘step into next function call’) are what we use to achieve this. Let’s look at their differences.

First of all, the two buttons do the exact same thing if the statement doesn’t call a function: they just evaluate the statement and pause. But in this case, we’re calling the $_ function. If we click the ‘step into next function call’ we’ll see that the debugger will stop ‘inside’ the $_ function and let us debug that function in the same way:

Stepping into a function

Stepping into a function

As you can see here we’re now inside the $_ function. We can see the arguments it was called with, and we can use the debugger inside that function the same way. If we keep clicking ‘step into next function’, we’ll eventually go back to changeme() when the function call has finished:

back to the original function

back to the original function

This is a really handy way of tracing what a script does step by step!

If you don’t care what the $_ function does, you could have instead clicked the ‘step over next function call’ button. This will go to the next step in ‘changeme’ immediately, without getting you inside of $_.


So now our ‘header’ and ‘text’ variables have been set values. You can see in ‘scope’ in the right hand side, all the local and global variables will be listed. This is a very handy way of seeing what the value of a variable is! What’s more you can right click them and click “store as global variable”. This will set them as a global variable and show you that variable in the console (usually temp1, temp2, etc.) and you can then do whatever you want to that variable in your console, which is very useful for debugging

Variable fun!

Finally, once you’re done debugging you can click the blue arrow button blue arrow button to continue execution (until another breakpoint is reached) or this button  button to disable any other breakpoints.

That should cover the basics of the JS debugger, but there are more things you can do such as break at specific AJAX requests (XHR breakpoints), or right click an element in the DOM inspector to add a breakpoint when one of its attributes change (which I can’t seem to get to work for some reason), when it gets deleted, or when its children tree changes.

As per usual, let me know if this was helpful, if you have any questions, or if you want me to post more often :P

by Errietta Kostala at January 07, 2017 04:25 PM

January 03, 2017

freenode staffblog

New Year, New freenode

Well, not entirely new but we are about to embark upon a spot of maintenance and some minor upgrades that could cause some disruption on the freenode network as servers are being brought down for maintenance, etc.

We would like to apologise in advance and further updates will be provided by way of global notices and wallops, depending on what we deem necessary for the interventions concerned.

Thank you for your patience and understanding while we carry out the maintenance and thank you for using freenode!

by christel at January 03, 2017 11:33 AM

December 31, 2016

freenode staffblog

Happy New Year!

Another year comes to an end: 2016, a year many will be glad to see the back of. For many the year has been dominated by uncertainty, by fear, and by sadness—a year dominated, in no small part, by the political shift on both sides of the Atlantic.

And a year dominated by death. We have looked on in surprise as icon after icon has passed away throughout the course of the year. We have looked on in sadness as masses of people have succumbed to terror and war. We have looked on as people try to flee, in search of a better life, often not succeeding. And as a project based in the UK we look on as the government tries to do its best to put an end to our digital rights, to our privacy.

Some years ago, freenode experienced a sudden influx of Arabic-speaking users. They came out of nowhere and there were lots of them. Their arrival caused some distress to the existing communities on the network at the time; freenode predominantly caters to free and open source software developers and users and we were all somewhat perplexed when our network was overrun by teenagers wanting to chat about girls and football. They all seemed to be connecting from Syria.

When Aleppo comes up in the news, many of us find ourselves thinking about those kids and what happened to them. One of our volunteers invested a fair amount of time trying to figure out where they ended up. When discussing it recently, he shared his experience:

“After a few weeks of surreal crazy chaos we worked out that they were using a Java IRC client - and internet café PCs - to connect to our system. They didn't know what it was for or why it existed but they'd found real-time online communication for the first time and were enjoying the shit out of it.

I first used IRC in the 90s when an IRC client was given to me by a friend not very long after it was the medium for some of the first ever real-time citizen journalism during the 1991 Gulf War. In much the same way that someone threw some software at me in a computing lab in Oxford and showed me how to use it to chat, these kids were sharing and collaborating in the streets and using new tools to talk to the guy a computer or a block or a neighbourhood over with equal ease.

While we tried to shepherd a group of unruly teenagers into a corner where they would cause less trouble for everyone else, I got to know a couple of the better English-speakers quite well; they seemed mostly to be basically decent kids growing up much too quickly and experiencing my corner of the internet for the first time. They were mostly in Aleppo.

As the Arab Spring progressed they grew in number and it was genuinely cool watching them discover and explore. But as spring turned to summer and then autumn, they gradually dropped in number and started to vanish. After a while I realised they'd mostly gone, and I tried to track some of the stragglers down to find out what had happened to the ringleader or any of the kids I'd gotten to know.

The ringleader had been killed in shellfire, was the answer. I found his blog. It had been silent for a couple of months. Eventually it fell off the internet when the account was suspended.

When a year later they all seemed to have gone I made more of an effort to do some digital anthropology and figure out just what had happened to them in more depth. I talked to a Lebanese peer who ran some adult Arabic language discussion spaces and he speculated that by that point hey had all died or fled and crossed the border into other countries.”

As we reflect on the sobering condition of the world around us, it would be easy to forget about the positives.

We have the privilege of seeing thousands of people work on thousands of projects they love, and it's humbling and exciting to be allowed to play a small part in each of them. We're extremely grateful for that: we love learning about your projects; we love learning about the different ways in which people communicate and collaborate; we love learning about what you produce and why.

We have exceptionally generous sponsors who not only provide us with hardware and bandwidth but also with their continued time and expertise when required.

Thanks to one such sponsor we have also secured the majority of the requisite funding to put on a two-day live conference which will take place in the UK in August 2017. Further details and a formal announcement will follow early in the New Year. We are incredibly excited and hope that you will join us; we'd love for your project to exhibit or perhaps you could give a talk? Keep an eye out for our announcement!

With that, we would like to thank you all for using freenode and wish you the very best for 2017!

by christel at December 31, 2016 09:46 AM

December 21, 2016

freenode staffblog

Celebrating Fedora 25 with freenode

Celebrating Fedora 25 with freenode

On November 22nd, 2016, the Fedora Project released Fedora 25, the latest and greatest version of our Linux-based operating system. For over thirteen years, the Fedora community has worked to bring the leading edge of open source development to the world. Fedora's focus is guided by its Four Foundations: Freedom, Friends, Features, First. Freedom is representative of Fedora's commitment to championing free and open source software and contributing back to upstream projects for the benefit of the open source community. Features stands for Fedora's commitment to driving some of the newest features First. Some of these examples include the Wayland display server, systemd, and GNOME 3. Perhaps most importantly, Friends are for the friendships made by contributors from around the world who help make every release of Fedora possible. Part of why Friends is an important part of the Four Foundations is communication. Fedora community members come from all over the planet, including six out of seven continents. The tools we use to communicate help us collaborate, solve problems, and build friendships. IRC and freenode are an important part of how we communicate. Fedora registered our first channel on freenode on December 29, 2002. As we celebrate thirteen years of open source collaboration and the newest release of Fedora 25, the Fedora community wanted to reflect on our longstanding relationship with freenode.

How Fedora uses freenode

As a large open source project, there are many different teams and sub-projects in Fedora that help move us toward a new release. Just like there are many parts to a car's engine, there are many parts to Fedora's engine. Some of these groups are officially recognized sub-projects like the Design team, Community Operations, or Docs team. Other times, they are informal Special Interest Groups (SIGs) that bring contributors together to focus on specific topics like programming languages or desktop environments, like the Python SIG or KDE SIG. Usually, each of these groups or teams will have their own IRC channel to coordinate in. The Design team uses #fedora-design, the Python SIG uses #fedora-python… and so on. In total, Fedora has over 175 registered channels to its name. Frequently, teams will hold public meetings in the freenode channels to work through tickets, plan ahead on upcoming tasks, or discuss important topics for their team. There are a series of special meeting channels used for this purpose. Using the MeetBot plugin, Fedora uses our own zodbot to help run meetings, mark up links or important ideas, and create a pretty HTML summary at the end of the meeting. All of these summaries and full logs are found at

Tips to using IRC effectively

There are countless different workflows, IRC clients, and handy plugins available to customize the IRC experience. In the spirit of the Friends Foundation and the Code of Conduct, Fedora contributors are encouraged to always be excellent to one another. It's important to follow good manners in any IRC channel, Fedora or any other. Having good manners in IRC are as important as it is in real life. Be courteous to others, and if in doubt, it's good to assume the best intentions by others. IRC is important for Fedora, and many contributors have put together guides of our own as well. You can read more tips from the Fedora team in our IRC Beginner's Guide on the Fedora Magazine.

What's next for Fedora?

As 2016 comes to an end, we're wrapping up on our own new release of Fedora 25. The Fedora community is looking forward to helping drive open source innovation and contributing to the Linux community for many years to come. Fedora currently has more than 2,000 contributors, and in the tenth percentile of active contributors, 65% of them are from the community (State of Fedora, Flock 2016). The Fedora steam engine is chugging ahead, and we're excited to see where it takes us next. We're happy to be able to have shared past, current, and future milestones together with the freenode community. Keep an eye out for Fedora Ambassadors in Europe during DevConf and FOSDEM. You can also find us in North America at BrickHack 2017. And there will be more events all through the year you can keep an eye out for us at!

by Justin W. Flory (jflory7) at December 21, 2016 05:00 PM

December 20, 2016

freenode staffblog

A brief security update from the infrastructure team

A freenode volunteer has identified and responded to a suspected compromise of their e-mail accounts, which could have provided an unauthorised user with limited access to some data sent via internal e-mail systems (this could include support tickets or internal communications).

Naturally, we instigated audit procedures immediately so as to ensure the security of the production network and accompanying infrastructure. The investigation is ongoing, but at this time we have no reason to believe that any other unauthorised access was gained. Nevertheless, in the interests of transparency and security for our users, we wish to notify anyone who may have been affected.

As always, we would still recommend that you ensure that you change any passwords to freenode systems, and be alert to any suspicious activity on your account. We would additionally always recommend that you not share passwords between accounts, especially those spanning multiple providers (please ensure you have a registered e-mail address before changing your password so that it can be reset!).

We will provide further updates if it becomes appropriate to do so; please rest assured that we take the security and privacy of our users very seriously, and work with industry experts and law enforcement where appropriate to investigate and respond to possible security breaches.

by christel at December 20, 2016 05:30 AM

November 30, 2016

Pricey's blog

London Midland summarised in a single tweet

by Joseph Price ([email protected]) at November 30, 2016 01:38 PM

October 23, 2016

Pricey's blog

Should I hand over my account & card details?

While logging in to online banking...

Who can spot a sign I'm being phished?

(Other than being asked to enter the details we're told never to give out... complete account number/sort code, front & back card details etc.)

by Joseph Price ([email protected]) at October 23, 2016 05:27 PM

October 18, 2016

freenode staffblog

freenode Community Team


You might not be aware that freenode has a dedicated community team and that we would be delighted to help your projects get the most from freenode. The freenode community team consists of christel, edk, JonathanD, mquin, Myrtti, nhandler, Swant and tomaw, and we would love to help you spread the word about releases and launches, conferences or events and any other project milestones that may be of interest to our shared communities. We are happy to make announcements on IRC, reshare your social media posts and we would love for you to guest author or co-author a blog post for the freenode website.

If you think this is something that would be useful for your project, please do not hesitate to get in touch with us! You can find us in #freenode-community or drop us a line to [email protected].

Make sure not to miss any interesting news by setting /umode +w (or /mode yournick +w).

by Swant at October 18, 2016 08:34 PM

October 11, 2016

erry's blog

Angular 2: Property binding, event binding, headaches


I have been looking at Angular 2 lately. After being disappointed with the tutorials online, I decided to write my own cookbook on property and event binding.

Property binding

Assuming we want to pass myProp from my-parent to my-child, we need the following.

1) In my-parent template:

<my-child [myProp]="prop" />

Note that in this case “prop” is interpreted meaning it will refer to “this.prop” in your parent template. If you want to have a string you can instead use [myProp]="'prop'"

2)  In the child:

2.1) The child controller

You need to declare the property, and that you are inputting it from the parent.

import { Component, EventEmitter, Input, OnInit } from '@angular/core';

  selector: 'my-child',    
  templateUrl: './myChild.component.html',
  styleUrls: []
export class myChildComponent implements OnInit {
  // Declare the property as an input
  @Input() myProp: number;
  constructor() {     
    //note; myProp will not yet be defined here..    
  ngOnInit() {
    console.log(this.myProp); // will be defined here!

The Input module is needed to specify that myProp is an input, coming from the parent.

The ngOnInit() is not needed, but it’s important to make this point: the value will not be set until ngOnInit() is called, which of course is when the component is ready


2.2) The child template:
Of course, you can just use myProp in the template, just like any other variable.

Hello! {{ myProp }}

And that’s it! The property should now be bound to the child!

Event binding

Catch the child’s events from the parent


Let’s change our template code from before:

<my-child [myProp]="prop" (onPropChange)="onPropChange($event)"</strong> />

onPropChange is the name of the event we’re listening to, of course, and the value is the function that is called.

Then we can add the following in our parent component:

import { Component, Input, EventEmitter } from '@angular/core';
export class myParentCompnent {
  onPropChange(prop) {    
    console.log("changed value", prop);   

We need EventEmitter here, and we’ve defined our onPropChange function.

Now in our child, we need to trigger the event somehow.

The JS:

import { Component, Input, EventEmitter, Output } from '@angular/core';

export class myChildComponent implements OnInit {    
   prop: number = 0;
   @Output() onPropChange = new EventEmitter();
   triggerChange(prop) {

A few things to mention here

  1. Both EventEmitter and Output are needed. EventEmitter, is of course needed to send the event, and Output declares that the component “outputs” the specified property
  2. We declare our change event as an EventEmitter and as an Output. See the <number> by EventEmitter? This specifies that the value we’re sending is a number!
  3. the emit() call near the end is how the event is emitted.


Finally, we make a button that’s clicked to trigger the event:

<button (click)="triggerChange(++prop)">Click!</button>

This should demonstrate both how our custom event works and how the built-in click event works at once.

Note that we can call the this.onPropChange.emit() code when we need to send the event; it doesn’t have to be on click. I just used that because it’s a convenient example!

Anyway, now when you click on the button, the parent’s code should be called that will ‘log’ the result.

Two-way binding


Angular 1 had ng-model, and Angular2 still has ngModal, which can be used for two-way binding.

The module

First of all, ngModal isn’t enabled by default, so you need to enable it like so:

In your app module, add the following:

import { FormsModule } from '@angular/forms';

The template

When you want to bind two-ways with one of your properties in your template, you use [(ngModel)] =..


For example, if your controller had the following:

import { Component } from '@angular/core';
export class myCoolComponent implements OnInit {
   prop: number = 0;

You can easily bind to the “prop” property:

<input type="text" [(ngModel)]="prop" />


That’s actually all you need! Now, this.prop will change in your controller code if you change the input value and vise-versa.

by Errietta Kostala at October 11, 2016 05:59 PM

September 18, 2016

freenode staffblog

Resurrecting Tor, continued

Following an embarrassingly long period of no Tor support, we recently blogged about resurrecting Tor.

As of today, Tor users can once more connect to freenode over Tor; the hidden service address is


The hidden service requires SASL authentication, as before. In addition, due to the abuse that led Tor access to be disabled in the first place, we have unfortunately had to add another couple of restrictions:

  • You must log in using SASL's EXTERNAL or ECDSA-NIST256P-CHALLENGE (more below)
  • If you log out while connected via Tor, you will not be able to log in without reconnecting.

If you haven't set up the requisite SASL authentication, we recommend SASL EXTERNAL. You'll need to generate a client certificate:

openssl req -x509 -sha256 -new -newkey rsa:4096 -days 1000 -nodes -out freenode.pem -keyout freenode.pem

and consult your IRC client's documentation to find out how to use it to connect. Connect to freenode over TLS on the plain Internet and /msg NickServ CERT ADD to authorise it to your account.

You'll then want to tell your client to try the EXTERNAL mechanism. We lack comprehensive documentation for this, but it's a feature in most modern clients—check their docs for instructions for now.

It's currently not possible to register an account for use with Tor without connecting at least once over the Internet. We're investigating our options, and would like to provide a solution to this in the future.

by christel at September 18, 2016 07:18 PM

September 05, 2016

freenode staffblog

Resurrecting tor-sasl

As many of you will no doubt be aware, freenode used to run a Tor hidden service, providing anonymous access to the network. Unfortunately, this had to be disabled due to concerns about abuse.

We regret that it has taken some time to resolve this issue but we are now almost ready to deploy some software updates that will allow us to re-enable the gateway. We've made one important change: password-based SASL authentication is disabled over the Tor gateway, so you'll need to generate a client certificate and add its fingerprint (/msg NickServ CERT ADD) over a regular connection before connecting.

We'd appreciate your help testing this setup on our testnet. Further instructions can be found in #freenode there. (if you already have a certificate set, the hidden service is at ircs://testnet67chdulhs.onion:6697)

Expect the occasional interruption—even if nothing exciting happens, we still have a few configuration things to take care of. The test network may be reset, rolled back, or shut down at any time.

Thanks for your patience, and thank you in advance for helping to bring Tor access back as fast as possible!

by edk at September 05, 2016 03:09 PM

August 30, 2016

mquin's blog

A small wireless sensor network

Back in the dim and distant I wrote about collecting electricity consumption data. In the intervening time and due to some hardware changes and failures I had stopped doing this.

Recently, Graeme Thomson gave a talk at ScotLUG about the system he is using to monitor temperatures around his house, using a 1-wire sensor network. Inspired by this, I decided to revisit my monitoring efforts.

Graeme's system took advantage of the fact that his house had recently been rewired and at that time he had laid in a number of twisted pair drops into each room, which could easily be patched onto his 1-wire bus.

Not wanting to run more cable around my own flat I decided to look at the possibility of doing the same thing wirelessly, and I remembered, from my Arduino tinkering, about the JeeNode project.

JeeNodes are compact, low-power Arduino-compatible AVR microcontroller boards with onboard wireless modules. They are very versatile and ideal as a basis for all sorts of wireless sensor nodes. They are also relatively inexpensive, particularly when purchased in kit form.

After a bit of tinkering around I settled on a sensor node design consisting of a JeeNode with an AA battery based power supply, and a DS18B20 digital temperature sensor.

Assembled sensor node

I now have four of these scattered around the flat, running a simple sketch that takes a sample from the temperature sensor every minute or so and transmits it back to my central server. The 878Mhz radio system seems to comfortably cover the entire building.

Using one JeeNode per sensor is not the cheapest way of doing this, but saves me pulling cable and leaves me with a lot of flexibility should I wish to expand this system or monitor additional parameters in future.

The end result: pretty graphs, and a better understanding of how the temperature in my flat changes over time.

24 hour temperature graph

Ideas that I have for the future include replacing the node near my server with a Arduino Nano, rather than using wireless to span half a metre, and reuse the JeeNode in another room.

August 30, 2016 11:30 PM

August 06, 2016

freenode staffblog

Happy Birthday to the World Wide Web

25 years ago—On the 6'th of August 1991—the world's first website went live, and it's still there.

In other words, the world wide web is celebrating silver jubilee today.

Imagine where we would've been without it. Would your project exist? Would freenode exist?

On behalf of freenode, I'd like to give all our sponsors a big shoutout, for making freenode possible—read more about who they are on our acknowledgements page.

And lastly we would like to thank you, the people that use freenode, the people who use freenode for your projects, the people that contribute to keeping the internet full of Free and Open Source Software. You are a part of what took the internet this far and a part of what keep it, and a lot of other tech related things, evolving.

Stay with us, it's freenode's porcelain jubilee this year, keep chatting, keep the internet open.

by Swant at August 06, 2016 10:06 PM

July 18, 2016

freenode staffblog

A Reminder

Hi all,

In the distant past, freenode fairly frequently sent /wallops about news of conferences, releases or anything else that might be of interest to the FOSS community. We'd quite like to do more of that, so… if you know of anything that might fit the bill, please drop the community team a line at [email protected] or message me (my nickname is e) on IRC (even if the project in question isn't (yet) registered with freenode).

We'd also like to feature a bit more FOSS news on our blog, so if you're itching to write a guest post for us, I'd love to hear about that as well.

Thanks for using freenode! :)

by edk at July 18, 2016 10:06 PM

July 04, 2016

freenode staffblog

Help protect net neutrality in the EU

As many of you no doubt know, the European Union passed legislation last year intended to protect net neutrality. However, it contained significant loopholes which many people believe will allow European ISPs to prioritise paying partners' traffic. Among other things, this is potentially quite scary for FOSS projects—most of which don't have the kind of funding necessary to enter into such arrangements.

If this is something that concerns you, campaigns aimed at convincing BEREC to close the loopholes are running at and

by edk at July 04, 2016 02:58 PM

June 07, 2016

Pricey's blog

.uk domain transfers are scary

.uk transfers are a little different:
  • You instruct your old registrar to change the "IPS tag" to point the domain to your new registrar.
  • You tell your new registrar that the domain just assigned to them is yours.
The new registrar then dutifully updates all of Nominet's records. Even if the name... email... address... you provided them with bears no relation to the existing (private?) registration information. Who cares if you had 2 factor authentication enabled on the original Nominet account, your domain is gone.

Nominet says the onus is on the registrar to ensure they verify you're the owner when going through this process. But they don't?

What's to stop someone scraping whois records (that IPS tag is public) and racing to claim the domains you're transferring before you do?

Apparently nothing. A few weeks ago I ran a little test. I registered a new domain at one registrar and immediately asked they change the IPS tag to another. A coworker watched over my shoulder as I retrieved the whois details for my domain to see the tag change, but then I got distracted looking for cake/looking over their shoulder. They set up a new account at the second registrar and claimed the domain, using no secret information and without either registrar or Nominet gaining my consent.

What am I missing? Do some registrars I haven't tried put effort into verifying your ownership? Is it just a few bad actors?

UPDATE: One registrar I've contacted has now promised they've updated their systems to email the owner listed by Nominet for confirmation, before handing over the domain. Minor success...

by Joseph Price ([email protected]) at June 07, 2016 03:28 PM

June 04, 2016

freenode staffblog

User-enabled sendpass

As a network, we feel it is hugely important to maintain close relationships with our many communities and users. Our interactions with users in #freenode and elsewhere on the network, fielding support requests and assisting users, help build and maintain these relationships.

But we're constantly looking for things to change and make better, and one of the pieces of feedback we've had is that users would like a little automation - and the ability to be able to resolve some of their own support requests.

We recognise that allowing users to generate their own password reset e-mails brings us in line with other registration systems online and may provide a higher quality of service.

So for now, if you are having difficulties accessing your account, you can generate your own password reset e-mail using the following command:

/msg NickServ SENDPASS <account>

This command will only work with an offline account (i.e. it won't work if a client is logged into your account via NickServ), and should obviously only be used on an account that you believe is yours.

We will be keeping an eye on how this feature is used, and may retain it permanently if it proves to be helpful and non-harmful!

by njan at June 04, 2016 12:48 AM


As many of you will be aware, freenode has been experiencing intermittent instability today, as the network has been under attack. Whilst we have network services back online, the network continues to be a little unreliable and users are continuing to report issues in connecting to the network.

We appreciate the patience of our many wonderful users whilst we continue to work to mitigate the effects this has on the network.

We also greatly appreciate our many sponsors who work with us to help minimise the impact and who are themselves affected by attacks against the network.

We've posted on this subject before, and what we said then remains as true as ever - and for those of you who didn't read the earlier blogpost first time round, it's definitely worth perusing it now if this subject interests or affects you.

Thank you all for your patience as we continue to work to restore normal service!

[UPDATE 04/02/2014]

At the moment SASL authentication works only on PLAINTEXT, not BLOWFISH. We've checked and TOR should be working too. Sadly will be taken off the rotation, so those users who've connected specifically to it, please make sure that your client points to our recommended roundrobin of!

by njan at June 04, 2016 12:48 AM

The New Policies

One of the several problems that's become obvious in recent times is that we  have too many policies, they're often not consistent with each other, and we've spent too much time and effort wondering whether something, which is obviously the right thing to do, fits with our published policy. With that in mind, the following stripped-back set of policies will apply in future, with the intention that we can set out a simple set of baselines and apply common sense on top of them.

Nickname ownership

Nicknames are allocated on a first-come, first-served basis, to the first person who registers the name with NickServ. However, we expect users to act in good faith and reserve the right to remove a nickname registration where we believe that this has not been the case. Nickname and account registrations expire ten weeks after they are last used. For nicknames, 'used' means that you were using the nickname while logged in to the account which owns it. For accounts, 'used' means that you logged in to the account, regardless of the nickname you used to do so. Nicknames which are the primary account name only expire when the entire account is expired. In some cases, such as for very old accounts, we may, at our discretion, extend the expiry time of a nickname or account. We will not normally do this beyond 15 weeks past the last use.

Some nicknames and accounts, including but not limited to some of those owned by current or former network staff, do not expire at all. These accounts can be identified by the 'Hold' flag in their NickServ info output.

Nicknames and accounts which are expired will not automatically be dropped. Please contact network staff if you would like to take over an expired nickname.

Channel ownership

Channels on freenode fall into one of two categories. Primary channels, which begin with a single # character, are reserved for on-topic projects. If you'd like to take over one of these channels, then you'll need to be associated in some way with the project in question. Topical, or 'about' channels, begin with two # characters, and these are allocated on a first-come, first-served basis to the first person who registers it with ChanServ. As with nicknames, however, we reserve the right to remove or alter registrations where we believe they have not been made in good faith.

Primary channels do not expire with inactivity, though they can be claimed at any time by a representative of an on-topic project with the appropriate name. Topical channels expire after 60 days in which no user on the access list for the channel has joined it.

On-topic Use

freenode's primary goal is to encourage and foster the development and use of free and open source software projects and other peer-directed communities producing broadly licensed creative output. Any project falling under this broad description is likely to be considered on-topic for the purposes of primary channel naming and other project services which we may provide, but individual decisions may be made at the discretion of staff.

Off-topic Use

We expect all users of the network, whether affiliated with a project or not, to act in good faith and in accordance with both their local laws and those applicable where freenode operates. Use of freenode and its facilities is a privilege, not a right, and may be withdrawn where we believe that this has not been the case.

by spb at June 04, 2016 12:48 AM

Services database purge

On or around Friday, October 2nd, we shall be cleaning up the services database. This involves the bulk removal of expired nicks, channels and accounts.

Therefore, please remember to identify to services when you connect ( /msg nickserv help identify ) and to use your grouped nicks whilst identified - remember, they all expire separately.

Nicks that are past the expiry threshold of 120 days unidentified on October 2nd will be freed from the database and available for others to register.

If you have a nick grouped to your account that you'd prefer to use as your main nick, you can change your account name - see /msg nickserv help set accountname for information.

Remember you can use sendpass to recover lost passwords - see /msg nickserv help sendpass.

by mrmist at June 04, 2016 12:48 AM