CINXE.COM
Python Software Foundation News: 2019
<!DOCTYPE html> <html class='v2' dir='ltr' lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <!-- Google tag (gtag.js) --> <script async='async' src='https://www.googletagmanager.com/gtag/js?id=G-H6ZX4B41B7'></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-H6ZX4B41B7'); </script> <meta content='Python Software Foundation Blog' property='og:site_name'/> <meta content='https://pyfound.blogspot.com' property='og:url'/> <meta content='' property='og:description'/> <meta content='' property='og:type'/> <meta content='https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/psf/grants/report-2006-10/psf-logo.png' property='og:image'/> <meta content='width=1100' name='viewport'/> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='https://pyfound.blogspot.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://pyfound.blogspot.com/2019/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Python Software Foundation News - Atom" href="https://pyfound.blogspot.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Python Software Foundation News - RSS" href="https://pyfound.blogspot.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Python Software Foundation News - Atom" href="https://www.blogger.com/feeds/8520/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='https://pyfound.blogspot.com/2019/' property='og:url'/> <meta content='Python Software Foundation News' property='og:title'/> <meta content='聽聽News from the Python Software Foundation' property='og:description'/> <title>Python Software Foundation News: 2019</title> <style id='page-skin-1' type='text/css'><!-- /* ----------------------------------------------- Blogger Template Style Name: Simple Designer: Blogger URL: www.blogger.com ----------------------------------------------- */ /* Variable definitions ==================== <Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/> <Group description="Page Text" selector="body"> <Variable name="body.font" description="Font" type="font" default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="body.text.color" description="Text Color" type="color" default="#222222"/> </Group> <Group description="Backgrounds" selector=".body-fauxcolumns-outer"> <Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/> <Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/> <Variable name="header.background.color" description="Header Background" type="color" default="transparent"/> </Group> <Group description="Links" selector=".main-outer"> <Variable name="link.color" description="Link Color" type="color" default="#2288bb"/> <Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/> <Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/> </Group> <Group description="Blog Title" selector=".header h1"> <Variable name="header.font" description="Font" type="font" default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" /> </Group> <Group description="Blog Description" selector=".header .description"> <Variable name="description.text.color" description="Description Color" type="color" default="#777777" /> </Group> <Group description="Tabs Text" selector=".tabs-inner .widget li a"> <Variable name="tabs.font" description="Font" type="font" default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/> <Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/> </Group> <Group description="Tabs Background" selector=".tabs-outer .PageList"> <Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/> <Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/> </Group> <Group description="Post Title" selector="h3.post-title, .comments h4"> <Variable name="post.title.font" description="Font" type="font" default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> </Group> <Group description="Date Header" selector=".date-header"> <Variable name="date.header.color" description="Text Color" type="color" default="#666666"/> <Variable name="date.header.background.color" description="Background Color" type="color" default="transparent"/> <Variable name="date.header.font" description="Text Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/> <Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/> <Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/> </Group> <Group description="Post Footer" selector=".post-footer"> <Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/> <Variable name="post.footer.background.color" description="Background Color" type="color" default="#f9f9f9"/> <Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/> </Group> <Group description="Gadgets" selector="h2"> <Variable name="widget.title.font" description="Title Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/> <Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/> </Group> <Group description="Images" selector=".main-inner"> <Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/> <Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/> <Variable name="image.text.color" description="Caption Text Color" type="color" default="#666666"/> </Group> <Group description="Accents" selector=".content-inner"> <Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/> <Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="#ffd343"/> </Group> <Variable name="body.background" description="Body Background" type="background" color="#eeeeee" default="$(color) none repeat scroll top left"/> <Variable name="body.background.override" description="Body Background Override" type="string" default=""/> <Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/body_gradient_tile_light.png)"/> <Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/> <Variable name="content.padding" description="Content Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px" min="0" max="100px"/> <Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px" min="0" max="100px"/> <Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px" min="0" max="100px"/> <Variable name="main.border.width" description="Main Border Width" type="length" default="0" min="0" max="10px"/> <Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/> <Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px" min="0" max="100px"/> <Variable name="header.padding" description="Header Padding" type="length" default="30px" min="0" max="100px"/> <Variable name="header.border.size" description="Header Border Size" type="length" default="1px" min="0" max="10px"/> <Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="1px" min="0" max="10px"/> <Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0" min="0" max="10px"/> <Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/> <Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" min="0" max="100px"/> <Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" min="0" max="100px"/> <Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px" min="0" max="100px"/> <Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px" min="0" max="10px"/> <Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px" min="0" max="10px"/> <Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/> <Variable name="page.width" description="Page Width" type="string" default="auto"/> <Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding" description="Main Padding" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px" min="0" max="100px"/> <Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px" min="0" max="100px"/> <Variable name="paging.background" color="#ffffff" description="Background of blog paging area" type="background" default="transparent none no-repeat scroll top center"/> <Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0" min="0" max="10px"/> <Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string" default="transparent none repeat scroll top left"/> <Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/> <Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" /> <Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/> <Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/> */ /* Content ----------------------------------------------- */ body { font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif; color: #666666; background: #eeeeee none repeat scroll top left; padding: 0 0 0 0; } html body .region-inner { min-width: 0; max-width: 100%; width: auto; } h2 { font-size: 22px; } a:link { text-decoration:none; color: #2b5b84; } a:visited { text-decoration:none; color: #2b5b84; } a:hover { text-decoration:underline; color: #3776ab; } .body-fauxcolumn-outer .fauxcolumn-inner { background: transparent none repeat scroll top left; _background-image: none; } .body-fauxcolumn-outer .cap-top { position: absolute; z-index: 1; height: 400px; width: 100%; } .body-fauxcolumn-outer .cap-top .cap-left { width: 100%; background: transparent none repeat-x scroll top left; _background-image: none; } .content-outer { -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .15); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .15); -goog-ms-box-shadow: 0 0 0 #333333; box-shadow: 0 0 0 rgba(0, 0, 0, .15); margin-bottom: 1px; } .content-inner { padding: 10px 40px; } .content-inner { background-color: #ffffff; } /* Header ----------------------------------------------- */ .header-outer { background: #2b5b84 none repeat-x scroll 0 -400px; _background-image: none; } .Header h1 { font: normal normal 40px 'Trebuchet MS',Trebuchet,Verdana,sans-serif; color: #000000; text-shadow: 0 0 0 rgba(0, 0, 0, .2); } .Header h1 a { color: #000000; } .Header .description { font-size: 18px; color: #ffd343; } .header-inner .Header .titlewrapper { padding: 22px 0; } .header-inner .Header .descriptionwrapper { padding: 0 0; } /* Tabs ----------------------------------------------- */ .tabs-inner .section:first-child { border-top: 0 solid #dddddd; } .tabs-inner .section:first-child ul { margin-top: -1px; border-top: 1px solid #dddddd; border-left: 1px solid #dddddd; border-right: 1px solid #dddddd; } .tabs-inner .widget ul { background: transparent none repeat-x scroll 0 -800px; _background-image: none; border-bottom: 1px solid #dddddd; margin-top: 0; margin-left: -30px; margin-right: -30px; } .tabs-inner .widget li a { display: inline-block; padding: .6em 1em; font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif; color: #000000; border-left: 1px solid #ffffff; border-right: 1px solid #dddddd; } .tabs-inner .widget li:first-child a { border-left: none; } .tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover { color: #000000; background-color: #eeeeee; text-decoration: none; } /* Columns ----------------------------------------------- */ .main-outer { border-top: 0 solid #ffd343; } .fauxcolumn-left-outer .fauxcolumn-inner { border-right: 1px solid #ffd343; } .fauxcolumn-right-outer .fauxcolumn-inner { border-left: 1px solid #ffd343; } /* Headings ----------------------------------------------- */ div.widget > h2, div.widget h2.title { margin: 0 0 1em 0; font: normal bold 11px 'Trebuchet MS',Trebuchet,Verdana,sans-serif; color: #000000; } /* Widgets ----------------------------------------------- */ .widget .zippy { color: #999999; text-shadow: 2px 2px 1px rgba(0, 0, 0, .1); } .widget .popular-posts ul { list-style: none; } /* Posts ----------------------------------------------- */ h2.date-header { font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif; } .date-header span { background-color: #bbbbbb; color: #ffffff; padding: 0.4em; letter-spacing: 3px; margin: inherit; } .main-inner { padding-top: 35px; padding-bottom: 65px; } .main-inner .column-center-inner { padding: 0 0; } .main-inner .column-center-inner .section { margin: 0 1em; } .post { margin: 0 0 45px 0; } h3.post-title, .comments h4 { font: normal normal 22px 'Trebuchet MS',Trebuchet,Verdana,sans-serif; margin: .75em 0 0; } .post-body { font-size: 110%; line-height: 1.4; position: relative; } .post-body img, .post-body .tr-caption-container, .Profile img, .Image img, .BlogList .item-thumbnail img { padding: 2px; background: #ffffff; border: 1px solid #eeeeee; -moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); } .post-body img, .post-body .tr-caption-container { padding: 5px; } .post-body .tr-caption-container { color: #666666; } .post-body .tr-caption-container img { padding: 0; background: transparent; border: none; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1); box-shadow: 0 0 0 rgba(0, 0, 0, .1); } .post-header { margin: 0 0 1.5em; line-height: 1.6; font-size: 90%; } .post-footer { margin: 20px -2px 0; padding: 5px 10px; color: #666666; background-color: #eeeeee; border-bottom: 1px solid #eeeeee; line-height: 1.6; font-size: 90%; } #comments .comment-author { padding-top: 1.5em; border-top: 1px solid #ffd343; background-position: 0 1.5em; } #comments .comment-author:first-child { padding-top: 0; border-top: none; } .avatar-image-container { margin: .2em 0 0; } #comments .avatar-image-container img { border: 1px solid #eeeeee; } /* Comments ----------------------------------------------- */ .comments .comments-content .icon.blog-author { background-repeat: no-repeat; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==); } .comments .comments-content .loadmore a { border-top: 1px solid #999999; border-bottom: 1px solid #999999; } .comments .comment-thread.inline-thread { background-color: #eeeeee; } .comments .continue { border-top: 2px solid #999999; } /* Accents ---------------------------------------------- */ .section-columns td.columns-cell { border-left: 1px solid #ffd343; } .blog-pager { background: transparent url(//www.blogblog.com/1kt/simple/paging_dot.png) repeat-x scroll top center; } .blog-pager-older-link, .home-link, .blog-pager-newer-link { background-color: #ffffff; padding: 5px; } .footer-outer { border-top: 1px dashed #bbbbbb; } /* Mobile ----------------------------------------------- */ body.mobile { background-size: auto; } .mobile .body-fauxcolumn-outer { background: transparent none repeat scroll top left; } .mobile .body-fauxcolumn-outer .cap-top { background-size: 100% auto; } .mobile .content-outer { -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15); box-shadow: 0 0 3px rgba(0, 0, 0, .15); } .mobile .tabs-inner .widget ul { margin-left: 0; margin-right: 0; } .mobile .post { margin: 0; } .mobile .main-inner .column-center-inner .section { margin: 0; } .mobile .date-header span { padding: 0.1em 10px; margin: 0 -10px; } .mobile h3.post-title { margin: 0; } .mobile .blog-pager { background: transparent none no-repeat scroll top center; } .mobile .footer-outer { border-top: none; } .mobile .main-inner, .mobile .footer-inner { background-color: #ffffff; } .mobile-index-contents { color: #666666; } .mobile-link-button { background-color: #2b5b84; } .mobile-link-button a:link, .mobile-link-button a:visited { color: #ffffff; } .mobile .tabs-inner .section:first-child { border-top: none; } .mobile .tabs-inner .PageList .widget-content { background-color: #eeeeee; color: #000000; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } .mobile .tabs-inner .PageList .widget-content .pagelist-arrow { border-left: 1px solid #dddddd; } --></style> <style id='template-skin-1' type='text/css'><!-- body { min-width: 960px; } .content-outer, .content-fauxcolumn-outer, .region-inner { min-width: 960px; max-width: 960px; _width: 960px; } .main-inner .columns { padding-left: 0; padding-right: 310px; } .main-inner .fauxcolumn-center-outer { left: 0; right: 310px; /* IE6 does not respect left and right together */ _width: expression(this.parentNode.offsetWidth - parseInt("0") - parseInt("310px") + 'px'); } .main-inner .fauxcolumn-left-outer { width: 0; } .main-inner .fauxcolumn-right-outer { width: 310px; } .main-inner .column-left-outer { width: 0; right: 100%; margin-left: -0; } .main-inner .column-right-outer { width: 310px; margin-right: -310px; } #layout { min-width: 0; } #layout .content-outer { min-width: 0; width: 800px; } #layout .region-inner { min-width: 0; width: auto; } body#layout div.add_widget { padding: 8px; } body#layout div.add_widget a { margin-left: 32px; } --></style> <script type='text/javascript'> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-55961911-3', 'auto', 'blogger'); ga('blogger.send', 'pageview'); </script> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=8520&zx=7dac3870-f7be-457f-8232-1b0e440c089b' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=8520&zx=7dac3870-f7be-457f-8232-1b0e440c089b' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?display=swap&family=Montserrat"></head> <body class='loading'> <div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d8520\x26blogName\x3dPython+Software+Foundation+News\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dLIGHT\x26layoutType\x3dLAYOUTS\x26searchRoot\x3dhttps://pyfound.blogspot.com/search\x26blogLocale\x3den\x26v\x3d2\x26homepageUrl\x3dhttps://pyfound.blogspot.com/\x26vt\x3d-6418538651529203108', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe", messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { 'blogger-ping': function() {} } }); } }); </script><script type="text/javascript"> (function() { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js'; var head = document.getElementsByTagName('head')[0]; if (head) { head.appendChild(script); }})(); </script> </div></div> <div class='body-fauxcolumns'> <div class='fauxcolumn-outer body-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content'> <div class='content-fauxcolumns'> <div class='fauxcolumn-outer content-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content-outer'> <div class='content-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left content-fauxborder-left'> <div class='fauxborder-right content-fauxborder-right'></div> <div class='content-inner'> <header> <div class='header-outer'> <div class='header-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left header-fauxborder-left'> <div class='fauxborder-right header-fauxborder-right'></div> <div class='region-inner header-inner'> <div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'> <div id='header-inner'> <a href='https://pyfound.blogspot.com/' style='display: block'> <img alt='Python Software Foundation News' height='82px; ' id='Header1_headerimg' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD_WIGHsseqGaGnsXVjcNYZ5g6EIb1XoDEmltAoM6Bi6_R9uDS1BPJP9oPJKj1k4I5R8ALUVZZfy4_DLjEDs6i2GxsCDnf3xO5eo54utZQ5E2pyUhtbQGOiiwBrmLU5asONQ/s1600-r/psf-logo.png' style='display: block' width='334px; '/> </a> <div class='descriptionwrapper'> <p class='description'><span>  News from the Python Software Foundation</span></p> </div> </div> </div></div> </div> </div> <div class='header-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </header> <div class='tabs-outer'> <div class='tabs-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left tabs-fauxborder-left'> <div class='fauxborder-right tabs-fauxborder-right'></div> <div class='region-inner tabs-inner'> <div class='tabs no-items section' id='crosscol' name='Cross-Column'></div> <div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div> </div> </div> <div class='tabs-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='main-outer'> <div class='main-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left main-fauxborder-left'> <div class='fauxborder-right main-fauxborder-right'></div> <div class='region-inner main-inner'> <div class='columns fauxcolumns'> <div class='fauxcolumn-outer fauxcolumn-center-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-left-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-right-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <!-- corrects IE6 width calculation --> <div class='columns-inner'> <div class='column-center-outer'> <div class='column-center-inner'> <div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='blog-posts hfeed'> <div class="date-outer"> <h2 class='date-header'><span>Friday, December 20, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='8572381617015506818' itemprop='postId'/> <a name='8572381617015506818'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/12/python-2-sunset.html'>Python 2 series to be retired by April 2020</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-8572381617015506818' itemprop='description articleBody'> The CPython core development community is urging users to migrate to Python 3 as it will be the only version that will be updated for bugs and security vulnerabilities.<br /> <br /> After nearly 20 years of development on the Python 2 series, the last major version 2.7 will be released in April 2020, and then all development will cease for Python 2. Users are urged to migrate to Python 3 to benefit from its many improvements, as well as to avoid potential security vulnerabilities in Python 2.x after April 2020. This move will free limited resources for the CPthyon core developer community for other important work. <br /> <br /> The final Python 2.7 maintenance release was originally planned for 2015. However, it was delayed 5 years to give people adequate time to migrate and to work closely with vendors and redistributors to ensure that supported Python 3 migration options were available. Part of the reason for this delay was because the stricter text model in Python 3 was forcing the resolution of non-trivial Unicode handling issues in the reference interpreter and standard library, and in migrated libraries and applications<br /> <br /> Python 3 is a noticeable improvement to Python. There is ground-up support for Unicode and internationalization. It better expresses common idioms and patterns, which in code makes it easier to read and reason about. Improvements in concurrency, fault handling, testing, and debugging provide developers with the opportunity to create more robust and secure applications. <br /> <br /> Going forward, Python 3 will be the only major version of CPython that is actively maintained for bugs and security issues. <br /> <br /> More information:<br /> <ul> <li>Press release: <a href="https://www.python.org/psf/press-release/pr20191220/">https://www.python.org/psf/press-release/pr20191220/</a></li> <li>Simple FAQ: <a href="https://www.python.org/doc/sunset-python-2/">https://www.python.org/doc/sunset-python-2/</a></li> <li>Comprehensive FAQ: <a href="http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html">http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html</a></li> <li>Developer porting guide: <a href="https://portingguide.readthedocs.io/">https://portingguide.readthedocs.io</a></li> </ul> <ul> </ul> <h3> Clarification Update January 8, 2020</h3> Effective January 1, 2020, no new bug reports, fixes, or changes will be made to Python 2.<br /><br />After Python 2.7.17 (October 19, 2019) was released, some additional changes accumulated before the end of 2019 when the core development team froze the 2.7 branch. As a final service to the community, python-dev will bundle those fixes -- and only those fixes -- into a final 2.7.18 release. The release date for 2.7.18 will be in April 2020 because that allows time for the release managers to complete a release candidate and final release.<br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/17402093381675240286' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/17402093381675240286' rel='author' title='author profile'> <span itemprop='name'>Greg H</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/12/python-2-sunset.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/12/python-2-sunset.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-12-20T09:37:00-05:00'>12/20/2019 09:37:00 AM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-1238897183'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=8572381617015506818&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> Labels: <a href='https://pyfound.blogspot.com/search/label/python3' rel='tag'>python3</a> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, December 04, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://lh5.googleusercontent.com/5h3X2IlLjvHn9uOlJ29nqh0aTW1PlxJ6zeMam-ivpPt-oV2NW6KolLPyc6JrKkN-HmBJ9BD0CWbiGxBzhqFJKchf9TCPTKQSUMxiQ_DFKEjLQmvmEme81IwXY1aSpMgxoh1SGxQ' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='7158064099987968072' itemprop='postId'/> <a name='7158064099987968072'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/12/moss-czi-support-pip.html'>Mozilla and Chan Zuckerberg Initiative to support pip</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-7158064099987968072' itemprop='description articleBody'> <br /> <div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"> </div> <br /> The Python Software Foundation is receiving $407,000 USD to support<a href="https://wiki.python.org/psf/Pip2020DonorFundedRoadmap"> work</a> on<a href="https://pip.pypa.io/"> pip</a> in 2020. Thank you to<a href="https://www.mozilla.org/en-US/moss/"> Mozilla (through its Mozilla Open Source Support Awards)</a> and to the<a href="https://chanzuckerberg.com/eoss/"> Chan Zuckerberg Initiative</a> for this funding! This foundational, transformational work will release Python developers and users to concentrate on the tools they're making and using, instead of troubleshooting dependency conflicts. Specifically, CZI and Mozilla are funding user experience, communications/publicity, and testing work (including developing robust testing infrastructure) as well as core feature development and review.<br /> <br /> <h3> <a href="https://lh5.googleusercontent.com/5h3X2IlLjvHn9uOlJ29nqh0aTW1PlxJ6zeMam-ivpPt-oV2NW6KolLPyc6JrKkN-HmBJ9BD0CWbiGxBzhqFJKchf9TCPTKQSUMxiQ_DFKEjLQmvmEme81IwXY1aSpMgxoh1SGxQ" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="161" src="https://lh5.googleusercontent.com/5h3X2IlLjvHn9uOlJ29nqh0aTW1PlxJ6zeMam-ivpPt-oV2NW6KolLPyc6JrKkN-HmBJ9BD0CWbiGxBzhqFJKchf9TCPTKQSUMxiQ_DFKEjLQmvmEme81IwXY1aSpMgxoh1SGxQ" width="320" /></a> </h3> <h3> <a href="https://lh5.googleusercontent.com/acZqPib5KOOQpNi8SCq4rU7vNCUQLgjD8-Fc3aw49IVF2MFQv0LZV2d9hb73H7mOCpqD3_OLDQ7f_d0NHohNzaWluGfwPVRivb5QXpHiZy4JPj3fuUrQQ23ipFnd3QZiUG9EBd0" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="89" src="https://lh5.googleusercontent.com/acZqPib5KOOQpNi8SCq4rU7vNCUQLgjD8-Fc3aw49IVF2MFQv0LZV2d9hb73H7mOCpqD3_OLDQ7f_d0NHohNzaWluGfwPVRivb5QXpHiZy4JPj3fuUrQQ23ipFnd3QZiUG9EBd0" width="320" /></a>What we're doing with the money</h3> Computers need to know the right order to install pieces of software ("to install <i>x</i>, you need to install <i>y</i> first"). So, when programmers share software, we have to precisely describe those installation prerequisites, and our installation tools need to navigate tricky situations where they're getting conflicting instructions. This project will make pip, a package installer for Python, better at handling that tricky logic, and easier for people to use and troubleshoot.<br /> <br /> Millions of people and organizations use tools written in Python, and nearly the entire ecosystem of Python software projects depends on pip. Our project will help everyone more easily install software, diagnose and fix problems, and maintain infrastructure.<br /> <br /> The Chan Zuckerberg Initiative funding is, in particular, aimed at improving <a href="https://chanzuckerberg.com/eoss/">Essential Open Source Software for Science</a>. Scientists use many tools written in Python --<a href="https://chanzuckerberg.com/newsroom/chan-zuckerberg-initiative-awards-5-million-for-open-source-software-projects-essential-to-science/"> many of CZI's awardees in this round are written in Python</a> -- but, also, researchers often want to write tools and share them with each other to help science advance faster. Our work will include research and improvements so the installation process will be easier to use and understand, which will enable researchers to build better applications and compose complex toolchains more easily.<br /> <br /> We've laid out a detailed three-phase work plan on<a href="https://wiki.python.org/psf/Pip2020DonorFundedRoadmap"> our pip 2020 Donor-funded Roadmap wiki page</a>. To summarize:<br /> <br /> <ul> <li><b>Mozilla</b> is awarding PSF a<a href="https://mozilla.org/moss"> Mozilla Open Source Support Award</a> (<a href="https://www.mozilla.org/en-US/moss/foundational-technology/">Track I: Foundational Technology</a>) for $207,000, which is paying for 5 months of: </li> <ul> <li><b>Python development work</b>: Reviewing and responding to open issues and pull requests, refactoring build logic, collaborating with downstream projects and users about config flags and transition schedules, working on the dependency resolver itself and fixing bugs. </li> </ul> <ul> <li><b>Initial user experience research and design work</b>: Reading existing bug reports and posts about Python package management confusion, interviewing users and running user tests, developing user journey maps and workflows, and working with maintainers to write documentation and help messages and to design resolver user experience. </li> </ul> <li><b>CZI</b> is giving PSF an<a href="https://chanzuckerberg.com/eoss/"> Essential Open Source Software for Science</a> grant for $200,000, which is paying for: </li> <ul> <li>12 months of <b>Python development, test infrastructure, and project maintenance</b>: Triaging bugs and reviewing pull requests, writing test cases, testing lead developers' work, building test infrastructure, investigating and fixing bugs, and writing the raw material for documentation to help future maintainers onboard better. </li> </ul> <ul> <li>4 months of <b>Phase III user experience research and design work</b>: Training maintainers in UX design, doing further user tests on the new pip, developing a checklist for developing new features, and making templates for commands, error messages, output, documentation, and config files. </li> <li><b>Travel</b> for initial developer onboarding and for some contributors to attend<a href="https://us.pycon.org/2020/"> PyCon North America</a>. </li> </ul> <li>And both CZI and Mozilla are paying for <b>project management</b> (planning, testing, editing, coordinating, communicating with stakeholders, announcing, reporting to funders, and getting obstacles out of everyone's way) and <b>PSF administrative work</b> (recruiting and overseeing contractors, project oversight, and financial processing). </li> </ul> The Packaging Working Group is<a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md"> currently selecting contractors for the programming parts of this work</a>. The other two contractors have already been selected:<br /> <ul> <li><i><a href="https://simplysecure.org/">Simply Secure</a></i> is "an educational nonprofit 501(c)3 that supports practitioners in designing ethically-informed, values-driven technology that protects human rights." As experts in open source user experience, Simply Secure will bring UX research and design skills to the command-line experience of Python package management. </li> <li><i><a href="https://changeset.nyc/">Changeset Consulting, LLC</a></i>, providing project management, is a returning contractor, having previously worked on<a href="http://pyfound.blogspot.com/2017/11/the-psf-awarded-moss-grant-pypi.html"> the PyPI rewrite launch</a> and<a href="https://pyfound.blogspot.com/2019/03/commencing-security-accessibility-and.html"> improvements to PyPI's accessibility, security, and internationalization</a>. Changeset lead Sumana Harihareswara was also the lead grantwriter for these funding proposals. </li> </ul> <h3> </h3> <h3> Why this and why now?</h3> We're partway through a next-generation rewrite of pip's dependency resolver. The project ran into massive technical debt, but the refactoring is nearly finished and prototype functionality is in alpha now.<br /> <br /> We need to finish the resolver<a href="https://wiki.python.org/psf/Fundable%20Packaging%20Improvements#Finish_dependency_resolver_for_pip"> because many other packaging improvements are blocked on it, it'll fix many dependency issues for Python users, and it'll fix installation problems for conda, certbot, WebSocket, and many other projects</a>. And we need to improve pip's UX<a href="https://wiki.python.org/psf/Fundable%20Packaging%20Improvements#Improve_pip_user_experience"> by providing better error messages and prompts, logs, output, and reporting, consistently across features, to fit users' mental models better, make hairy problems easier to untangle, and reduce unintended data loss</a>.<br /> <br /> The<a href="https://wiki.python.org/psf/PackagingWG"> Packaging Working Group</a> looks for<a href="https://wiki.python.org/psf/Fundable%20Packaging%20Improvements"> potential improvements in Python packaging and distribution that are well-scoped, have community consensus, and could be expedited through funding</a>. In the past three years, the Packaging WG has received funding for<a href="https://wiki.python.org/psf/PackagingWG#Past%20projects"> several improvements to PyPI</a> -- $170,000 from Mozilla, $80,000 from OTF, and $100,000 from Facebook -- and is seeking to help other packaging tools. In June,<a href="https://github.com/pypa/pip/issues/6536"> pip maintainers and Packaging Working Group members discussed the importance and difficulty of rolling out the new resolver</a>. We worked together to write and submit proposals to Mozilla and the Chan Zuckerberg Initiative.<br /> <h3> </h3> <h3> What's next?</h3> This work will start by early January 2020. Day-to-day work will mostly happen in<a href="https://github.com/pypa/pip/"> pip's GitHub repository</a> and<a href="https://python.zulipchat.com/"> the Python developers' Zulip livechat</a>. You can check for regular reports at<a href="https://blog.python.org/"> the Python Insider blog</a> and<a href="https://discuss.python.org/c/packaging"> the Packaging category of Python's Discourse developer forum</a>, archived at<a href="https://wiki.python.org/psf/PackagingWG"> the Packaging WG's wiki page</a>. And we'll publicize calls for volunteers, especially for user interviews and tests, on this blog, on<a href="https://www.python.org/community/lists/"> community mailing lists</a>, and on<a href="https://twitter.com/ThePSF"> Twitter</a>.<br /> <br /> The Packaging WG will continue to seek funding for<a href="https://wiki.python.org/psf/Fundable%20Packaging%20Improvements#Packaging_improvements_that_could_be_funded"> future improvements in pip, manylinux, setuptools, the Python Packaging User Guide, PyPI, etc.</a><br /> <h3> </h3> <h3> Thanks</h3> This award continues our relationship with Mozilla, which supported Python packaging tools with<a href="https://pyfound.blogspot.com/2017/11/the-psf-awarded-moss-grant-pypi.html"> a Mozilla Open Source Support Award in 2017 for Warehouse</a>. Thank you, Mozilla! (MOSS has a number of types of awards, which are open to different sorts of open source/free software projects. If your project is looking for financial support, do check<a href="https://mozilla.org/moss"> the MOSS website</a> to see if you qualify.)<br /> <br /> This is new funding from the Chan Zuckerberg Initiative. This project is being made possible in part by a grant from the Chan Zuckerberg Initiative DAF, an advised fund of Silicon Valley Community Foundation. Thank you, CZI! (If your free software/open source project is used by biology researchers, check<a href="https://chanzuckerberg.com/rfa/essential-open-source-software-for-science/"> the Essential Open Source Software for Science Request for Applications</a> and consider applying for the next round).<br /> <br /> Thank you to the pip and <a href="https://www.pypa.io/">PyPA</a> maintainers, to the PSF and the Packaging WG, and to all the contributors and volunteers who work on or use Python packaging tools.<br /> <br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/08002085909817689325' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/08002085909817689325' rel='author' title='author profile'> <span itemprop='name'>Sumana Harihareswara</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/12/moss-czi-support-pip.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/12/moss-czi-support-pip.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-12-04T15:53:00-05:00'>12/04/2019 03:53:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-1436657185'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=7158064099987968072&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> Labels: <a href='https://pyfound.blogspot.com/search/label/grant' rel='tag'>grant</a>, <a href='https://pyfound.blogspot.com/search/label/grants' rel='tag'>grants</a>, <a href='https://pyfound.blogspot.com/search/label/open%20source' rel='tag'>open source</a>, <a href='https://pyfound.blogspot.com/search/label/pip' rel='tag'>pip</a> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Monday, December 02, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4eDgJEX3yt0bcyWO9ro3hRVvbIj8QdGEMdI0jl6VGPRusqmbAKhZ3-2huj5RFIrDqmbxdp1xs0BABYsfhQefuiS-ywGKD93GyEniPCEL4whfOa2e7hHLKYiLkueg14talMg/s320/PSF_giving_tuesday_ad_email_4.jpg' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='3982597027158551843' itemprop='postId'/> <a name='3982597027158551843'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/12/giving-tuesday-2019.html'>Giving Tuesday 2019</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3982597027158551843' itemprop='description articleBody'> <br /> For the first time the PSF is participating in Giving Tuesday! This event is held annually the Tuesday after Thanksgiving - this year on December 3rd, 2019. The global celebration runs for 24 hours and begins at midnight local time.<br /> <br /> <h3> Please <a href="https://www.python.org/psf/donations/2019-giving-tuesday-drive/">donate</a> on December 3rd and help us meet our goal of $10,000!</h3> <br /> Donations support sprints, meetups, community events, Python documentation, fiscal sponsorships, software development, and community projects. Your contributions help fund the critical tools you use every day.<br /> <br /> <h4> <b><span style="color: blue;">What if everyone around the world, gave together, on one day? Please consider supporting the PSF on Giving Tuesday, December 3rd, 2019. </span></b></h4> <div> <b><span style="color: blue;"><br /></span></b></div> <h4> Your donations have IMPACT</h4> <h4> ----------------------------------------</h4> Our <a href="https://www.python.org/psf/annual-report/2019/">Annual Report</a> will show just a few ways your support has made a difference, thanks to the generous support from our partners and friends. Some highlights are below:<br /> <br /> <ul> <li>Over $137,200 was awarded in financial aid to 143 PyCon attendees in 2019.</li> <li>$324,000 was paid in grants to recipients in 51 different countries.</li> <li>Donations and fundraisers resulted in $489,152 of revenue. This represents 15% of our total 2018 revenue. PSF and PyCon sponsors contributed over $1,071K in revenue!</li> </ul> <h4> </h4> <h4> How your donation dollars are spent:</h4> <ul> <li>$99 pays for 6 months of Python meetup subscriptions</li> <li>$60 a month ($2.00 a day) pays for one workshop, impacting over 250 people</li> <li>$.50 a day ($15 a month) pays for a meetup.com subscription for one Python group</li> <li>$1 a day ($30 a month) supports a regional workshop, impacting over 200 people.</li> <li>The PSF meetup.com network currently supports 68 groups with 89,000 members in 16 countries. It costs $.60 per member per month to support these worldwide meetups. </li> </ul> <div> <h4> </h4> <h4> Comments from grant recipients:</h4> "The PSF Fiscal Sponsorship allows us to focus on building community, while they handle our non-profit status, accounting, and back office." - Eric Holscher, PyCascades Conference Organizer<br /> <br /> "The PSF was North Bay Python's first sponsor. Their early financial support for our mission helped kickstart what has become one of the most well-regarded regional conferences in our community." - Christopher Neugebauer, Conference Organizer<br /> <br /> "Without the support of the PSF, our events would not have been possible. Many of our attendees are now working or interning as Python or Django Developers." - Jeel Mehta, Django Girls Bhavnagar, India Conference Volunteer<br /> <br /> "The PSF grant allowed us to run an all day workshop for women. More organizations should apply for a PSF grant so they can enable and motivate more people, especially minorities, to start their great journey into programming." - Women in Technology, Peru<br /> <div> <br /></div> <div> <br /></div> From the team at the PSF!<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4eDgJEX3yt0bcyWO9ro3hRVvbIj8QdGEMdI0jl6VGPRusqmbAKhZ3-2huj5RFIrDqmbxdp1xs0BABYsfhQefuiS-ywGKD93GyEniPCEL4whfOa2e7hHLKYiLkueg14talMg/s1600/PSF_giving_tuesday_ad_email_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4eDgJEX3yt0bcyWO9ro3hRVvbIj8QdGEMdI0jl6VGPRusqmbAKhZ3-2huj5RFIrDqmbxdp1xs0BABYsfhQefuiS-ywGKD93GyEniPCEL4whfOa2e7hHLKYiLkueg14talMg/s320/PSF_giving_tuesday_ad_email_4.jpg" width="320" /></a></div> <br /> <br /> ______________________________<br /> <div> <br /></div> <div> <br /></div> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/11931343676066539740' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/11931343676066539740' rel='author' title='author profile'> <span itemprop='name'>Betsy Waliszewski</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/12/giving-tuesday-2019.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/12/giving-tuesday-2019.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-12-02T18:43:00-05:00'>12/02/2019 06:43:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-536116824'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3982597027158551843&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Monday, November 18, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='3319552266672129851' itemprop='postId'/> <a name='3319552266672129851'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/11/python-software-foundation-fellow.html'>Python Software Foundation Fellow Members for Q3 2019</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3319552266672129851' itemprop='description articleBody'> We are happy to announce our newest PSF Fellow Members for Q3!<br /> <br /> <h4 style="text-align: center;"> <span style="font-size: large;">Q3 2019</span></h4> <div style="text-align: center;"> <br /></div> <div style="text-align: center;"> <b style="font-size: large;">Abigail Mesrenyame Dogbe</b></div> <div style="text-align: center;"> <a href="https://twitter.com/mesrenyamedogbe">Twitter</a></div> <span style="font-size: large;"></span><br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Anton Caceres</b></span></div> <div style="text-align: center;"> <a href="https://twitter.com/anton_caceres">Twitter</a>, <a href="https://caceres.me/">Website</a></div> <span style="font-size: large;"></span><br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Bruno Oliveira</b></span></div> <div style="text-align: center;"> <a href="https://github.com/nicoddemus">GitHub</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Gautier Hayoun</b></span></div> <div style="text-align: center;"> <a href="http://twitter.com/gowtier">Twitter</a>, <a href="http://whiskeredwizard.co.uk/">Personal company website</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Mahmoud Hashemi</b></span></div> <div style="text-align: center;"> <a href="https://github.com/mahmoud">GitHub</a>, <a href="https://sedimental.org/">Blog</a>, <a href="https://twitter.com/mhashemi">Twitter</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Manabu Terada</b></span></div> <div style="text-align: center;"> <a href="https://twitter.com/terapyon">Twitter</a>, <a href="https://github.com/terapyon">GitHub</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Mannie Young</b></span></div> <div style="text-align: center;"> <a href="https://twitter.com/mawy_7">Twitter</a>, <a href="https://github.com/mawy7">GitHub</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Michael Young</b></span></div> <div style="text-align: center;"> <a href="https://twitter.com/Mickey_nova">Twitter</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Noah Alorwu</b></span></div> <div style="text-align: center;"> <a href="http://twitter.com/plasmadray">Twitter</a>, <a href="http://github.com/noahalorwu">GitHub</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Paul Kehrer</b></span></div> <div style="text-align: center;"> <a href="https://www.blogger.com/u/1/(https://twitter.com/reaperhulk">Twitter</a>, <a href="https://github.com/reaperhulk">GitHub</a></div> <br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Tom Viner</b></span><br /> <span style="font-size: medium;"><a href="https://twitter.com/tomviner">Twitter</a>, <a href="http://tomviner.co.uk/">Blog</a></span></div> <span style="font-size: large;"></span><br /> <div style="text-align: center;"> <span style="font-size: large;"><b>Valentin Dombrovsky</b></span></div> <div style="text-align: center;"> <a href="https://drylabs.io/">Personal company website</a>, <a href="https://www.linkedin.com/in/vdombrovsky/">LinkedIn</a></div> <br /> <div> <div> <div> <div style="text-align: center;"> <div> </div> <div> <br /></div> </div> Congratulations! Thank you for your continued contributions. We have added you to our Fellow roster <a href="https://www.python.org/psf/members/" target="_blank">online</a>.<br /> <br /> The above members have contributed to the Python ecosystem by teaching Python, maintaining popular libraries/tools such as cryptography and pytest, helping document on packaging.python.org,<span style="background-color: white; font-family: "arial" , "verdana" , "geneva" , "bitstream vera sans" , "helvetica" , sans-serif; font-size: 14.1728px;"> </span>organizing Python events, starting Python communities in their home countries, and overall being great mentors in our community. Each of them continues to help make Python more accessible around the world. To learn more about the new Fellow members, check out their links above.</div> <div> <br /> Let's continue to recognize Pythonistas all over the world for their impact on our community. Here's the criteria our Work Group uses to review nominations:<br /> <br /> <ul> <li>For those who have served the Python community by creating and/or maintaining various engineering/design contributions, the following statement should be true:</li> <ul> <li>Nominated Person has served the Python community by making available code, tests, documentation, or design, either in a Python implementation or in a Python ecosystem project, that 1) shows technical excellence, 2) is an example of software engineering principles and best practices, and 3) has achieved widespread usage or acclaim.</li> </ul> <li>For those who have served the Python community by coordinating, organizing, teaching, writing, and evangelizing, the following statement should be true:</li> <ul> <li>Nominated Person has served the Python community through extraordinary efforts in organizing Python events, publicly promoting Python, and teaching and coordinating others. Nominated Person's efforts have shown leadership and resulted in long-lasting and substantial gains in the number and quality of Python users, and have been widely recognized as being above and beyond normal volunteering.</li> </ul> <li>If someone is not accepted to be a fellow in the quarter they were nominated for, they will remain an active nominee for 1 year for future consideration.</li> <li>It is suggested/recommended that the nominee have wide Python community involvement. Examples would be (not a complete list - just examples):</li> <ul> <li>Someone who has received a Community Service Award or Distinguished Service Award</li> <li>A developer that writes (more than one) documentation/books/tutorials for wider audience</li> <li>Someone that helps translate (more than one) documentation/books/tutorials for better inclusivity</li> <li>An instructor that teaches Python related tutorials in various regions</li> <li>Someone that helps organize local meet ups and also helps organize a regional conference</li> </ul> <li>Nominees should be aware of the Python community’s Code of Conduct and should have a record of fostering the community.</li> <li>Sitting members of the PSF Board of Directors can be nominated if they meet the above criteria.</li> </ul> If you would like to nominate someone to be a PSF Fellow, please send a description of their Python accomplishments and their email address to psf-fellow at python.org. We are accepting nominations for quarter 4 through November 20, 2019. More information is available at: <a href="https://www.python.org/psf/fellows/">https://www.python.org/psf/fellows/</a>.</div> </div> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/18334325508115717169' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/18334325508115717169' rel='author' title='author profile'> <span itemprop='name'>Ewa Jodlowska</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/11/python-software-foundation-fellow.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/11/python-software-foundation-fellow.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-11-18T14:35:00-05:00'>11/18/2019 02:35:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-771879458'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3319552266672129851&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-MC5oy2l2BI7AUTljKpmii5wl-8dQfDirHS2JQR0M491huJWN9LHeTCbQAIxnOTRSaVFKw6QUN1E_dlmHDAEw7LCGEJ0VJNLnDssDbKcsFkmIn_GXouRljNxtuj8h8HTidgc/s1600/Pycon_2020_header-01-2.png' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='3547365549105510316' itemprop='postId'/> <a name='3547365549105510316'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/11/why-sponsor-pycon-2020.html'>Why Sponsor PyCon 2020?</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3547365549105510316' itemprop='description articleBody'> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <br /> <div class="separator" style="clear: both; text-align: center;"> </div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-MC5oy2l2BI7AUTljKpmii5wl-8dQfDirHS2JQR0M491huJWN9LHeTCbQAIxnOTRSaVFKw6QUN1E_dlmHDAEw7LCGEJ0VJNLnDssDbKcsFkmIn_GXouRljNxtuj8h8HTidgc/s1600/Pycon_2020_header-01-2.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-MC5oy2l2BI7AUTljKpmii5wl-8dQfDirHS2JQR0M491huJWN9LHeTCbQAIxnOTRSaVFKw6QUN1E_dlmHDAEw7LCGEJ0VJNLnDssDbKcsFkmIn_GXouRljNxtuj8h8HTidgc/s1600/Pycon_2020_header-01-2.png" width="95%" /></a><br /> <br /> Sponsors help keep PyCon affordable and accessible to the widest possible audience. Sponsors are what make this conference possible. From low ticket prices to financial aid, to video recording, the organizations who step forward to support PyCon, in turn, support the entire Python community. They make it possible for so many to attend, for so many to be presenters, and for the people at home to watch along.<br /> <br /> As a PyCon sponsor, your outreach to attendees begins before the conference even starts and lasts throughout the year. Your reach isn’t limited to the number of people who attend the conference itself. Following PyCon, you’ll continue to connect with the Python community through many touch points:<br /> <ul> <li>Playback and Recorded PyCon Coverage: Over 17,000 people have subscribed to PyCon’s YouTube channel with over 723,000 views of either the keynotes or the recorded videos of PyCon 2018 sessions. Those videos continue to attract viewers today.</li> <li>Conference Page and Announcement E-Lists: The PyCon home page has thousands of unique visitors every year and this year we’ll have an opt-in at signup for a newsletter to receive PyCon announcements.</li> <li>Social Media: The PSF and PyCon Twitter accounts have more than 332,000 followers combined and thousands of followers of the PyCon speakers.</li> </ul> <div> <div> A Silver Sponsorship is a great low-cost option that includes (2) full passes and Job listing(s) on the Jobs Fair page! We also offer organizations with fewer than 25 employees a 30% discount for gold and silver sponsorships.<br /> <b><br /></b> <b>Check out the <a href="https://us.pycon.org/2020/sponsors/prospectus/">new marketing and promotional opportunities</a> for 2020!</b></div> </div> <ul> </ul> We are also happy to customize a sponsorship package to give you the freedom to choose what you think works best in order to meet your event participation goals. Our sponsorship prospectus can be found <a href="https://us.pycon.org/2020/sponsors/prospectus/">here</a>.<br /> <br /> For more information please contact: <a href="mailto:pycon-sponsors@python.org">pycon-sponsors@python.org</a><br /> <br /> <br /> <br /> <br /> <br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/11931343676066539740' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/11931343676066539740' rel='author' title='author profile'> <span itemprop='name'>Betsy Waliszewski</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/11/why-sponsor-pycon-2020.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/11/why-sponsor-pycon-2020.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-11-18T12:58:00-05:00'>11/18/2019 12:58:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-536116824'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3547365549105510316&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Monday, November 11, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='8902279872127503977' itemprop='postId'/> <a name='8902279872127503977'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/11/seeking-developers-for-paid-contract.html'>Seeking Developers for Paid Contract Improving pip</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-8902279872127503977' itemprop='description articleBody'> <p>The <a href="https://python.org/psf-landing">Python Software Foundation</a> <a href="https://www.python.org/psf/committees/#packaging-work-group">Packaging Working Group</a> is receiving funding to work on the design, implementation, and rollout of pip's next-generation dependency resolver. (We'll be able to publicly name the funders later this month and in early December.)</p><p><a href="https://pip.pypa.io">pip</a> is the official <a href="https://packaging.python.org/en/latest/current/">package installer</a> for Python. pip aims to make it easy for the millions of people who use Python to download and install Python libraries and applications (open source and closed source, source and binary, globally and within isolated virtual environments). It's a foundational component of the <a href="https://python.org">Python</a> ecosystem and broader computer software and technology landscape.</p><p>This project aims to complete the <a href="https://github.com/pypa/pip/issues/6536">design, implementation, and rollout</a> of <a href="https://github.com/pypa/pip/issues/988">pip's next-generation dependency resolver</a>. This will lower the barriers to installing Python software, empowering users to get a version of a package that works. It will also lower the barriers to distributing Python software, empowering developers to make their work available in an easily reusable form.</p><p>Because of the size of the project, funding has been allocated to secure <em>two contractors</em>, a <em>senior developer</em> and an <em>intermediate developer</em>, to work on development, testing and building test infrastructure, code review, bug triage, and assisting in the rollout of necessary features.</p><p>We plan to begin the project in Quarter 1 of 2020. We are also interested in senior developer candidates who are available to start in December 2019.</p><h2 id="timeline-and-budget">Timeline and budget</h2><table><colgroup> <col style="width: 50%" /> <col style="width: 50%" /> </colgroup> <thead> <tr class="header"> <th>Date</th> <th>Milestone</th> </tr> </thead> <tbody> <tr class="odd"> <td>November 11</td> <td>Request for Proposal period opens.</td> </tr> <tr class="even"> <td>November 22</td> <td>Request for Proposal period closes.</td> </tr> <tr class="odd"> <td>November 27</td> <td>Date proposals will have received a decision.</td> </tr> <tr class="even"> <td>December 31</td> <td>Latest date for contracts for accepted proposals to be finalized.</td> </tr> <tr class="odd"> <td>January 2</td> <td>Latest date for contract work to commence.</td> </tr> </tbody> </table><p>Role 1: We seek a senior Python developer, work starting in mid-December 2019 or early January 2020, work ending at the end of May 2020. Pay: $116,375 total (665 hours of work at $175 per hour).</p><p>Role 2: We seek an intermediate-to-senior Python developer, work starting in early January 2020, till the end of December 2020. Pay: $103,700 (670 hours of work at $150 per hour), plus $1600 budgeted for onboarding travel and $1600 budgeted for <a href="https://us.pycon.org/2020/">PyCon</a> travel.</p><h2 id="what-is-the-request-for-proposals-period">What is the Request for Proposals period?</h2><p><strong>A Request for Proposals (RFP)</strong> is a process intended to allow us (the Python Software Foundation) to collect proposals from potential contractors and select contractor(s) best suited to fulfill the specified work.</p><p>After the RFP period closes we will evaluate the received proposals based on the <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md#evaluation-criteria">evaluation criteria</a>, seek clarification from proposers as necessary, and select one or more contractors to complete the work specified in the <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md#scope">scope section</a>.</p><p><strong>Note</strong>: This Request For Proposal document may be updated to reflect things that we learn during the process. The canonical version and history is available <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md">here</a>.</p><h2 id="how-do-i-submit-a-proposal">How do I submit a proposal?</h2><p>First, please read <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md">the full contents of the Request for Proposals</a>!</p><p>You'll find the <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md#how-do-i-submit-a-proposal">instructions for submission</a>, <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md#evaluation-criteria">evaluation criteria</a>, as well as the <a href="https://github.com/python/request-for/blob/master/2020-pip/RFP.md#scope">scopes of the two roles</a>, there.</p> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/13577459520968677064' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/13577459520968677064' rel='author' title='author profile'> <span itemprop='name'>Ee Durbin</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/11/seeking-developers-for-paid-contract.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/11/seeking-developers-for-paid-contract.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-11-11T13:04:00-05:00'>11/11/2019 01:04:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-312150102'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=8902279872127503977&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> Labels: <a href='https://pyfound.blogspot.com/search/label/request%20for%20proposals' rel='tag'>request for proposals</a> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Thursday, October 31, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='3020233577200615459' itemprop='postId'/> <a name='3020233577200615459'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/10/the-2019-python-developer-survey-is.html'>The 2019 Python Developer Survey is here, take a few minutes to complete the survey!</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3020233577200615459' itemprop='description articleBody'> It is that time of year and we are excited to start the official <b>Python Developers Survey for 2019</b>!<br /> <br /> In 2018, the Python Software Foundation together with JetBrains conducted an official Python Developers Survey for the second time. Over 20,000 developers from almost 150 different countries participated..<br /> <br /> With this third iteration of the official Python Developers Survey, we aim to identify how the Python development world looks today and how it compares to the last two years. The results of the survey will serve as a major source of knowledge about the current state of the Python community and how it is changing over the years, so we encourage you to participate and make an invaluable contribution to this community resource. The survey takes approximately 10 minutes to complete.<br /> <span style="font-weight: normal;"><br /></span><a href="https://surveys.jetbrains.com/s3/c9-python-developers-survey-2019" target="_blank">Please take a few minutes to complete the 2019 Python Developers Survey!</a><br /> <br /> Your valuable opinion and feedback will help us better understand how Python developers use Python, related frameworks, tools, and technologies. We also hope you'll have fun going through the questions.<br /> <br /> The survey is organized in partnership between the Python Software Foundation and JetBrains. The Python Software Foundation distributes this survey through community channels only (such as this blog, Twitter, mailing lists, etc). After the survey is over, we will publish the aggregated results and randomly select 100 winners (those who complete the survey in its entirety), who will each receive an amazing <b>Python Surprise Gift Pack</b>. <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/18334325508115717169' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/18334325508115717169' rel='author' title='author profile'> <span itemprop='name'>Ewa Jodlowska</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/10/the-2019-python-developer-survey-is.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/10/the-2019-python-developer-survey-is.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-10-31T15:24:00-04:00'>10/31/2019 03:24:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-771879458'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3020233577200615459&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, October 30, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTH00Gqmxp338swDTYgh4rgC-ohgAlLTvUEOpRkpPpIytdkxgpzCQwnL7s1GVQQnxafO6232f5l9xzI-8GyVt6VZHifQ3jvWrz5Fc6uhsSYEVQ-NAOHnjIuz8CuzCnyIV650/s400/1_WwMWlztWuxYC6CI2Jlx-Zw.jpeg' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='3140451627024098055' itemprop='postId'/> <a name='3140451627024098055'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/10/cpython-core-developer-sprint-2019.html'>CPython Core Developer Sprint 2019</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3140451627024098055' itemprop='description articleBody'> <div style="text-align: justify;">During the week of September 9th to September 13th, 34 core CPython committers gathered together in the Bloomberg London headquarters for the 2019 Python core developer sprint. The core developer sprint is an annual week-long meeting in which the CPython core team has the opportunity to meet each other in person in order to work together free from distractions. Having this many core developers in the same room allows us to work efficiently on several aspects of the Python language and CPython (the default implementation). This can include topics such as future designs and in-process PEPs (Python Enhancement Proposals), prototyping exciting changes that we may see in the future, various core development processes such as issue triaging and pull request reviewing, and much more! This is a very exhausting week for everyone, but also a very productive one, as these meetings are known for generating a much-needed boost in core development, especially close to new releases.<br /> <br /> </div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTH00Gqmxp338swDTYgh4rgC-ohgAlLTvUEOpRkpPpIytdkxgpzCQwnL7s1GVQQnxafO6232f5l9xzI-8GyVt6VZHifQ3jvWrz5Fc6uhsSYEVQ-NAOHnjIuz8CuzCnyIV650/s1600/1_WwMWlztWuxYC6CI2Jlx-Zw.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTH00Gqmxp338swDTYgh4rgC-ohgAlLTvUEOpRkpPpIytdkxgpzCQwnL7s1GVQQnxafO6232f5l9xzI-8GyVt6VZHifQ3jvWrz5Fc6uhsSYEVQ-NAOHnjIuz8CuzCnyIV650/s400/1_WwMWlztWuxYC6CI2Jlx-Zw.jpeg" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">CPython Core Developers in attendance at 2019 Sprint</td></tr> </tbody></table></div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">This year’s core developer sprint was funded thanks to the <a href="https://www.python.org/psf/" target="_blank">Python Software Foundation</a> (PSF) and the donation of PyLondinium 2019 ticket proceeds, which were gathered specifically to support this event. This helped the PSF cover the cost of travel and accommodation for all core developers attending. Additionally, some companies covered their employees’ expenses, such as Microsoft, Facebook, Google and Red Hat. Bloomberg provided the venue, infrastructure and catering, as well as some events that happened during the week.</div><div style="text-align: justify;"><br /> </div><h3 style="text-align: justify;"><b>Major Achievements</b></h3><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">One of the main advantages of having the core developers together in the same room is how much smoother the iteration and design process is. For example, major achievements were made around the release of Python 3.8 (and older versions) in terms of stability and documentation and many exciting things were prepared for future releases. Some highlights include:</div><div style="text-align: justify;"><br /> </div><br /> <ul><li style="text-align: justify;">More than 120 pull requests were merged in the CPython repository. We had a friendly competition in which attending core developers were ranked based on the number of pull requests merged (only those pull requests created by others were considered). In the end, the winners received a poster with all of the attendees’ names created specifically for the sprint.</li> <li style="text-align: justify;">Discussions around PEP 602: Python 3.9 release schedule, including gathering user feedback about several aspects of the PEP.</li> <li style="text-align: justify;">Work on improving the bugs.python.org interface and feature set, including updating the infrastructure to the latest roundup version and reworking the CSS to give a friendlier face to the site.</li> <li style="text-align: justify;">API design and discussion around PEP 416 -- Add a <span style="font-family: "courier new" , "courier" , monospace;">frozendict</span> built-in type.</li> <li style="text-align: justify;">Draft design on a future PEP to implement an exception hierarchy to support <span style="font-family: "courier new" , "courier" , monospace;">TaskGroups</span> and cancel scopes.</li> <li style="text-align: justify;">Work towards multiple interpreters: major efforts are needed before we have one GIL per interpreter. This included starting to refactor the existing global state into per-interpreter structures and developing tests that avoid new global state bleeding.</li> <li style="text-align: justify;">Work on a PEG-based parser prototype to substitute the current parser in order to improve maintenance and allow dropping the LL(1) restriction in the future.</li> <li style="text-align: justify;">Several pull requests to squash some complex bugs in multiprocessing.</li> <li style="text-align: justify;">Work on a possible implementation to introduce a Control Flow Graph (CFG) optimizer in CPython.</li> <li style="text-align: justify;">Work on the CI process. AppVeyor was dropped and replaced with Azure Pipelines.</li> <li style="text-align: justify;">Major improvements in the <span style="font-family: "courier new" , "courier" , monospace;">unittest.mock</span> module, such as perfecting the new <span style="font-family: "courier new" , "courier" , monospace;">AsyncMock</span> and related documentation, work on a prototype to add a <span style="font-family: "courier new" , "courier" , monospace;">WaitableMock</span> class that can be joined (for threaded scenarios), as well as bug squashing around the module.</li> </ul><br /> <div style="text-align: justify;"><br /> </div><div style="text-align: justify;">As you can imagine, with this level of activity, the buildbots were at maximum capacity and many issues were found and fixed both during and after the sprint.</div><div style="text-align: justify;"><br /> </div><h3 style="text-align: justify;">Friday Event</h3><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">As part of the core dev sprint, an event was organized with the help of Bloomberg in order to let the community know about the work done during the core developer sprint, why these events are important, and the impact they have on the future of the language. The event consisted of 4 lightning talks about some of the things worked on during the sprint:</div><div style="text-align: justify;"><br /> </div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBy7E3RGx3bNSRNHm0HnZectT8IDRF_5oPfZbgD9ovyFhhJMVl_EZFsVI_HOyI-ePyshIhlpPwd8_9RCpEkaIMdl7KYmdYtJUPat0L73_jrDj49hXSNt8iVvDGtEtnC06mKg/s1600/EEX9pm0WkAAaLQY.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="768" data-original-width="1600" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBy7E3RGx3bNSRNHm0HnZectT8IDRF_5oPfZbgD9ovyFhhJMVl_EZFsVI_HOyI-ePyshIhlpPwd8_9RCpEkaIMdl7KYmdYtJUPat0L73_jrDj49hXSNt8iVvDGtEtnC06mKg/s400/EEX9pm0WkAAaLQY.jpeg" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">Moderated panel discussion at the CPython Core Developer Sprint Friday Event</td></tr> </tbody></table><div style="text-align: justify;"><br /> </div><br /> <ul><li style="text-align: justify;">Work in AsyncMock - <b>Lisa Roach</b></li> <li style="text-align: justify;">Removing dead batteries in the standard library -<b> Christian Heimes</b></li> <li style="text-align: justify;">Sub-Interpreters support in the standard library - <b>Eric Snow and Joannah Nanjekye</b></li> <li style="text-align: justify;">Improving bugs.python.org - <b>Ezio Melotti</b></li> </ul><br /> <div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/NKmy_Cnt3pM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/NKmy_Cnt3pM?feature=player_embedded" width="500"></iframe></div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">There was also a moderated Q&A session about the core development sprint and, more generally, Python’s future direction. </div><div style="text-align: justify;"><br /> </div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/QcfSYNCBNoA/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/QcfSYNCBNoA?feature=player_embedded" width="500"></iframe></div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">We hope that events like this will help communicate more transparently what the core developers do at the sprints and how much impact these events have on maintenance, processes, and the language itself.</div><div style="text-align: justify;"><br /> </div><h3 style="text-align: justify;">Mentorees</h3><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">As part of the ongoing effort to improve mentoring and growing the core dev team, two mentees who have been contributing for a long period of time and have previously been awarded triaging privileges were invited to the sprint. Joannah Nanjekye was being mentored by Eric Snow, while Karthikeyan Singaravelan was being mentored by Yury Selivanov (and remotely by Andrew Svetlov). Mentoring is a very important part of core development, as it helps to grow the core dev team and allows us to have more impact and scalability in the different areas that are the responsibilities of the core dev team. As a result of this mentoring process, Joannah Nanjekye <a href="https://discuss.python.org/t/vote-to-promote-joannah-nanjekye-as-a-core-dev/2347" target="_blank">was been promoted to a core developer</a> a few weeks after the core dev sprint! </div><div style="text-align: justify;"><br /> </div><h3 style="text-align: justify;">Other Blogs</h3><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">Some of the other attendees have posted their own blogs describing their experiences at the sprints (this list may be updated over time as additional updates are published by other core devs).</div><div style="text-align: justify;"><br /> </div><br /> <ul><li style="text-align: justify;"><a href="https://medium.com/@gvanrossum_83706/peg-at-the-core-developer-sprint-8b23677b91e6" target="_blank">PEG at the Core Developer Sprint</a></li> <li style="text-align: justify;"><a href="https://medium.com/@Captain_Joannah/cpython-core-developer-sprint-and-outreachy-at-tapia-what-i-did-dddeca446d05" target="_blank">CPython Core Developer Sprint and Outreachy at Tapia: What I did !!</a></li> </ul><br /> <div style="text-align: justify;"><br /> </div><h3 style="text-align: justify;">Thank you!</h3><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">A huge thanks to all the participants who attended, the various companies who sponsored parts of the event, and the <a href="https://www.python.org/psf/" target="_blank">PSF</a> for covering the majority of travel expenses. We also thank those core developers who could not attend this year. </div><div style="text-align: justify;"><br /> </div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgNPX6HkHsFw6S53kHln9kkAcyEDOFCG5hDgtB7rim7EPQrqSNg5sAaXnLh7k80T6mzTc7oXm27Xaah5IH5ZBAGPJjG8hn0hwoxr0uTAxF0k85Giwu0iB9lxQCGE6U6JyMLQ/s1600/1_SOsLyioo4eHMEjkz2Lt6Og.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgNPX6HkHsFw6S53kHln9kkAcyEDOFCG5hDgtB7rim7EPQrqSNg5sAaXnLh7k80T6mzTc7oXm27Xaah5IH5ZBAGPJjG8hn0hwoxr0uTAxF0k85Giwu0iB9lxQCGE6U6JyMLQ/s400/1_SOsLyioo4eHMEjkz2Lt6Og.jpeg" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><div style="text-align: justify;"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td class="tr-caption" style="font-size: 12.800000190734863px;">CPython Core Developers in attendance at 2019 Sprint</td></tr> </tbody></table></div><div style="text-align: justify;"></div></td></tr> </tbody></table><div style="text-align: justify;"><br /> Attendees: Christian Heimes, Ezio Melotti, Ned Deily, Benjamin Peterson, Mark Shannon, Michael Foord, Joannah Nanjekye, Karthikeyan Singaravelan, Emily Morehouse, Jason R. Coombs, Julien Palard, St茅phane Wirtel, Zachary Ware, Petr Viktorin, 艁ukasz Langa, Davin Potts, Yury Selivanov, Steve Holden, Stefan Behnel, Larry Hastings, Guido van Rossum, Carol Willing, Gregory P. Smith, Thomas Wouters, Dino Viehland, Mark Dickinson, Vinay Sajip, Paul Ganssle, Steve Dower, Lisa Roach, Eric Snow, Brett Cannon, Pablo Galindo</div><div style="text-align: justify;"><br /> </div><div style="text-align: justify;">Written by: Pablo Galindo</div><div style="text-align: justify;"><br /> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/07923137967169776470' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/07923137967169776470' rel='author' title='author profile'> <span itemprop='name'>Pablo Galindo</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/10/cpython-core-developer-sprint-2019.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/10/cpython-core-developer-sprint-2019.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-10-30T12:23:00-04:00'>10/30/2019 12:23:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-4069758'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3140451627024098055&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Thursday, October 24, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='901870891261608318' itemprop='postId'/> <a name='901870891261608318'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/10/chris-angelico-2019-q2-community.html'>Chris Angelico: 2019 Q2 Community Service Award Winner</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-901870891261608318' itemprop='description articleBody'> The Python language is used around the world, and therefore so much surrounding it happens online. Python users turn to wikis, mailing lists, and forums to get their questions answered and concerns addressed. Python core developers use mailing lists to decide on critical additions and timelines. All this requires trusted and experienced contributors and administrators to ensure these wikis and mailing lists are focused on the Python language. <a href="https://twitter.com/rosuav">Chris Angelico</a> is one of these individuals and for this work, the PSF is pleased to present him with the Q2 2019 Community Service Award:<br /> <b><blockquote>RESOLVED, that the Python Software Foundation award the Q2 2019 Community Service Award to Chris Angelico for his work towards fostering the online Python community by helping maintain the pydotorg-www mailing list, helping community members get edit access to the public-facing Python wiki, and also for being an active contributor to python-ideas mailing list and the python-dev mailing list.</blockquote></b>Chris had a very noble reason to start programming: his older brother was doing it so he had to follow suit! This, along with getting into the family business of importing and exporting educational materials, led to a lifelong love of learning and technology. By the 1990’s Chris was working as a developer and first used Python when he needed to embed a scripting language in a C++ project. “Python offered a simple, clean, boilerplate-free scripting language that still had all the power that I needed for that initial project,” he says. Though the project ended up going in a different direction, Chris was already hanging out on Python mailing lists and was there to stay. <br /> <br /> Since 2012, Chris has been an active contributor to the <a href="https://mail.python.org/mailman3/lists/python-dev.python.org/">python-dev</a> and <a href="https://mail.python.org/mailman3/lists/python-ideas.python.org/">python-ideas</a> mailing lists, which are a large part of how the Python language gets developed. python-dev is used by core developers to discuss release dates and plans that could involve breaking changes to Python. On python-ideas, topics surround proposals that haven't matured enough to discuss on python-dev, and contributors can either reject ideas or help to refine them until they can be seriously proposed. “Both lists have a lot of incredibly smart people, but also very opinionated people, so it's pretty awesome to hang out and discuss,” says Chris. “They are significant parts of the funnel that brings proposals to fruition. Many changes start out with a discussion on python-ideas, then perhaps a PEP [Python Enhancement Proposal] is written, and it's discussed at length before migrating to python-dev for detailed discussion, and then finally code gets written and merged in.”<br /> <br /> “Over the years I've known him, he's helped many people with technical questions.” recalls fellow python-ideas contributor Steve D’Aprano, “he's also been granted write permissions for the PEP repo, so Chris is the guy to go to for technical help with writing PEPs and pushing them into the repo.”<br /> <br /> In 2015, a dominant topic on python-ideas was the <a href="https://www.python.org/dev/peps/pep-0498/">f-string</a>, a briefer string format than was previously available. Those against it said it was not Pythonic, and those for it said it was more readable than existing options. “The discussion went back and forth on that one, with many people supporting it intensely, and many others fighting just as intensely against it,” recalls Chris. F-strings were added to the Python core library in version 3.6, and you can read the discussion on python-ideas <a href="https://mail.python.org/pipermail/python-ideas/2015-July/034657.html">here</a>. <br /> <br /> A user-maintained repository of all things Python, the <a href="https://wiki.python.org/moin/">Python Wiki</a> holds everything from user guides to advanced topics in the Python ecosystem. Since 2012 Chris has been an administrator, making sure contributors are actual humans with honest intent. “If it weren't for Chris I doubt the wiki would be anywhere near as popular as it is,” notes <a href="https://twitter.com/holdenweb">Steve Holden</a>, PSF Director (2004-2013) and creator of the Community Service Award. “His efforts on python-dev help to keep Python moving forward and I'm happy that Chris' efforts for the community are being publicly recognised in this way.” More on how to become a contributor to the Python wiki can be found <a href="https://wiki.python.org/moin/FrontPage#use">here</a>.<br /> <br /> Chris can even thank his work on Python lists for his current job teaching Python and JavaScript to adult learners at <a href="https://www.thinkful.com/">Thinkful</a>. “The company head-hunted me based on the mailing list posts they saw.” Chris recalls, “So if you, too, enjoy coding and talking about code, hang out, you never know who'll notice you!”<br /> <br /> In his free time, he can be found playing and modding video games. He’s a big fan of Alice in Wonderland, which he frequently uses as an avatar.<br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <span itemprop='name'>Christy Heaton</span> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/10/chris-angelico-2019-q2-community.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/10/chris-angelico-2019-q2-community.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-10-24T07:30:00-04:00'>10/24/2019 07:30:00 AM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-752206176'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=901870891261608318&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Monday, September 30, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='8141835333411392599' itemprop='postId'/> <a name='8141835333411392599'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/09/grants-awarded-for-python-in-education.html'>Grants Awarded for Python in Education </a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-8141835333411392599' itemprop='description articleBody'> The Python Software Foundation has been asked about Python in education quite a bit recently. People have asked, “Is there an official curriculum we can use?”, “Are there online resources?”, “Are there efforts happening to improve Python on mobile?”, and so on.<br /> <br /> 9 years ago we instituted the Education Summit at PyCon US where educators as well as students work together on initiatives and obstacles. Earlier this year we decided we needed to do more. In November of 2018, the PSF created the Python in Education Board Committee and it was tasked with finding initiatives to fund to help improve the presence of Python in education.<br /> <br /> In January of this year, the Python in Education Board Committee launched a “request for ideas” phase taking suggestions from the community on what we should focus our funding on. After the RFI period, we came up with 3 areas of education we wanted to focus on and asked to receive grant proposals on the following: resources (curriculums, evaluations, studies, multidisciplinary projects), localization (primarily translations), and mobile (development on mobile devices).<br /> <br /> We are happy to publish more details on the grants the PSF approved from this initiative!<br /> <br /> <h3> </h3> <h3> Beeware</h3> The BeeWare Project wants to make it possible for all Python developers to write native apps for desktop and mobile platforms. Most desktop operating systems and iOS are supported already, but Android needs attention. Since Android users outnumber other mobile OS users worldwide by over 3 to 1, we determined it is important to fund this project. Beeware was awarded a $50,000 grant to help improve Python on Android. Phase one will be starting soon with this set of goals:<span style="white-space: pre;"> </span><br /> <br /> <ol> <li>A port of the CPython runtime to Android, delivered as a binary library ready to install into an Android project.<span style="white-space: pre;"> </span><span style="white-space: pre;"> </span></li> <li>A JNI-based library for bridging between the Android runtime and the CPython runtime.<span style="white-space: pre;"> </span></li> <li>A template for a Gradle project that can be used to deploy Python code on Android devices. </li> </ol> <br /> Beeware announced that they are looking for contractors to help with the work. Check out <a href="https://beeware.org/news/buzz/beeware-project-awarded-a-psf-education-grant/">their blog post</a> for more information.<br /> <br /> <h3> Python in Education Website</h3> Educational resources are in demand. The PSF awarded a grant of $12,000 USD to Meg Ray, to work on creating a Python in Education website where we can curate educational information from all over the world. Meg will begin by collecting resources and after auditing the shared information, she will work on organizing it on an official PSF webpage. This work will begin in October of 2019 so please keep an eye out for updates via tweets and blogs!<br /> <br /> <h3> Friendly-tracebacks</h3> Lastly is a project called friendly-tracebacks. This project is not in need of financial support but is asking the PSF to help publicize it. Friendly-traceback aims to provide simplified tracebacks translated into as many languages as possible. The project maintainer is looking for volunteers to help with tasks such as documenting possible SyntaxError use cases and documenting exceptions that haven't already been covered. Read more <a href="http://bit.ly/tracebacks">on their blog</a> for the full call to action from the maintainer.<br /> <br /> We hope to continue this initiative yearly! Companies that are passionate about supporting Python in Education should get in touch; we can't continue our work without your support! As a non-profit organization, the PSF depends on sponsorships and donations to support the Python community.<br /> <br /> Donate to the PSF: <a href="https://www.python.org/psf/donations/">https://www.python.org/psf/donations/</a><br /> Sponsor the PSF: <a href="https://www.python.org/psf/sponsorship/">https://www.python.org/psf/sponsorship/</a> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/18334325508115717169' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/18334325508115717169' rel='author' title='author profile'> <span itemprop='name'>Ewa Jodlowska</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/09/grants-awarded-for-python-in-education.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/09/grants-awarded-for-python-in-education.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-09-30T12:05:00-04:00'>9/30/2019 12:05:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-771879458'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=8141835333411392599&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Thursday, September 26, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://lh4.googleusercontent.com/8qRg2OrXyP-t4u02rjDKKvGaP7CFU6rARfFx3vMMDxXy9XvnRQ4BFqLgby9LLoVUa_z1Az2JxbXynvy2NW5iwoYGbqRJSaahpHWB2Lg3NK7vB6vdHozW7bVXdK0Q6H76Xp2c7k58' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='3192920820041855868' itemprop='postId'/> <a name='3192920820041855868'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/09/felipe-de-morais-2019-q2-community.html'>Felipe de Morais: 2019 Q2 Community Service Award Winner</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3192920820041855868' itemprop='description articleBody'> <div dir="ltr" style="text-align: left;" trbidi="on"> <div dir="ltr" style="text-align: left;" trbidi="on"> Pythonistas everywhere benefit when our community reflects the many backgrounds and experiences of Python’s users. However it can be challenging to participate in the community when there are no local user groups or harder yet if groups do exist but you do not feel represented in them. After learning that a friend was experiencing gender descrimination at work, <a href="https://twitter.com/felipedemorais_">Felipe de Morais</a> of Porto Alegre, Brazil, decided to start <a href="https://djangogirls.org/portoalegre/">Django Girls Porto Alegre</a>. By starting this group, women like his friend who were facing similar challenges could have a community to call their own. <br /> <br /> Since Django Girls Porto Alegre took off in 2015, it has become one of the most active Django Girls groups in the world. Inspired by Django Girls and PyLadies, Felipe also started <a href="https://afropython.org/">AfroPython</a>, an initiative to empower Black people through technology. Additionally, Felipe contributes to <a href="https://serenata.ai/">Opera莽茫o Serenata de Amor</a>, an open source project that monitors public spending by politicians. For this work the PSF is pleased to award Felipe de Morais with the Q2 2019 Community Service Award:<br /> <br /> <blockquote class="tr_bq"> <b>RESOLVED, that the Python Software Foundation award the Q2 2019 Community Service Award to Felipe de Morais for his work towards facilitating the growth of the Python Brazilian community by organizing workshops, contributing to open source code that benefits the Brazilian people and for setting an example for all community organizers.</b></blockquote> <br /> Felipe grew up in Rio De Janeiro where he earned a graduate degree in Computer Science and later moved to Porto Alegre in southern Brazil. With a strong desire to be part of a community, Felipe traveled to IT-related Meetup groups but longed for more accessible means to network and teach. Python was his go-to language for its simplicity and ease, and he loved to teach the language to help other people along in their careers. It is no surprise that the groups he’s started have both a Python and inclusivity focus. <br /> <br /> When asked about his motivation for starting Python groups, Felipe says that that he simply gets great joy out of helping people. “I've seen people starting their work life because the workshop unlocked this career path for them,'' he says. “The most important part of it is the relationships made along the way, which make a great support system for a lot of people making positive life changes.”<br /> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="278" src="https://lh4.googleusercontent.com/8qRg2OrXyP-t4u02rjDKKvGaP7CFU6rARfFx3vMMDxXy9XvnRQ4BFqLgby9LLoVUa_z1Az2JxbXynvy2NW5iwoYGbqRJSaahpHWB2Lg3NK7vB6vdHozW7bVXdK0Q6H76Xp2c7k58" style="margin-left: auto; margin-right: auto; margin-top: 0px;" width="417" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><span style="font-size: x-small; text-align: left;"><b>AfroPython 2017</b></span></td></tr> </tbody></table> <a href="https://twitter.com/rsip22">Renata D'Avila</a>, a Django Girls Porto Alegre organizer, met Felipe 2016 at a Hackerspace event and the two have kept in touch ever since. “He is one of the people behind one of the biggest Django Girls workshop ever organized.” she recalls, “Django Girls Porto Alegre 2017 had about 180 people involved, among participants, mentors, and organizers.” However the event, as most events do, encountered some bumps in the road. As lunchtime rolled around and the planned caterers never showed up, Felipe raced across campus and resolved the issue, returning to the event with enough food for everyone. “That was one of the greatest achievements of that huge workshop,” says Renata, “that everyone could eat and that the schedule for the workshop was kept without people even knowing about how much effort it took to make it work.”</div> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="276" src="https://lh3.googleusercontent.com/66cNULOaqpTyi5hksmo6OyptQV7XMoVr7vkJqzKLogJx-sX2mLLTiIO6ZXtad9x0u4M3N78V7EUiXALaxQQKvOj-q_7VTeJl79eLMB-kKFjohK0_OHZhWcDkBFqaRi111pdsqBQN" style="margin-left: auto; margin-right: auto; margin-top: 0px;" width="414" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><span style="font-size: x-small; text-align: left;"><b>AfroPython 2018</b></span></td></tr> </tbody></table> <a href="https://twitter.com/amandasv__">Amanda Vieira</a> met Felipe at Django Girls Porto Alegre and later worked with him to create AfroPython. She says of his work in these groups, “He has always helped both in the organization of events and as a coach, encouraging more and more women to get started in the area [of tech].” He has even developed a nickname, she quips “In his workplace and with friends, he is known as Felipython for all his involvement with language and the community.”<br /> <br /> In May of 2017 when Felipe was attending <a href="https://2019.pythonsudeste.org/">Python Sudeste</a>, a regional Python event in southeastern Brazil, he met <a href="https://twitter.com/jesstemporal">Jessica Temporal</a>. Jessica had been working as a data scientist on a large political open-source project, Opera莽茫o Serenata de Amor. Serenata analyzes open data from the Brazilian government and flags expenses made by elected politicians that might be unlawful. Jessica was organizing a sprint at the conference and Felipe jumped in to help. In addition to working on some important refactoring and code readability issues, “Felipe was significant in making the project more friendly to newcomers,'' she says. He continues to contribute to the project today.<br /> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="298" src="https://lh3.googleusercontent.com/58vWAEkU15mO3FsHfaldG_rITbBBb6CQy9Pigs2Phl4xqbQ7CilCdgauP1hKO2yRUI0dT6aYnbCbNNNS4AdkjlzT6bHatFavfYsQ4ajxRkV695SZSoHLVpTFiZM4iwrLyL4qufWT" style="margin-left: auto; margin-right: auto; margin-top: 0px;" width="397" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><span style="font-size: x-small; text-align: left;"><b>Felipe (left) with Seranata founder Eduardo Cuducos (middle) and Seranata data scientist Jessica Temporal (right)</b></span></td></tr> </tbody></table> Though Django Girls Porto Alegre and AfroPython have taken off, Felipe has no plans to slow down. In addition to continuing to work on open source projects, he is on the organizing team for the first ever <a href="http://afropythonconf.org/">AfroPythonConf</a> later this year, and will be a keynote speaker at <a href="https://2019.pythonbrasil.org.br/">Python Brazil 2019</a>.<br /> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="304" src="https://lh6.googleusercontent.com/twJQk4Pq7l4XTRwK9-g1adc4PuMIMiHeFef-foxVXbjRGcjMD_7REOeHOq211c8U_7dWqUb4rwqTHm9kYoXed8XYDdonsgRTUnbpbTQfgQlXDz-Zqzt-fBvOPYl6D-ANycY_BUlQ" style="margin-left: auto; margin-right: auto; margin-top: 0px;" width="304" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><span style="text-align: left;"><span style="font-size: x-small;"><b>CSA Award Winner Felipe de Morais</b></span></span></td></tr> </tbody></table> In his free time, Felipe enjoys Brazilian Jiu Jitsu, playing video games that remind him of his childhood, watching anime, and helping friends with finances and investments.</div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <span itemprop='name'>Christy Heaton</span> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/09/felipe-de-morais-2019-q2-community.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/09/felipe-de-morais-2019-q2-community.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-09-26T09:30:00-04:00'>9/26/2019 09:30:00 AM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-752206176'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=3192920820041855868&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, September 25, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='6227041716604156040' itemprop='postId'/> <a name='6227041716604156040'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/09/pypi-security-q4-2019-request-for.html'>PyPI Security Q4 2019 Request for Proposals period opens.</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-6227041716604156040' itemprop='description articleBody'> <span style="background-color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;">The</span><span style="background-color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;"> </span><a href="https://python.org/psf-landing" style="background-color: white; color: #4183c4; font-family: helvetica, arial, sans-serif; font-size: 14px;">Python Software Foundation</a><span style="background-color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;"> </span><a href="https://www.python.org/psf/committees/#packaging-work-group" style="background-color: white; color: #4183c4; font-family: helvetica, arial, sans-serif; font-size: 14px;">Packaging Working Group</a><span style="background-color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;"> </span><span style="background-color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;">has received a grant from <a href="https://research.fb.com/">Facebook Research</a> to implement advanced security features for PyPI. These features include cryptographic signing of uploaded artifacts and the infrastructure necessary to implement automated detection of malicious files uploaded to the index.</span><br /> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> The <a href="https://pypi.org/" style="color: #4183c4;">Python Package Index (PyPI)</a> is a foundational component of the <a href="https://python.org/" style="color: #4183c4;">Python</a> ecosystem and broader computer software and technology landscape. This project aims to improve the security and accessibility of PyPI for all users worldwide, whether they are direct users, like project maintainers and <a href="https://pip.pypa.io/en/stable/" style="color: #4183c4;"><code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;">pip install</code></a>ers, or indirect users. The impact of this work will be highly visible and improve crucial features of the service.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> We plan to begin the project in Quarter 4 of 2019. Because of the size of the project, funding has been allocated to secure one or more contractors to complete the development, testing, verification, and assist in the rollout of necessary features.</div> <h2 id="toc_1" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> Timeline</h2> <table style="-webkit-print-color-adjust: exact; background-color: white; border-collapse: collapse; color: black; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin: 15px 0px; padding: 0px;"><thead style="-webkit-print-color-adjust: exact;"> <tr style="-webkit-print-color-adjust: exact; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; margin: 0px; padding: 0px;"><th style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Date</th><th style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Milestone</th></tr> </thead><tbody style="-webkit-print-color-adjust: exact;"> <tr style="-webkit-print-color-adjust: exact; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; margin: 0px; padding: 0px;"><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">September 25</td><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Request for Proposal period opened.</td></tr> <tr style="-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; margin: 0px; padding: 0px;"><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">October 21</td><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Request for Proposal period closes.</td></tr> <tr style="-webkit-print-color-adjust: exact; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; margin: 0px; padding: 0px;"><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">October 29</td><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Date proposals will have received a decision.</td></tr> <tr style="-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; margin: 0px; padding: 0px;"><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">December 2</td><td style="-webkit-print-color-adjust: exact; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px;">Contract work commences.</td></tr> </tbody></table> <h2 id="toc_2" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> What is the Request for Proposals period?</h2> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> A Request for Proposal (RFP) is a process intended to allow us (The Python Software Foundation) to collect proposals from potential contractors and select contractor(s) best suited to fulfill the specified work.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> After the RFP period closes we will evaluate the received proposals based on the evaluation criteria, seek clarification from proposers as necessary, and select one or more contractors to complete the work specified in the scope.</div> <div style="background-color: white; margin-bottom: 15px; margin-top: 15px;"> <span style="font-family: helvetica, arial, sans-serif;"><span style="font-size: 14px;">The Request for Proposals period opens today, September 25th, 2019, and is scheduled to close </span></span><span style="-webkit-print-color-adjust: exact;"><b><span style="font-family: helvetica, arial, sans-serif;"><span style="font-size: 14px;">October 21, 2019 </span></span></b><a href="https://www.timeanddate.com/time/zones/aoe" style="color: #4183c4; font-family: helvetica, arial, sans-serif; font-size: 14px; font-weight: bold;">AoE</a><span style="font-family: helvetica, arial, sans-serif;"><span style="font-size: 14px;">.</span></span></span></div> <h2 id="toc_3" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> How do I submit a proposal?</h2> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> First, please read the full contents of the Request for Proposals <a href="https://github.com/python/request-for/blob/master/2019-Q4-PyPI/RFP.md" target="_blank">here</a>!</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> You'll find the <a href="https://github.com/python/request-for/blob/master/2019-Q4-PyPI/RFP.md#how-do-i-submit-a-proposal" target="_blank">instructions for submission</a>, <a href="https://github.com/python/request-for/blob/master/2019-Q4-PyPI/RFP.md#evaluation-criteria" target="_blank">evaluation criteria</a>, as well as scope of the project there.</div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/13577459520968677064' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/13577459520968677064' rel='author' title='author profile'> <span itemprop='name'>Ee Durbin</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/09/pypi-security-q4-2019-request-for.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/09/pypi-security-q4-2019-request-for.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-09-25T17:47:00-04:00'>9/25/2019 05:47:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-312150102'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=6227041716604156040&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> Labels: <a href='https://pyfound.blogspot.com/search/label/pypi' rel='tag'>pypi</a>, <a href='https://pyfound.blogspot.com/search/label/request%20for%20proposals' rel='tag'>request for proposals</a> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Tuesday, September 24, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='6874436449023685386' itemprop='postId'/> <a name='6874436449023685386'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/09/the-python-software-foundation-has_24.html'>The Python Software Foundation has updated its Code of Conduct</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-6874436449023685386' itemprop='description articleBody'> The Python community values members who are accepting, helpful, and respectful: for many years, the Python Software Foundation (PSF) has had an organization-wide Code of Conduct that defines these values, and behaviors that we want to have in our community. The Foundation has also insisted for years that every event that we sponsor have a Code of Conduct in place.<br /> <br /> But spaces where our community meets – online, or in person – need a Code of Conduct that does more than just emphasize our values. The PSF’s flagship conference, PyCon US, has had its own Code of Conduct – separate from the PSF Code of Conduct – for many years. The PyCon US Code of Conduct not only highlights our community’s values, but it also identified behaviors that are not acceptable at the conference, explained how to report violations, and included enforcement procedures.<br /> <br /> The PSF Board approved a new <a href="https://www.python.org/psf/conduct/">organization-wide Code of Conduct</a> and <a href="https://www.python.org/psf/conduct/enforcement/">enforcement guidelines</a> at the August 2019 board meeting, and <a href="https://www.python.org/psf/conduct/reporting/">reporting guidelines</a> at the September 2019 board meeting, taking effect immediately.<br /> <br /> Our new Code of Conduct brings together the statement of values defined in the former PSF Code of Conduct, and enforcement guidelines – proven through our experience at PyCon US – that the PSF can now apply to every space that we oversee.<br /> <br /> It saves the PSF from having to enforce two Codes of Conduct: one for PyCon US, and another for our other spaces. In crafting the Code of Conduct, we undertook an intentional effort to account for the unique needs of an international community that spans all seven continents on Earth.<br /> <br /> Community members will now know that if they’re participating in an online space, a project, or an event facilitated by the PSF they will be subject to the same Code of Conduct, and will be able to report incidents in the same way.<br /> <br /> The process of defining the new Code of Conduct was led by the PSF’s <a href="https://wiki.python.org/psf/ConductWG/Charter">Conduct Working Group</a>, which the PSF established in 2018. The PSF worked with Sage Sharp of <a href="https://otter.technology/coc-procedures-review/">Otter Tech</a> to produce the draft of the new Code of Conduct. Sage has previously worked on the Codes of Conduct for Open Source communities including the Data Carpentries, Elastic Search, and GNOME, and previously worked with the PSF on modernizing PyCon US’ Code of Conduct and incident response procedures. <br /> <br /> In the future, the Conduct Working Group will help the Board oversee the reporting and enforcement of Code of Conduct reports, following the enforcement guidelines that accompany the new Code of Conduct.<br /> <br /> The Board thanks the Conduct Working Group, and Sage Sharp for their invaluable service in getting our new Code of Conduct in place.<br /> <br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/05686111958689401667' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/05686111958689401667' rel='author' title='author profile'> <span itemprop='name'>Christopher Neugebauer</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/09/the-python-software-foundation-has_24.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/09/the-python-software-foundation-has_24.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-09-24T13:28:00-04:00'>9/24/2019 01:28:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-1286841646'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=6874436449023685386&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, August 28, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='4610446765525112516' itemprop='postId'/> <a name='4610446765525112516'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/08/pypi-security-q4-2019-request-for.html'>PyPI Security Q4 2019 Request for Information period opens.</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-4610446765525112516' itemprop='description articleBody'> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> The <a href="https://python.org/psf-landing" style="color: #4183c4;">Python Software Foundation</a> <a href="https://www.python.org/psf/committees/#packaging-work-group" style="color: #4183c4;">Packaging Working Group</a> has received funding from <a href="https://research.fb.com/">Facebook research</a> to develop and deploy of enhanced security features to PyPI.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> <a href="https://pypi.org/" style="color: #4183c4;">PyPI</a> is a foundational component of the <a href="https://python.org/" style="color: #4183c4;">Python</a> ecosystem and broader computer software and technology landscape. This project aims to improve the security and accessibility of PyPI for all users worldwide, whether they are direct users like project maintainers and <a href="https://pip.pypa.io/en/stable/" style="color: #4183c4;"><code style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;">pip install</code></a>ers or indirect users. The impact of this work will be highly visible and improve crucial features of the service.<br /> <br /> Specifically, this project aims to implement verifiable cryptographic signing of artifacts and infrastructure to support automated detection of malicious uploads to the index.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> We plan to begin the project in December 2019. Because of the size of the project, funding has been allocated to secure one or more contractors to complete the development, testing, verification, and assist in the rollout of necessary features.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> <span style="font-size: 18px;">Register Interest</span></div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> To receive notification when our Request for Information period closes and the Request for Proposals period opens, please <a href="https://forms.gle/ToVjmwna2wuqAbqG8" style="color: #4183c4;">register your interest here</a>.</div> <h2 id="toc_3" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> What is the Request for Information period?</h2> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> A Request for Information (RFI) is a process intended to allow us (The Python Software Foundation) and potential contractors to openly share information to improve the scope and definition of the project at hand. Also, we encourage stakeholders in the community with expertise in the project areas to contribute their viewpoints on open questions for the scope of the work.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> We hope that it will help potential contractors better understand the work to be completed and develop better specified proposals. Additionally we have designed the RFI with an open nature in order to expose the project to multiple perspectives and help shape the direction for some choices in the project.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> The Request for Information period opens today, August 28, 2019, and is scheduled to close <b>September 18, 2019</b>.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> After the RFI period closes, we will use the results of the process to prepare and open a Request for Proposals to solicit proposals from contractors to complete the work.</div> <h2 id="toc_25" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> More Information</h2> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> The full version of our Request for Information document can be found <a href="https://github.com/python/request-for/blob/master/2019-Q4-PyPI/RFI.md" style="color: #4183c4;">here</a>.</div> <h2 id="toc_25" style="-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative;"> Participate!</h2> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> Our RFI will be conducted on the <a href="https://discuss.python.org/c/python-software-foundation/pypi-q4-rfi" style="color: #4183c4;">Python Community Discussion Forum</a>. Participants will need to create an account in order to propose new topics of discussion or respond to existing topics.</div> <div style="-webkit-print-color-adjust: exact; background-color: white; font-family: Helvetica, arial, sans-serif; font-size: 14px; margin-bottom: 15px; margin-top: 15px;"> All discussions will remain public and available for review by potential proposal authors who do not wish to or cannot create an account to participate directly.</div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/13577459520968677064' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/13577459520968677064' rel='author' title='author profile'> <span itemprop='name'>Ee Durbin</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/08/pypi-security-q4-2019-request-for.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/08/pypi-security-q4-2019-request-for.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-08-28T17:23:00-04:00'>8/28/2019 05:23:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-312150102'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=4610446765525112516&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Tuesday, August 27, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='8520' itemprop='blogId'/> <meta content='5336974345699327947' itemprop='postId'/> <a name='5336974345699327947'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/08/python-software-foundation-fellow.html'>Python Software Foundation Fellow Members for Q1 & Q2 2019</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-5336974345699327947' itemprop='description articleBody'> <br /> We are happy to announce our newest PSF Fellow Members! This group includes nominated Fellows from Q1 and Q2 of 2019.<br /> <br /> <h4 style="text-align: center;"> <span style="font-size: large;">Q1 2019</span></h4> <div> <div style="text-align: center;"> <span style="font-size: large;">Christoph Gohlke</span></div> <div style="text-align: center;"> <br /></div> <h4 style="text-align: center;"> <span style="font-size: large;">Q2 2019</span></h4> </div> <div style="text-align: center;"> <span style="font-size: large;">Aaron Yankey</span></div> <div style="text-align: center;"> <a href="https://twitter.com/y_noraa7" target="_blank">Twitter</a></div> <div style="text-align: center;"> <br /></div> <div style="text-align: center;"> <span style="font-size: large;">Chris Jerdonek</span></div> <div style="text-align: center;"> <div> <br /></div> </div> <div style="text-align: center;"> <span style="font-size: large;">Florian Bruhin</span></div> <div style="text-align: center;"> <div> <a href="https://www.github.com/The-Compiler" target="_blank">GitHub</a>, <a href="https://www.twitter.com/the_compiler" target="_blank">Twitter</a>, <a href="https://www.qutebrowser.org/" target="_blank">Main project</a></div> <div> <br /></div> </div> <div style="text-align: center;"> <span style="font-size: large;">Matt Lebrun</span></div> <div style="text-align: center;"> <div> <a href="https://twitter.com/cr8ivecodesmith" target="_blank">Twitter</a>, <a href="https://www.instagram.com/cr8ivecodesmith" target="_blank">Instagram</a>, <a href="https://mattlebrun.com/" target="_blank">Website</a></div> <div> <br /></div> </div> <div style="text-align: center;"> <span style="font-size: large;">Micaela Reyes</span></div> <div style="text-align: center;"> <div> <a href="https://twitter.com/codemickeycode" target="_blank">Twitter</a>, <a href="https://www.instagram.com/codemickeycode" target="_blank">Instagram</a>, <a href="https://codemickeycode.com/" target="_blank">Website</a></div> <div> <br /></div> </div> <div style="text-align: center;"> <span style="font-size: large;">Pradyun Gedam</span></div> <div style="text-align: center;"> <div> <a href="https://twitter.com/pradyunsg" target="_blank">Twitter</a>, <a href="http://pradyunsg.me/" target="_blank">Website</a></div> <div> <br /></div> </div> <div> <div style="text-align: center;"> <span style="font-size: large;">Rami Chowdhury</span></div> <div style="text-align: center;"> <div> <a href="https://github.com/necaris/" target="_blank">GitHub</a>, <a href="https://twitter.com/necaris/" target="_blank">Twitter</a>, <a href="https://wandering.shop/@necaris" target="_blank">Mastodon</a></div> <div> <br /></div> </div> <div> <div style="text-align: center;"> <span style="font-size: large;">Tania Allard</span></div> </div> <div style="text-align: center;"> <div> <a href="http://twitter.com/ixek" target="_blank">Twitter</a>, <a href="https://bitsandchips.me/" target="_blank">Website</a></div> <div> <br /></div> </div> Congratulations! Thank you for your continued contributions. We have added you to our Fellow roster <a href="https://www.python.org/psf/members/" target="_blank">online</a>.<br /> <br /> The above members have contributed to the Python ecosystem by teaching Python, maintaining popular libraries/tools, maintaining pip, organizing Python events, starting Python communities in their home countries, and overall being great mentors in our community. Each of them continues to help make Python more accessible around the world. To learn more about the new Fellow members, check out their links above.</div> <div> <br /> Let's continue to recognize Pythonistas all over the world for their impact on our community. Here's the criteria our Work Group uses to review nominations:<br /> <br /> <ul> <li>For those who have served the Python community by creating and/or maintaining various engineering/design contributions, the following statement should be true:</li> <ul> <li>Nominated Person has served the Python community by making available code, tests, documentation, or design, either in a Python implementation or in a Python ecosystem project, that 1) shows technical excellence, 2) is an example of software engineering principles and best practices, and 3) has achieved widespread usage or acclaim.</li> </ul> <li>For those who have served the Python community by coordinating, organizing, teaching, writing, and evangelizing, the following statement should be true:</li> <ul> <li>Nominated Person has served the Python community through extraordinary efforts in organizing Python events, publicly promoting Python, and teaching and coordinating others. Nominated Person's efforts have shown leadership and resulted in long-lasting and substantial gains in the number and quality of Python users, and have been widely recognized as being above and beyond normal volunteering.</li> </ul> <li>If someone is not accepted to be a fellow in the quarter they were nominated for, they will remain an active nominee for 1 year for future consideration.</li> <li>It is suggested/recommended that the nominee have wide Python community involvement. Examples would be (not a complete list - just examples):</li> <ul> <li>Someone who has received a Community Service Award or Distinguished Service Award</li> <li>A developer that writes (more than one) documentation/books/tutorials for wider audience</li> <li>Someone that helps translate (more than one) documentation/books/tutorials for better inclusivity</li> <li>An instructor that teaches Python related tutorials in various regions</li> <li>Someone that helps organize local meet ups and also helps organize a regional conference</li> </ul> <li>Nominees should be aware of the Python community’s Code of Conduct and should have a record of fostering the community.</li> <li>Sitting members of the PSF Board of Directors can be nominated if they meet the above criteria.</li> </ul> If you would like to nominate someone to be a PSF Fellow, please send a description of their Python accomplishments and their email address to psf-fellow at python.org. We are accepting nominations for quarter 4 through November 20, 2019. More information is available at: <a href="https://www.python.org/psf/fellows/">https://www.python.org/psf/fellows/</a>.</div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/18334325508115717169' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/18334325508115717169' rel='author' title='author profile'> <span itemprop='name'>Ewa Jodlowska</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/08/python-software-foundation-fellow.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/08/python-software-foundation-fellow.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-08-27T08:41:00-04:00'>8/27/2019 08:41:00 AM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-771879458'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=5336974345699327947&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Monday, August 19, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjszmAVPOFxvRlln4jH97O_pIYTXh4zKZ6W0LSX-8NPDJW90pxwaWrlsD7Ekxac3Dvx-fh_EumhvnYkwwf3JAzEmeYC1xkBTV0NaYaZl_pODfIz2Y_vksnWXA6TeNsPOgIrtio/s320/pythonprogamming_bookbundle_logo-stacked-retina.png' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='5882246688697377044' itemprop='postId'/> <a name='5882246688697377044'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/08/humble-bundle-by-no-starch-supports.html'>Humble Bundle by No Starch supports the Python Software Foundation!</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-5882246688697377044' itemprop='description articleBody'> We are super excited to announce that the <a href="https://www.python.org/psf/" target="_blank">Python Software Foundation</a> is featured as a charity in a <a href="https://www.humblebundle.com/books/python-programming-no-starch-books" target="_blank">Humble Bundle by No Starch Press </a>this month.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjszmAVPOFxvRlln4jH97O_pIYTXh4zKZ6W0LSX-8NPDJW90pxwaWrlsD7Ekxac3Dvx-fh_EumhvnYkwwf3JAzEmeYC1xkBTV0NaYaZl_pODfIz2Y_vksnWXA6TeNsPOgIrtio/s1600/pythonprogamming_bookbundle_logo-stacked-retina.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="344" data-original-width="880" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjszmAVPOFxvRlln4jH97O_pIYTXh4zKZ6W0LSX-8NPDJW90pxwaWrlsD7Ekxac3Dvx-fh_EumhvnYkwwf3JAzEmeYC1xkBTV0NaYaZl_pODfIz2Y_vksnWXA6TeNsPOgIrtio/s320/pythonprogamming_bookbundle_logo-stacked-retina.png" width="320" /></a></div> <br /> <br /> This bundle features books such as Python Playground, Mission Python, Invent your own Computer Games with Python, and so much more.<br /> <br /> Click <a href="https://www.humblebundle.com/books/python-programming-no-starch-books" target="_blank">here</a> to see all the books being featured and <a href="https://www.humblebundle.com/books/python-programming-no-starch-books" target="_blank">GET THE BUNDLE</a> before it closes! The bundle will run from August 19th to September 2nd (11am Pacific). Proceeds received help charities such as the Python Software Foundation (PSF). Once you click to get your bundle, you can also choose where your money goes if you'd like to customize the split of proceeds.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY3c8f3n1Oi5OzxuZRQkeAqVsbpUJ08rIbSGOjVfoR7bP1euSrSEU6uGlCwLCYIA95yuS_Sknkd8XZEcLTuRPUaMblbNvyZ8Vx0EZApDowVdSk8xDP6ydEv8ees8IFJ5gsmEg/s1600/pythonprogrammingnostarch_bookbundle-newsletter_grid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="580" data-original-width="600" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY3c8f3n1Oi5OzxuZRQkeAqVsbpUJ08rIbSGOjVfoR7bP1euSrSEU6uGlCwLCYIA95yuS_Sknkd8XZEcLTuRPUaMblbNvyZ8Vx0EZApDowVdSk8xDP6ydEv8ees8IFJ5gsmEg/s320/pythonprogrammingnostarch_bookbundle-newsletter_grid.png" width="320" /></a></div> <br /> <br /> Humble Bundle sells games, ebooks, software, and other digital content. Their mission is to support charity while providing awesome content to customers at great prices. Thanks to past Humble Bundles that the PSF has been a part of, this program has helped the PSF raise more than $300,000 since 2017! The PSF and the Python community thank Humble Bundle and all of the featured products that have selected the PSF as one of their charities. This funding has had a positive impact for Pythonistas all around the world.<br /> <br /> No Starch is a long time community contributor supporting the PSF in various Bundles and supporting Young Coder classes that happen at PyCon US. “As one of the leading publishers of Python books worldwide, No StarchPress is very excited to support the organization at the core of the Python programming language” said No Starch Press Founder Bill Pollock. “Python is at the core of so much technical work today and very much at the core of our publishing program.”<br /> <br /> The PSF staff and board of directors send a big "<i>Thank You!</i>" to everyone involved.<br /> <br /> <br /> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/18334325508115717169' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/18334325508115717169' rel='author' title='author profile'> <span itemprop='name'>Ewa Jodlowska</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/08/humble-bundle-by-no-starch-supports.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/08/humble-bundle-by-no-starch-supports.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-08-19T14:07:00-04:00'>8/19/2019 02:07:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-771879458'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=5882246688697377044&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> <div class="date-outer"> <h2 class='date-header'><span>Wednesday, July 31, 2019</span></h2> <div class="date-posts"> <div class='post-outer'> <div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsALmRLrg2KqlfIsOyaVfnV63oojYz3Qz6Qij6jM3Q5whuB3fRnCibnL4aaxSvy83Y2YFIomWtNFzs_n3Okgmy11IgK6E9_-4TWXVbs-r8Tg84UmZo2RoTaJ0No0NTI_kOg/s400/creating-api-token-pypi.png' itemprop='image_url'/> <meta content='8520' itemprop='blogId'/> <meta content='4621905600709948175' itemprop='postId'/> <a name='4621905600709948175'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='https://pyfound.blogspot.com/2019/07/pypi-now-supports-uploading-via-api.html'>PyPI now supports uploading via API token</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-4621905600709948175' itemprop='description articleBody'> We're <a href="https://pyfound.blogspot.com/search/label/pypi">further</a> increasing the security of the Python Package Index with another new beta feature: scoped API tokens for package upload. This is thanks to a <a href="https://pyfound.blogspot.com/2019/03/commencing-security-accessibility-and.html">grant from the Open Technology Fund</a>, coordinated by the <a href="https://wiki.python.org/psf/PackagingWG">Packaging Working Group</a> of the <a href="https://www.python.org/psf-landing/">Python Software Foundation</a>.<br /> <br /> Over the last few months, we've <a href="https://pyfound.blogspot.com/2019/06/pypi-now-supports-two-factor-login-via.html">added two-factor authentication (2FA) login security methods</a>. We added Time-based One-Time Password (TOTP) support in late May and physical security device support in mid-June. Now, over 1600 users have started using physical security devices or TOTP applications to better secure their accounts. And over the past week, over 7.8% of logins to PyPI.org have been protected by 2FA, up from 3% in the month of June.<br /> <br /> <table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsALmRLrg2KqlfIsOyaVfnV63oojYz3Qz6Qij6jM3Q5whuB3fRnCibnL4aaxSvy83Y2YFIomWtNFzs_n3Okgmy11IgK6E9_-4TWXVbs-r8Tg84UmZo2RoTaJ0No0NTI_kOg/s1600/creating-api-token-pypi.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="Add API token screen, with textarea for token name and dropdown menu to choose token scope" border="0" data-original-height="444" data-original-width="757" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsALmRLrg2KqlfIsOyaVfnV63oojYz3Qz6Qij6jM3Q5whuB3fRnCibnL4aaxSvy83Y2YFIomWtNFzs_n3Okgmy11IgK6E9_-4TWXVbs-r8Tg84UmZo2RoTaJ0No0NTI_kOg/s400/creating-api-token-pypi.png" title="Add API token screen" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">PyPI interface for adding an<br /> API token for package upload</td></tr> </tbody></table> Now, we have another improvement: <a href="https://pypi.org/help/#apitoken">you can use API tokens to upload packages</a> to PyPI and <a href="https://packaging.python.org/guides/using-testpypi/">Test PyPI</a>! And we've designed the token to be a drop-in replacement for the username and password you already use (warning: this is a <b>beta feature</b> that <a href="https://wiki.python.org/psf/WarehousePackageMaintainerTesting">we need your help to test</a>).<br /> <br /> <b>How it works: </b>Go to your <a href="https://pypi.org/manage/account/#two-factor">PyPI account settings</a> and select "Add API token". When you create an API token, you choose its scope: you can create a token that can upload to all the projects you maintain or own, or you can limit its scope to just one project. <br /> <br /> <br /> <table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5vY5SBPdrsGckuuhb_Lrdgo1p3Mmv9ZLwZGuu7-VaWL1TlwJj4zj93BGN6yGmvgv-f3VuzY6g_DLnneqqkM7AlO-PUQ96mJAS-6VI7lK_jtqnxQMiZtnMCI0ksixU7RRPoQ/s1600/pypi-api-token-management.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="API token management interface displays each token's name, scope, date/time created, and date/time last used, and the user can view each token's unique ID or revoke it" border="0" data-original-height="446" data-original-width="828" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5vY5SBPdrsGckuuhb_Lrdgo1p3Mmv9ZLwZGuu7-VaWL1TlwJj4zj93BGN6yGmvgv-f3VuzY6g_DLnneqqkM7AlO-PUQ96mJAS-6VI7lK_jtqnxQMiZtnMCI0ksixU7RRPoQ/s320/pypi-api-token-management.png" title="API token management interface" width="320" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">PyPI API token management interface</td></tr> </tbody></table> The token management screen shows you when each of your tokens were created, and last used. And you can revoke one token without revoking others, and without having to change your password on PyPI and in configuration files.<br /> <br /> Uploading with an API token is currently optional but encouraged; in the future, PyPI will set and enforce a policy requiring users with two-factor authentication enabled to use API tokens to upload (rather than just their password sans second factor). Watch <a href="https://mail.python.org/mailman3/lists/pypi-announce.python.org/">our announcement mailing list</a> for future details.<br /> <br /> <table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTfHYFcBIrx5iiIvmdQD4PEurEdmM5il3Ez8ti1DZmdObMPJ2gHt2G5O_Y8Y1Kiy8sL6pbTfHgsF78Ts_3J1BwA9kYIMYJGgSXnDOAlTC1g3bVw1a-BHHhXMYpnOXYgcXntg/s1600/pypi-api-token-just-created.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="A successful API token creation: a long string that only appears once, for the user to copy" border="0" data-original-height="421" data-original-width="840" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTfHYFcBIrx5iiIvmdQD4PEurEdmM5il3Ez8ti1DZmdObMPJ2gHt2G5O_Y8Y1Kiy8sL6pbTfHgsF78Ts_3J1BwA9kYIMYJGgSXnDOAlTC1g3bVw1a-BHHhXMYpnOXYgcXntg/s400/pypi-api-token-just-created.png" title="a just-created API token" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">Immediately after creating the API token,<br /> PyPI gives the user one chance to copy it</td><td class="tr-caption" style="text-align: center;"><br /></td></tr> </tbody></table> <b>Why: </b>These API tokens can <b>only</b> be used to upload packages to PyPI, and not to log in more generally. This makes it safer to automate package upload and store the credential in the cloud, since a thief who copies the token won't also gain the ability to delete the project, delete old releases, or add or remove collaborators. And, since the token is a long character string (with 32 bytes of entropy and a service identifier) that PyPI has securely generated on the server side,<span class="c-message__body" data-qa="message-text" dir="auto"></span> we vastly reduce the potential for credential reuse on other sites and for a bad actor to guess the token. <br /> <br /> <br /> <b>Help us test: </b>Please <a href="https://wiki.python.org/psf/WarehousePackageMaintainerTesting">try this out</a>! This is a <a href="https://wiki.python.org/psf/WarehousePackageMaintainerTesting">beta feature</a> and we expect that users will find minor issues over the next few weeks; we ask for your bug reports. If you find any potential security vulnerabilities, please follow our <a href="https://pypi.org/security/">published security policy</a>. (Please don't report security issues in Warehouse via GitHub, IRC, or mailing lists. Instead, please directly email security@python.org.) If you find an issue that is not a security vulnerability, please <a href="https://github.com/pypa/warehouse/issues/new">report it via GitHub</a>.<br /> <br /> We'd particularly like testing from: <br /> <ul> <li>Organizations that automate uploads using continuous integration</li> <li>People who save PyPI credentials in a <tt>.pypirc</tt> file</li> <li>Windows users</li> <li>People on mobile devices</li> <li>People on very slow connections</li> <li>Organizations where users share an auth token within a group</li> <li>Projects with 4+ maintainers or owners</li> <li>People who usually block cookies and JavaScript</li> <li>People who maintain 20+ projects</li> <li>People who created their PyPI account 6+ years ago</li> </ul> <b>What's next for PyPI: </b>Next, we'll move on to working on an advanced audit trail of sensitive user actions, plus improvements to accessibility and localization for PyPI (some of which have already started). More details are in <a href="https://discuss.python.org/t/pypi-security-work-multifactor-auth-progress-help-needed/1042">our progress reports on Discourse</a>.<br /> <br /> Thanks to the <a href="https://www.opentech.fund/">Open Technology Fund</a> for funding this work. And please sign up for the <a href="https://mail.python.org/mailman3/lists/pypi-announce.python.org/">PyPI Announcement Mailing List</a> for future updates. <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'> <span class='post-author vcard'> Posted by <span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://www.blogger.com/profile/08002085909817689325' itemprop='url'/> <a class='g-profile' href='https://www.blogger.com/profile/08002085909817689325' rel='author' title='author profile'> <span itemprop='name'>Sumana Harihareswara</span> </a> </span> </span> <span class='post-timestamp'> at <meta content='https://pyfound.blogspot.com/2019/07/pypi-now-supports-uploading-via-api.html' itemprop='url'/> <a class='timestamp-link' href='https://pyfound.blogspot.com/2019/07/pypi-now-supports-uploading-via-api.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2019-07-31T12:02:00-04:00'>7/31/2019 12:02:00 PM</abbr></a> </span> <span class='post-comment-link'> </span> <span class='post-icons'> <span class='item-control blog-admin pid-1436657185'> <a href='https://www.blogger.com/post-edit.g?blogID=8520&postID=4621905600709948175&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <div class='post-share-buttons goog-inline-block'> </div> </div> <div class='post-footer-line post-footer-line-2'> <span class='post-labels'> Labels: <a href='https://pyfound.blogspot.com/search/label/pypi' rel='tag'>pypi</a> </span> </div> <div class='post-footer-line post-footer-line-3'> <span class='post-location'> </span> </div> </div> </div> </div> </div></div> </div> <div class='blog-pager' id='blog-pager'> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://pyfound.blogspot.com/search?updated-max=2020-03-04T15:40:00-05:00&max-results=2&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'>Newer Posts</a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://pyfound.blogspot.com/search?updated-max=2019-07-31T12:02:00-04:00&max-results=2' id='Blog1_blog-pager-older-link' title='Older Posts'>Older Posts</a> </span> <a class='home-link' href='https://pyfound.blogspot.com/'>Home</a> </div> <div class='clear'></div> <div class='blog-feeds'> <div class='feed-links'> Subscribe to: <a class='feed-link' href='https://pyfound.blogspot.com/feeds/posts/default' target='_blank' type='application/atom+xml'>Posts (Atom)</a> </div> </div> </div></div> </div> </div> <div class='column-left-outer'> <div class='column-left-inner'> <aside> </aside> </div> </div> <div class='column-right-outer'> <div class='column-right-inner'> <aside> <div class='sidebar section' id='sidebar-right-1'><div class='widget Text' data-version='1' id='Text1'> <h2 class='title'>Mission</h2> <div class='widget-content'> <span style="font-size: 125%;font-size:125%;"><i>The mission of the <a href="https://www.python.org/psf/">Python Software Foundation</a> is to promote, protect, and advance the Python programming language, and to support and facilitate the growth of a diverse and international community of Python programmers.</i></span> </div> <div class='clear'></div> </div><div class='widget LinkList' data-version='1' id='LinkList1'> <div class='widget-content'> <ul> <li><a href='https://www.python.org/psf-landing/'>Python Software Foundation</a></li> <li><a href='https://www.python.org/psf/grants/'>Grants Program</a></li> <li><a href='https://www.python.org/psf/membership/'>Membership</a></li> <li><a href='https://www.python.org/community/awards/'>Awards</a></li> <li><a href='https://www.python.org/psf/records/board/minutes/'>Meeting Minutes</a></li> </ul> <div class='clear'></div> </div> </div><div class='widget Image' data-version='1' id='Image1'> <h2>PSF Sponsors</h2> <div class='widget-content'> <a href='https://www.python.org/psf/sponsors/'> <img alt='PSF Sponsors' height='113' id='Image1_img' src='https://blogger.googleusercontent.com/img/a/AVvXsEinkl3WkxN3nTJap16aR2WhbP1k4BJw92phSFrhsrCWHOWl2raf6mjtgC7pt4NxSkiugearJ82UJRuepNqcZCEnB2Adm9c1EEv32nHzQf79hx-B2ZOqdk_M6Y6sWkGD7SMsq5l1ZE1xYyxGwrz5U1wnBHlqDOlDfiWHNtFwc_69mS7pRTH6=s250' width='250'/> </a> <br/> <span class='caption'>A big thank you to the above PSF sponsors for supporting our mission!</span> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML1'> <div class='widget-content'> <a class="twitter-timeline" data-width="256" data-height="512" data-dnt="true" href="https://twitter.com/ThePSF?ref_src=twsrc%5Etfw">Tweets by ThePSF</a> <script async="async" src="https://platform.twitter.com/widgets.js" charset="utf-8" ></script> </div> <div class='clear'></div> </div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <h2>Blog Archive</h2> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/'> 2024 </a> <span class='post-count' dir='ltr'>(51)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/11/'> November </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/09/'> September </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/08/'> August </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/07/'> July </a> <span class='post-count' dir='ltr'>(7)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/06/'> June </a> <span class='post-count' dir='ltr'>(16)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/05/'> May </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2024/01/'> January </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/'> 2023 </a> <span class='post-count' dir='ltr'>(37)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/09/'> September </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/08/'> August </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/06/'> June </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/05/'> May </a> <span class='post-count' dir='ltr'>(12)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2023/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/'> 2022 </a> <span class='post-count' dir='ltr'>(35)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/10/'> October </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/06/'> June </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/05/'> May </a> <span class='post-count' dir='ltr'>(12)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/03/'> March </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2022/01/'> January </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/'> 2021 </a> <span class='post-count' dir='ltr'>(42)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/11/'> November </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/09/'> September </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/06/'> June </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/05/'> May </a> <span class='post-count' dir='ltr'>(12)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/04/'> April </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/02/'> February </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2021/01/'> January </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/'> 2020 </a> <span class='post-count' dir='ltr'>(51)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/12/'> December </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/07/'> July </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/05/'> May </a> <span class='post-count' dir='ltr'>(10)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/04/'> April </a> <span class='post-count' dir='ltr'>(11)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/03/'> March </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2020/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <a class='toggle' href='javascript:void(0)'> <span class='zippy toggle-open'> ▼  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/'> 2019 </a> <span class='post-count' dir='ltr'>(45)</span> <ul class='hierarchy'> <li class='archivedate expanded'> <a class='toggle' href='javascript:void(0)'> <span class='zippy toggle-open'> ▼  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/12/python-2-sunset.html'>Python 2 series to be retired by April 2020</a></li> <li><a href='https://pyfound.blogspot.com/2019/12/moss-czi-support-pip.html'>Mozilla and Chan Zuckerberg Initiative to support pip</a></li> <li><a href='https://pyfound.blogspot.com/2019/12/giving-tuesday-2019.html'>Giving Tuesday 2019</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/11/python-software-foundation-fellow.html'>Python Software Foundation Fellow Members for Q3 2019</a></li> <li><a href='https://pyfound.blogspot.com/2019/11/why-sponsor-pycon-2020.html'>Why Sponsor PyCon 2020?</a></li> <li><a href='https://pyfound.blogspot.com/2019/11/seeking-developers-for-paid-contract.html'>Seeking Developers for Paid Contract Improving pip</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/10/the-2019-python-developer-survey-is.html'>The 2019 Python Developer Survey is here, take a f...</a></li> <li><a href='https://pyfound.blogspot.com/2019/10/cpython-core-developer-sprint-2019.html'>CPython Core Developer Sprint 2019</a></li> <li><a href='https://pyfound.blogspot.com/2019/10/chris-angelico-2019-q2-community.html'>Chris Angelico: 2019 Q2 Community Service Award Wi...</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/09/grants-awarded-for-python-in-education.html'>Grants Awarded for Python in Education</a></li> <li><a href='https://pyfound.blogspot.com/2019/09/felipe-de-morais-2019-q2-community.html'>Felipe de Morais: 2019 Q2 Community Service Award ...</a></li> <li><a href='https://pyfound.blogspot.com/2019/09/pypi-security-q4-2019-request-for.html'>PyPI Security Q4 2019 Request for Proposals period...</a></li> <li><a href='https://pyfound.blogspot.com/2019/09/the-python-software-foundation-has_24.html'>The Python Software Foundation has updated its Cod...</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/08/'> August </a> <span class='post-count' dir='ltr'>(3)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/08/pypi-security-q4-2019-request-for.html'>PyPI Security Q4 2019 Request for Information peri...</a></li> <li><a href='https://pyfound.blogspot.com/2019/08/python-software-foundation-fellow.html'>Python Software Foundation Fellow Members for Q1 &...</a></li> <li><a href='https://pyfound.blogspot.com/2019/08/humble-bundle-by-no-starch-supports.html'>Humble Bundle by No Starch supports the Python Sof...</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> <ul class='posts'> <li><a href='https://pyfound.blogspot.com/2019/07/pypi-now-supports-uploading-via-api.html'>PyPI now supports uploading via API token</a></li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/06/'> June </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/05/'> May </a> <span class='post-count' dir='ltr'>(11)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/02/'> February </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2019/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/'> 2018 </a> <span class='post-count' dir='ltr'>(31)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/12/'> December </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/10/'> October </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/06/'> June </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/05/'> May </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2018/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/'> 2017 </a> <span class='post-count' dir='ltr'>(32)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/10/'> October </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/09/'> September </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/04/'> April </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/02/'> February </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2017/01/'> January </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/'> 2016 </a> <span class='post-count' dir='ltr'>(27)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/10/'> October </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/08/'> August </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/06/'> June </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/05/'> May </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/04/'> April </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2016/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/'> 2015 </a> <span class='post-count' dir='ltr'>(67)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/11/'> November </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/10/'> October </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/07/'> July </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/06/'> June </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/05/'> May </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/04/'> April </a> <span class='post-count' dir='ltr'>(13)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/03/'> March </a> <span class='post-count' dir='ltr'>(14)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/02/'> February </a> <span class='post-count' dir='ltr'>(9)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2015/01/'> January </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/'> 2014 </a> <span class='post-count' dir='ltr'>(14)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2014/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/'> 2013 </a> <span class='post-count' dir='ltr'>(18)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/09/'> September </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/03/'> March </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2013/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/'> 2012 </a> <span class='post-count' dir='ltr'>(21)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/10/'> October </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/05/'> May </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2012/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/'> 2011 </a> <span class='post-count' dir='ltr'>(55)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/10/'> October </a> <span class='post-count' dir='ltr'>(7)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/09/'> September </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/06/'> June </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/05/'> May </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/04/'> April </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/03/'> March </a> <span class='post-count' dir='ltr'>(13)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/02/'> February </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2011/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/'> 2010 </a> <span class='post-count' dir='ltr'>(35)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/12/'> December </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/09/'> September </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/07/'> July </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/06/'> June </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/04/'> April </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2010/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/'> 2009 </a> <span class='post-count' dir='ltr'>(21)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/09/'> September </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/08/'> August </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/07/'> July </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2009/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/'> 2008 </a> <span class='post-count' dir='ltr'>(23)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/08/'> August </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/05/'> May </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/03/'> March </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/02/'> February </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2008/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/'> 2007 </a> <span class='post-count' dir='ltr'>(26)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/10/'> October </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2007/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/'> 2006 </a> <span class='post-count' dir='ltr'>(39)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/12/'> December </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/11/'> November </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/10/'> October </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/08/'> August </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/05/'> May </a> <span class='post-count' dir='ltr'>(7)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/04/'> April </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> ►  </span> </a> <a class='post-count-link' href='https://pyfound.blogspot.com/2006/03/'> March </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> </div> </div> <div class='clear'></div> </div> </div></div> <table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'> <tbody> <tr> <td class='first columns-cell'> <div class='sidebar no-items section' id='sidebar-right-2-1'></div> </td> <td class='columns-cell'> <div class='sidebar no-items section' id='sidebar-right-2-2'></div> </td> </tr> </tbody> </table> <div class='sidebar no-items section' id='sidebar-right-3'></div> </aside> </div> </div> </div> <div style='clear: both'></div> <!-- columns --> </div> <!-- main --> </div> </div> <div class='main-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <footer> <div class='footer-outer'> <div class='footer-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left footer-fauxborder-left'> <div class='fauxborder-right footer-fauxborder-right'></div> <div class='region-inner footer-inner'> <div class='foot no-items section' id='footer-1'></div> <table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'> <tbody> <tr> <td class='first columns-cell'> <div class='foot no-items section' id='footer-2-1'></div> </td> <td class='columns-cell'> <div class='foot no-items section' id='footer-2-2'></div> </td> </tr> </tbody> </table> <!-- outside of the include in order to lock Attribution widget --> <div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'> <div class='widget-content' style='text-align: center;'> Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>. </div> <div class='clear'></div> </div></div> </div> </div> <div class='footer-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </footer> <!-- content --> </div> </div> <div class='content-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <script type='text/javascript'> window.setTimeout(function() { document.body.className = document.body.className.replace('loading', ''); }, 10); </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/984859869-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY4ndsL4JR2Wtao-9KNsBcWV9ecx_A:1732474598567';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d8520','//pyfound.blogspot.com/2019/','8520'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '8520', 'title': 'Python Software Foundation News', 'url': 'https://pyfound.blogspot.com/2019/', 'canonicalUrl': 'https://pyfound.blogspot.com/2019/', 'homepageUrl': 'https://pyfound.blogspot.com/', 'searchUrl': 'https://pyfound.blogspot.com/search', 'canonicalHomepageUrl': 'https://pyfound.blogspot.com/', 'blogspotFaviconUrl': 'https://pyfound.blogspot.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': false, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-55961911-3', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': false, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Python Software Foundation News - Atom\x22 href\x3d\x22https://pyfound.blogspot.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Python Software Foundation News - RSS\x22 href\x3d\x22https://pyfound.blogspot.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Python Software Foundation News - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/8520/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/d78375fb222d99b3', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'archive', 'pageName': '2019', 'pageTitle': 'Python Software Foundation News: 2019'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Python Software Foundation News', 'description': '\xa0\xa0News from the Python Software Foundation', 'url': 'https://pyfound.blogspot.com/2019/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2019, 'rangeMessage': 'Showing posts from 2019'}}}]); _WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', document.getElementById('Navbar1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/2646514562-lbx.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/1964470060-lightbox_bundle.css'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_TextView', new _WidgetInfo('Text1', 'sidebar-right-1', document.getElementById('Text1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_LinkListView', new _WidgetInfo('LinkList1', 'sidebar-right-1', document.getElementById('LinkList1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_ImageView', new _WidgetInfo('Image1', 'sidebar-right-1', document.getElementById('Image1'), {'resize': true}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-right-1', document.getElementById('HTML1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull')); </script> </body> </html>