Planet freenode

November 04, 2018

freenode staffblog

freenode #live 2018 is a wrap, thank YOU!

Wow. What an incredible weekend. I want to express my heartfelt thanks to all those who joined us for freenode #live this weekend. Whether you participated in person or tuned into the livestream.

We were fortunate enough to have an exceptionally inspiring and engaging speaker line-up - thank you so much for coming to inspire the community. Thank you also to our supportive sponsors who have enabled us to put this event on again, and of course the freenode volunteer team - both those who detached for a weekend to throw themselves into an entirely different type of volunteering and those who stayed behind to keep the network running and also doubled as livestream monitors, a special thank you to you all for your willingness to adapt and get stuck in. A huge thank you also to the venue staff, and to the AV technicians!

YOU are freenode.

I hope that the several calls to action in various talks will inspire and encourage as we jump from C (communicate, collaborate and create) to E (engage, educate and empower).

I am confident that we will do a more extensive recap when we have started to recover from the weekend, but before I nod off to sleep I want to do a huge shout-out of thanks to those of the freenode #live participants that hailed from underrepresented groups. In a time where the world is oftentimes unjust and outright scary it has been an incredibly inspiring and empowering experience to meet so many of you this weekend. I am under no illusion that there isn't a fight still to be had to ensure full inclusion and equality and I am incredibly happy that you form a growing and significant part of our community.

YOU are freenode also. Thank you.

Lost property?

Towards the end of day two a pair of glasses were found in the theatre and while a few announcements were made no one came forth to claim the glasses. In the event that you lost yours but would prefer to be able to see properly again, please do get in touch with us via e-mail or IRC and we will arrange for the glasses to be returned to you!

by christel at November 04, 2018 10:59 PM

October 01, 2018

freenode staffblog

Did you hear? freenode #live is coming to town!

A little over a month from now, the second freenode #live will take place at We The Curious in Bristol. With talks from many free and open source community leaders such as Leslie Hawthorn, VM Brasseur, Chris Lamb and Bradley Kuhn, freenode #live once again brings an international free software gathering to the South West.

Other exhibitors at this year’s event will be the returning main sponsor, Private Internet Access, as well as the Free Software Foundation, OpenSuSE, Minetest, Linux Journal and the Handshake Project.

Handshake is a new decentralized alternative DNS root, and for a short time before launch freenode users and members of the free and open source community are encouraged to sign up today at and receive free Handshake coins that can be used to purchase domain names when Handshake launches in the near future.

Tickets for the full event start at £15 (approximately USD $20, 18 Euro) but there is a free tier for those wanting to catch the talks and exhibition hall only. Bristol is well connected with Bristol International Airport (BRS) serving many European destinations, and the city is a few hours by train from London and Manchester.

Please note: This guest blog entry has been written by our sponsor Handshake.

by mattl from Handshake at October 01, 2018 04:47 PM

September 24, 2018

freenode staffblog

Spam filtering


As most of you are aware, we've been experiencing significant spam over the past few weeks. As a result, we have decided to roll out a server-side spam filter. Unlike our current spam-mitigating techniques, this system applies to private messages and does not let the first matching line get through.

Various ethical concerns have been raised over the course of introducing this feature. They'll be addressed below. The short version, though, is that the system has various limitations built in designed to prevent operator abuse. Only a tiny bit of information can get out of the filters, and they do not have access to much information themselves, to the extent that we believe the obvious ways to abuse such a feature are impractical.

We've historically been reluctant to take steps like this, and we remain so, but we believe the disruption has reached such a level that this is necessary to allow the communities using freenode to collaborate effectively. The prior complement of anti-spam measures represents our preferred approach, and we intend to employ this only when they prove insufficient to minimize disruption.

For the technically inclined, you can view the changes here.

  • Could this be used to spy on users? Which filter a user matched is not reported to staff, only that one did. This limits the theoretical maximum rate of passive monitoring to one bit per message, far less than the information content of conversations.

    Recipients of private messages are not included in the line that filters match on, so staff cannot use spam filters to see who is talking to whom.

  • Could this be used to shadowban users? No. If a filter blocks a message, its sender is either disconnected from the network or sent an error message.

    Currently, the filter system is configured not to use the nick, username, or hostname for filter matching, so it can't discriminate against particular users at all.

The exact information filters "see" is as follows:

  • The type of message (PRIVMSG/NOTICE)
  • The target of the message, if that target is a channel. For private messages, filters can see that they are PMs but not who their target is.
  • Whether or not the sender is identified (but not their account name)
  • The full contents of the message

The code can be configured to filter on the [email protected] of the sender. We haven't enabled this, and have no current plans to, but this is subject to change should the nature of the spam demand it.

Filtering is always performed on the server originating a message, and inside the ircd process. This system will never cause a message to be distributed more widely than before.

Staff can, as always, answer your questions about this change, and we welcome constructive feedback. Private messages to staff are not subject to filtering.

by edk at September 24, 2018 05:47 PM

September 03, 2018

Deedra's blog

the new talking arch (tarch)

for many reasons that have come up in the last couple days mike and i decided to just fork talking arch. I’d rather not drag frustration and politics into a project I want to help start and we decided that since we want to add quite a few new features to talking arch as well as try and  keep a generic talking arch livecd for those who just want straight talking arch.


And so we’re forking it. we’ve decided to do several things i’ll mention below all of which we think will help those who need a standard talking arch livecd that talks but we want to create a special livecd with several things.


*we want to create 2 sets of livecds 1 which uses fenrir the new screenreader and 1 which uses speakup.

*in the long run we will probably have to move to fenrir but that’s quite a ways off i suspect.

*we want to create a livecd with many admin and rescue tools that  will assist those blind folks who  are system admins who need those features.

*We also want to add support to that same livecd to include other installers  so that say a user who needs a talking livecd but debian isn’t talking,  the user can use that admin type livecd to install debian voidlinux arch you get the idea.


We are greatly looking forward  to getting this project moving and hope that those who may use it will enjoy it. I’ll announce further things as we get things rolling. I suspect however the first step is to bring the generic livecd current so people dont have a livecd that’s a year old or more.


Stay tuned!



by deedra at September 03, 2018 04:12 AM

September 02, 2018

Deedra's blog

thoughts on server hosting and vpss

So last year when i origionally bought I wanted to relearn some of my admin skills part of which was buying and getting a vps to play with. We had seen something of scaleway’s offers they had at one time of  $3/month for a nice little arm server with a decent amount of disk and ram. I was also looking at as well as that’s where chris’s domain has been hosted for many years.


Itried scaleway for a while and hated it too many accessibility problems on their site for 1 thing and many other things i hated about them.  I ended up going with and sticking with prgmr for many reasons the setup  was nice getting  voidlinux set up on it was easy for chris to do. having an out-of-band console via ssh is absolutely wonderful and the support and staff is incredibley wonderful to deal with. So, there is my recommendation so to speak. I have nothing but wonderful things to say about prgmr and well scaleway….the accessibility nightmare of the centurey and other bad things.



by deedra at September 02, 2018 08:24 AM

September 01, 2018

Deedra's blog

my views on marijuana recreational and medical

I’ve used marijunaa for several years now for medical reasons. I have a lot of issues that i’ll write about later but for now let’s say that i have severe chronic pain and vomiting and psych issues i dont think they’ve fully diagnosed. For me marijuana is a needed medication.

Doctors here dont deal with pain meds much any more and dont like giving them out for chronic pain. For me i refuse opiates for many reasons. The biggest of which is i dont like what they do to me plus they make me puke.

So medical marijuana for me it is. It controls the pain and nausia but it’s got the side effect that i’m psychologically adicted to it. What this means is that my body seems to essentially require that the levels be stable. when they’re not it causes my psych issues to spiral which makes me puke… get the idea.

As for recreational marijuana it’s now a thing i could take or leave. it’s a medicine and so essentially it’s no longer fun.

by deedra at September 01, 2018 08:07 AM

fenrir screenreader

I’ve not discussed this screenreader yet as it’s been a while since i’ve had a blog i’ve been happy with.

Fenrir is a user-space screenreader for linux. I love it as i think it’s a good replacement for speak considering speakup has some issues.

In reality all screenreaders have their issues but i prefer fenrir for many reasons. Mainly it’s not built into the kernel and i can use it with an x terminal and get around orca’s terminal bugs..

I think the biggest bug i’ve found in fenrir so far is one that i hope will be fixed before the next release.


by deedra at September 01, 2018 07:59 AM

kittyrats: part2

we have 2 kittyrats and definitly dont want more. JIngles and bastet are like our children for lack of better wording. Jingles is starting to have i guess what i’d call old age issues she gets really bad hairballs that cause her to spew a lot. so off to the vet on the 10th, and maybe we can find out what’s wrong with the jingle kitty.

Bastet on the other hand is a healthy girl but she’s got this weird fear of mike’s guide dog. She kind of freaks out a litle but she’s also getting curious and brave so we’l see what she does.

The kittyrats will have their own wordpress blog soon like me. They’ve got a older blog but it’s time to hear what they have to to say!

by deedra at September 01, 2018 07:56 AM

what’s a kittyrat?

everyone probably wonders by now what’s a kittyrat? chris and i started calling our cats kittyrats when we got jingles. Reason why is because she’s got a super long tail and long body and legs. The term kittyrat stuck because well it’s stupidly cute and fun.:P

We got a roommate a bit ago and now mike calls them kittyrats to!

by deedra at September 01, 2018 07:52 AM

talking arch thoughts and decisions

talking arch was a project created by chris several years ago it provides a way for users to have an easily accessible talking live cd for linux so they can install arch linux and possibley other things. I also know of many who use it as a rescue cd.

When chris stopped using archlinux the project was handed over to someone who took it on and has been maintaining it up till their x8664 machine went boom. Mike and i have decided to take over the project and either a, take it over or b fork it if we can’t take over the project. Decision soon either way because if i dont hear anything by monday i’ll fork.

by deedra at September 01, 2018 07:48 AM


i’ve been freenode staff off and on over the years as things have gone. I’ve been back for a bit over a year give or take and it’s been an interesting experience. Over all it’s been extremely enjoyable however and despite the spam the strange ones and the bad ones so to speak it’s been well worth coming back.

I’ve changed my schedule recently to cover US nights and early sleeping EU hours so hopefully we’ve got a bit more hands to help out when users need to get the help.

by deedra at September 01, 2018 07:44 AM

updates or something

i’ve had multiple blogs in the past and i’ve never really kept up witht hem for multiple reasons. This is one of those blogs where anything goes. I may discuss personal things open sources stuff and such and there will always be kittyrats!

by deedra at September 01, 2018 07:40 AM

August 06, 2018

freenode staffblog

Continued and persistent spambot attack and clarification

As you may be aware there has been a prolonged spambot attack directed at freenode (and other IRC networks) in recent weeks, targeting a number of individuals involved with freenode and the wider IRC communities. The freenode team, and people involved with the wider IRC communities, are working hard to mitigate and reduce the spam that hits your community channels.

The spam content has changed in the last few days and while I am extremely glad that the attacks appear to no longer focus on members of the volunteer team and no longer involve libellous and false statements relating to these volunteers, we feel we should provide some clarification on some of the claims that are being made in the current spamwave relating to freenode and its involvement in Handshake.

The current spambot attacks state that freenode is involved with an 'ICO scam' relating to the Handshake project. Most freenode volunteers have involvement with one or several FOSS projects, often projects that use the freenode network as part of their communications toolbox. Handshake is no different in this regard, as it is a project that I have been involved with. I am deeply sorry to those affected by the spam, to freenode and to Handshake that spammers have chosen to use my involvement as a further platform to attack the freenode communities, and now also Handshake.

Prior to announcement, the Handshake project raised USD 10.2 million in funding from project supporters and the project made the decision to not only give a substantial amount of its coin supply to people and projects within the FOSS sphere but to also donate the USD 10.2 million (FIAT) to projects whose work the initial project contributors admire and/or rely upon. Like many projects within the FOSS world, Handshake has extensively used other free and open source software to build its codebase, and FOSS also lies at the foundations of the internet architecture that we rely upon day to day.

One of the projects Handshake identified as useful is indeed also freenode, which is on the pledgee list to receive a FIAT donation from the project. This donation will, among other things, contribute towards making the freenode #live conference bigger and better, and also to focus on some development work that has otherwise been on the back-burner. freenode is happy to be included as a list of recipients and honoured to be appreciated in this way.

  • Handshake is a FOSS project, and like many FOSS projects it has a channel on the freenode network.
  • Handshake is an experimental peer-to-peer DNS for which one aim is to be more resistant to censorhip than existing systems.
  • Handshake is doing a faucet distribution to a number of FOSS contributors and projects, many of which are freenode users.
  • Handshake is making a fairly hefty (USD 10.2 million) overall financial contribution to projects within the FOSS sphere in addition to its faucet allocation of HNS coins and freenode is one of many projects within the FOSS sphere that is receiving a contribution.

As such, any link between freenode and Handshake is tenuous at best and the current wave of spam would appear to be designed to do little bar discredit freenode and the Handshake project both.

I am sure you will appreciate that the freenode volunteer team is not in a position to answer questions relating to the Handshake project any more than they are in a position to answer questions relating to any other new FOSS project that starts to use the freenode network.

But I also understand that some of you may have additional questions relating to Handshake, I am sure you will appreciate that the freenode website is not the platform for such a discussion, and would suggest that you visit the Handshake website, Handshake Github Repository and Handshake Documentation if you are interested in learning more about the project and that you direct any questions to the Handshake project via the appropriate communication channels for the project.

by christel at August 06, 2018 06:30 AM

July 28, 2018

erry's blog

Installing and getting started with Python

I like experimenting with and learning new things. I’d never looked at Python before, because its syntax put me off, coming from a background of languages with C-like syntax. However, I eventually convinced myself to at least have a play with it and I’ve started working on a simple application that I can deploy to AWS.

Of course, the first step with any new tool is always getting it set up, and it can sometimes not be as straightforward as one would expect. I had a bit of trouble at first, so I thought I would share my experience for others that want a quick way of getting started.


The first thing I want to say is that I would strongly suggest using Pyenv. I always suggest version managers for programming languages, because not only do they allow you to have more than one version installed and be able to switch between them, but they also change the default paths for module installation to your user directory, meaning you don’t need sudo to install dependencies – a big advantage for me.


The first step to install pyenv is to install the dependnencies for building python. These vary on your operating system, but there is a guide over at the Pyenv github.

In my case, I use Ubuntu, so I had to run the following command:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev


Once that has been taken care of, it’s time to install Pyenv itself. Once again, follow instructions over at the github page for pyenv for your OS.

I used the automatic installer, which is the easiest way, but it also requires to install git in addition to the above dependencies.

After installing it, you need to add the following to your ~/.bash_profile or ~/.bashrc or equivalent and re-start your terminal session:

# Load pyenv automatically by adding
# the following to ~/.bash_profile:

export PATH="/home/errietta/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

If it’s worked, running pyenv should show you a help screen!

Install Python with pyenv

Now that you have pyenv working, you can easily install one or more versions of Python. Since I wanted to use it with serverless, I needed to get either 2.7.* or 3.6.*.

Run pyenv install 2.7.8 or pyenv install 3.6.6

If everything goes correctly, it should only take 5-10 minutes. If not, the output should say what the problem was – the common build problems page on github has some more information to fix problems, but generally it should just work if you have installed all the dependencies.

It should say “Installed Python-3.6.6 to /home/errietta/.pyenv/versions/3.6.6” when it is finished.

Hello world

Now you can make your first python code. First of all, inside the directory of your project, you should run pyenv local 3.6.6 (or whichever version you installed), so that pyenv knows which version of python to use for your project.

Now you can make your code file, say

print("Hello world")

And to run it:


Congrats, it works!


Consider the following tree:

`-- util

And the following code in each file:

from util.math import add

print("Hello world")
print(add(2, 3))


def add(a,b):
  return a+b

This might work, but if you lint your code with pylint (or if your IDE does it for you – Hi VS code!), you’ll notice that it complains: E0611: No name 'math' in module 'util' (no-name-in-module)

What you need to do in this case, is create with no content inside util. This tells python that your directory contains python modules. It can also execute initialization code, but in this case you can just leave it empty.

Now that should make pylint and/or your IDE happy :)

Next steps

by Errietta Kostala at July 28, 2018 12:05 PM

July 27, 2018

freenode staffblog

Current spambot attack on freenode (and elsewhere)

Many of you will have noticed that over the last few days there has been an extensive spambot wave on freenode, and on other networks.

The fairly aggressive spambot attacks link to websites that we believe to have been set up to impersonate freenode volunteers, and that we believe to contain offensive and incorrect information intended to defame and libel members of the freenode volunteer team.

Naturally, the matter has been escalated to law enforcement and both the project and the individual volunteers concerned have sought legal advice in connection with the current attack.

Due to the nature of the attack, this is of course causing serious emotional distress on the part of the affected volunteers and their immediate family and social circles, as well as the rest of the volunteer team.

On behalf of the entire team, I would like to express thanks to those of you who have reached out with words of encouragement and support, and especially those of you from other IRC networks who have invested your time and efforts in trying to help mitigate and support.

I would also like to apologise to those users and channels (on and off freenode) who are affected by the spam.

by christel at July 27, 2018 01:20 PM

July 13, 2018

freenode staffblog

freenode #live 2018: Welcoming (some of) this year's keynote speakers

It is with a great deal of excitement that I can announce some of this year's keynote speakers for freenode #live. The entire freenode team is excited to be welcoming the following FOSS rockstars to Bristol this November; Bradley Kuhn, Chris Lamb, Kyle Rankin, Leslie Hawthorn and VM Brasseur.

We have a few more exciting announcements to make in the lead-up to the conference! You don't want to miss out, and we encourage you to head over to to get your tickets for this year's event! And if you want to join this year's speaker line-up then you still have some time, the CFP is open and we're looking forward to hearing from you.

Bradley M. Kuhn

Bradley M. Kuhn is the Distinguished Technologist at Software Freedom Conservancy, and editor-in-chief of Kuhn began his work in the software freedom movement as a volunteer in 1992, as an early adopter of GNU/Linux, and contributor to various Free Software projects. Kuhn's non-profit career began in 2000 at FSF. As FSF's Executive Director from 2001-2005, Kuhn led FSF's GPL enforcement, launched its Associate Member program, and invented the Affero GPL. Kuhn was appointed President of Conservancy in April 2006, was Conservancy's primary volunteer from 2006-2010, and has been a full-time staffer since early 2011. Kuhn holds a summa cum laude B.S. in Computer Science from Loyola University in Maryland, and an M.S. in Computer Science from the University of Cincinnati. Kuhn received an O'Reilly Open Source Award, in recognition for his lifelong policy work on copyleft licensing. You can follow him on Twitter @bkuhn_ebb_org

Chris Lamb

Currently Project Leader of the Debian GNU/Linux project and a member of Board of Directors for the Open Source Initiative, Chris is a freelance computer programmer, author of dozens of free-software projects and contributor to 100s of others. He has been official Debian Developer since 2008 and is currently highly active in the Reproducible Builds sub-project for which he has been awarded a grant from the Linux Foundation's Core Infrastructure Initiative. In his spare time he is an avid classical musician and Ironman triathlete. Chris has spoken at numerous conferences including LinuxCon China, HKOSCon,, DjangoCon Europe, LibrePlanet, OSCAL, All Things Open, SCALE, Software Freedom Kosovo, #freenode Live, FOSS'ASIA, and many more. You can follow him on Twitter @lolamby

Kyle Rankin

Kyle Rankin is the Chief Security Officer at Purism, SPC and a Tech Editor and columnist at Linux Journal. He is the author of Linux Hardening in Hostile Networks, DevOps Troubleshooting, The Official Ubuntu Server Book, Knoppix Hacks, Knoppix Pocket Reference, Linux Multimedia Hacks and Ubuntu Hacks, and also a contributor to a number of other O’Reilly books. Rankin speaks frequently on security and free and open source software including at BsidesLV, O’Reilly Security Conference, OSCON, SCALE, CactusCon, OpenWest, Linux World Expo and Penguicon. You can follow him on Twitter @kylerankin.

Leslie Hawthorn

An internationally known developer relations strategist and community management expert, Leslie Hawthorn has spent the past decade creating, cultivating, and enabling open source communities. She’s best known for creating the world’s first initiative to involve pre-university students in open source software development, launching Google’s #2 developer blog, and receiving an O’Reilly Open Source Award in 2010. Her career has provided her with the opportunity to develop, hone, and share open source expertise spanning enterprise to NGOs, including senior roles at Red Hat, Google, the Open Source Initiative, and Elastic.

If you cheer during movies when you hear the words “I fight for the users” or “Get your head out of your cockpit,” the two of you will likely get along famously. Follow her on Twitter @lhawthorn or read her blog at

VM Brasseur

VM (aka Vicky) spent most of her 20 years in the tech industry leading software development departments and teams, and providing technical management and leadership consulting for small and medium businesses. Now she leverages nearly 30 years of free and open source software experience and a strong business background to advise companies about free/open source, technology, community, business, and the intersections between them.

She is the author of Forge Your Future with Open Source, the first book to detail how to contribute to free and open source software projects. Think of it as the missing manual of open source contributions and community participation. The book is published by The Pragmatic Programmers and is now available in an early release beta version. It's available at

Vicky is the Vice President of the Open Source Initiative, a moderator and author for, an author for Linux Journal, and a frequent and popular speaker at free/open source conferences and events. She's the proud winner of the Perl White Camel Award (2014) and the O’Reilly Open Source Award (2016). She blogs about free/open source, business, and technical management at {anonymous => 'hash'};. You can follow her on Twitter @VMBrasseur

by christel at July 13, 2018 01:49 PM

June 29, 2018

freenode staffblog

freenode Security Update: Reused Password Attack

In the very early hours of today (Friday 29 June 2018), we became aware of unauthorised attempts to access a substantial number of freenode accounts. This appears to be the result of an attacker using lists of usernames and passwords from other online services that have previously been compromised, and trying these combinations on freenode accounts.

Our investigations commenced immediately and we found that the attacker had been able to log in to a number of freenode accounts.

freenode has not been hacked or compromised.

Affected information

For the affected accounts, usernames (nicknames) and passwords are affected. Additionally, for some accounts, other information including channel access and channel lists may be affected.

What we are doing

We are committed to protecting your data and, as a precaution, we have frozen the affected accounts and are in the process of sending individual notifications to affected users.

What you can do

If your account was affected, we are in the process of contacting you directly with information to reset your password and restore access to your account.

We encourage all users to practice good password hygiene, even if your account has not been affected at this time.

Attacks such as these have a tendency to escalate and cause a domino effect and we will continue to investigate and monitor for new attack vectors.

Password reuse means that once one account is compromised, all of the accounts that share that password become compromised.

by christel at June 29, 2018 08:08 AM

June 22, 2018

freenode staffblog

freenode and

In light of the two ongoing threads on Hacker News and Reddit concerning LTMH and, we have had a fair few freenode users contact us with questions as to whether will replace and/or absorb freenode, and what impact it would have on freenode communities.

I wanted to make sure that I addressed these concerns, and I can assure you that there are no plans on the part of freenode or LTM that involve any changes to freenode, freenode is not on the brink of shutdown — if anything, we are excited to be celebrating our 20th anniversary at this year's freenode #live event, and we hope to see at least another 20 after that.

The freenode project exists to support the development and use of Free and Open Source Software, and to that end it serves a very different purpose to the one that the visionaries behind have in mind. I fully believe that freenode and can co-exist, just as we co-exist with the numerous other IRC networks out there, and I would like to hope that may encourage those of their users who would be a good fit for freenode to come check us out, just as I hope that we may be able to send someone their way should we come across users who have great potential for running a series of training sessions or similar.

And while LTM has provided freenode with some much needed resources following last year's announcement, any potential partnership between the two will be limited to the possibility of freenode being represented in the foundation. It is my understanding that the foundation will operate on a nonprofit basis and will seek to bring together network operators and ircd/services developers to identify irc-related projects that are in need of funding and support, the team hopes to establish positive working relationships with operators, developers, ircv3 and end users alike, and the foundation, which will be governed by community consensus, will seek to ensure that and its efforts benefit all, not only those organisations that LTM supports today.

With regard to itself, I am curious and excited to see what's in store in terms of utilising IRC as a platform for delivering training sessions and the idea of a virtual incubator using an IRC backend. There has been some incredible developments on the client-side in recent times, with both IRCCloud and KiwiIRC continuing to work on features that will soon introduce video and voice calls, file-sharing and a host of other productivity tools that provide the team with good foundations for success.

For the sake of full disclosure: I am an Executive Vice President at LTM, and I work closely with all subsidiaries within the Group, included.

by christel at June 22, 2018 09:20 PM

June 16, 2018

erry's blog

Typescript and the Beanstalk

Typescript and the Beanstalk

Deploying typescript apps to Beanstalk with CircleCI

Before we get started, note that this post assumes that you have your CircleCI/Beanstalk integration working already. The reason for this is that setting that up itself is a very long-winded process. I may make a video about it some time, but in the mean time there is a very good medium post that explains how to set that up.

Also, a big special thanks to Rokt33r for the example repo that I shamelessly copied everything from :)

Why is this so different?

So, you may have seen examples of deploying node apps to Beanstalk and even got them working, but now you want to deploy a typescript app. You may be wondering how to ship your built files, since just shipping your source code isn’t enough to get it running, unlike plain node.js.

So the key thing to remember is that you deploy your built assets, not your source code. That’s actually true for even plain node apps, but it just so happens that in that case the build and the source is the same.

So, how do you do this? Well, assuming you’ve done the ~~impossible~~ hard bit of setting up AWS, Beanstalk, and CircleCI, the rest is actually quite easy.

Step 1: tsconfig.json

You should have that set up to compile your code. If you already have it, you don’t need to change it, just take a note of what outDir is as you’ll need it. If you don’t have it, or want to see an example, here is one.

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

Step 2: package.json

You should already have start and build scripts, but if not, here is an example:

 "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"

build is the command used to build your software; in this case it’s tsc to compile the typescript down to javascript.

start is how you start your software, obviously this depends on your app but it’s usually something like node dist/index.js. Note that you’re pointing to your compiled js code. The location may not be dist; but it’s whatever you have set as outDir in tsconfig.json.

Step 3: dist step

If you’ve seen the UI for Elastic Beanstalk for AWS, you basically deploy apps to it by uploading .zip files. If you use the command line (eb deploy), it does that for you. What we essentially want to do is to build your distribution .zip file to upload. How? Essentially by zipping your dist directory.

Make a file called scripts/, and put the following code in:

# If the directory, `dist`, doesn't exist, create `dist`
stat dist || mkdir dist
# Archive artifacts
zip dist/$ -r dist package.json package-lock.json

If you’re not using dist as the directory name for your build (remember the outDir from earlier), you need to change it above.

This will basically build your zip for you!
You can test it out manually:

[email protected] [4] (git)-[master] ~/hyperbudget-backend % bash scripts/
  File: 'dist'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 801h/2049d      Inode: 16393011    Links: 6
Access: (0775/drwxrwxr-x)  Uid: ( 1000/errietta)   Gid: ( 1000/errietta)
Access: 2018-06-16 11:41:27.842696048 +0100
Modify: 2018-05-24 19:59:55.741014000 +0100
Change: 2018-05-24 19:59:55.741014000 +0100
 Birth: -
  adding: dist/ (stored 0%)
  adding: dist/app.js (deflated 70%)
  adding: dist/index.js (deflated 39%)
  adding: dist/ (deflated 58%)
  adding: package.json (deflated 65%)
  adding: package-lock.json (deflated 77%)
[email protected] [4] (git)-[master] ~/hyperbudget-backend %

This will actually generate dist/.zip – that’s because when you run it manually, $npm_package_name is not set. Feel free to look at that zip file and verify that all your built javascript is in there. If it’s correct, delete the file, we’ll tell npm to generate it instead in the next step!

Step 4: Set up the npm dist script

Really simple, just add another script to your package.json. For example:

  "scripts": {
    "build": "tsc",
    "dist": "sh ./scripts/",
    "start": "node dist/index.js"

Now you can run your dist step by doing npm run dist! If you run that, you will now have a zip file in your dist folder that is actually named after your app, and you can open it and again verify that you have all your compiled javascript there.

Step 5: Ammend CircleCI configuration

Now we need to tell CircleCI to run npm run build and npm run dist. This will depend on your configuration, but basically edit .circleci/config.yml and make sure that npm run build and npm run dist is ran before eb deploy. For example, I have the following:

      - deploy:
          name: Deploy to Elastic Beanstalk
          command: |
            npm install && npm run build && npm run dist && eb deploy --staged MyApp-env

This will install all my dependencies, compile my app down to javascript, run npm run dist to generate the zip file, and deploy to Beanstalk. Hang on, though, how do we tell Beanstalk to use that zip file?

Step 6: Beanstalk configuration

Create or ammend your .elasticbeanstalk/config.yml file. In there, you need to add the following:

  artifact: dist/

The name of the zip should be the same as your npm package name if you have set up the script to use $npm_package_name. You can always manually run npm run dist and then see the name of the file it generates.

If you don’t have an elasticbeanstalk/config.yml file, here is a simple one that works for me:

    environment: MyApp-env
    environment: MyApp-env
    environment: MyApp-env
  application_name: my-app
  default_platform: 64bit Amazon Linux 2017.03 v4.5 running Node 8.10
  default_region: eu-central-1
  artifact: dist/

You should change your branch names and environnment names to match your deployed branches and your Beanstalk environment names respectively, and you can change the region and platform if you ned to. The important thing is for the artifact to be correct, this will tell beanstalk to deploy your zip file

That’s it!

If you set up all this correctly, circleci should now be deploying your zip file to beanstalk. You can check the CircleCI build information and verify that it runs tsc, zips up your files, and deploys to Beanstalk. Here’s what mine looks like for comparison:

#!/bin/bash -eo pipefail
npm install && npm run build && npm run dist && eb deploy --staged MyApp-env

> [email protected] install /home/circleci/app/node_modules/ursa
> node-gyp rebuild

make: Entering directory '/home/circleci/app/node_modules/ursa/build'
  CXX(target) Release/
  SOLINK_MODULE(target) Release/
  COPY Release/ursaNative.node
make: Leaving directory '/home/circleci/app/node_modules/ursa/build'
added 232 packages in 11.433s

> [email protected] build /home/circleci/app
> tsc

> [email protected] dist /home/circleci/app
> sh ./scripts/

  File: ‘dist’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 100016h/1048598d    Inode: 7272        Links: 4
Access: (0755/drwxr-xr-x)  Uid: ( 3434/circleci)   Gid: ( 3434/circleci)
Access: 2018-06-14 13:37:17.348967660 +0000
Modify: 2018-06-14 13:37:17.376967104 +0000
Change: 2018-06-14 13:37:17.376967104 +0000
 Birth: -
  adding: dist/ (stored 0%)
  adding: dist/App.js (deflated 51%)
  adding: dist/index.js (deflated 39%)
  adding: dist/script/ (stored 0%)
  adding: dist/ (deflated 64%)
  adding: package.json (deflated 56%)
  adding: package-lock.json (deflated 77%)
Uploading my-app/app-******.zip to S3. This may take a while.
Upload Complete.

INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
INFO: New application version was deployed to running EC2 instances.
INFO: Environment update completed successfully.

You can see that it ran npm install, tsc, and then my ./scripts/ which zipped all my built files, and then successfully deployed it to EC2.

I hope this helps someone else, thanks for reading :)

by Errietta Kostala at June 16, 2018 03:01 PM

June 06, 2018

freenode staffblog

Announcement: - New Service

Over the last two decades, we have found that a variety of freenode community members have reached out to us when they have been involved in the hiring process at their places of work. We have always been keen to support and promote relevant topics within the wider freenode communities, and we are excited to be launching the new website. Whether you are hiring for a permanent full-time role, looking to fill a temporary contract or looking to attract volunteer contributors for your FOSS project, we very much welcome and encourage you to use the site.

We hope that the new site will provide a useful addition to the existing freenode projects, such as the IRC network and the #live conference.


Head over to and add your job openings! The service is free to use, although we would be grateful for a contribution towards the operating costs of freenode services and the #live conference in the event that you successfully match via the website. In the event that you successfully match and wish to make a contribution, please contact us on [email protected]

FOSS or other peer-directed project on the hunt for volunteers?

Why not add a post on the site to see if you may be able to attract some contributors from the wider freenode and FOSS communities?

Looking for a new job or a volunteer role?

Keep an eye on to see if something of interest is added. We will utilise wallops on the freenode IRC network to provide a brief summary of available roles periodically, for those wishing to receive these, please set yourself +w (/umode +w or /mode yournick +w).

Feature requests, suggestions and feedback?

The github repository can be found here, you can also drop us an e-mail to [email protected] or find us in #freenode-jobs on the freenode network.

by christel at June 06, 2018 09:24 AM

May 26, 2018

freenode staffblog

Services maintenance and password security

We recently took our services (NickServ and friends) offline for maintenance to ensure encrypted storage of the services database.

During this process, we accidentally started services with an empty database. While we quickly realized the mistake, a large number of users were already logged out before we stopped the process, receiving a message like "Account youruser dropped, forcing logout". Services were quickly restored to normal afterwards and people were able to log in to their accounts as before. We would like to apologize for the disruption and confusion this may have caused.

Unfortunately, some people have used this opportunity to spread some misinformation, claiming that "all passwords have been released". This is not the case; there has been no threat to account security due to this incident. Additionally, we do not store passwords in a recoverable form at all.

In any case, we do recommend using a unique and secure password not shared with other online services. If you wish to change your password, you may do so using the command /msg NickServ SET PASSWORD <newpassword> while logged in (replacing <newpassword> with the password you wish to set). You might wish to consider using a password manager as well, such as KeePassXC.

We do take security and privacy very seriously. Notifications about any actual security breaches would appear on this site, as well as in global notices sent out by members of staff (identified by a freenode/staff/ cloak).

Apologies for the confusion and thank you for using freenode!

by ilbelkyr at May 26, 2018 05:12 PM

May 24, 2018

freenode staffblog

Updated Privacy Policy

With GDPR coming into effect tomorrow, 25 May 2018, freenode has made some amendments to its privacy policy to provide clarification relating to GDPR compliance.

In the event that you do not consent to our continued processing of your personal data in order to provide you with access to the service, you may drop your nickserv registration using the drop command (please see '/msg nickserv help drop' for further instructions). The latest version of our policies can always be found here.

by christel at May 24, 2018 11:58 PM

May 14, 2018

freenode staffblog

Channel moderation and channel topics

On freenode, we have always tried to minimise the amount of policies we apply across the network to allow projects to run their project channels in ways that complement their wider procedures and code of conducts for the projects both on and outside of IRC.

As such, a number of project channels opt to run their channels in a way that allows any user of the channel to modify the topic, and for most this is an approach that works most of the time, and ensures that updates can be announced and communicated effectively without all community members needing to be on the access list for the channel in question.

Naturally, the trade-off is that also those outside of the community are able to join and modify topics at will, and we are currently finding that a number of a project channels are having their topics changed to a message encouraging the users of the channel to move to a different channel.

In light of the above, we would like to ask that you check the modes and topics of your channel(s), and if appropriate reinstate your previous topic and decide whether or not you may wish to +t, even temporarily, to reduce disruption within your community.

Please do not hesitate to message a member of freenode staff for assistance!

by christel at May 14, 2018 07:26 AM

May 13, 2018

erry's blog

How to fix your node dependencies’ es6 causing browser errors

How to fix your node dependencies’ es6 causing browser errors

If you’re doing anything with modern JavaScript this day and age you’re probably using es6 and using babel to transpile it back to es5, which works with most browsers.

This works fine for the code you write, but what about your dependencies? Usually they themselves provide transpiled code so it’s not something to worry about. However, some of them may not (especially if their primary focus wasn’t to be used on the browser and, well… you may get the errors like the below in older browsers (such as IE11):

    SCRIPT1014: Invalid character
    SCRIPT5009: 'webpackJsonp' is undefined
A screenshot of the IE11 error screen showing ‘Invalid character’ and ‘webpackJsonp’ is undefined

A screenshot of the IE11 error screen showing ‘Invalid character’ and ‘webpackJsonp’ is undefined

Your first instinct may be to leave the industry and go herd baby goats.

A baby pygmy goat looking out of a cave at Mudchute park & farm

A baby pygmy goat looking out of a cave at Mudchute park & farm

However, there is an alternative. Or at least, I found a solution on github after much hair pulling googling:

First of all, you unfortunately need to figure out which module is causing the problem. Thankfully, your browser should show the code where the error occurs. In this case, this module was using es6 template string, which IE11 does not support:

A screenshot of the IE11 debug console showing an error occuring because the module in question was using es6 template strings If you’re bundling your dependencies, it’s not immediately obvious where the error is. In this case, I got lucky, and easily found the culprit with a bit of scrolling up; it turned out to be csv-parse (and yep, my evil experiments have me parsing CSV files in the browser…)

A screenshot of the debug console showing part of csv-parse’s code where you can clearly see its name in a comment

Once you find out what the problem is, what you have to do is essentially tell babel to transpile that module as well, since you would normally be excluding all of node_modules.

First of all if you have exclude: /node_modules in your webpack.config.json, you have to get rid of that.

Instead, use include: ['src'] (or whatever your source directory is).

Now you have to add the problematic module as well. In this case, this is what my config looks now (replace csv-parse with the name of the module that is the problem):


      test: /\.js$/,
      include: ['src', require.resolve('csv-parse') ],
      use: {
        loader: 'babel-loader',
        options: {

Also, make sure that you are using babel-polyfill to get es5 polyfills for all the es6 code.

For example, I changed my entry to this:

        entry: [ 'babel-polyfill', './src/client/index.ts' ],

That’s it. Once you’ve done those things, after you re-compile, all the errors should go away and you should have plain old es5 code compiled from your es6 dependencies!

Here is the full diff of what I changed for comparison:

    diff --git a/.babelrc b/.babelrc
    index 76a26b7..244d28b 100644
    --- a/.babelrc
    +++ b/.babelrc
    @@ -1,4 +1,3 @@
    -    "presets": [ "es2015" ],
    -    "plugins": ["transform-runtime"]
    +    "presets": [ "es2015" ]
    diff --git a/webpack.config.js b/webpack.config.js
    index 3796b22..3112198 100644
    --- a/webpack.config.js
    +++ b/webpack.config.js
    @@ -6,7 +6,7 @@ const env = process.env.NODE_ENV
     const UglifyJSPlugin = require('uglifyjs-webpack-plugin')

     module.exports = {
    -  entry: [ './src/client/index.ts' ],
    +  entry: [ 'babel-polyfill', './src/client/index.ts' ],
       output: {
         filename: 'dist/public/bundle.js'
    @@ -21,11 +21,10 @@ module.exports = {
             test: /\.js$/,
    -        exclude: /(node_modules|bower_components)/,
    +        include: ['src', require.resolve('csv-parse') ],
             use: {
               loader: 'babel-loader',
               options: {
    -            presets: ['[@babel/preset-env](']

Huge thanks to KagamiChan and johnwebbcole on github who found this issue and published a solution, I am merely reporting in case it helps someone else, and not trying to take credit :)

by Errietta Kostala at May 13, 2018 10:30 PM

February 26, 2018

freenode staffblog

freenode #live 2018 - Call for Proposals now open!

black belt

Jorge Oliviera from JOG, 6x South Brazil National Champion.

You do not need to have a black belt in FOSS to come talk at this year's freenode #live conference

freenode #live returns to We The Curious in Bristol, UK on Saturday 3 and Sunday 4 November 2018. The CFP is now live, and you can submit a talk over at the website.

The inaugural freenode #live conference last year saw a star-studded speaker line-up including Deb Nicholson, Matthew Garrett, Karen Sandler, John Sullivan, Jelle van der Waa, Chris Lamb, Neil McGovern, Matthew Miller and many, many more.

Matt Parker from Standup Maths and Festival of the Spoken Nerd provided excellent entertainment on the Saturday evening, and the feedback from attendees, speakers and volunteers alike was overwhelmingly positive.

freenode #live 2017 was possible thanks to the generous support of sponsors such as Bytemark, Falanx, openSUSE, Private Internet Access, Ubuntu and Yubico. Private Internet Access has already agreed to sponsor the event for another year, and we are currently looking for additional sponsors. Please do not hesitate to get in touch if your company might be interested in supporting freenode #live 2018.

We are looking forward to hosting this year's freenode #live conference, and hope that you will join us there.

by christel at February 26, 2018 08:50 PM

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!"
  ‘/’, router)

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 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

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  [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->options;
  my $parameters = $run->parameters;

  my $to = $options->{to};
  my $from = $options->{from};

  my $amount = $parameters->{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/

convert -- Convert 
help -- Show command help 

./bin/ convert --
--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