FSF News: FSF Job Opportunity: Web Developer

GNU Planet! - Mon, 2016-08-22 13:42

The Free Software Foundation (FSF), a Massachusetts 501(c)(3) charity with a worldwide mission to protect computer user freedom, seeks a motivated and talented Boston-based individual to be our full-time Web Developer.

This position, reporting to the executive director, works closely with our sysadmin team to maintain and improve the FSF's Web presence. The FSF uses several different free software Web platforms in the course of its work, both internally and externally. These platforms are critical to work supporting the GNU Project, free software adoption, free media formats, and freedom on the Internet; and to opposing bulk surveillance, Digital Restrictions Management, software patents, and proprietary software.

We are looking for someone who is comfortable with keeping these systems up-to-date and working, as well as customizing them when necessary. While the main duties will relate to the backend systems, frontend experience with templates, HTML, CSS, JavaScript, and design tools will be a big plus. The Web Developer will help lead major projects, such as the relaunch of https://www.fsf.org and migration of https://audio-video.gnu.org to GNU MediaGoblin. S/he will also be part of the team running the annual LibrePlanet conference as well as contribute to decisions about which new platforms to use or which existing ones to retire.

Examples of platforms maintained by the Web Developer include, but are not limited to:

  • CiviCRM
  • Drupal
  • MediaWiki
  • Plone / Zope
  • Ikiwiki
  • Request Tracker
  • Etherpad
  • CAS
  • GNU social
  • GNU MediaGoblin
  • Icecast

Because the FSF works globally and seeks to have our materials distributed in as many languages as possible, multilingual candidates will have an advantage. With our small staff of thirteen, each person makes a clear contribution. We work hard, but offer a humane and fun work environment at an office located in the heart of downtown Boston.

The FSF is a mature but growing organization that provides great potential for advancement; existing staff get the first chance at any new job openings. This position is also a good starting point for anyone who might be interested in other roles on our technical team in the future.

Benefits and Salary

This job is a union position that must be worked on-site at the FSF's downtown Boston office. An on-site interview will be required with the executive director and other team members. The salary is fixed at $51,646/year and is non-negotiable. Other benefits include:

  • conference travel opportunities,
  • full family health coverage through Blue Cross/Blue Shield's HMO Blue program,
  • subsidized dental plan,
  • four weeks of paid vacation annually,
  • seventeen paid holidays annually,
  • public transit commuting cost reimbursement,
  • 403(b) program through TIAA-CREF,
  • yearly cost-of-living pay increases (based on government guidelines).
Application Instructions

Applications must be submitted via email to hiring@fsf.org. The email must contain the subject line "Web Developer". A complete application should include:

  • resume,
  • cover letter, and
  • links to any previous work online.

All materials must be in a free format. Email submissions that do not follow these instructions will probably be overlooked. No phone calls, please.

Applications must be received by Thursday, September 1, 2016 at 17:00 EDT.

The FSF is an equal opportunity employer and will not discriminate against any employee or application for employment on the basis of race, color, marital status, religion, age, sex, sexual orientation, national origin, handicap, or any other legally protected status recognized by federal, state or local law. We value diversity in our workplace. Women, people of color and LGBTQ individuals are strongly encouraged to apply.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software -- particularly the GNU operating system and its GNU/Linux variants -- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at fsf.org and gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. We are based in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

Categories: FLOSS Project Planets

Luciano Prestes Cavalcanti: AppRecommender - Last GSoC Report

Planet Debian - Mon, 2016-08-22 12:54
My work on Google Summer of Code is to create a new strategy on AppRecommender, where this strategy should be able to get a referenced package, or a list of referenced packages, then analyze the packages that the user has already installed and make a recommendation using the referenced packages as a base, for example: if the user runs "$ sudo apt install vim", the AppRecommender uses "vim" as the referenced package, and should recommend packages with relation between "vim" and the other packages that the user has installed. This work is done and added to the official AppRecommender repository.   During the GSoC program, more contributions were done with the AppRecommender project helping the system to improve the recommendations, installation and configurations to help Debian package.   The following link contains my commits on AppRecommender: https://github.com/tassia/AppRecommender/commits/master?author=LucianoPC   During the period destined to students get to know the community of the project, I talked with the Debian community about my project to get feedback and ideas. When talking to the Debian community on the IRC channels, we came up with the idea of using the popularity-contest data to improve the recommendations. I talked with my mentors, who approved the idea, then we increased the project scope to use the popularity-contest data to improve the AppRecommender recommendations.   The popularity-contest has several privacy political terms, then we did a research and published, on the Debian Planet, a post that explains why we need the popularity-contest data to improve the recommendations and how we use this data. This post also contains an explanation about the risks and the measures taken to minimize them.   Then two activities were added to be made. One of them is to create a script to be added on popularity-contest. This script is destined to get the popularity-contest data, which is the users' packages, and generate clusters that group these packages analyzing similar users. The other activity is to add collaborative data into the AppRecommender, where this will download the clusters data and use it to improve the recommendations.   The popularity-contest cluster script was done and reviewed by my mentor, but was not integrated into popularity-contest yet. The usage of clusters data into AppRecommender has been already implemented, but still not added on official repository because it is waiting the cluster cript's acceptance into the popularity-contest. This work is not complete, but I will continue working with AppRecommender and Debian community, and with my mentors' help, I will finish this work.   The following link contains my commits on repository with the popularity-contest cluster script's feature, as well as other scripts that I used to improve my work, but the only script that will be sent to popularity-contest is the create_popcon_clusters.py: https://github.com/TCC-AppRecommender/scripts/commits/master?author=LucianoPC   The following link contains my commits on repository with the AppRecommender collaborative data feature:  https://github.com/tassia/AppRecommender/commits/collaborative_data?author=LucianoPC   Google Drive folder with the patch: https://drive.google.com/drive/folders/0BzmGBlxBo2G3Q3F5YjBpRl9yWUk?usp=sharing
Categories: FLOSS Project Planets

Chromatic: Create a Custom Views Sort Plugin with Drupal 8

Planet Drupal - Mon, 2016-08-22 12:46

Having recently grokked custom views sorting in Drupal 7, I took a leap to investigate how to create this functionality in Drupal 8. The documentation out there is scarce at best. As a starting point, I decided to replicate Dave Vasilevsky’s task where he makes a custom views sort plugin for ordering upcoming and past events in D7. The requirement was to show future events in chronological order (i.e. show future events nearest the current date ahead of later future events) before showing past events in reverse chronological order (i.e. most recent past events first followed by earlier past events).

Screenshot from Vasilevsky's post

Create content type and view:

First order of business is to create an Event content type with a date field and a new view of events using fields in the display format. Here is a gist with the configuration yaml files for importing an Event content type with a body and field_event_date field and an Events view.

Looking at the results returned from this view as is, all the events are shown in haphazard order:

Now let’s create a custom views sort plugin. Since we need to alter the query for sorting event results by an event date field in a special way, a new sort handler needs to be added to the view by extending the field table for field_event_date. Using hook_views_data_alter() allows us to add this custom sort handler.

Declare the sort in hook_views_data_alter(): /** * Implements hook_views_data_alter(). */ function mymodule_views_data_alter(array &$data) { $data['node__field_event_date']['event'] = array( 'title' => t('Custom event sort'), 'group' => t('Content'), 'help' => t('Sort events by past/future, then distance from now.'), 'sort' => array( 'field' => 'field_event_date_value', 'id' => 'event', ), ); }

In this particular case, the date field that was added to the Event content type has a machine name of field_event_date. This generated a new table in the database called node__field_event_date that holds the actual value of the datetime field of an Event node. This datetime field is a column called field_event_date_value - this is the field on which we need to perform our custom sorting. Since we added the field_event_date as a field to the view, it will be joined to the base node_field_data table that gets queried for matching Event nodes.

In hook_views_data_alter(), we’re altering the query for the node__field_event_date table by extending it with a new event array that adds some basic information like title, group, and help which we’ll see in the views UI when we go to select the custom sort. The new event array more importantly adds a sort key with the field_event_date_value as the field we want to sort on plus the id of the plugin (in this case a new sort plugin class named ‘event’) we will use to add the custom sorting functionality.

Create the plugin to handle the new sorting: <?php namespace Drupal\mymodule\Plugin\views\sort; use Drupal\views\Plugin\views\sort\Date; /** * Basic sort handler for Events. * * @ViewsSort("event") */ class Event extends Date { /** * Called to add the sort to a query. */ public function query() { $this->ensureMyTable(); $date_alias = "UNIX_TIMESTAMP($this->tableAlias.$this->realField)"; // Is this event in the past? $this->query->addOrderBy(NULL, "UNIX_TIMESTAMP() > $date_alias", $this->options['order'], "in_past" ); // How far in the past/future is this event? $this->query->addOrderBy(NULL, "ABS($date_alias - UNIX_TIMESTAMP())", $this->options['order'], "distance_from_now" ); } }

This sort handler basically extends the Date sort plugin which can be found in core (/core/modules/views/src/Plugin/views/sort/Date.php). All that we’re overriding is the query() function to add our custom sorting, effectively running two sorts (future and past) on the results based on the current date.

Since we need to sort differently for future and past events, we convert the datetime formatted value of field_event_date_value into a unix timestamp and run comparisons against the current date.

We can then alter the query by adding custom ORDER BY clauses to the SQL statement. When we go to add the new sort, the new query will look like:

Let’s see all this in action through the views UI. Back in our view, click on Add next to "SORT CRITERIA". Our new custom sort should be visible in the list:

In the next part of the ajax form, since we didn’t override any of the Date form options, we’ll see the order and granularity options. Just leave all the defaults as is and click "Apply".

Now we should see our new custom sort in the UI:

Finally we’ll see our events sorted with future events in chronological order and past events in reverse chronology:

The theory behind how to accomplish this task in Drupal 8 is not that much different from Drupal 7. In both cases, we need to add the custom sort handler in a hook_views_data_alter() and override the query. The difference in D8 is everything uses the plugin system so the syntax for extending the base Date sort class varies from extending the default sort handler in D7.

And there you have it - a custom views sort plugin in D8!

Categories: FLOSS Project Planets

PyCharm: Next Batch of In-Depth Screencasts: VCS

Planet Python - Mon, 2016-08-22 11:45

In January we recorded a series of screencasts that introduced the major features of PyCharm — an overview, installation, editing, running, debugging, etc. In April we did our first “in-depth” screencast, focusing on testing.

We’re happy to announce the next in-depth screencasts, and note the plural: this is a 3-part series on using version control systems (VCS) in PyCharm. The JetBrains IDEs, including PyCharm, have worked very hard over the years to put a productive, easy UI atop version control. These videos spend more time showing the features that are available.

In the first video we cover Getting Started with VCS, going over: Versioning without a VCS using Local History, Setting Up a Local Git Repository, Uploading to GitHub, and Getting a Checkout from GitHub.

Next, we go over Core VCS: Color Coding, Adding Files, Committing Changes, Using Refactor, then Diff, History, Revert, and Update.

The last video concentrates on Branching, Merging, and Pushing:

We’re very happy to release these in-depth screencasts, which we’ve been working on for some time and were highly requested. And again, if you have any topics that you’d like to see get expanded screencast attention, let us know.

Categories: FLOSS Project Planets

FSF Blogs: Free Software Directory meeting recap for August 19th, 2016

GNU Planet! - Mon, 2016-08-22 11:06

Every week free software activists from around the world come together in #fsf on irc.freenode.org to help improve the Free Software Directory. This recaps the work we accomplished on the Friday, August 19th, 2016 meeting.

This week we had a guest leader, Yoni Rabkin (yrk), a long time volunteer on the FSF Compliance Lab Team. yrk did a great job leading the directory team and we thank them for their efforts.

The meeting started off with lots of new faces jumping in to help out. Guest37375 worked on updating the entry for WordNet, and mimi89999 updated the page for Alsaplayer. The channel worked together to add an initial entry for Kaku, and some candidates for deletion were also found. mattlav1 found a package that seemed to be out of commission, and yrk contacted the maintainers about getting an update. mew007 helped update the listing for Crossword Builder, and the channel spent some time tracking down licenses for several packages.

yrk did a great job leading the group and getting so many people involved. If you would like to join in on the fun, meet with us every Friday in #fsf on irc.freenode.org from 12pm to 3pm EDT (16:00 to 19:00 UTC).

Categories: FLOSS Project Planets

Free Software Directory meeting recap for August 19th, 2016

FSF Blogs - Mon, 2016-08-22 11:06

Every week free software activists from around the world come together in #fsf on irc.freenode.org to help improve the Free Software Directory. This recaps the work we accomplished on the Friday, August 19th, 2016 meeting.

This week we had a guest leader, Yoni Rabkin (yrk), a long time volunteer on the FSF Compliance Lab Team. yrk did a great job leading the directory team and we thank them for their efforts.

The meeting started off with lots of new faces jumping in to help out. Guest37375 worked on updating the entry for WordNet, and mimi89999 updated the page for Alsaplayer. The channel worked together to add an initial entry for Kaku, and some candidates for deletion were also found. mattlav1 found a package that seemed to be out of commission, and yrk contacted the maintainers about getting an update. mew007 helped update the listing for Crossword Builder, and the channel spent some time tracking down licenses for several packages.

yrk did a great job leading the group and getting so many people involved. If you would like to join in on the fun, meet with us every Friday in #fsf on irc.freenode.org from 12pm to 3pm EDT (16:00 to 19:00 UTC).

Categories: FLOSS Project Planets

Lars Wirzenius: Linux 25 jubilee symposium

Planet Debian - Mon, 2016-08-22 11:03

I gave a talk about the early days of Linux at the jubilee symposium arranged by the University of Helsinki CS department. Below is an outline of what I meant to speak about, but the actual talk didn't follow it exactly. You can compare these to the video once it comes online.

  • Linus and I met at uni, the only 2 Swedish speaking new students that year, so we naturally migrated towards each other.
  • After a year away for military service, got back in touch, summer of
    1. .
  • C & Unix course fall of 1990; Minix.
  • Linus didn't think atime updates in real time were plausible, but I showed him; funnily enough, atime updates have been an issue in Linux until fairly recently, since they slow things down (without being particularly useful)
  • Jan 5, 1991 bought his first PC (i386 + i387 + 4 MiB RAM and a small hard disk); he had a Sinclair QL before that.
  • Played Prince of Persia for a couple of months.
  • Then wanted to learn i386 assembly and multitasking.
  • A/B threading demo.
  • Terminal emulation, Usenet access from home.
  • Hard disk driver, mistaking hard disk for a modem.
  • More ambition, announced Linux to the world for the first time
  • first ever Linux installation.
  • Upload to ftp.funet.fi, directory name by Ari Lemmke.
  • Originally not free software, licence changed early 1992.
  • First mailing list was created and introduced me to a flood of email (managed with VAX/VMS MAIL and later mush on Unix).
  • I talked a lot with Linus about design at this time, but never really participated in the kernel work (partly because disagreeing with Linus is a high-stress thing).
  • However, I did write the first sprintf for the kernel, since Linus hadn't learnt about varargs functions in C; he then ruined it and added the comment "Wirzenius wrote this portably..." (add google hit count for wirzenius+fucked).
  • During 1992 Linux grew fast, and distros happened, and a lot of packaging and porting of software; porting was easier because Linus was happy to add/change things in the kernel to accomodate software
  • A lot of new users during 1992 as well.
  • End of 1992 I and a few others founded the Linux Documentation Project to help all the new users, some of who didn't come from a Unix background.
  • In fact, things progressed so fast in 1992 that Linus thought he'd release 1.0 very soon, resulting in a silly sequence of version numbers: 0.12, 0.95, 0.96, 0.96b, 0.96c, 0.96c++2.
  • X server ported to Linux; almost immediate prediction of the year of the Linux desktop never happening unless ALL the graphics cards were supported immediately.
  • Linus was of the opinion that you needed one process (not thread) per window in X; I taught him event driven programming.
  • Bug in network code, resulting in ban on uni network.
  • Pranks in the shared office room.
  • We released 1.0 in an event at the CS dept in March, 1994; this included some talks and a ritual compilation of the release version during the event.
Categories: FLOSS Project Planets

Tag1 Consulting: Tag1 Quo and Drupal 6 Long Term Support

Planet Drupal - Mon, 2016-08-22 10:42
Tag1 Quo and Drupal 6 Long Term Support Jeremy Mon, 08/22/2016 - 07:42 Or, What We Did This Summer

It’s been an exciting summer, building our first product with Drupal 8. When we originally made the decision to offer Long Term Support for Drupal 6, we were thinking about a few of our clients that were a little behind on their upgrade plans, and had envisioned a mostly manual process.

Categories: FLOSS Project Planets

Acquia Developer Center Blog: Progressively Decoupled Drupal Approaches

Planet Drupal - Mon, 2016-08-22 10:34

Progressive decoupling, a concept outlined last year in Dries Buytaert’s first post about decoupled Drupal, is a compelling approach to building Drupal's front end where content editors, site assemblers, and front-end developers maintain contiguous experiences. For content editors and site assemblers, progressive decoupling allows for contextualized interfaces, content workflow, site preview, and other features to remain usable and integrated with Drupal as a whole.

Tags: acquia drupal planet
Categories: FLOSS Project Planets

Satyam Zode: Google Summer of Code 2016 : Final Report

Planet Debian - Mon, 2016-08-22 10:02
Project Title : Improving diffoscope tool and reproducibility of Debian packages

Project details

This project aims to improve diffoscope tool and fix Debian packages which are unreproducible in Reproducible builds testing framework. diffoscope recursively unpack archives of many kinds and transform various binary formats into more human readable form to compare them. As a part of this project I worked on argument completion feature and ignoring .buildinfo feature. This project is a part of Reproducible Builds effort

Mentor and Co-Mentor
  • Jérémy Bobbio (Lunar) : Mentor
  • Reiner Herrmann (deki) : Co-Mentor
  • Holger Levsen (h01ger) : Co-Mentor
  • Mattia Rizzolo (mapreri) : Co-Mentor

Project Discussion

  • Introduction to Reproducible Builds in Debian

    First time I came to know about Reproducible Builds was during Debconf 2015. I started to get involve from the start of March 2016. At the beginning Lunar suggested me to watch the talks given on Reproducible Builds wiki. I read documentation on Reproducible Builds site and started to participate in IRC discussions on #debian-reproducible.

  • Application Review Period

    During proposal discussion period we discussed the areas where work needs to be done. I wrote the proposal and got it reviewed by community on the mailing list. Simultaneously, I worked on bug #818111 and submitted patch for same. That not only helped me to understand the concept of Reproducible Builds but also helped me to setup testing environment required to check the reproducibility of Debian packages.

  • Community Bonding Period

    During community bonding period I studied the codebase of diffoscope and also spent enough amount of time for learning Python3 metaprogramming and other OOP concepts. We also discussed more about hiding differences and options for same. I couldn’t finish my project research work during this period since I had exams in May 2016 and it consumed almost half of community bonding period and week 1 of coding period.

Project Implementation

Challenges and Work Left
  • To understand the main purpose of diffoscope in the context of Reproducible Builds. I had to go through complete Reproducible Builds project. It consumed significant amount of time to understand what Reproducible Builds is, why it’s necessary important for Free software to build reproducibly. Diffoscope is the last tool in Reproducible Builds toolchain. It was a big challenge for me to understand whole process and objective of diffoscope.
  • Work Left:

Future work
  • Based on the research work and implementation done during Coding Period make diffoscope better and enhance ignoring capabilities of diffoscope.
  • Improve the parallel processing feature of diffoscope. This particular problem is hard to understand and implement.
  • Make diffoscope better by solving exsting bugs.


I would like to express my deepest gratitude to Lunar for mentoring me throughout Google Summer of Code program and for being cool. Lunar’s deep knowledge regarding diffoscope and Python skills helped me a lot throughout the project and we literally had great discussions. I would also like to thank Debaian community and Google for giving me this opportunity. Special thanks to Reproducible Builds folks for all the guidance!

Categories: FLOSS Project Planets

DebConf team: Proposing speakers for DebConf17 (Posted by DebConf17 team)

Planet Debian - Mon, 2016-08-22 09:44

As you may already know, next DebConf will be held at Collège de Maisonneuve in Montreal from August 6 to August 12, 2017. We are already thinking about the conference schedule, and the content team is open to suggestions for invited speakers.

Priority will be given to speakers who are not regular DebConf attendees, who are more likely to bring diverse viewpoints to the conference.

Please keep in mind that some speakers may have very busy schedules and need to be booked far in advance. So, we would like to start inviting speakers in the middle of September 2016.

If you would like to suggest a speaker to invite, please follow the procedure described on the Inviting Speakers page of the DebConf wiki.

DebConf17 team

Categories: FLOSS Project Planets

Python 4 Kids: Python for Kids: Python 3 – Project 7

Planet Python - Mon, 2016-08-22 09:25

Using Python 3 in Project 7 of Python For Kids For Dummies

In this post I talk about the changes that need to be made to the code of
Project 7 in order for it to work with Python 3. Most of the code in project 7 will work without changes. However, in a lot of cases what Python outputs in Python 3 is different from the output in Python 2.7 and it’s those changes that I am mainly identifying below.


Some people want to use my book Python for Kids for Dummies to learn Python 3.
I am working through the code in the existing book, highlighting changes from Python 2 to Python 3 and providing code that will work in Python 3. If you are using Python 2.7 you can ignore this post. This post is only for people who want to take the code in my book Python for Kids for Dummies and run it in Python 3.

Page 178

All code on this page is the same, and all outputs from the code is the same in Python 3 as in Python 2.7

Page 179-180
The code and syntax on these pages is the same, but the outputs are
different in Python 3. This is because, in Python 3,
the range builtin does not create a list as in Python 2.7 (see Python3/Project 5)

#Python 2.7 code: >>> test_string = '0123456789' >>> test_string[0:1] '0' >>> test_string[1:3] '12' >>> # range(10) is a list of the numbers from 0 to 9 inclusive >>> range(10)[0:1] [0] >>> range(10)[1:3] [1, 2] >>> test_string[:3] '012' >>> test_string[3:] '3456789' #Python 3 code: >>> test_string = '0123456789' >>> test_string[0:1] '0' >>> test_string[1:3] '12' >>> # range(10) is no longer a list. It's a.... errr... range >>> # so the [:] operator slices. You can use list() >>> # to see what it corresponds to. >>> range(10)[0:1] range(0, 1) >>> list(range(10)[0:1]) [0] >>> # note same output as in Python 2.7 from range(10)[0:1] >>> range(10)[1:3] range(1, 3) >>> list(range(10)[1:3]) [1, 2] >>> test_string[:3] '012' >>> test_string[3:] '3456789' >>>

Pages 180-196
All code on this page is the same, and all outputs from the code is the same in Python 3 as in Python 2.7

Page 199

The code on this page uses raw_input, which has been renamed to input in Python 3.
Either change all occurrences or add a line

raw_input = input

at the start of the relevant code.

#Python 2.7 code: #### Input and Output Section message = raw_input("Type the message to process below:\n") ciphertext = encrypt_msg(message, ENCRYPTION_DICT) plaintext = decrypt_msg(message, DECRYPTION_DICT) print("This message encrypts to") print(ciphertext) print # just a blank line for readability print("This message decrypts to") print(plaintext) #Python 3 code: #### Input and Output Section message = input("Type the message to process below:\n") ciphertext = encrypt_msg(message, ENCRYPTION_DICT) plaintext = decrypt_msg(message, DECRYPTION_DICT) print("This message encrypts to") print(ciphertext) print # just a blank line for readability print("This message decrypts to") print(plaintext) >>> ================================== RESTART ================================ >>> Type the message you'd like to encrypt below: I love learning Python. And my teacher is smelly. And I shouldn't start a sentence with and. This message encrypts to F|ilsb|ib7okfkd|Mvqelk+|xka|jv|qb79ebo|fp|pjbiiv+||xka|F|pelriak$q|pq7oq|7|pbkqbk9b|tfqe|7ka+ This message decrypts to L2oryh2ohduqlqj2SBwkrq;2Dqg2pB2whdfkhu2lv2vphooB;22Dqg2L2vkrxogq*w2vwduw2d2vhqwhqfh2zlwk2dqg; >>> ================================== RESTART ================================ >>> Type the message you'd like to encrypt below: F|ilsb|ib7okfkd|Mvqelk+|xka|jv|qb79ebo|fp|pjbiiv+||xka|F|pelriak$q|pq7oq|7|pbkqbk9b|tfqe|7ka+ This message encrypts to C_fip8_f84lhcha_Jsnbih(_uh7_gs_n846b8l_cm_mg8ffs(__uh7_C_mbiof7h!n_mn4ln_4_m8hn8h68_qcnb_4h7( This message decrypts to I love learning Python. And my teacher is smelly. And I shouldn't start a sentence with and.

Page 200

This code works as is in both Python 2.7 and Python 3. However, the way the open() builtin works has changed in Python 3 and this will cause some issues in later projects. In Python 3 open() has the same syntax as in Python 2.7, but uses a different way to get data out of the file and into your hands. As a practical matter this means that some Python 2.7 code will sometimes cause problems when run in Python 3. If you run into such a problem (open code that works in Python 2.7 but fails in Python 3), the first thing to try is to add the binary modifier. So,
instead of ‘r’ or ‘w’ for read and write use ‘rb’ or ‘wb’. This code doesn’t need it, but a later project will.

Page 201

The code on this page is the same, but the outputs are different in Python 3. Python 3 returns how much data has
been written (in this case, 36)

#Python 2.7 code: >>> file_object = open('p4k_test.py','w') >>> text = "print('Hello from within the file')\n" # watch the " and ' >>> file_object.write(text) # writes it to the file >>> file_object.write(text) # writes it to the file again! >>> file_object.close() # finished with file, so close it #Python 3 code: >>> file_object = open('p4k_test.py','w') >>> text = "print('Hello from within the file')\n" # watch the " and ' >>> file_object.write(text) # writes it to the file 36 >>> file_object.write(text) # writes it to the file again! 36 >>> file_object.close() # finished with file, so close it

Pages 202 and 203

All code on these page is the same, and all outputs from the code is the same in Python 3 as in Python 2.7

Page 204

All code on this page is the same in Python 3 as in Python 2.7, but some of the outputs are different
A line has been added in the Python 3 code below to shown that the file_object has been closed after leaving the
with clause – this was explicit in the print out in Python 2.7.

>>> #Python 2.7 >>> with open('p4k_test.py','r') as file_object: print(file_object.read()) print('Hello from within the file') print('Hello from within the file') >>> file_object <closed file 'p4k_test.py', mode 'r' at 0xf7fed0> >>> #Python 3 >>> with open('p4k_test.py','r') as file_object: print(file_object.read()) print('Hello from within the file') print('Hello from within the file') >>> file_object # output different from 2.7 <_io.TextIOWrapper name='p4k_test.py' mode='r' encoding='UTF-8'> >>> file_object.closed # but the file is still closed True

Page 205

All code on this page is the same in Python 3 as in Python 2.7, but some of the outputs are different
A line has been added in the Python 3 code below to shown that the file_object has been closed after leaving the
with clause – this was explicit in the print out in Python 2.7. Also, because Python 3 uses a different way
of getting information from a file it is identified differently. In Python 2.7 it’s call a file – pretty straight
forward. in Python 3 it’s called a _io.TextIOWrapper. Not as enlightening, but a student doesn’t need to worry about
this difference in detail.

>>> #Python 2.7 >>> with open('testfile2','w') as a: a.write('stuff') >>> with open('testfile2','r') as a, open('p4k_test.py','r') as b: print(a.read()) print(b.read()) stuff print('Hello from within the file') print('Hello from within the file') >>> a <closed file 'testfile2', mode 'r' at 0xf6e540> >>> b <closed file 'p4k_test.py', mode 'r' at 0xef4ed0> >>> #Python 3 >>> with open('testfile2','r') as a, open('p4k_test.py','r') as b: print(a.read()) print(b.read()) stuff print('Hello from within the file') print('Hello from within the file') >>> a <_io.TextIOWrapper name='testfile2' mode='r' encoding='UTF-8'> >>> a.closed True >>> b <_io.TextIOWrapper name='p4k_test.py' mode='r' encoding='UTF-8'> >>> b.closed True

Page 207

All code on this page is the same in Python 3 as in Python 2.7, but some of the outputs are different
(the write method returns the amount of data written and this is output in the console in Python 3)

>>> #Python 2.7 >>> INPUT_FILE_NAME = "cryptopy_input.txt" >>> with open(INPUT_FILE_NAME,'w') as input_file: input_file.write('This is some test text') >>> #Python 3 >>> INPUT_FILE_NAME = "cryptopy_input.txt" >>> with open(INPUT_FILE_NAME,'w') as input_file: input_file.write('This is some test text') 22

# this code is the same in Python 2.7 and Python 3:

INPUT_FILE_NAME = “cryptopy_input.txt”
OUTPUT_FILE_NAME = “cryptopy_output.txt”

Page 208-218
All code on this page is the same, and all outputs from the code is the same in Python 3 as in Python 2.7

Categories: FLOSS Project Planets

BlackMesh: Our Ongoing Commitment to Security: Partnering with Tag1 Consulting

Planet Drupal - Mon, 2016-08-22 09:22

As you may already know, the BlackMesh team is committed to ensuring developers can focus on their website goals without worrying about scalability, infrastructure, and – in particular – security. That’s why we’re thrilled to have partnered with leading Drupal security agency Tag1 Consulting to provide our Drupal clients a comprehensive tool for managing site updates.


The new Tag1 Quo is a hosted security dashboard that provides up-to-the-minute snapshots of a client’s security status and potential vulnerabilities. Basically, this innovative tool provides Drupal users consolidated and critical security updates for their websites. Tag1 Quo features include essentials for a website’s success, such as self-service monitoring, security notifications for out-of-date modules, and patch and release delivery.


Tag1 Quo automatically monitors upstream releases and security advisories in collaboration with module maintainers and other Drupal 6 long term support (LTS) providers. The Tag1 team of Drupal security experts review and decide which issues affect the client, carefully backporting those that are applicable to their site. Quo then delivers timely notifications to the client’s inbox. Quo users can choose to either leverage pre-patched releases or quickly apply the patches themselves to bring their website up-to-date and secure against all known vulnerabilities. For extra peace of mind, the Quo dashboard provides at-a-glance visualization of all client websites, highlighting all outstanding updates across them.

Tag1 Quo Dashboard


Though D6 was phased out earlier this year, Tag1 Consulting continues to provide long-term D6 support to those who need it. As a way to adequately manage the significant maintenance and monitoring of these systems, the Tag1 team developed Tag1 Quo.

If you are currently managing a D6 site, signing up for Tag1 Quo is a no-brainer. It provides affordable long-term support for all of your core and contributed modules and themes, tested and delivered by an approved LTS provider, backed by a team of renowned Drupal experts.

Your Security. Your Options …

Even if you don’t maintain a D6 site, you’ll still want to check it out.

Depending on your needs and budget, Tag1 Quo offers three different plan options. Tag1’s roadmap includes upcoming support for D7 and D8, WordPress 4.6 and 4.7, application programming interface (API) access, upgrade planning, and more.

Signing up for Tag1 Quo means less time spent on maintenance and security – and that means more time focusing on your goals and overall mission. Whenever BlackMesh teams up with companies like Tag1, we’re advancing our commitment to your security. Contact us to learn more about how we can make the Tag1 Quo dashboard solution fit your needs.


Like this article? Follow us on Facebook and share your thoughts!

Categories: FLOSS Project Planets

Mike Driscoll: ANN: The wxPython Cookbook Kickstarter

Planet Python - Mon, 2016-08-22 09:03

Several years ago, the readers of this blog asked me to take some of my articles and turn them into a cookbook on wxPython. I have finally decided to do just that. I am including over 50 recipes that I am currently editing to make them more consistent and updating them to be compatible with the latest versions of wxPython. I currently have nearly 300 pages of content!

To help fund the initial production of the book, I am doing a fun little Kickstarter campaign for the project. The money raised will be used for the unique perks offered in the campaign as well as various production costs related to the book, such as ISBN acquisition, artwork, software expenses, advertising, etc.

In case you don’t know what wxPython is, the wxPython package is a popular toolkit for creating cross platform desktop user interfaces. It works on Windows, Mac and Linux with little to no modification of your code base.

The examples in my book will work with both wxPython 3.0.2 Classic as well as wxPython Phoenix, which is the bleeding edge of wxPython that supports Python 3. If I discover any recipes that do not work with Phoenix, they will be clearly marked or there will be an alternative example given that does work.

Here is a listing of the current set of recipes in no particular order:

  • Adding / Removing Widgets Dynamically
  • How to put a background image on a panel
  • Binding Multiple Widgets to the Same Handler
  • Catching Exceptions from Anywhere
  • wxPython’s Context Managers
  • Converting wx.DateTime to Python datetime
  • Creating an About Box
  • How to Create a Login Dialog
  • How to Create a “Dark Mode”
  • Generating a Dialog from a Config File
  • How to Disable a Wizard’s Next Button
  • How to Use Drag and Drop
  • How to Drag and Drop a File From Your App to the OS
  • How to Edit Your GUI Interactively Using reload()
  • How to Embed an Image in the Title Bar
  • Extracting XML from the RichTextCtrl
  • How to Fade-in a Frame / Dialog
  • How to Fire Multiple Event Handlers
  • Making your Frame Maximize or Full Screen
  • Using wx.Frame Styles
  • Get the Event Name Instead of an Integer
  • How to Get Children Widgets from a Sizer
  • How to Use the Clipboard
  • Catching Key and Char Events
  • Learning How Focus Works in wxPython
  • Making Your Text Flash
  • Minimizing to System Tray
  • Using ObjectListView instead of ListCtrl
  • Making a Panel Self-Destruct
  • How to Switch Between Panels
  • wxPython: Using PyDispatcher instead of Pubsub
  • Creating Graphs with PyPlot
  • Redirect Python’s Logging Module to a TextCtrl
  • Redirecting stdout / stderr
  • Resetting the Background Color
  • Saving Data to a Config File
  • How to Take a Screenshot of Your wxPython App and Print it
  • Creating a Simple Notebook
  • Ensuring Only One Instance Per Frame
  • Storing Objects in ComboBox or ListBox Widgets
  • Syncing Scrolling Between Two Grids
  • Creating Taskbar Icons
  • A wx.Timer Tutorial
  • How to Update a Progress Bar from a Thread
  • Updating Your Application with Esky
  • Creating a URL Shortener
  • Using Threads in wxPython
  • How to Create a Grid in XRC
  • An Introduction to XRC

 Note: Recipe names and order are subject to change

Categories: FLOSS Project Planets

Doug Hellmann: random — Pseudorandom Number Generators — PyMOTW 3

Planet Python - Mon, 2016-08-22 09:00
The random module provides a fast pseudorandom number generator based on the Mersenne Twister algorithm. Originally developed to produce inputs for Monte Carlo simulations, Mersenne Twister generates numbers with nearly uniform distribution and a large period, making it suited for a wide range of applications. Read more… This post is part of the Python Module … Continue reading random — Pseudorandom Number Generators — PyMOTW 3
Categories: FLOSS Project Planets

Mike Driscoll: PyDev of the Week: Michele Simionato

Planet Python - Mon, 2016-08-22 08:30

This week we welcome Michele Simionato as our PyDev of the Week! Michele is an expert on Python and is known for his paper on Python’s Method Resolution Order which was published to the Python website by Guide Van Rossum and for a very interesting series of articles on metaclasses that he wrote with David Mertz. They are a bit difficult to find, but you can read the first one of the 3-part series here. He is one of the founders of the Italian Python Association. Michele has a Ph. D. about the Renormalization of Quantum Field Theory. Let’s take a few moments

Can you tell us a little about yourself (hobbies, education, etc):

I originally come from academia and I have a Ph. D. in Theoretical Physics. Then I worked for several years for an Analytics firm (stock market risk assessment) and now I am back to science, doing earthquake simulations at GEM.

Why did you start using Python?

It happened in 2002. At the time I was a postdoc researcher in the department of Physics and Astronomy at Pittsburgh University. I decided that it was time to learn some modern programming language, in view of a possible career outside academia. After reading a couple of long books by Bruce Eckel, first about C++ and then about Java, I decided that I did not want to program in either of them. I was in doubt between Ruby and Python, but Python won because of the better scientific libraries and of the more pragmatic philosophy.

What other programming languages do you know and which is your favorite?

A long time ago I started with Basic and Pascal and later on I worked a lot with Mathematica and Maple. After learning Python I become interested in functional languages and I know decently well Scheme, so much that I nearly wrote a book on it, The Adventures of a Pythonista in Schemeland. In my daily job I had to work a lot with SQL (which I like enough) and with Javascript (which I don’t like).

What projects are you working on now?

In the last three years I have become the maintainer and the main developer of the OpenQuake Engine, which is a computational engine to produce earthquake hazard and risk assessment. It means that after several years of being a database and Web developer I have become a scientific programmer and now I spend most of my time doing performance analysis of massive distributed calculations. I also keep a blog where I document my fighting with the engine.

Which Python libraries are your favorite (core or 3rd party)?

numpy is a really well thought library, an essential tool for people doing scientific applications.

Where do you see Python going as a programming language?

Honestly, I am unsure about where Python as a language is going, and I am not even convinced I like the recent trend. Certainly I would like for the language to become simpler, that’s what attracted me to Python in the first place, and instead I see several things that are becoming increasingly complicated. Also, there are now other languages out there that are worth of note, whereas for years Python had no competitors. If you want to know, I am thinking about Go for server side programming and about Julia for scientific programming. Both of them looks really interesting even if I have not programmed in either of them. Python should not rest thinking that it is best than Java and C++ (an easy win) and instead consider seriously the new contenders.

What is your take on the current market for Python programmers?

It has always been a good market for Python programmers (at least from when I started, 14 years ago) and now it is even more so. I get offers for Python jobs nearly every week.

Is there anything else you’d like to say?

My tagline at the EuroPython 2016 conference was “Legacy code warrior”: that reflects my daily job in the last 10 years at least. You can see a video of my talk here:

Thanks for doing the interview!

Categories: FLOSS Project Planets

Hynek Schlawack: Better Python Object Serialization

Planet Python - Mon, 2016-08-22 08:30

The Python standard library is full of underappreciated gems. One of them allows for simple and elegant function dispatching based on argument types. This makes it perfect for serialization of arbitrary objects – for example to JSON in web APIs and structured logs.

Categories: FLOSS Project Planets

Vincent Sanders: Down the rabbit hole

Planet Debian - Mon, 2016-08-22 08:24
My descent began with a user reporting a bug and I fear I am still on my way down.

The bug was simple enough, a windows bitmap file caused NetSurf to crash. Pretty quickly this was tracked down to the libnsbmp library attempting to decode the file. As to why we have a heavily used library for bitmaps? I am afraid they are part of every icon file and many websites still have favicons using that format.

Some time with a hex editor and the file format specification soon showed that the image in question was malformed and had a bad offset header entry. So I was faced with two issues, firstly that the decoder crashed when presented with badly encoded data and secondly that it failed to deal with incorrect header data.

This is typical of bug reports from real users, the obvious issues have already been encountered by the developers and unit tests formed to prevent them, what remains is harder to produce. After a debugging session with Valgrind and electric fence I discovered the crash was actually caused by running off the front of an allocated block due to an incorrect bounds check. Fixing the bounds check was simple enough as was working round the bad header value and after adding a unit test for the issue I almost moved on.


We already used the bitmap test suite of images to check the library decode which was giving us a good 75% or so line coverage (I long ago added coverage testing to our CI system) but I wondered if there was a test set that might increase the coverage and perhaps exercise some more of the bounds checking code. A bit of searching turned up the american fuzzy lop (AFL) projects synthetic corpora of bmp and ico images.

After checking with the AFL authors that the images were usable in our project I added them to our test corpus and discovered a whole heap of trouble. After fixing more bounds checks and signed issues I finally had a library I was pretty sure was solid with over 85% test coverage.

Then I had the idea of actually running AFL on the library. I had been avoiding this because my previous experimentation with other fuzzing utilities had been utter frustration and very poor return on investment of time. Following the quick start guide looked straightforward enough so I thought I would spend a short amount of time and maybe I would learn a useful tool.

I downloaded the AFL source and built it with a simple make which was an encouraging start. The library was compiled in debug mode with AFL instrumentation simply by changing the compiler and linker environment variables.

$ LD=afl-gcc CC=afl-gcc AFL_HARDEN=1 make VARIANT=debug test
afl-cc 2.32b by <lcamtuf@google.com>
afl-cc 2.32b by <lcamtuf@google.com>
COMPILE: src/libnsbmp.c
afl-cc 2.32b by <lcamtuf@google.com>
afl-as 2.32b by <lcamtuf@google.com>
[+] Instrumented 751 locations (64-bit, hardened mode, ratio 100%).
AR: build-x86_64-linux-gnu-x86_64-linux-gnu-debug-lib-static/libnsbmp.a
COMPILE: test/decode_bmp.c
afl-cc 2.32b by <lcamtuf@google.com>
afl-as 2.32b by <lcamtuf@google.com>
[+] Instrumented 52 locations (64-bit, hardened mode, ratio 100%).
LINK: build-x86_64-linux-gnu-x86_64-linux-gnu-debug-lib-static/test_decode_bmp
afl-cc 2.32b by <lcamtuf@google.com>
COMPILE: test/decode_ico.c
afl-cc 2.32b by <lcamtuf@google.com>
afl-as 2.32b by <lcamtuf@google.com>
[+] Instrumented 65 locations (64-bit, hardened mode, ratio 100%).
LINK: build-x86_64-linux-gnu-x86_64-linux-gnu-debug-lib-static/test_decode_ico
afl-cc 2.32b by <lcamtuf@google.com>
Test bitmap decode
Tests:606 Pass:606 Error:0
Test icon decode
Tests:392 Pass:392 Error:0
TEST: Testing complete
I stuffed the AFL build directory on the end of my PATH, created a directory for the output and ran afl-fuzz

afl-fuzz -i test/bmp -o findings_dir -- ./build-x86_64-linux-gnu-x86_64-linux-gnu-debug-lib-static/test_decode_bmp @@ /dev/null
The result was immediate and not a little worrying, within seconds there were crashes and lots of them! Over the next couple of hours I watched as the unique crash total climbed into the triple digits.

I was forced to abort the run at this point as, despite clear warnings in the AFL documentation of the demands of the tool, my laptop was clearly not cut out to do this kind of work and had become distressingly hot.

AFL has a visualisation tool so you can see what kind of progress it is making which produced a graph that showed just how fast it managed to produce crashes and how much the return plateaus after just a few cycles. Although it was finding a new unique crash every ten minutes or so when aborted.

I dove in to analyse the crashes and it immediately became obvious the main issue was caused when the test tool attempted allocations of absurdly large bitmaps. The browser itself uses a heuristic to determine the maximum image size based on used memory and several other values. I simply applied an upper bound of 48 megabytes per decoded image which fits easily within the fuzzers default heap limit of 50 megabytes.

The main source of "hangs" also came from large allocations so once the test was fixed afl-fuzz was re-run with a timeout parameter set to 100ms. This time after several minutes no crashes and only a single hang were found which came as a great relief, at which point my laptop had a hard shutdown due to thermal event!

Once the laptop cooled down I spooled up a more appropriate system to perform this kind of work a 24way 2.1GHz Xeon system. A Debian Jessie guest vm with 20 processors and 20 gigabytes of memory was created and the build replicated and instrumented.

To fully utilise this system the next test run would utilise AFL in parallel mode. In this mode there is a single "master" running all the deterministic checks and many "secondary" instances performing random tweaks.

If I have one tiny annoyance with AFL, it is that breeding and feeding a herd of rabbits by hand is annoying and something I would like to see a convenience utility for.

The warren was left overnight with 19 instances and by morning had generated crashes again. This time though the crashes actually appeared to be real failures.

$ afl-whatsup sync_dir/
Summary stats

Fuzzers alive : 19
Total run time : 5 days, 12 hours
Total execs : 214 million
Cumulative speed : 8317 execs/sec
Pending paths : 0 faves, 542 total
Pending per fuzzer : 0 faves, 28 total (on average)
Crashes found : 554 locally unique
All the crashing test cases are available and a simple file command immediately showed that all the crashing test files had one thing in common the height of the image was -2147483648 This seemingly odd number is actually meaningful to a programmer, it is the largest negative number which can be stored in a 32bit integer (INT32_MIN) I immediately examined the source code that processes the height in the image header.

if ((width <= 0) || (height == 0))
if (height < 0) {
bmp->reversed = true;
height = -height;
The bug is where the height is made a positive number and results in height being set to 0 after the existing check for zero and results in a crash later in execution. A simple fix was applied and test case added removing the crash and any possible future failure due to this.

Another AFL run has been started and after a few hours has yet to find a crash or non false positive hang so it looks like if there are any more crashes to find they are much harder to uncover.

Main lessons learned are:
  • AFL is an easy to use and immensely powerful and effective tool. State of the art has taken a massive step forward.
  • The test harness is part of the test! make sure it does not behave in a poor manner and cause issues itself.
  • Even a library with extensive test coverage and real world users can benefit from this technique. But it remains to be seen how quickly the rate of return will reduce after the initial fixes.
  • Use the right tool for the job! Ensure you head the warnings in the manual as AFL uses a lot of resources including CPU, disc and memory.
I will of course be debugging any new crashes that occur and perhaps turning my sights to all the projects other unit tested libraries. I will also be investigating the generation of our own custom test corpus from AFL to replace the demo set, this will hopefully increase our unit test coverage even further.

Overall this has been my first successful use of a fuzzing tool and a very positive experience. I would wholeheartedly recommend using AFL to find errors and perhaps even integrate as part of a CI system.
Categories: FLOSS Project Planets

"Menno's Musings": IMAPClient 1.0.2

Planet Python - Mon, 2016-08-22 08:14

IMAPClient 1.0.2 is out! This is release comes with a few small fixes and tweaks, as well as a some documentation improvements.


  • There's now an explicit check that the pyOpenSSL version that IMAPClient is seeing is sufficient. This is to help with situations (typically on OS X) where the (old) system pyOpenSSL takes precedence over the version that IMAPClient needs. Use of virtualenvs is highly recommended.
  • Python 3.5 is now officially supported and tested against.
  • setup.py can now be used even if it's not in the current directory.
  • Handling of RFC2822 group address syntax has been documented.
  • The INI file format used by the live tests and interactive shell has finally been documented.
  • Links to ReadTheDocs now go to readthedocs.io
  • The project README has been arranged so that all the essentials are right at the top.

I announced that the project would be moving to Git and Github some time ago and this is finally happening. This release will be the last release where the project is on Bitbucket.

Categories: FLOSS Project Planets

Python Software Foundation: "In the beginning, there was one Python group": Community Service Award Recipient Stéphane Wirtel

Planet Python - Mon, 2016-08-22 06:30
“In the beginning, there was one Python group in Charleroi, the P3B (Python Blanc Bleu Belge)”, Stéphane Wirtel recalls. This first Python group was led by Denis Frère and Olivier Laurent. Together with Aragne, the first company using Python in Belgium, and Marc-Andre Lemburg the P3B helped organize the inaugural EuroPython in 2002. Over the years, however, the P3B disbanded. “Other groups have organized some events for the Belgian community”, Wirtel adds. These groups, however, have faced some of the organizing challenges as the P3B.

As a Python user of 15 years, Wirtel contemplated what would be the best way to sustainably build the Belgian Python community. He originally wanted to organize the first PyCon in Belgium but eventually decided to invest his energies elsewhere. Ludovic Gasc, Fabien Benetou and Wirtel began by hosting Python events in Brussels and Charleroi.

The Python Software Foundation has awarded Wirtel in the second quarter of 2016 with a Community Service Award in recognition for his work organizing a Python User Group in Belgium, for his continued work creating marketing material for the PSF, for his continued outreach efforts with spreading the PSF's mission.

Outreach at PythonFOSDEM and Building a New Python Belgium Community

“FOSDEM is one of the most important events in the European development community with over 5,000 attendees participating in a weekend event” Wirtel explains. The importance of FOSDEM led Wirtel and Gasc to create the first PythonFOSDEM.

Since 2013 Wirtel has organized the PythonFOSDEM devroom, expanding the room from 80 participants in 2013 to well over 400 participants in 2016. Benetou, who volunteered in the FOSDEM 2016 Python devroom, remembers the excitement in the room explaining that the room was filled within five minutes of opening.
Python devroom at @fosdem, it didn't even started and it's packed already! pic.twitter.com/MRtzFt24ez — utopiah (@utopiah) January 30, 2016

With the growth of the PythonFOSDEM devroom and the return of AFPyro-BE, led by Ludovic Gasc, Wirtel has been focusing efforts on building the belgium@python.org mailing list and registering a Belgian Python website. “Stéphane continues to challenge us to organize bigger and bigger events”, Gasc comments on Wirtel. His continued work promoting Python in Belgium is helping provide the building blocks for a new Python community in Belgium.

Python Software Foundation Marketing Work Group

As a member of the PSF marketing work group, Wirtel is an ongoing voice in the discussion and creation of PSF marketing materials. Wirtel helped with flyer development and distribution for  PythonFOSDEM 2015, PyCon North America 2015 and PyCon Ireland 2015.

Inspiring new CPython contributors at EuroPython 2016

Wirtel spoke at EuroPython this year on the topic of CPython. His talk, titled “Exploring our Python Interpreter”, outlined the basics of how the Python interpreter works. Of notable importance Wirtel framed his talk for CPython novices, pointing out documentation on where to get started and resources for how to find CPython core mentors. Wirtel also pointed to a CPython patch he recently submitted for the __ltrace__ feature. With his patch you can compile Python to easily show the Python bytecode generated, a significant suggestion for beginners to be able to play with in the Python interpreter. Here is an example of his feature in action:

>>> __ltrace__ = None  # To enable tracing >>> print("hello")     # Now, shows bytecodes run 0: LOAD_NAME, 0 push <built-in function print> 2: LOAD_CONST, 0 push 'hello' 4: CALL_FUNCTION, 1 ext_pop 'hello' hello ext_pop <built-in function print> push None 6: PRINT_EXPR pop None 8: LOAD_CONST, 1 push None 10: RETURN_VALUE pop None

Some of Wirtel’s other projects includes working as a former core developer of Odoo from 2008 to 2014, an open source enterprise resource planner which is built with PostgreSQL and CPython. He has contributed to Gunicorn and is working to contribute more to CPython. Wirtel is also a member of the EuroPython Society and the Association Francophone de Python (AFPy) as well as a PSF Fellow. Wirtel has supported EuroPython the last two years as a volunteer and as a working group member too.
Wirtel’s passion for bringing new Pythonistas into the fold, be it through the creation and continued organizing of the PythonFOSDEM Devroom or the proliferation of CPython knowledge and tools particularly suited for the beginner, is profound. As he noted in his EuroPython 2016 talk, he was completely new to CPython at the 2014 PyCon North America at Montreal! “Simply put Wirtel is the type of person who gets things done” Benetou says, adding that “these are the type of people that inspire me, that I like”.
Categories: FLOSS Project Planets
Syndicate content