Shane Fagan
Leaving Canonical
Today was my last day at Canonical ive had a good time and I learned a whole lot in my 6 months (it seemed a lot shorter). It had been a real dream of mine to work here ever since I fell in love with Ubuntu and got to know the really awesome people that work here. I got to see the wonderful view from millbank tower I got to work with some really great people who are really making Ubuntu One a great platform for us all to enjoy.
Ill be uploading a new and improved CV for anyone interested in looking at it over the weekend and you can always email me
Internship day 55 – 60
Ok this entire week was more or less entirely confidential so ill talk a little about team building, meeting everyone in the team and trying participate in a productive way I suppose.
So for our team building we went making pizzas and everyone had a go doing things like needing the dough, rolling it out and putting toppings on them. It was great to work together on something a little funner and less taxing than developing so from my point of view it was great
Oh and I came second mainly because of my awesome topping (tomato sauce, Gorgonzola, ham, cheese and some herbs) it went seriously quickly and I only got like 2 slices but still was awesome.
Meeting everyone was really good since we are working mainly across IRC you get to know nicks rather than names so you it really humanizes everything when you get to meet everyone. I know a few people before from UDS Lucid so I wasn’t entirely unknown in the room. Being the intern is kinda humbling since there is a lot of stuff that goes entirely over your head that you have to mull over and ask about later. Also when you do figure something out and you come up with a fresh perspective on a problem it makes you pretty happy about what your doing and it gives a bit of confidence. I tried to listen a lot and talk a bit when I thought I could add something which is what I think was expected hopefully.
I think the main thing I was trying to do was doing things a little independently when ever I could. I went researching when I hadn’t anything major to do, I went looking at the testing stuff for that bug that I was working on last week which alecu helped me out on a bit later in the week and I drank lots and lots of tea and coffee oh and the hotel had really nice scones which I gladly relieved from their tray.
Internship day 50 – 55
This week I went at fixing a bug in how we were detecting our network state (like online offline..etc). I fiddled about and got something working but I ran into a big issue I didnt write any tests for the work that I did. In our team (I dont know if its the same for all of canonical) we use test driven development which is awesome in many ways. For everything you do you should have a test to check that its doing things correctly so for example if you write a method that calls another method under certain conditions you would supply it all sorts of conditions and see if it gives out the expected result.
This brings a big complication if you did things like I did when I wrote my patch. I did everything completely backwards and fixed what was going on but the way test driven development works you should be writing the tests for everything you write while your writing it to protect against you writing the tests so that they always pass and not really testing properly. So I didnt get the patch finished in the week :-/
Internship day 44 – 49
Really slow week, for most of the week I was trying to find useful things to do to help out. I started off the week trying to find some bugs to do although I didn’t find any that would be easy just to jump into and fix. So I spent some more time looking at the client and server code so I could make some progress in understanding the huge code base the team is responsible for.
So then other than that I tried to find a way to help the other team members test and work on windows without all the setup that takes ages but in the end I shared my desktop and it was ok ish other than the massive lag between continents.
The last thing I looked at in the week was bindwood the Ubuntu one bookmark sync. It hasn’t had any changes in a few Ubuntu releases but there haven’t been many bug reports so presumably it is going ok. So my job with bindwood was to try it out in 11.10 with firefox 5 so that didn’t work because plugins in firefox have a max version number and it needed to be bumped so it was bumped to firefox 6 since that is in development. After the version was bumped I ran into an error that stopped it from working and we are investigating but it may be a problem with the couchdb on the server which may effect thousands of users from using the service. So it could be a pretty big problem but thats for next week to see if we can sort it out.
Internship day 38 – 43 – twisted fun
So this week I aimed to learn twisted and I read the entire docs over the week and got some nice examples on how to use it going. So what is twisted?
Twisted is a networking library plain and simple. You can create servers for your own protocols and you can create clients that connect to networking protocols. It can handle lots of things like SSH, FTP, Telnet, Email, chat protocols, SSL, transport across TCP and UDP, it is literally the one stop shop for most of the internet protocols in use. Ubuntu one uses twisted a lot so its was something that was great to spend a week on to catch up so I can be more effective.
So if you want to see what I was learning the docs are http://twistedmatrix.com/documents/current/core/howto/index.html and the graphical overview is particularly good for filling in blanks.
Im not the greatest at explaining things but I see twisted as two different things I see it as a client and a server library even though the code may look a little similar.
In the server part you have:
A declaration of the port to listen to and the protocol its listening for so TCP or UDP and/or encryption.
Signal handlers to listen for specific events. In my examples for myself I just handled the connected event and the data received event and they are pretty powerful to use.
A loop to keep the server up similar to how GUI toolkits have a loop to keep the window open until the user closes it.
In the client part you have:
The host, port and protocol to connect to.
Signal handlers just like the other one but its more important here because you can handle if the connection drops or other things and try to reconnect if that happens. It also has the data received event and the connected event so it may look a little similar at a glace if you didn’t know what you are looking at.
So thats twisted at a glance if you want to get into more detail go look at the docs they are very specific and helpful when you are starting out. Id say the first hurdle is getting a basic server and client set up and have them talking to each other. Im not going to give code examples for this because id say you have to figure it yourself to actually get the idea properly.
What I made as an exercise to learn it is do a vote for skiping songs so the server would run on the computer playing the music and remote clients can connect and send a 1 if they wanted to skip it or a 0 to change their mind and if 75% of the connected hosts as for a skip it changes the song. I didn’t make the song skip because it was only to learn basic communication between the server and client but it does work other than the skip bit.
As always any words of advice or corrections put them in the comments and id be glad to fix it up.
Internship day 32 – 37
UDS week, so my day started earlier since the entire summit is on Budapest time which is 1 hour behind something that messed up me going to a few sessions when I forgot that fact
So the first session was Mark Shuttleworth’s keynote address. Mark gave his usual interesting speech that im accustomed to at every UDS. He set the lofty goal of 200 million users in 4 years which makes me think we are really aiming for the top which is awesome. My opinion on it is we have a great interface that of course can be improved upon, we have some interesting stuff coming from Ubuntu one and the applications are the biggest and best in the open source world so there really isn’t any reason why we cant reach this goal.
The first day had a major issue with the sound breaking up after a few seconds on the stream so I lost the entire day. Tuesday was a lot more reliable but was 3 – 5 minutes behind so I was talking on IRC about conversations that happened a good while ago in the room which wasn’t ideal.
The third day and beyond were about fine but most of the meaty sessions were over so I missed out on a lot of the sessions I had planed on going to. I got to go to a few nice ones though and did listen to some without commenting which if you met me in real life that shows a lot of restraint
Internship day 26 – 31
Ok this was the week before the UDS (Ubuntu developer summit) so a lot of this week I spent trying to make notes for myself for the sessions I planned on attending. I wasn’t travelling to it but still I like to contribute remotely.
Ill start with some background in the Ubuntu developer summit we make plans and set targets for the next 6 months of the project. This is so important for the entire thing to be remotely and physically accessible and open to all contributions big and small. The sessions are scheduled from blueprints created by developers that are approved by track leads who are in charge of the different topics. Anyone can attend sessions and they are streamed online and there is an IRC channel available to comment.
Anyway how I handle UDS sessions is I look down through the list and sort out what sessions im interested in and then subscribe myself to those blueprints. After that I make notes for myself to bring to the session and be able to ask questions or suggest things. So that’s what I did all week as well as merge requests from mandel.
I was mainly interested in sessions about Ubuntu one, the desktop and a few for design.
Oh and I did my Ubuntu Open week talk about Ubuntu one too and it went well but I did make a mistake and leak out one or two things coming down the line but I admitted the mistake and made a good attempt to correct it. So it all blew over eventually and big thanks to all the people higher up that didn’t take it too bad.

