numerodix bloghttp://www.matusiak.eu/numerodix/blog/A blog about nothingen-usSun, 22 Jul 2018 00:21:55 +0000Un poème pour Didierhttp://feedproxy.google.com/~r/numerodix/~3/jJrRtRLA8JA/<div class="post-933 post hentry" id="post-933">
<img title="francês" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/france.png"> <small>July 22nd, 2018</small>
<img src="http://www.matusiak.eu/numerodix/blog/c933.png" style="display: none;">
<div class="entry">
<p>Une fois, Aimé, avec son capitaine, Didier, a tout gagné.</p>
<p>Ensuite Didier, vingt ans après, son objectif à bien fixé.</p>
<p>Parmi tous les joueurs, une équipe il a dû sélectionné.</p>
<p>Il a pas tardé, que tout le monde lui est venu la contesté.</p>
<p>Patiemment, tous les adversaires il les a éliminé.</p>
<p>Même les sublimes croates, ils ont le mieux essayé.</p>
<p>À la fin, quand même, c'est Didier qui a gagné.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/jJrRtRLA8JA" height="1" width="1" alt=""/>Sun, 22 Jul 2018 00:21:55 +0000http://www.matusiak.eu/numerodix/blog/2018/7/22/un-poeme-pour-didier/misc
<div class="post-933 post hentry" id="post-933">
<img title="francês" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/france.png"> <small>July 22nd, 2018</small>
<img src="http://www.matusiak.eu/numerodix/blog/c933.png" style="display: none;">
<div class="entry">
<p>Une fois, Aimé, avec son capitaine, Didier, a tout gagné.</p>
<p>Ensuite Didier, vingt ans après, son objectif à bien fixé.</p>
<p>Parmi tous les joueurs, une équipe il a dû sélectionné.</p>
<p>Il a pas tardé, que tout le monde lui est venu la contesté.</p>
<p>Patiemment, tous les adversaires il les a éliminé.</p>
<p>Même les sublimes croates, ils ont le mieux essayé.</p>
<p>À la fin, quand même, c'est Didier qui a gagné.</p>
</div>
</div>
FranceC933http://www.matusiak.eu/numerodix/blog/2018/7/22/un-poeme-pour-didier/Backup/reinstall checkisthttp://feedproxy.google.com/~r/numerodix/~3/W4Pnkbq-Kwg/<div class="post-932 post hentry" id="post-932">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>March 14th, 2018</small>
<img src="http://www.matusiak.eu/numerodix/blog/c932.png" style="display: none;">
<div class="entry">
<p><strong>Backup checklist</strong></p>
<p>* Top level dirs in ~</p>
<p>* Dot files/dirs in ~</p>
<p>* dpkg -l</p>
<p><strong>Reinstall checklist</strong></p>
<p>* /etc/sudoers</p>
<p>* apt: chromium-browser curl emacs25 evince gimp git gitk htop iotop ipython3 kdiff3 mpv net-tools network-manager-openconnect openssh-server python-pip ttf-mscorefonts-installer vim-gtk vlc yakuake</p>
<p>* pip: nametrans reps</p>
<p>* rustup: ripgrep</p>
<p>* ~/.xmodmaprc (use xev to discover mouse button numbers)</p>
<p>* re pull</p>
<p><strong>Config checklist</strong></p>
<p>* focus follows mouse, 0ms delay</p>
<p>* kde: desktop search off</p>
<p>* kde: startup with empty session</p>
<p>* kde: taskbar do not group items</p>
<p>* konsole: set font size &amp; scrollback buffer for profile, set profile as default</p>
<p>* browsers: smooth scrolling off (chrome: chrome://flags/#smooth-scrolling)</p>
<p><strong>Test checklist</strong></p>
<p>* office vpn</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/W4Pnkbq-Kwg" height="1" width="1" alt=""/>Wed, 14 Mar 2018 08:50:55 +0000http://www.matusiak.eu/numerodix/blog/2018/3/14/backup-checkist/technology
<div class="post-932 post hentry" id="post-932">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>March 14th, 2018</small>
<img src="http://www.matusiak.eu/numerodix/blog/c932.png" style="display: none;">
<div class="entry">
<p><strong>Backup checklist</strong></p>
<p>* Top level dirs in ~</p>
<p>* Dot files/dirs in ~</p>
<p>* dpkg -l</p>
<p><strong>Reinstall checklist</strong></p>
<p>* /etc/sudoers</p>
<p>* apt: chromium-browser curl emacs25 evince gimp git gitk htop iotop ipython3 kdiff3 mpv net-tools network-manager-openconnect openssh-server python-pip ttf-mscorefonts-installer vim-gtk vlc yakuake</p>
<p>* pip: nametrans reps</p>
<p>* rustup: ripgrep</p>
<p>* ~/.xmodmaprc (use xev to discover mouse button numbers)</p>
<p>* re pull</p>
<p><strong>Config checklist</strong></p>
<p>* focus follows mouse, 0ms delay</p>
<p>* kde: desktop search off</p>
<p>* kde: startup with empty session</p>
<p>* kde: taskbar do not group items</p>
<p>* konsole: set font size &amp; scrollback buffer for profile, set profile as default</p>
<p>* browsers: smooth scrolling off (chrome: chrome://flags/#smooth-scrolling)</p>
<p><strong>Test checklist</strong></p>
<p>* office vpn</p>
</div>
</div>
EnglandC932http://www.matusiak.eu/numerodix/blog/2018/3/14/backup-checkist/django girls den haag 2016 welcome speechhttp://feedproxy.google.com/~r/numerodix/~3/ZaGQ3URTImc/<div class="post-931 post hentry" id="post-931">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>March 5th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c931.png" style="display: none;">
<div class="entry">
<p><em>Given on March 5, 2016 at Django Girls Den Haag 2016 in Den Haag.</em></p>
<p>Welcome, everyone!</p>
<p>We are thrilled that you're all here. Some of you have come far to be here today with us and we really appreciate it. We have people from all over the Netherlands!</p>
<p>I also wish to thank our sponsors. Without the sponsors this event just wouldn't be possible. Thank you: Amazon, Elastic, KPMG and GingerPayments!</p>
<p>---</p>
<p>Today is all about learning. You're about to learn programming, which is a completely new skill for most of you. It's going to be exciting. And some of it will be difficult. Learning *is* about pushing your boundaries, and it takes effort to learn anything.</p>
<p>I know it will seem as though your coaches know everything. Later today you might be asking yourself: "how am I supposed to master all this? There is so much new information here!" You may feel overwhelmed. But I promise you that every programmer in this room, myself included, has been through that. It's completely normal, and you're on the right track. So don't feel bad about that!</p>
<p>I want you to make mistakes today. Making mistakes is a good thing - whenever you make a mistake you learn something.</p>
<p>And don't hesitate to ask questions. If you get an answer that you don't fully understand, keep asking! Don't settle for answers you don't understand.</p>
<p>Finally, don't work so hard that you forget to take a break and get to know the people around you!</p>
<p>---</p>
<p>I will now introduce the organizing team. Raise your hand when you hear your name.</p>
<p>So I'm Martin, you've been getting my emails. We also have Chris. Robbie. Alexandra. And Tom.</p>
<p>So we are the organizers and you might think this means we know what we're doing. But no. We're just a bunch of software developers. We've never tried to organize an event for 100 people before.</p>
<p>Speaking for myself I had many moments of self doubt. How are we going to find a space big enough to host the workshop? How are we going to find enough volunteers to be coaches? How are we going to find all of you?</p>
<p>We made a lot of mistakes. And we learned from them.</p>
<p>We did it together as a team. It took effort, but it was also a pleasure.</p>
<p>---</p>
<p>I hope all of you have met your coach by now. We have 26 coaches with us today. They are nice enough to spend their Saturday to make Django Girls possible, isn't that awesome? They've *also* come from all over the country.</p>
<p>Please raise your hand when you hear your name.</p>
<p>Could we have a round of applause for the coaches?</p>
<p>---</p>
<p>Django Girls is a global initiative. It all started two years ago at a technical conference in Berlin. It was a big international conference with people from all over Europe. Now you should know that IT conferences are very male dominated. Two of the participants of that conference, the founders of Django Girls - Ola and Ola, had a simple idea: what if we organize a workshop for beginners - and for women! So they organized the very first Django Girls in 2014.</p>
<p>Since then it has spread to 57 countries. There have been over 100 events already. This is the sixth one in the Netherlands.</p>
<p>More than 3,500 women have participated! Many have gone on to become coaches. And you remember that very first Django Girls workshop? 80% of the participants there have organized their own Django Girls events since then in their country.</p>
<p>---</p>
<p>Now for some practical information.</p>
<p>Today's workshop lasts from 9 to 5pm. You can find the schedule for today on the posters.</p>
<p>The bathrooms are right around the corner, out that door and to the right.</p>
<p>We have coffee, tea and snacks available now. We have a limited number of cups, so please try to reuse your cup!</p>
<p>We have lunch coming in later on. It will be served in the lobby.</p>
<p>We have a mystery event in the afternoon.</p>
<p>We're a bit unsure of the wifi capacity with so many people using it all at once. So try to be gentle with the wifi connection. In case of problems it's possible to do big parts of the tutorial offline. Your coaches also have a copy of all the files on usb sticks you need today so you don't have to download them.</p>
<p>Last but not least we have a code of conduct. The code of conduct is in place to ensure that everyone can feel safe at our event. You can find the full text on one of the posters. If you see anyone breaking the code of conduct, please talk to one the organizers!</p>
<p>---</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirls-denhaag-2016-slide.png "/></p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/ZaGQ3URTImc" height="1" width="1" alt=""/>Sat, 05 Mar 2016 21:26:56 +0000http://www.matusiak.eu/numerodix/blog/2016/3/5/django-girls-den-haag-2016-welcome-speech/django girlspublic speaking
<div class="post-931 post hentry" id="post-931">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>March 5th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c931.png" style="display: none;">
<div class="entry">
<p><em>Given on March 5, 2016 at Django Girls Den Haag 2016 in Den Haag.</em></p>
<p>Welcome, everyone!</p>
<p>We are thrilled that you're all here. Some of you have come far to be here today with us and we really appreciate it. We have people from all over the Netherlands!</p>
<p>I also wish to thank our sponsors. Without the sponsors this event just wouldn't be possible. Thank you: Amazon, Elastic, KPMG and GingerPayments!</p>
<p>---</p>
<p>Today is all about learning. You're about to learn programming, which is a completely new skill for most of you. It's going to be exciting. And some of it will be difficult. Learning *is* about pushing your boundaries, and it takes effort to learn anything.</p>
<p>I know it will seem as though your coaches know everything. Later today you might be asking yourself: "how am I supposed to master all this? There is so much new information here!" You may feel overwhelmed. But I promise you that every programmer in this room, myself included, has been through that. It's completely normal, and you're on the right track. So don't feel bad about that!</p>
<p>I want you to make mistakes today. Making mistakes is a good thing - whenever you make a mistake you learn something.</p>
<p>And don't hesitate to ask questions. If you get an answer that you don't fully understand, keep asking! Don't settle for answers you don't understand.</p>
<p>Finally, don't work so hard that you forget to take a break and get to know the people around you!</p>
<p>---</p>
<p>I will now introduce the organizing team. Raise your hand when you hear your name.</p>
<p>So I'm Martin, you've been getting my emails. We also have Chris. Robbie. Alexandra. And Tom.</p>
<p>So we are the organizers and you might think this means we know what we're doing. But no. We're just a bunch of software developers. We've never tried to organize an event for 100 people before.</p>
<p>Speaking for myself I had many moments of self doubt. How are we going to find a space big enough to host the workshop? How are we going to find enough volunteers to be coaches? How are we going to find all of you?</p>
<p>We made a lot of mistakes. And we learned from them.</p>
<p>We did it together as a team. It took effort, but it was also a pleasure.</p>
<p>---</p>
<p>I hope all of you have met your coach by now. We have 26 coaches with us today. They are nice enough to spend their Saturday to make Django Girls possible, isn't that awesome? They've *also* come from all over the country.</p>
<p>Please raise your hand when you hear your name.</p>
<p>Could we have a round of applause for the coaches?</p>
<p>---</p>
<p>Django Girls is a global initiative. It all started two years ago at a technical conference in Berlin. It was a big international conference with people from all over Europe. Now you should know that IT conferences are very male dominated. Two of the participants of that conference, the founders of Django Girls - Ola and Ola, had a simple idea: what if we organize a workshop for beginners - and for women! So they organized the very first Django Girls in 2014.</p>
<p>Since then it has spread to 57 countries. There have been over 100 events already. This is the sixth one in the Netherlands.</p>
<p>More than 3,500 women have participated! Many have gone on to become coaches. And you remember that very first Django Girls workshop? 80% of the participants there have organized their own Django Girls events since then in their country.</p>
<p>---</p>
<p>Now for some practical information.</p>
<p>Today's workshop lasts from 9 to 5pm. You can find the schedule for today on the posters.</p>
<p>The bathrooms are right around the corner, out that door and to the right.</p>
<p>We have coffee, tea and snacks available now. We have a limited number of cups, so please try to reuse your cup!</p>
<p>We have lunch coming in later on. It will be served in the lobby.</p>
<p>We have a mystery event in the afternoon.</p>
<p>We're a bit unsure of the wifi capacity with so many people using it all at once. So try to be gentle with the wifi connection. In case of problems it's possible to do big parts of the tutorial offline. Your coaches also have a copy of all the files on usb sticks you need today so you don't have to download them.</p>
<p>Last but not least we have a code of conduct. The code of conduct is in place to ensure that everyone can feel safe at our event. You can find the full text on one of the posters. If you see anyone breaking the code of conduct, please talk to one the organizers!</p>
<p>---</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirls-denhaag-2016-slide.png "/></p>
</div>
</div>
EnglandC931Djangogirls denhaag 2016 slidehttp://www.matusiak.eu/numerodix/blog/2016/3/5/django-girls-den-haag-2016-welcome-speech/what django girls ishttp://feedproxy.google.com/~r/numerodix/~3/9x-YWUYqUSE/<div class="post-930 post hentry" id="post-930">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>February 24th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c930.png" style="display: none;">
<div class="entry">
<p><em>Given on Feb 23, 2016 at the Dutch Django Meetup in Amsterdam.</em></p>
<p>Today I want to tell you about a part of the Django community that you may not even know about.</p>
<p>---</p>
<p>This is how I think most of us see the Python community. A comfortable couch. Nice people. Right? Just a nice place to be.</p>
<p>It's easy to make an analogy with software. Almost every developer has had the experience of working on a codebase that they inherited from someone else. The dreaded *legacy project*. And it wasn't the most fun project to work on. Spaghetti code, no tests, no documentation, really hard to make changes without breaking something.</p>
<p>So after working on this day in and day out after a while you start to get a little sick of it. I start thinking to myself <em>"I've had it with this code. It expend so much energy on this and I have so little to show for it. Jeez, give me a codebase that's in good shape for a change. One that is modular, and has clean code. With good test coverage. If I had that I could *really* make it fly!"</em></p>
<p>I want to submit to you that the Python community is that nice codebase. It's when your code is in good shape and is easy to work on, that it's a great starting point to make it even better. To take the next step.</p>
<p>I'm sure you've heard this expression before: Came for the language, stayed for the community. People come to Python for the language, or for the libraries, or for the frameworks (like Django). Right? Just because they need to get some work done. And then they realize: hey there are conferences, there are meetups, and there are great people to hang out with. So they stay with Python not necessarily because it's the best programming language in the world, but rather because the community is a great place to be. It makes them feel at home.</p>
<p>So I'm saying: let's take the next step. Let's make it even more welcoming, even more inclusive!</p>
<p>---</p>
<p>Let me tell you about what we do. Since you're programmers I will explain this as a program. Django Girls is a one day programming workshop for women. Our mission is to bring in women who are new to IT and get them hooked on programming. Now the workshop is the box you see in the middle.</p>
<p>Then as input we take non-programmers. Most people who attend Django Girls have never written a program before. During the workshop they build a blog, from scratch. So they come in, never written a program before, and they go home, they've built a blog. Amazing, right? They do this following a tutorial which is very beginner friendly, so it explains everything they need to know.</p>
<p>Also as input we take developers. These are the programming coaches. They don't have to be professional developers, just have enough experience with programming to help someone else through the tutorial.</p>
<p>As output, we get programmers. They are beginners, of course, but they are programmers. We've given them the first step on a path that could potentially lead them to this room. Some percentage of Django Girls participants land junior developer jobs a few months down the road. But not everyone wants to be a developer, and that's fine. Some people are academics, and they want to learn how to automate parts of their work. Some work in marketing, and work with developers and want to understand what their colleagues do. And some people are just curious about programming and want to try it. We encourage all different demographics.</p>
<p>And also output, we get the same developers, and you may think all they did was volunteer a day of their time and that's it. But they've just spent a whole day coaching people in programming. If you're already a mentor to people at your job, that's excellent! But if you're not, coach at Django Girls for a day and you get really good practice that will come in very useful in your career, believe me.</p>
<p>---</p>
<p>So Django Girls is coming to Den Haag Saturday next week. We're going to be on the top floor of this office building. If you're familiar with Den Haag it's right next to the station Hollands Spoor.</p>
<p>We received applications to participate from more than 100 women. We're also lucky enough to have found more than 30 coaches to help us.</p>
<p>Unfortunately we only have space to host 60 participants, so we had to turn down a lot of people.</p>
<p>But the level of interest has been really impressive. We have people coming from cities all over the country, like Groningen and Leuwwarden, Nijmegen and Deventer. We have people coming from Belgium, where Django Girls hasn't taken root yet.</p>
<p>And then there's the 5 of us, the organizers. A few of us went to a Django Girls event as coaches and we loved it. We decided we wanted to organize one of these ourselves, in our city. Now we're just a bunch of software developers, we've never organized an event like this before. But we somehow pulled it off.</p>
<p>If we can do it, you can do it. Think about it.</p>
<p>---</p>
<p>Now, Django Girls has been organized before in the Netherlands. There is a group of organizers in Groningen who are the pioneers in our country - and they're planning another even this year. It's also been organized in Amsterdam before. And then there's our event, which is the upcoming one.</p>
<p>But like I said there is a lot of interest from people out there for a workshop like this. I would love to see more cities on this list in the future. So you could organize one. And you can be a coach! Most organizers have trouble finding enough coaches, and if they had more coaches they could accept more participants!</p>
<p>Thank you!</p>
<p>---</p>
<p>You can find <a href="http://www.slideshare.net/MartinMatusiak/dutch-django-meetup-feb-2016">the slides on Slideshare</a>.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/9x-YWUYqUSE" height="1" width="1" alt=""/>Wed, 24 Feb 2016 18:45:51 +0000http://www.matusiak.eu/numerodix/blog/2016/2/24/what-django-girls-is/django girlspublic speaking
<div class="post-930 post hentry" id="post-930">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>February 24th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c930.png" style="display: none;">
<div class="entry">
<p><em>Given on Feb 23, 2016 at the Dutch Django Meetup in Amsterdam.</em></p>
<p>Today I want to tell you about a part of the Django community that you may not even know about.</p>
<p>---</p>
<p>This is how I think most of us see the Python community. A comfortable couch. Nice people. Right? Just a nice place to be.</p>
<p>It's easy to make an analogy with software. Almost every developer has had the experience of working on a codebase that they inherited from someone else. The dreaded *legacy project*. And it wasn't the most fun project to work on. Spaghetti code, no tests, no documentation, really hard to make changes without breaking something.</p>
<p>So after working on this day in and day out after a while you start to get a little sick of it. I start thinking to myself <em>"I've had it with this code. It expend so much energy on this and I have so little to show for it. Jeez, give me a codebase that's in good shape for a change. One that is modular, and has clean code. With good test coverage. If I had that I could *really* make it fly!"</em></p>
<p>I want to submit to you that the Python community is that nice codebase. It's when your code is in good shape and is easy to work on, that it's a great starting point to make it even better. To take the next step.</p>
<p>I'm sure you've heard this expression before: Came for the language, stayed for the community. People come to Python for the language, or for the libraries, or for the frameworks (like Django). Right? Just because they need to get some work done. And then they realize: hey there are conferences, there are meetups, and there are great people to hang out with. So they stay with Python not necessarily because it's the best programming language in the world, but rather because the community is a great place to be. It makes them feel at home.</p>
<p>So I'm saying: let's take the next step. Let's make it even more welcoming, even more inclusive!</p>
<p>---</p>
<p>Let me tell you about what we do. Since you're programmers I will explain this as a program. Django Girls is a one day programming workshop for women. Our mission is to bring in women who are new to IT and get them hooked on programming. Now the workshop is the box you see in the middle.</p>
<p>Then as input we take non-programmers. Most people who attend Django Girls have never written a program before. During the workshop they build a blog, from scratch. So they come in, never written a program before, and they go home, they've built a blog. Amazing, right? They do this following a tutorial which is very beginner friendly, so it explains everything they need to know.</p>
<p>Also as input we take developers. These are the programming coaches. They don't have to be professional developers, just have enough experience with programming to help someone else through the tutorial.</p>
<p>As output, we get programmers. They are beginners, of course, but they are programmers. We've given them the first step on a path that could potentially lead them to this room. Some percentage of Django Girls participants land junior developer jobs a few months down the road. But not everyone wants to be a developer, and that's fine. Some people are academics, and they want to learn how to automate parts of their work. Some work in marketing, and work with developers and want to understand what their colleagues do. And some people are just curious about programming and want to try it. We encourage all different demographics.</p>
<p>And also output, we get the same developers, and you may think all they did was volunteer a day of their time and that's it. But they've just spent a whole day coaching people in programming. If you're already a mentor to people at your job, that's excellent! But if you're not, coach at Django Girls for a day and you get really good practice that will come in very useful in your career, believe me.</p>
<p>---</p>
<p>So Django Girls is coming to Den Haag Saturday next week. We're going to be on the top floor of this office building. If you're familiar with Den Haag it's right next to the station Hollands Spoor.</p>
<p>We received applications to participate from more than 100 women. We're also lucky enough to have found more than 30 coaches to help us.</p>
<p>Unfortunately we only have space to host 60 participants, so we had to turn down a lot of people.</p>
<p>But the level of interest has been really impressive. We have people coming from cities all over the country, like Groningen and Leuwwarden, Nijmegen and Deventer. We have people coming from Belgium, where Django Girls hasn't taken root yet.</p>
<p>And then there's the 5 of us, the organizers. A few of us went to a Django Girls event as coaches and we loved it. We decided we wanted to organize one of these ourselves, in our city. Now we're just a bunch of software developers, we've never organized an event like this before. But we somehow pulled it off.</p>
<p>If we can do it, you can do it. Think about it.</p>
<p>---</p>
<p>Now, Django Girls has been organized before in the Netherlands. There is a group of organizers in Groningen who are the pioneers in our country - and they're planning another even this year. It's also been organized in Amsterdam before. And then there's our event, which is the upcoming one.</p>
<p>But like I said there is a lot of interest from people out there for a workshop like this. I would love to see more cities on this list in the future. So you could organize one. And you can be a coach! Most organizers have trouble finding enough coaches, and if they had more coaches they could accept more participants!</p>
<p>Thank you!</p>
<p>---</p>
<p>You can find <a href="http://www.slideshare.net/MartinMatusiak/dutch-django-meetup-feb-2016">the slides on Slideshare</a>.</p>
</div>
</div>
EnglandC930http://www.matusiak.eu/numerodix/blog/2016/2/24/what-django-girls-is/why you should coach at django girlshttp://feedproxy.google.com/~r/numerodix/~3/lIRYK857iRc/<div class="post-929 post hentry" id="post-929">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>February 22nd, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c929.png" style="display: none;">
<div class="entry">
<p><em>Given on Dec 10, 2015 at PyLadies Amsterdam.</em></p>
<p>Dear PyLadies,</p>
<p>My name is Martin and I'm one of the organizers of Django Girls The Hague. Which will take place next year in the beginning of March.</p>
<p>Django Girls is a non-profit organization that aims to give women a really positive first experience with programming. I'm not going to explain why we think this is important, because I think if you're a member of PyLadies you already know that.</p>
<p>I will explain how we do it. We invite a room full of women to participate. We seat a group of 3 women around a table. And we give them a programming coach. What they will be doing is building a web application from scratch. Using a tutorial special made for Django Girls. Now, the programming coach is there to help them, to explain things, and to give moral support.</p>
<p>Now, the coaches are integral to the event. We as organizers can provide a nice room in a nice location, a good tutorial, and food etc, but the coach is the human factor.</p>
<p>We are currently trying to find these coaches. That's why I'm here today. I would really like to encourage you to sign up to be a coach.</p>
<p>I've been a coach at two Django Girls events in the past. And in fact tomorrow morning I'm flying to Italy to be a coach at Django Girls in Rome on Saturday. It's a really fun thing to do.</p>
<p>The people who come to Django Girls aren't the kind of people who say alright, so what is this programming thing all about? If it doesn't take more than 5 minutes I'm willing to give it a try and then I'll be on my way. These are people who decide to spend 8-9 hours learning something new, that they've never done before. I mean can you imagine? It takes little courage to do that. So they're really interested and motivated to learn programming. And as a coach you see programming happen for the first time, through their eyes. It's really exciting. It's a really fun way to spend a day.</p>
<p>In terms of what it takes to be a coach. I want to make this very clear: You don't have to an expert on Python or Django. I would recommend that you work through the tutorial that we use yourself. Ask yourself if you understand everything. Ask yourself if you think you can help someone complete it. If so then you can be a coach. Ultimately if you encounter a problem at the workshop we will have some more experienced coaches to help you.</p>
<p>So if you think this sounds awesome and you want to help us make this possible then sign up to be a coach. You can sign up on our website, just google for Django Girls and find our chapter for The Hague, Den Haag. We also have a twitter feed where you can follow our updates.</p>
<p>We would love to have you there! Thank you very much!!</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/lIRYK857iRc" height="1" width="1" alt=""/>Mon, 22 Feb 2016 19:31:14 +0000http://www.matusiak.eu/numerodix/blog/2016/2/22/why-you-should-coach-django-girls/django girlspublic speaking
<div class="post-929 post hentry" id="post-929">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>February 22nd, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c929.png" style="display: none;">
<div class="entry">
<p><em>Given on Dec 10, 2015 at PyLadies Amsterdam.</em></p>
<p>Dear PyLadies,</p>
<p>My name is Martin and I'm one of the organizers of Django Girls The Hague. Which will take place next year in the beginning of March.</p>
<p>Django Girls is a non-profit organization that aims to give women a really positive first experience with programming. I'm not going to explain why we think this is important, because I think if you're a member of PyLadies you already know that.</p>
<p>I will explain how we do it. We invite a room full of women to participate. We seat a group of 3 women around a table. And we give them a programming coach. What they will be doing is building a web application from scratch. Using a tutorial special made for Django Girls. Now, the programming coach is there to help them, to explain things, and to give moral support.</p>
<p>Now, the coaches are integral to the event. We as organizers can provide a nice room in a nice location, a good tutorial, and food etc, but the coach is the human factor.</p>
<p>We are currently trying to find these coaches. That's why I'm here today. I would really like to encourage you to sign up to be a coach.</p>
<p>I've been a coach at two Django Girls events in the past. And in fact tomorrow morning I'm flying to Italy to be a coach at Django Girls in Rome on Saturday. It's a really fun thing to do.</p>
<p>The people who come to Django Girls aren't the kind of people who say alright, so what is this programming thing all about? If it doesn't take more than 5 minutes I'm willing to give it a try and then I'll be on my way. These are people who decide to spend 8-9 hours learning something new, that they've never done before. I mean can you imagine? It takes little courage to do that. So they're really interested and motivated to learn programming. And as a coach you see programming happen for the first time, through their eyes. It's really exciting. It's a really fun way to spend a day.</p>
<p>In terms of what it takes to be a coach. I want to make this very clear: You don't have to an expert on Python or Django. I would recommend that you work through the tutorial that we use yourself. Ask yourself if you understand everything. Ask yourself if you think you can help someone complete it. If so then you can be a coach. Ultimately if you encounter a problem at the workshop we will have some more experienced coaches to help you.</p>
<p>So if you think this sounds awesome and you want to help us make this possible then sign up to be a coach. You can sign up on our website, just google for Django Girls and find our chapter for The Hague, Den Haag. We also have a twitter feed where you can follow our updates.</p>
<p>We would love to have you there! Thank you very much!!</p>
</div>
</div>
EnglandC929http://www.matusiak.eu/numerodix/blog/2016/2/22/why-you-should-coach-django-girls/what would you do with 6 months?http://feedproxy.google.com/~r/numerodix/~3/Kj9QxJX8Stg/<div class="post-924 post hentry" id="post-924">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>January 24th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c924.png" style="display: none;">
<div class="entry">
<p>In the first months of 2015 I realized that I was burned out. Work was fun, but it had expanded so much that it had taken over my entire life. Fergus O'Connell gives this definition of burnout: <em>you're at work, you're thinking about work, you're bringing work home with you, or you're cancelling other things so you can work</em>. Open and shut case, Johnson.</p>
<p>I decided it was time to change, everything. It was my very own "<em>everything stops!</em>" moment. I would leave my job in June and take a six month break from work. From all work to no work. The cover story was "sabbatical", but the working title was "life improvement project".</p>
<p>And it has been the most liberating time of my life. There was much planning and project management involved - I'll spare you that. Here are the milestones.</p>
<p><strong>Health</strong></p>
<ul>
<li>Lost weight.</li>
<li>Experimented with the paleo diet.</li>
<li>Saw a physical therapist.</li>
<li>Saw a psychologist.</li>
</ul>
<p><strong>Sports</strong></p>
<ul>
<li>Swam in the pool.</li>
<li>Biked intercity road trips.</li>
<li>Practiced yoga.</li>
<li>Practiced strength training.</li>
<li>Went running. Ran a 10km distance. Ran a 5km race.</li>
<li>Practiced interval training.</li>
<li>Played football.</li>
</ul>
<p><strong>Social</strong></p>
<ul>
<li>Saw friends.</li>
<li>Attended a Devnology weekend.</li>
<li>Gave pitches for Django Girls to recruit coaches and participants.</li>
<li>Took an improv class.</li>
<li>Took part in a theater workshop.</li>
<li>Hosted a friend for a long weekend.</li>
<li>Practiced speed dating.</li>
<li>Went on normal speed dates.</li>
<li>Attended my best friend's wedding.</li>
<li>Frequented 24 different social groups.</li>
<li>Attended 36 social events in total.</li>
<li>Met more new people than I've ever done before in 6 months.</li>
</ul>
<p><strong>Travel</strong></p>
<ul>
<li>To Dublin for a job interview.</li>
<li>To Friesland for Devnology weekend.</li>
<li>To Groningen for Django Girls.</li>
<li>To Bordeaux for Django Girls.</li>
<li>To Rome for Django Girls.</li>
</ul>
<p><strong>Language study</strong></p>
<ul>
<li>Had Skype sessions with Dutch tutors.</li>
<li>Completed a Portuguese course.</li>
<li>Attended language café meetups.</li>
<li>Read books in Portuguese.</li>
<li>Made polyglot-ish Youtube videos.</li>
<li>Wrote polyglot-ish blog entries.</li>
<li>Coached in French at Django Girls.</li>
<li>Coached in Italian at Django Girls.</li>
</ul>
<p><strong>Technology</strong></p>
<ul>
<li>Studied x86 assembly.</li>
<li>Read about computer architecture.</li>
<li>Learned some Prolog.</li>
<li>Wrote a memcached clone in Rust.</li>
<li>Read computer science papers.</li>
</ul>
<p><strong>Community work / Volunteering</strong></p>
<ul>
<li>Coached at three Django Girls events.</li>
<li>Taught a basic computer course at a community center.</li>
<li>Worked on organizing Django Girls Den Haag.</li>
<li>Submitted a talk proposal to PyCon Italia.</li>
</ul>
<p><strong>Career / Work</strong></p>
<ul>
<li>Reached out for career advice to my network.</li>
<li>Spoke to a lot of recruiters.</li>
<li>Interviewed with a lot of different companies, local and remote. Turned down many offers.</li>
<li>Applied for positions I wasn't qualified for. Was turned down.</li>
<li>Finally found the kind of companies that I was after. Accepted an offer.</li>
</ul>
<p>Many of these were a first. Over time there has been a conscious trend from "<em>things I do at home alone (in my pyjamas)</em>" to "<em>things I do with others</em>". I started from a core of health and fitness and moved on to more and more social challenges.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/Kj9QxJX8Stg" height="1" width="1" alt=""/>Sun, 24 Jan 2016 11:49:07 +0000http://www.matusiak.eu/numerodix/blog/2016/1/24/what-would-you-do-6-months/personal development
<div class="post-924 post hentry" id="post-924">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>January 24th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c924.png" style="display: none;">
<div class="entry">
<p>In the first months of 2015 I realized that I was burned out. Work was fun, but it had expanded so much that it had taken over my entire life. Fergus O'Connell gives this definition of burnout: <em>you're at work, you're thinking about work, you're bringing work home with you, or you're cancelling other things so you can work</em>. Open and shut case, Johnson.</p>
<p>I decided it was time to change, everything. It was my very own "<em>everything stops!</em>" moment. I would leave my job in June and take a six month break from work. From all work to no work. The cover story was "sabbatical", but the working title was "life improvement project".</p>
<p>And it has been the most liberating time of my life. There was much planning and project management involved - I'll spare you that. Here are the milestones.</p>
<p><strong>Health</strong></p>
<ul>
<li>Lost weight.</li>
<li>Experimented with the paleo diet.</li>
<li>Saw a physical therapist.</li>
<li>Saw a psychologist.</li>
</ul>
<p><strong>Sports</strong></p>
<ul>
<li>Swam in the pool.</li>
<li>Biked intercity road trips.</li>
<li>Practiced yoga.</li>
<li>Practiced strength training.</li>
<li>Went running. Ran a 10km distance. Ran a 5km race.</li>
<li>Practiced interval training.</li>
<li>Played football.</li>
</ul>
<p><strong>Social</strong></p>
<ul>
<li>Saw friends.</li>
<li>Attended a Devnology weekend.</li>
<li>Gave pitches for Django Girls to recruit coaches and participants.</li>
<li>Took an improv class.</li>
<li>Took part in a theater workshop.</li>
<li>Hosted a friend for a long weekend.</li>
<li>Practiced speed dating.</li>
<li>Went on normal speed dates.</li>
<li>Attended my best friend's wedding.</li>
<li>Frequented 24 different social groups.</li>
<li>Attended 36 social events in total.</li>
<li>Met more new people than I've ever done before in 6 months.</li>
</ul>
<p><strong>Travel</strong></p>
<ul>
<li>To Dublin for a job interview.</li>
<li>To Friesland for Devnology weekend.</li>
<li>To Groningen for Django Girls.</li>
<li>To Bordeaux for Django Girls.</li>
<li>To Rome for Django Girls.</li>
</ul>
<p><strong>Language study</strong></p>
<ul>
<li>Had Skype sessions with Dutch tutors.</li>
<li>Completed a Portuguese course.</li>
<li>Attended language café meetups.</li>
<li>Read books in Portuguese.</li>
<li>Made polyglot-ish Youtube videos.</li>
<li>Wrote polyglot-ish blog entries.</li>
<li>Coached in French at Django Girls.</li>
<li>Coached in Italian at Django Girls.</li>
</ul>
<p><strong>Technology</strong></p>
<ul>
<li>Studied x86 assembly.</li>
<li>Read about computer architecture.</li>
<li>Learned some Prolog.</li>
<li>Wrote a memcached clone in Rust.</li>
<li>Read computer science papers.</li>
</ul>
<p><strong>Community work / Volunteering</strong></p>
<ul>
<li>Coached at three Django Girls events.</li>
<li>Taught a basic computer course at a community center.</li>
<li>Worked on organizing Django Girls Den Haag.</li>
<li>Submitted a talk proposal to PyCon Italia.</li>
</ul>
<p><strong>Career / Work</strong></p>
<ul>
<li>Reached out for career advice to my network.</li>
<li>Spoke to a lot of recruiters.</li>
<li>Interviewed with a lot of different companies, local and remote. Turned down many offers.</li>
<li>Applied for positions I wasn't qualified for. Was turned down.</li>
<li>Finally found the kind of companies that I was after. Accepted an offer.</li>
</ul>
<p>Many of these were a first. Over time there has been a conscious trend from "<em>things I do at home alone (in my pyjamas)</em>" to "<em>things I do with others</em>". I started from a core of health and fitness and moved on to more and more social challenges.</p>
</div>
</div>
EnglandC924http://www.matusiak.eu/numerodix/blog/2016/1/24/what-would-you-do-6-months/two weeks of rusthttp://feedproxy.google.com/~r/numerodix/~3/o6qT1rTZVLc/<div class="post-927 post hentry" id="post-927">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>January 10th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c927.png" style="display: none;">
<div class="entry">
<p>Disclaimer: <em>I'm digging Rust. I lost my hunger for programming from doing too many sad commercial projects. And now it's back. You rock, Rust!</em></p>
<p>I spent about two weeks over the Christmas/New Year break hacking on <a href="https://github.com/numerodix/emcache">emcache</a>, a memcached clone in Rust. Why a memcached clone? Because it's a simple protocol that I understand and is not too much work to implement. It turns out I was in for a really fun time.</p>
<p><strong>UPSIDES</strong></p>
<p><strong>The build system and the package manager</strong> is one of the best parts of Rust. How often do you hear that about a language? In Python I try to avoid even having dependencies if I can, and only use the standard library. I don't want my users to have to deal with virtualenv and pip if they don't have to (especially if they're not pythonistas). In Rust you "cargo build". One step, all your dependencies are fetched, built, and your application with it. No special cases, no build scripts, no surprising behavior *whatsoever*. That's it. You "cargo test". And you "cargo build --release" which makes your program 2x faster (did I mention that llvm is pretty cool?)</p>
<p>Rust *feels* <strong>ergonomic</strong>. That's the best word I can think of. With every other statically compiled language I've ever used too much of my focus was being constantly diverted from what I was trying to accomplish to annoying little busy work the compiler kept bugging me about. For me Rust is the first statically typed language I enjoy using. Indeed, <strong>ergonomics is a feature</strong> in Rust - RFCs talk about it a lot. And that's important, since no matter how cool your ideas for language features are you want to make sure people can use them without having to jump through a lot of hoops.</p>
<p>Rust aims to be <strong>concise</strong>. Function is <em>fn</em>, public is <em>pub</em>, vector is <em>vec</em>, you can figure it out. You can never win a discussion about conciseness because something will always be too long for someone while being too short for someone else. Do you want <em>u64</em> or do you want <em>WholeNumberWithoutPlusOrMinusSignThatFitsIn64Bits</em>? The point is Rust is concise and typeable, it doesn't require so much code that you need an IDE to help you type some of it.</p>
<p>Furthermore, it feels very <strong>composable</strong>. As in: the things you make seem to fit together well. That's a rare quality in languages, and almost never happens to me on a first project in a new language. The design of emcache is actually nicely <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/doc/Architecture.md">decoupled</a>, and it just got that way on the first try. All of the components are fully unit tested, even the transport that reads/writes bytes to/from a socket. All I had to do for that is implement a TestStream that implements the traits <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/testlib/test_stream.rs#L90">Read</a> and <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/testlib/test_stream.rs#L100">Write</a> (basically one method each) and swap it in for a TcpStream. How come? Because the components provided by the stdlib *do* compose that well.</p>
<p>But there is no <strong>object system</strong>! Well, structs and impls basically give you something close enough that you can do OO modeling anyway. It turns out you can even do a certain amount of dynamic dispatch with trait objects, but that's something I read up on after the fact. The one thing that is incredibly strict in Rust, though, is <strong>ownership</strong>, so when you design your objects (let's just call them them that, I don't know what else to call them) you need to decide right away whether an object that stores another object will own or borrow that object. If you borrow you need to use lifetimes and it gets a bit complicated.</p>
<p>Parallelism in emcache is achieved using threads and <strong>channels</strong>. Think one very fast storage and multiple slow transports. Channels are async, which is exactly what I want in this scenario. Like in Scala, when you send a value over a channel you don't actually "send" anything, it's one big shared memory space and you just transfer ownership of an immutable value in memory while invalidating the pointer on the "sending" side (which probably can be optimized away completely). In practice, channels require a little <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/orchestrator/typedefs.rs#L10">typedefing</a> overhead so you can keep things clear, especially when you're sending channels over channels. Otherwise I tend to get lost in what goes where. (If you've done Erlang/OTP you know that whole dance of a tuple in a tuple in a tuple, like that Inception movie.) But this case stands out as atypical in a language where boilerplate is rarely needed.</p>
<p><strong>Macros</strong>. I bet you expected these to be on the list. To be honest, I don't have strong feelings about Rust's macros. I don't think of them as a unit of design (Rust is not a lisp), that's what traits are for. Macros are more like an escape hatch for <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L35">unpleasant situations</a>. They are powerful and mostly nice, but they have some weird effects too in terms of module/crate visibility and how they make compiler error messages look (slightly more confusing I find).</p>
<p>The <strong>learning resources</strong> have become very good. <a href="https://doc.rust-lang.org/book/">The Rust book</a> is very well written, but I found it a tough read at first. Start with <a href="http://rustbyexample.com/">Rust by example</a>, it's great. Then do some hacking and come back to "the book", it makes total sense to me now.</p>
<p>No segfaults, no uninitialized memory, no coercion bugs, no data races, no null pointers, no header files, no makefiles, no autoconf, no cmake, no gdb. What if all the problems of c/c++ were fixed with one swing of a magic wand? The future is here, people.</p>
<p>Finally, Rust *feels* <strong>productive</strong>. In every statically compiled language I feel I would go way faster in Python. In Rust I'm not so sure. It's concise, it's typeable and it's composable. It doesn't force me to make irrelevant nit picky decisions that I will later have to spend tons of time refactoring to recover from. And productivity is a sure way to happiness.</p>
<p><strong>DOWNSIDES</strong></p>
<p>The <strong>standard library</strong> is rather small, and you will need to go elsewhere even for certain pretty simple things like random numbers or a buffered stream. The good news is that Rust's <a href="https://crates.io/">crates ecosystem</a> has already grown quite large and there seem to be crates for many of these things, some even being incubated to join the standard library later on.</p>
<p>While trying to be concise, Rust is still <strong>a bit wordy and syntax heavy</strong> with all the pointer types and explicit casts that you see in typical <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L162">code</a>. So it's not *that easy* to read, but I feel once you grasp the concepts it does begin to feel very logical. I sure wouldn't mind my <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/tests.rs#L728">tests</a> looking a bit <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/pyemc/test_integration.py#L408">simpler</a> - maybe it's just my lack of Rust foo still.</p>
<p>The <strong>borrow checker</strong> is tough, everyone's saying this. I keep running into cases where I need to load a value, do a check on it, and then make a decision to modify or not. Problem is the load requires a borrow, and then another borrow is used in the check, which is enough to break the rules. So far I haven't come across a case I absolutely couldn't work around with scopes and shuffling code around, but I wouldn't call it fun - nor is the <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L345">resulting code</a> very nice.</p>
<p><strong>Closures</strong> are difficult. In your run-of-the-mill language I would say "put these lines in a closure, I'll run them later and don't worry your pretty little head about it". Not so in Rust because of move semantics and borrowing. I was trying to solve this problem: how do I <a href="https://github.com/numerodix/emcache/blob/da7b6ca93f9bb7248ea47a7e2850a9ca8af86eac/src/metrics/recorder.rs#L31">wrap</a> (in a minimally intrusive way) an arbitrary set of statements so that I can <a href="https://github.com/numerodix/emcache/blob/da7b6ca93f9bb7248ea47a7e2850a9ca8af86eac/src/orchestrator/transport_task.rs#L78">time</a> their execution (in Python this would be a context manager)? This would be code that might mutate self, refers to local vars (which could be used again after the closure), returns a value and so on. It appears tricky to solve in the general case, still haven't cracked it.</p>
<p><strong>*mut T</strong> is tricky. I was trying to build my own LRU map (before I knew there was a crate for it), and given Rust's lifetime rules you can't do circular references in normal safe Rust. One thing *has to* outlive another in Rust's lifetime model. So I started hacking together a linked list using *mut T (as you would) and I realized things weren't pointing to where I thought they were <a href="https://github.com/numerodix/emcache/blob/f2f9369d7b96713d524a13ab812c0312daf70b11/src/storage/linked_list.rs#L123">at all</a>. I still don't know what happened.</p>
<p>The <strong>builder pattern</strong>. This is an ugly corner of Rust. Yeah, I get that things like varargs and keyword arguments have a runtime overhead. But the builder pattern, which is to say writing a completely separate struct just for the sake of constructing another struct, is pure boilerplate, it's so un-Rust. Maybe we can derive these someday?</p>
<p><strong>Code coverage</strong>. There will probably be a native solution for this at some point. For now people use a workaround with <a href="https://users.rust-lang.org/t/tutorial-how-to-collect-test-coverages-for-rust-project/650">kcov</a>, which just <a href="https://gist.github.com/numerodix/ed4335b4fd08dbd2fd6b">didn't work at all</a> on my code. Maybe it's because I'm on nightly? <a href="https://twitter.com/hauleth/status/686532939761451008">Fixed</a>!</p>
<p>---</p>
<p>So there you have it. Rust is a fun language to use, and it feels like an incredibly well designed language. Language design is really hard, and sometimes you succeed.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/o6qT1rTZVLc" height="1" width="1" alt=""/>Sun, 10 Jan 2016 11:53:40 +0000http://www.matusiak.eu/numerodix/blog/2016/1/10/two-weeks-rust/code
<div class="post-927 post hentry" id="post-927">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>January 10th, 2016</small>
<img src="http://www.matusiak.eu/numerodix/blog/c927.png" style="display: none;">
<div class="entry">
<p>Disclaimer: <em>I'm digging Rust. I lost my hunger for programming from doing too many sad commercial projects. And now it's back. You rock, Rust!</em></p>
<p>I spent about two weeks over the Christmas/New Year break hacking on <a href="https://github.com/numerodix/emcache">emcache</a>, a memcached clone in Rust. Why a memcached clone? Because it's a simple protocol that I understand and is not too much work to implement. It turns out I was in for a really fun time.</p>
<p><strong>UPSIDES</strong></p>
<p><strong>The build system and the package manager</strong> is one of the best parts of Rust. How often do you hear that about a language? In Python I try to avoid even having dependencies if I can, and only use the standard library. I don't want my users to have to deal with virtualenv and pip if they don't have to (especially if they're not pythonistas). In Rust you "cargo build". One step, all your dependencies are fetched, built, and your application with it. No special cases, no build scripts, no surprising behavior *whatsoever*. That's it. You "cargo test". And you "cargo build --release" which makes your program 2x faster (did I mention that llvm is pretty cool?)</p>
<p>Rust *feels* <strong>ergonomic</strong>. That's the best word I can think of. With every other statically compiled language I've ever used too much of my focus was being constantly diverted from what I was trying to accomplish to annoying little busy work the compiler kept bugging me about. For me Rust is the first statically typed language I enjoy using. Indeed, <strong>ergonomics is a feature</strong> in Rust - RFCs talk about it a lot. And that's important, since no matter how cool your ideas for language features are you want to make sure people can use them without having to jump through a lot of hoops.</p>
<p>Rust aims to be <strong>concise</strong>. Function is <em>fn</em>, public is <em>pub</em>, vector is <em>vec</em>, you can figure it out. You can never win a discussion about conciseness because something will always be too long for someone while being too short for someone else. Do you want <em>u64</em> or do you want <em>WholeNumberWithoutPlusOrMinusSignThatFitsIn64Bits</em>? The point is Rust is concise and typeable, it doesn't require so much code that you need an IDE to help you type some of it.</p>
<p>Furthermore, it feels very <strong>composable</strong>. As in: the things you make seem to fit together well. That's a rare quality in languages, and almost never happens to me on a first project in a new language. The design of emcache is actually nicely <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/doc/Architecture.md">decoupled</a>, and it just got that way on the first try. All of the components are fully unit tested, even the transport that reads/writes bytes to/from a socket. All I had to do for that is implement a TestStream that implements the traits <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/testlib/test_stream.rs#L90">Read</a> and <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/testlib/test_stream.rs#L100">Write</a> (basically one method each) and swap it in for a TcpStream. How come? Because the components provided by the stdlib *do* compose that well.</p>
<p>But there is no <strong>object system</strong>! Well, structs and impls basically give you something close enough that you can do OO modeling anyway. It turns out you can even do a certain amount of dynamic dispatch with trait objects, but that's something I read up on after the fact. The one thing that is incredibly strict in Rust, though, is <strong>ownership</strong>, so when you design your objects (let's just call them them that, I don't know what else to call them) you need to decide right away whether an object that stores another object will own or borrow that object. If you borrow you need to use lifetimes and it gets a bit complicated.</p>
<p>Parallelism in emcache is achieved using threads and <strong>channels</strong>. Think one very fast storage and multiple slow transports. Channels are async, which is exactly what I want in this scenario. Like in Scala, when you send a value over a channel you don't actually "send" anything, it's one big shared memory space and you just transfer ownership of an immutable value in memory while invalidating the pointer on the "sending" side (which probably can be optimized away completely). In practice, channels require a little <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/orchestrator/typedefs.rs#L10">typedefing</a> overhead so you can keep things clear, especially when you're sending channels over channels. Otherwise I tend to get lost in what goes where. (If you've done Erlang/OTP you know that whole dance of a tuple in a tuple in a tuple, like that Inception movie.) But this case stands out as atypical in a language where boilerplate is rarely needed.</p>
<p><strong>Macros</strong>. I bet you expected these to be on the list. To be honest, I don't have strong feelings about Rust's macros. I don't think of them as a unit of design (Rust is not a lisp), that's what traits are for. Macros are more like an escape hatch for <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L35">unpleasant situations</a>. They are powerful and mostly nice, but they have some weird effects too in terms of module/crate visibility and how they make compiler error messages look (slightly more confusing I find).</p>
<p>The <strong>learning resources</strong> have become very good. <a href="https://doc.rust-lang.org/book/">The Rust book</a> is very well written, but I found it a tough read at first. Start with <a href="http://rustbyexample.com/">Rust by example</a>, it's great. Then do some hacking and come back to "the book", it makes total sense to me now.</p>
<p>No segfaults, no uninitialized memory, no coercion bugs, no data races, no null pointers, no header files, no makefiles, no autoconf, no cmake, no gdb. What if all the problems of c/c++ were fixed with one swing of a magic wand? The future is here, people.</p>
<p>Finally, Rust *feels* <strong>productive</strong>. In every statically compiled language I feel I would go way faster in Python. In Rust I'm not so sure. It's concise, it's typeable and it's composable. It doesn't force me to make irrelevant nit picky decisions that I will later have to spend tons of time refactoring to recover from. And productivity is a sure way to happiness.</p>
<p><strong>DOWNSIDES</strong></p>
<p>The <strong>standard library</strong> is rather small, and you will need to go elsewhere even for certain pretty simple things like random numbers or a buffered stream. The good news is that Rust's <a href="https://crates.io/">crates ecosystem</a> has already grown quite large and there seem to be crates for many of these things, some even being incubated to join the standard library later on.</p>
<p>While trying to be concise, Rust is still <strong>a bit wordy and syntax heavy</strong> with all the pointer types and explicit casts that you see in typical <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L162">code</a>. So it's not *that easy* to read, but I feel once you grasp the concepts it does begin to feel very logical. I sure wouldn't mind my <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/tests.rs#L728">tests</a> looking a bit <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/pyemc/test_integration.py#L408">simpler</a> - maybe it's just my lack of Rust foo still.</p>
<p>The <strong>borrow checker</strong> is tough, everyone's saying this. I keep running into cases where I need to load a value, do a check on it, and then make a decision to modify or not. Problem is the load requires a borrow, and then another borrow is used in the check, which is enough to break the rules. So far I haven't come across a case I absolutely couldn't work around with scopes and shuffling code around, but I wouldn't call it fun - nor is the <a href="https://github.com/numerodix/emcache/blob/dd8d72d5c27781345a8288f85d2da3f45e4398d3/src/protocol/driver.rs#L345">resulting code</a> very nice.</p>
<p><strong>Closures</strong> are difficult. In your run-of-the-mill language I would say "put these lines in a closure, I'll run them later and don't worry your pretty little head about it". Not so in Rust because of move semantics and borrowing. I was trying to solve this problem: how do I <a href="https://github.com/numerodix/emcache/blob/da7b6ca93f9bb7248ea47a7e2850a9ca8af86eac/src/metrics/recorder.rs#L31">wrap</a> (in a minimally intrusive way) an arbitrary set of statements so that I can <a href="https://github.com/numerodix/emcache/blob/da7b6ca93f9bb7248ea47a7e2850a9ca8af86eac/src/orchestrator/transport_task.rs#L78">time</a> their execution (in Python this would be a context manager)? This would be code that might mutate self, refers to local vars (which could be used again after the closure), returns a value and so on. It appears tricky to solve in the general case, still haven't cracked it.</p>
<p><strong>*mut T</strong> is tricky. I was trying to build my own LRU map (before I knew there was a crate for it), and given Rust's lifetime rules you can't do circular references in normal safe Rust. One thing *has to* outlive another in Rust's lifetime model. So I started hacking together a linked list using *mut T (as you would) and I realized things weren't pointing to where I thought they were <a href="https://github.com/numerodix/emcache/blob/f2f9369d7b96713d524a13ab812c0312daf70b11/src/storage/linked_list.rs#L123">at all</a>. I still don't know what happened.</p>
<p>The <strong>builder pattern</strong>. This is an ugly corner of Rust. Yeah, I get that things like varargs and keyword arguments have a runtime overhead. But the builder pattern, which is to say writing a completely separate struct just for the sake of constructing another struct, is pure boilerplate, it's so un-Rust. Maybe we can derive these someday?</p>
<p><strong>Code coverage</strong>. There will probably be a native solution for this at some point. For now people use a workaround with <a href="https://users.rust-lang.org/t/tutorial-how-to-collect-test-coverages-for-rust-project/650">kcov</a>, which just <a href="https://gist.github.com/numerodix/ed4335b4fd08dbd2fd6b">didn't work at all</a> on my code. Maybe it's because I'm on nightly? <a href="https://twitter.com/hauleth/status/686532939761451008">Fixed</a>!</p>
<p>---</p>
<p>So there you have it. Rust is a fun language to use, and it feels like an incredibly well designed language. Language design is really hard, and sometimes you succeed.</p>
</div>
</div>
EnglandC927http://www.matusiak.eu/numerodix/blog/2016/1/10/two-weeks-rust/django girls 2015 summaryhttp://feedproxy.google.com/~r/numerodix/~3/6o5a5fE-V-8/<div class="post-926 post hentry" id="post-926">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>December 16th, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c926.png" style="display: none;">
<div class="entry">
<p>I've never been too far removed from Django Girls. I was present at EuroPython 2014 where the very first Django Girls workshop was held. But at the time I had no idea what that even was. It wasn't until a few months later that the story of Django Girls started reverberating through the Python web.</p>
<p>I decided to take the plunge in September and attend my first Django Girls in Groningen. It was a great experience and I knew right away that I wanted to do more of these. I kept checking the event calendar every few weeks and eventually I settled on Bordeaux in November and Rome in December.</p>
<p><strong>Stats</strong></p>
<p>Groningen: 60 participants, 20 coaches</p>
<p>Bordeaux: 27 participants, 10 coaches</p>
<p>Rome: 35 participants, 11 coaches</p>
<p>Our combined group of 40 coaches has taught programming for a day to 120 women! And globally Django Girls is nearing 3000 participants with multiple events happening pretty much every single weekend.</p>
<p><strong>What about 2016?</strong></p>
<p>The big news is that we are organizing our <a href="https://djangogirls.org/denhaag">own event in Den Haag</a> in March!</p>
<p>Beyond that I'm sure I will be present at other Django Girls events too - I just don't know which ones yet.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/6o5a5fE-V-8" height="1" width="1" alt=""/>Wed, 16 Dec 2015 10:02:00 +0000http://www.matusiak.eu/numerodix/blog/2015/12/16/django-girls-2015-summary/django girls
<div class="post-926 post hentry" id="post-926">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>December 16th, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c926.png" style="display: none;">
<div class="entry">
<p>I've never been too far removed from Django Girls. I was present at EuroPython 2014 where the very first Django Girls workshop was held. But at the time I had no idea what that even was. It wasn't until a few months later that the story of Django Girls started reverberating through the Python web.</p>
<p>I decided to take the plunge in September and attend my first Django Girls in Groningen. It was a great experience and I knew right away that I wanted to do more of these. I kept checking the event calendar every few weeks and eventually I settled on Bordeaux in November and Rome in December.</p>
<p><strong>Stats</strong></p>
<p>Groningen: 60 participants, 20 coaches</p>
<p>Bordeaux: 27 participants, 10 coaches</p>
<p>Rome: 35 participants, 11 coaches</p>
<p>Our combined group of 40 coaches has taught programming for a day to 120 women! And globally Django Girls is nearing 3000 participants with multiple events happening pretty much every single weekend.</p>
<p><strong>What about 2016?</strong></p>
<p>The big news is that we are organizing our <a href="https://djangogirls.org/denhaag">own event in Den Haag</a> in March!</p>
<p>Beyond that I'm sure I will be present at other Django Girls events too - I just don't know which ones yet.</p>
</div>
</div>
EnglandC926http://www.matusiak.eu/numerodix/blog/2015/12/16/django-girls-2015-summary/djangogirls as a keyframe momenthttp://feedproxy.google.com/~r/numerodix/~3/WReNVhyIbAI/<div class="post-925 post hentry" id="post-925">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>December 3rd, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c925.png" style="display: none;">
<div class="entry">
<p>In video compression there is a concept known as the keyframe. The simplest way to store a video recording is to store each frame (let's say it's 25 frames per second) as an image, all together in one big file. But people noticed that when progressing from frame to frame most of the image of a frame does not change between frames. That makes sense, otherwise the whole screen would flash constantly. The new model of storing video was to store frame 1 in its entirety, and then for frame 2, frame 3 and onwards you would only store what changed from the previous frame.</p>
<p>This gives enormous gains in terms of filesize and all common video formats use it. But we don't always view video from frame 1 right up until the end. Sometimes we want to seek backwards and forwards. If we only had one frame in its entirety and then a long sequence of frame changes it would be very expensive (and therefore slow) to calculate what frame 37500 at the 25 minute mark should look like.</p>
<p>That's why we also have keyframes. A keyframe is simply a frame that is stored in its entirety (like frame 1), which occurs at certain moments in the video. For instance, once every minute (every 1500 frames) we store the whole frame, and in between keyframes we only store changes or "deltas".</p>
<p>As it happens, keyframes also have a second purpose as an error correction mechanism. If you ever try to play back a video and all you see is the whole screen full of weird purple rectangles with something moving here and there, that's because the video player is applying changes frame by frame, to a keyframe which is damaged. So all you see is the changes, but not the original image from which the changes have been calculated. And thus it looks like the video is broken. But if you wait long enough, you might reach a keyframe. And once you have a keyframe you have the whole image again, and calculating changes from that image makes the video "work" again.<sup>1</sup> So if some of the keyframes are missing or damaged it breaks part of the video, but not all of it. Keyframes are a mechanism to recover from a partially damaged video file.</p>
<p>We can even view a keyframe as a metaphor in life. A keyframe is a point where we have excellent clarity - we feel we know exactly what we need to keep doing, what we need to stop doing, what we need to start doing. But then the moment passes, we chug along, and after a while it's not all that easy to measure exactly how much progress we've made, or whether we're headed in the right direction. Not until the next moment of clarity. The next keyframe, if you will.</p>
<p>---</p>
<p>I'm heading home from <a href="https://www.flickr.com/photos/djangogirls/albums/72157659514855664">Django Girls Bordeaux</a> and as I'm sitting on the plane I realize I'm incredibly at peace with the world today. Nothing seems to bother me at all. As if I've just nourished myself on the exact right diet that my body needed. Even physiologically speaking - over the last two days I've lived on less food and less sleep than normal. Yet my body kept saying: that's all we need. Like an engine running on the perfect fuel, at peak performance.</p>
<p>I've coached at Django Girls once before, but this time was even better. As "meta coach" my mission was to supplement the coaches - one per team - by helping the participants whose coach was busy, or by helping with obscure problems. In practice I ended up more like a doctor doing rounds - I would quite systematically visit each team and help anyone who needed assistance. This was super awesome, since I had a chance to talk to all the participants and all the coaches.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-cake.jpg"/></p>
<p>At its core Django Girls is a really simple idea. We invite a group of women and teach them some basic programming and web development. Big deal, right? But think about the last time you learned some basic programming... What did that lead to? A career in software by any chance? A life long interest in programming perhaps? So you see, it *is* a big deal. It's actually one of the bigger deals out there.</p>
<p>Let me illustrate why.</p>
<p>On Friday night we had a drinks event for the coaches. It was basically like any group of programmers drinking beer and talking shop, with splinters of pip, pypi mirrors, wheels and devpi flying everywhere (mercifully, a critique on the state of python packaging was omitted). For me it was doubly interesting, since that's literally the first time I've ever talked about programming in French.<sup>2</sup> But I've heard a version of that conversation any number of times, and basically it's a group of coders making fun of and complaining about stuff all night long, albeit in an entertaining manner.<sup>3</sup> This is our culture, people. Oh and I forgot to mention that 9 of 10 coaches were male. (But that's irrelevant, right?) End of scene.</p>
<p>Saturday rolls around, it's the big day. The room fills with 27 participants and their coaches. Everyone's ready to roll. The participants are a little shell shocked at first, not surprisingly. How would you feel if you had to type cryptic stuff in a terminal window? But quite soon everyone is humming along nicely. The coaches aren't talking amongst themselves now, they're with their teams. And each one is doing a fantastic job. (I saw the whole thing, remember? I was walking around.) They're being supportive. They're enthusiastic. They explain things patiently. They help the participants relax and understand that they're on the right track.</p>
<p>Let me repeat that in case you got distracted for a second. The *participants* are making the *coaches* better. They're making *us* think and feel more positive and have more fun than usual.</p>
<p>And the participants? Well, where do I start? When is the last time you had the courage and the patience to spend 9 hours learning something new? Something that many people think <em>"isn't for people like yourself"</em>? Right, chew on that one for a minute. You see, Django Girls isn't like being in school where you mindlessly sit through one class after another. The people who participate are motivated to learn. They work through a tutorial that, despite having been written for beginners, is full of technical terms they've never heard before.<sup>4</sup> They're expected to learn mostly through reading and performing exercises. They're expected to absorb a lot of knowledge throughout the day. They're expected to show a lot of patience and perseverance. And boy do they ever. Not only that, they are some of the nicest and most fun people you could ever spend a day with.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-participants.jpg"/></p>
<p>So you see, it's not that we're doing them a favor because one can have a nice career in IT these days. You don't have to work in IT to have an awesome career, there are many other options. "We" need "them" much more than "they" need "us".<sup>5</sup></p>
<p>They are beginners. That sounds like a bad thing, but it's actually an awesome thing. They didn't come up through our computer science programs. They didn't cut their teeth on PHP back when it was just C macros.<sup>6</sup> They come from a different background, with a different mindset, and a fresh perspective. They're not jaded like us, joking around about how broken software is. And we, the coaches, are seeing it through their eyes. Why is coaching at Django Girls so fulfilling? Because wow, that's what programming is *supposed* to be like!</p>
<p>Some highlights that stuck in my mind:</p>
<ul>
<li>The participant who said <em>"so a=6 and b=4, but how do you get 24?"</em> Thirty minutes later not only is assignment under control, she says <em>"oh so len and str are functions I can use just like in Excel"</em>?</li>
<li>The participant who would explain back to me what she had learned, in her own words, and her explanation was dead on every time. Later on she got into a discussion with her coach on the merits of Django vs Wordpress and what you could do/couldn't do with either one.</li>
<li>The participant who early in the day was almost too focused to talk. By the afternoon she'd racked up enough wins that she was listening to music on her phone, reading the tutorial out loud and nodding along, totally getting it.</li>
<li>The participant who finished the whole tutorial with time to spare (trust me, it's really long) and was browsing sites on code bootcamps while telling me about a site she was planning to build to serve files for use at the library where she works.</li>
</ul>
<p>And that, to make a long story short, is why someone who's been a programmer for 20 years is raving about how incredible it is to coach at Django Girls. A moment where everything comes together and everything is awesome. A keyframe moment that reminds me that *this* is what I want my life to be about.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-group.jpg"/></p>
<p>What are the keyframe moments of your life?</p>
<p>---</p>
<ol>
<li>I say "work" because as far as the video player is concerned a frame is just a bunch of pixels with colors. It has no way of knowing what the frame is supposed to look like.</li>
<li>The whole idea of coaching in French was a massive YOLO. It was tough, but it was super fun!</li>
<li>I know it extremely well, because in my previous team that was literally my favorite way to pass the time with my programmer buddies.</li>
<li>I worked through it myself. Last week I didn't know fichier from dossier. I made a stack of flashcards for all the technical terms you encounter in the tutorial and crammed them. Thank you for saving my skin, <a href="http://ankisrs.net/">Anki</a>!</li>
<li>The "we" vs "they" rhetoric is pretty painful to read, isn't it?</li>
<li>Or whatever your claim to fame is.</li>
</ol>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/WReNVhyIbAI" height="1" width="1" alt=""/>Thu, 03 Dec 2015 13:24:35 +0000http://www.matusiak.eu/numerodix/blog/2015/12/3/djangogirls-keyframe-moment/django girls
<div class="post-925 post hentry" id="post-925">
<img title="inglés" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/england.png"> <small>December 3rd, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c925.png" style="display: none;">
<div class="entry">
<p>In video compression there is a concept known as the keyframe. The simplest way to store a video recording is to store each frame (let's say it's 25 frames per second) as an image, all together in one big file. But people noticed that when progressing from frame to frame most of the image of a frame does not change between frames. That makes sense, otherwise the whole screen would flash constantly. The new model of storing video was to store frame 1 in its entirety, and then for frame 2, frame 3 and onwards you would only store what changed from the previous frame.</p>
<p>This gives enormous gains in terms of filesize and all common video formats use it. But we don't always view video from frame 1 right up until the end. Sometimes we want to seek backwards and forwards. If we only had one frame in its entirety and then a long sequence of frame changes it would be very expensive (and therefore slow) to calculate what frame 37500 at the 25 minute mark should look like.</p>
<p>That's why we also have keyframes. A keyframe is simply a frame that is stored in its entirety (like frame 1), which occurs at certain moments in the video. For instance, once every minute (every 1500 frames) we store the whole frame, and in between keyframes we only store changes or "deltas".</p>
<p>As it happens, keyframes also have a second purpose as an error correction mechanism. If you ever try to play back a video and all you see is the whole screen full of weird purple rectangles with something moving here and there, that's because the video player is applying changes frame by frame, to a keyframe which is damaged. So all you see is the changes, but not the original image from which the changes have been calculated. And thus it looks like the video is broken. But if you wait long enough, you might reach a keyframe. And once you have a keyframe you have the whole image again, and calculating changes from that image makes the video "work" again.<sup>1</sup> So if some of the keyframes are missing or damaged it breaks part of the video, but not all of it. Keyframes are a mechanism to recover from a partially damaged video file.</p>
<p>We can even view a keyframe as a metaphor in life. A keyframe is a point where we have excellent clarity - we feel we know exactly what we need to keep doing, what we need to stop doing, what we need to start doing. But then the moment passes, we chug along, and after a while it's not all that easy to measure exactly how much progress we've made, or whether we're headed in the right direction. Not until the next moment of clarity. The next keyframe, if you will.</p>
<p>---</p>
<p>I'm heading home from <a href="https://www.flickr.com/photos/djangogirls/albums/72157659514855664">Django Girls Bordeaux</a> and as I'm sitting on the plane I realize I'm incredibly at peace with the world today. Nothing seems to bother me at all. As if I've just nourished myself on the exact right diet that my body needed. Even physiologically speaking - over the last two days I've lived on less food and less sleep than normal. Yet my body kept saying: that's all we need. Like an engine running on the perfect fuel, at peak performance.</p>
<p>I've coached at Django Girls once before, but this time was even better. As "meta coach" my mission was to supplement the coaches - one per team - by helping the participants whose coach was busy, or by helping with obscure problems. In practice I ended up more like a doctor doing rounds - I would quite systematically visit each team and help anyone who needed assistance. This was super awesome, since I had a chance to talk to all the participants and all the coaches.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-cake.jpg"/></p>
<p>At its core Django Girls is a really simple idea. We invite a group of women and teach them some basic programming and web development. Big deal, right? But think about the last time you learned some basic programming... What did that lead to? A career in software by any chance? A life long interest in programming perhaps? So you see, it *is* a big deal. It's actually one of the bigger deals out there.</p>
<p>Let me illustrate why.</p>
<p>On Friday night we had a drinks event for the coaches. It was basically like any group of programmers drinking beer and talking shop, with splinters of pip, pypi mirrors, wheels and devpi flying everywhere (mercifully, a critique on the state of python packaging was omitted). For me it was doubly interesting, since that's literally the first time I've ever talked about programming in French.<sup>2</sup> But I've heard a version of that conversation any number of times, and basically it's a group of coders making fun of and complaining about stuff all night long, albeit in an entertaining manner.<sup>3</sup> This is our culture, people. Oh and I forgot to mention that 9 of 10 coaches were male. (But that's irrelevant, right?) End of scene.</p>
<p>Saturday rolls around, it's the big day. The room fills with 27 participants and their coaches. Everyone's ready to roll. The participants are a little shell shocked at first, not surprisingly. How would you feel if you had to type cryptic stuff in a terminal window? But quite soon everyone is humming along nicely. The coaches aren't talking amongst themselves now, they're with their teams. And each one is doing a fantastic job. (I saw the whole thing, remember? I was walking around.) They're being supportive. They're enthusiastic. They explain things patiently. They help the participants relax and understand that they're on the right track.</p>
<p>Let me repeat that in case you got distracted for a second. The *participants* are making the *coaches* better. They're making *us* think and feel more positive and have more fun than usual.</p>
<p>And the participants? Well, where do I start? When is the last time you had the courage and the patience to spend 9 hours learning something new? Something that many people think <em>"isn't for people like yourself"</em>? Right, chew on that one for a minute. You see, Django Girls isn't like being in school where you mindlessly sit through one class after another. The people who participate are motivated to learn. They work through a tutorial that, despite having been written for beginners, is full of technical terms they've never heard before.<sup>4</sup> They're expected to learn mostly through reading and performing exercises. They're expected to absorb a lot of knowledge throughout the day. They're expected to show a lot of patience and perseverance. And boy do they ever. Not only that, they are some of the nicest and most fun people you could ever spend a day with.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-participants.jpg"/></p>
<p>So you see, it's not that we're doing them a favor because one can have a nice career in IT these days. You don't have to work in IT to have an awesome career, there are many other options. "We" need "them" much more than "they" need "us".<sup>5</sup></p>
<p>They are beginners. That sounds like a bad thing, but it's actually an awesome thing. They didn't come up through our computer science programs. They didn't cut their teeth on PHP back when it was just C macros.<sup>6</sup> They come from a different background, with a different mindset, and a fresh perspective. They're not jaded like us, joking around about how broken software is. And we, the coaches, are seeing it through their eyes. Why is coaching at Django Girls so fulfilling? Because wow, that's what programming is *supposed* to be like!</p>
<p>Some highlights that stuck in my mind:</p>
<ul>
<li>The participant who said <em>"so a=6 and b=4, but how do you get 24?"</em> Thirty minutes later not only is assignment under control, she says <em>"oh so len and str are functions I can use just like in Excel"</em>?</li>
<li>The participant who would explain back to me what she had learned, in her own words, and her explanation was dead on every time. Later on she got into a discussion with her coach on the merits of Django vs Wordpress and what you could do/couldn't do with either one.</li>
<li>The participant who early in the day was almost too focused to talk. By the afternoon she'd racked up enough wins that she was listening to music on her phone, reading the tutorial out loud and nodding along, totally getting it.</li>
<li>The participant who finished the whole tutorial with time to spare (trust me, it's really long) and was browsing sites on code bootcamps while telling me about a site she was planning to build to serve files for use at the library where she works.</li>
</ul>
<p>And that, to make a long story short, is why someone who's been a programmer for 20 years is raving about how incredible it is to coach at Django Girls. A moment where everything comes together and everything is awesome. A keyframe moment that reminds me that *this* is what I want my life to be about.</p>
<p><img alt="" src="http://www.matusiak.eu/media/uploads/djangogirlsbdx-group.jpg"/></p>
<p>What are the keyframe moments of your life?</p>
<p>---</p>
<ol>
<li>I say "work" because as far as the video player is concerned a frame is just a bunch of pixels with colors. It has no way of knowing what the frame is supposed to look like.</li>
<li>The whole idea of coaching in French was a massive YOLO. It was tough, but it was super fun!</li>
<li>I know it extremely well, because in my previous team that was literally my favorite way to pass the time with my programmer buddies.</li>
<li>I worked through it myself. Last week I didn't know fichier from dossier. I made a stack of flashcards for all the technical terms you encounter in the tutorial and crammed them. Thank you for saving my skin, <a href="http://ankisrs.net/">Anki</a>!</li>
<li>The "we" vs "they" rhetoric is pretty painful to read, isn't it?</li>
<li>Or whatever your claim to fame is.</li>
</ol>
</div>
</div>
EnglandC925Djangogirlsbdx cakeDjangogirlsbdx participantsDjangogirlsbdx grouphttp://www.matusiak.eu/numerodix/blog/2015/12/3/djangogirls-keyframe-moment/no metro de lisboahttp://feedproxy.google.com/~r/numerodix/~3/7ox8fGtUfHg/<div class="post-923 post hentry" id="post-923">
<img title="portugees" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/portugal.png"> <small>August 4th, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c923.png" style="display: none;">
<div class="entry">
<p>O metro de Lisboa tem um sistema de passagens eletrônico. Você tem que comprar o seu bilhete numa máquina da estação antes de viajar. O bilhete mesmo custa 50 cêntimos e depois você precisa carrega-lo com crédito suficiente para a sua viagem.</p>
<p>Então, em Lisboa tem uma companhia de metro, e múltiplas companhias de comboios.</p>
<p>A coisa louca é que o crédito que é valido para uma companhia não pode ser utilizado por outra. Assim você tem de carregar o seu bilhete com crédito para a primeira etapa, pois na estação seguinte tem de o carregar de novo pela viagem seguinte.</p>
<p>Se você pretende viajar primeiro de metro, tem de carregar para o metro, e só depois para o comboio. Não é possível carregar só uma volta para 20 euros e viajar muitas vezes com isso. Porque não? Não sei, isso não faz sentido.</p>
<p>Me lembro de que um dia um senhor aproximou-se de mim a perguntar "você conseguiu?". Eu não estava a entender. Consegui o que? Ah, comprar o bilhete? Claro que sim. Mas porque o senhor me faz esta pergunta? Ele era um homem de cinquenta-sessenta anos. Acho que era de Lisboa, então eu era turista. Então o que este cara quer? Quer dinheiro?</p>
<p>Logo percebi que ele não conseguia comprar o bilhete porque não é fácil compreender a máquina. Só queria que eu lhe ajudasse a comprar o bilhete. Que bizarro. Nunca antes vi um turista ajudar um residente porque este não compreendia o sistema de bilhetes.</p>
</div>
</div><img src="http://feeds.feedburner.com/~r/numerodix/~4/7ox8fGtUfHg" height="1" width="1" alt=""/>Tue, 04 Aug 2015 09:08:06 +0000http://www.matusiak.eu/numerodix/blog/2015/8/4/no-metro-de-lisboa/observations
<div class="post-923 post hentry" id="post-923">
<img title="portugees" class="post_lang_flag" src="http://www.matusiak.eu/static/languages/portugal.png"> <small>August 4th, 2015</small>
<img src="http://www.matusiak.eu/numerodix/blog/c923.png" style="display: none;">
<div class="entry">
<p>O metro de Lisboa tem um sistema de passagens eletrônico. Você tem que comprar o seu bilhete numa máquina da estação antes de viajar. O bilhete mesmo custa 50 cêntimos e depois você precisa carrega-lo com crédito suficiente para a sua viagem.</p>
<p>Então, em Lisboa tem uma companhia de metro, e múltiplas companhias de comboios.</p>
<p>A coisa louca é que o crédito que é valido para uma companhia não pode ser utilizado por outra. Assim você tem de carregar o seu bilhete com crédito para a primeira etapa, pois na estação seguinte tem de o carregar de novo pela viagem seguinte.</p>
<p>Se você pretende viajar primeiro de metro, tem de carregar para o metro, e só depois para o comboio. Não é possível carregar só uma volta para 20 euros e viajar muitas vezes com isso. Porque não? Não sei, isso não faz sentido.</p>
<p>Me lembro de que um dia um senhor aproximou-se de mim a perguntar "você conseguiu?". Eu não estava a entender. Consegui o que? Ah, comprar o bilhete? Claro que sim. Mas porque o senhor me faz esta pergunta? Ele era um homem de cinquenta-sessenta anos. Acho que era de Lisboa, então eu era turista. Então o que este cara quer? Quer dinheiro?</p>
<p>Logo percebi que ele não conseguia comprar o bilhete porque não é fácil compreender a máquina. Só queria que eu lhe ajudasse a comprar o bilhete. Que bizarro. Nunca antes vi um turista ajudar um residente porque este não compreendia o sistema de bilhetes.</p>
</div>
</div>
PortugalC923http://www.matusiak.eu/numerodix/blog/2015/8/4/no-metro-de-lisboa/