mariatta.cahttps://mariatta.ca/2018-11-04T00:00:00-07:00#IceCreamSelfie at North Bay Python 2018, Petaluma2018-11-04T00:00:00-07:002018-11-04T00:00:00-07:00Mariattatag:mariatta.ca,2018-11-04:/ics-northbaypython-2018.html<p>Ice cream from <a class="reference external" href="http://lalascreamery.com/">Lala's Creamery</a> in front of North Bay Python's venue, <a class="reference external" href="http://www.mystictheatre.com/">Mystic Theatre</a>. Petaluma, November 2018.</p>
<img alt="" src="../img/ics-northbaypython-2018.jpg" style="width: 400px;" />
<p>Ice cream from <a class="reference external" href="http://lalascreamery.com/">Lala's Creamery</a> in front of North Bay Python's venue, <a class="reference external" href="http://www.mystictheatre.com/">Mystic Theatre</a>. Petaluma, November 2018.</p>
<img alt="" src="../img/ics-northbaypython-2018.jpg" style="width: 400px;" />
#IceCreamSelfie at DjangoCon US 2018, San Diego2018-10-17T00:00:00-07:002018-10-17T00:00:00-07:00Mariattatag:mariatta.ca,2018-10-17:/ics-djangoconus-2018.html<p>At <a class="reference external" href="https://www.hammondsgourmet.com/">Hammond's Grourmet Ice Cream</a> in Cleveland, May 2018.</p>
<img alt="" src="../img/ics-djangoconus-2018.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="https://www.hammondsgourmet.com/">Hammond's Grourmet Ice Cream</a> in Cleveland, May 2018.</p>
<img alt="" src="../img/ics-djangoconus-2018.jpg" style="width: 200px;" />
Python Core Sprint 2018: Part Two2018-09-21T09:14:06-07:002018-09-21T09:14:06-07:00Mariattatag:mariatta.ca,2018-09-21:/core-sprint-2018-part-2.html<p>Read up on <a class="reference external" href="https://mariatta.ca/core-sprint-2018-part-1.html">Part one</a> first.</p>
<p>Here are additional discussions and projects that I got involved with during the
sprint.</p>
<div class="section" id="pep-581">
<h2>PEP 581</h2>
<p><a class="reference external" href="https://www.python.org/dev/peps/pep-0581/">PEP 581</a> is a PEP I wrote about using
GitHub issues instead of Roundup as CPython's issue tracker.</p>
<p>During the sprint, I discussed this topic mainly with Ezio …</p></div><p>Read up on <a class="reference external" href="https://mariatta.ca/core-sprint-2018-part-1.html">Part one</a> first.</p>
<p>Here are additional discussions and projects that I got involved with during the
sprint.</p>
<div class="section" id="pep-581">
<h2>PEP 581</h2>
<p><a class="reference external" href="https://www.python.org/dev/peps/pep-0581/">PEP 581</a> is a PEP I wrote about using
GitHub issues instead of Roundup as CPython's issue tracker.</p>
<p>During the sprint, I discussed this topic mainly with Ezio Melotti, as well as
with a group of other core devs: Ned Deily, Kushal Das, Petr Viktorin, Pablo Galindo,
and one-on-one with Zachary Ware.</p>
<p>Thanks all of you who came and discussed this with me, I really appreciate your
input and feedback.</p>
<p>Reflecting back, my tone might have been unkind, impatient, and unempathetic during
certain parts of the group discussion, and I'm sorry.</p>
<p>Unlike most other PEPs, the idea for this PEP did not go through rounds of
discussions over at python-ideas. And unlike other PEPs, I did not post this PEP
into python-dev after it has been written. It was my own choice. Instead, this idea
was discussed at Python Language Summit, as a thread at python-committers, and
I also chatted privately with a few other Python core developers.</p>
<p>Ezio, who maintains Roundup for CPython, talked to various core devs individually
to get a sense whether people are warm to the idea of moving to GitHub. It seems
like people are postive about it, or at least not strongly opposing the idea, but
we still need to iron out additional details.</p>
<p>These are some of the concerns raised during the discussions with core devs at
the sprint:</p>
<p><strong>What if GitHub disappear suddenly?</strong></p>
<p>I realize that my response to this question had been unkind, impatient,
unempathetic, and I'm sorry.</p>
<p>My response was <em>&quot;I don't care&quot;</em>.</p>
<p>What I really meant is, <em>&quot;I don't believe GitHub will go away all that suddenly&quot;</em>,
and that is my personal opinion, and I know there are people who thinks otherwise,
and I respect the difference in opinion.</p>
<p>But the actual question needing actual answer is: <em>&quot;What is our fail safe plan?&quot;</em>.
This is something that the PEP needs to address. At the moment, we'll just going to get
daily backups of GitHub data. But eventually we will need a more concrete
plan and we will need to be able to easily spin up another issue tracker / repository
so Python world does not stop and people can continue
contributing and developing.</p>
<p>However, this problem is not unique to CPython. Lack of fail-safe solution should
not blocking the PEP's acceptance, and should not stop us from using GitHub issues.</p>
<p><strong>What about current bug triage permission?</strong></p>
<p>With Roundup currently, we have a separate &quot;bug triage&quot; permission that is different
than the core developer / commit access. The bug triage permission allows them
to close and categorize issues on the issue tracker, but does not give the
permission to commit or merge pull requests to CPython.</p>
<p>The bug triage permission is definitely valuable for the team. Historically,
we've been able to give this permission easily to people without much formality,
whereas giving commit access is not so trivial.</p>
<p>We definitely need bug triage help, and the question is, how will this be managed
with GitHub?</p>
<p>There are a couple ideas. Donald Stufft commented in Zulip that we can give
people write access, invite them as team collaborators, this will allow them to
edit and close issues, but use the GitHub branch protection feature to restrict
pushing codes to only Python core developers. BTW, we have been using this
feature, just didn't quite realize it. Python <tt class="docutils literal">3.4</tt> and <tt class="docutils literal">3.5</tt> branches on GitHub
are currently &quot;protected&quot;, and only the release manager, Larry Hastings, can
push codes to those branches.</p>
<p>So what we can do is to invite the current bug triagers as collaborators for
CPython repository, give them that write access, and add branch protection
such that only Python core developers can push / commit into the active branches.</p>
<p>Another idea that came up while chatting with Zach, now that miss-islington
can automerge, maybe we let only miss-islington to merge and commit from now on.</p>
<p>🤔</p>
<p><strong>The Nosy list</strong></p>
<p>Steve Dower commented that one nice feature of the existing issue tracker is
the nosy list, where he can get notified only in issues he's interested in. For
example, if someone creates an issue with &quot;Windows&quot; component in the current issue
tracker, he and Zach will be automatically notified and added to the nosy list.</p>
<p>There is not yet similar functionality on GitHub. So we're going to build out a
bot that does this somehow.</p>
<p>I have started researching GitHub's <a class="reference external" href="https://developer.github.com/v3/activity/notifications/">notification and subscription APIs</a>, but I don't have
clear idea or solution to this problem yet.</p>
<p><strong>Involve the Python Release manager in the transition</strong></p>
<p>Ned Deily, Release Manager for Python 3.6 and 3.7, reminded us that we will need
to include the release managers for any changes in our workflow and issue tracker.</p>
<p>✅</p>
<p><strong>GitHub can lower the barrier to contribute, but also makes it easier for people to submit unrelevant issues</strong></p>
<p>Some core devs were concerned that the ease of using GitHub can also mean easier
for people to use and abuse it for things other than discussing bugs and features of
Python. It means that we will need to spend more time into triaging issues, marking
things as off topic, duplicate, telling people to file their issue somewhere else,
and so on. I think this is a valid concern. But I think this is an existing problem
anyway, regardless of what issue tracker we use.</p>
<p>I have been experimenting with <a class="reference external" href="http://gitmate.io/">GitMate.io</a> myself.
One of Gitmate's ability is to identify if an issue is a duplicate of other previously
reported issues. GitMate is currently installed in devguide, core-workflow, and
miss-islington repos. I've seen it help several people, but sometimes it is not
so helpful.</p>
<p><strong>CoC enforcement</strong></p>
<p>We need to have better and clearer policy on CoC enforcement for handling comments
on GitHub. I know that there is the PSF's CoC work group now, and Brett is part of that
group. I'm glad that there is some progress, and I look forward hearing more from the
CoC work group.</p>
</div>
<div class="section" id="cla">
<h2>CLA</h2>
<p>Another aspect of CPython's workflow that could use an improvement is the way we
handle CLA (Contributor License Agreement).</p>
<p>The way it works, for every contribution and pull request you made to Python
(CPython, DevGuide, PEPs, core-workflow, and all the bots), you'll need to
sign the CLA before we can accept and merge the pull request.</p>
<p>There are currently several problems with this workflow:</p>
<ul class="simple">
<li>Signing the CLA also requires creating an account in the bug tracker. So
people making pull requests on GitHub needs to go to bugs.python.org, create
an account, and then add in their GitHub username. While this makes sense
for contributors to CPython, there is really no reason for contributors to
DevGuide or cherry-picker to do this. It just slows down the process of
contributing.</li>
<li>It requires manual work by members of The PSF (Ewa and Betsy) to check if the CLA
has been signed, and they have to manually update the record in bugs.python.org.</li>
<li>After the CLA has been signed, the pull request does not get automatically
updated with this new information. Contributors used to have to ping a core
developer to update the label on the PR, and a core developer has to come back
to the PR and remove the label. This has gotten better recently, with the
<a class="reference external" href="https://check-python-cla.herokuapp.com/">check-python-cla</a> website. But it
still is somewhat manual process.</li>
<li>It could take at least a day, sometimes more, for the CLA process to clear. It
blocks pull requests from being merged.</li>
</ul>
<p>It really would be nice if this whole process can be automated, not requires much
human involvement, and if it can be completed in seconds instead of days.</p>
<p>I've been discussing this issue with Brett since early this year. I've also
started a <a class="reference external" href="https://mail.python.org/mm3/archives/list/core-workflow&#64;python.org/thread/JBV3XJVD2DLDX5DY7TZEA6CO5YPNHJ2C/">couple threads</a>
in core-workflow mailing list. Per Yury's suggestion, I've started looking into
<a class="reference external" href="https://cla-assistant.io/">cla-assistant</a>.</p>
<p>During the sprint, I got to discuss this more with Brett on how to proceed.</p>
<p>My personal preference is actually use the hosted version of cla-assistant,
so we don't have to maintain it. (<strong>We</strong> here really means only myself, Brett,
and Ernest).</p>
<p>People expressed concern that the system could go away quite suddenly, so
we're going to need to have some fail-safe mechanism if that ever happens.</p>
<p>I think the problem of &quot;what if this goes away suddenly&quot; is not be unique problem
to Python. I'm now actually curious to hear from other projects that use hosted
cla-assistant, and if they have their own backup plan in place.</p>
<p>I chatted with Ernest, and he said it will be easy enough for us to host our
own instance of CLA assistant. Ernest has started looking into it.</p>
<p>Several outstanding issues with cla-assistant:</p>
<ul class="simple">
<li>How does it handle people who signed on behalf of an organization?</li>
<li>It allows us to <a class="reference external" href="https://github.com/cla-assistant/cla-assistant#request-more-information-from-the-cla-signer">request more information from the CLA signer</a>,
but when we export the data, the additional metada were not returned. It seems
like a bug.</li>
<li>How do we get daily backups automatically? It seems like the only way to get the
backup is by going to the website, and click on a menu item that says &quot;Export&quot;.
Is there an API endpoint we can use, or do we need to build it ourselves?</li>
<li>How do we export out current signed CLAs from the bug tracker to cla-assistant?
Ezio had actually started working on getting me a <tt class="docutils literal">.csv</tt> for it.</li>
</ul>
<p>I ran out of time and energy to follow through with all of the above during the
sprint, so sadly we're still not yet using this new system.</p>
<p>Thanks Brett, Ernest, and Ezio for looking into this with me.</p>
</div>
<div class="section" id="fake-f-strings">
<h2>Fake f-strings</h2>
<p>I selfishly wanted Larry to <a class="reference external" href="https://github.com/python/core-workflow/issues/283">drop Python 3.5 support</a> in blurb. Blurb was
initially written with f-strings, but later on, all f-strings were replaced with
<a class="reference external" href="https://github.com/python/core-workflow/pull/146">str.format</a>.</p>
<p>I've been quite disappointed about it since last year, and I know I actually
have better things to do than being sad about a tool so crucial for CPython does
not have any f-strings in it.</p>
<p>Anyways, Larry entertained my selfish request and came up with <a class="reference external" href="https://github.com/python/core-workflow/pull/288">fake f-strings</a>.</p>
<p>I'll take it. Thanks Larry.</p>
</div>
<div class="section" id="real-f-strings-and-asyncio">
<h2>Real f-strings and asyncio</h2>
<p>Up until the sprint, I had never tried doing something like <tt class="docutils literal"><span class="pre">f&quot;{await</span> <span class="pre">somecoroutine()}&quot;</span></tt>,
so I didn't know if it would even work. Since the creators and maintainers of
f-strings and asyncio are in the room, I thought I'll just ask them if it can work,
and I should get a quick firm &quot;yes/no&quot; answer.</p>
<p>There was slight hesitation from core devs in answering such question.</p>
<p><em>&quot;It should work?&quot;</em></p>
<p><em>&quot;I think so?&quot;</em></p>
<p>So Brett wrote us a small script to see if it will really work, with myself and
Eric V. Smith as witness. The result is, this works for Python 3.7+.</p>
<p>I found out later that it does not work in Python 3.6, but I don't actually know
the reason why. Something changed with how <tt class="docutils literal">await</tt> works between 3.6 and 3.7?</p>
<p>🤷🏻‍♀</p>
<p><strong>Update:</strong> Yury <a class="reference external" href="https://twitter.com/1st1/status/1042858310641152001">commented on twitter</a>:
<em>&quot;yes, this needs Python 3.7+ to work. Before 3.7 async and await were not proper
keywords, so the interpreter did not recognize them in some contexts.&quot;</em></p>
<p>Thanks Yury! Now we have new reason to start using Python 3.7+!</p>
</div>
<div class="section" id="to-be-continued">
<h2>To be continued</h2>
<p>There will be Part 3, <em>someday</em>.</p>
<p>Thanks for reading.</p>
</div>
Python Core Sprint 2018: Part One2018-09-15T11:20:00-07:002018-09-15T11:20:00-07:00Mariattatag:mariatta.ca,2018-09-15:/core-sprint-2018-part-1.html<p>For the past week (September 9-14), I've been down in Bellevue, WA for my second
Core Python sprint. The sprint is hosted by Microsoft, and funded by The PSF.</p>
<div class="section" id="thanks">
<h2>Thanks</h2>
<p>Last year, I was only able to stay for the sprint for three days. This year
I'm able to stay …</p></div><p>For the past week (September 9-14), I've been down in Bellevue, WA for my second
Core Python sprint. The sprint is hosted by Microsoft, and funded by The PSF.</p>
<div class="section" id="thanks">
<h2>Thanks</h2>
<p>Last year, I was only able to stay for the sprint for three days. This year
I'm able to stay for the entire week. I got a lot more things done.</p>
<p>Thanks Steve Dower, for organizing this sprint and figuring out all the
logistics for us. Coordinating this is no easy task, and everything runs smoothly.</p>
<p>Big thanks to Microsoft for hosting us in Reactor Redmond B20. The facility and the
campus was really awesome. (Ice cream at the back of the room!) I got to
try out the Hololens! Thanks for treating us for a nice dinner, with guest speaker
<a class="reference external" href="https://en.wikipedia.org/wiki/Anders_Hejlsberg">Anders Hejlsberg</a>.</p>
<p>Thanks to The PSF for providing the fund, getting many core devs from all over the
world. It's been valuable being able to spend the whole week collaborating and
talk face-to-face. We really don't get too many opportunities to do this. Sprints
at conferences are normally our opportunity to help onboard new contributors
to Python. Core sprint like this serves a different purpose where we get to focus
on some of our bigger projects, brainstorm with each other, and make decisions.</p>
<p>Thanks to Zapier, especially my manager, and my teammates at the Partner Engagement
Team, for being supportive and giving me the time away from work. Zapier has
flexible time off policy, so I'm not limited to only taking X days off from work
each year. In addition, I get to focus on Python for the whole week, and not
needed to keep doing daily standup or weekly team meetings.</p>
<p>Thanks to my family, for supporting and being able to manage themselves while
I'm away. I have been traveling away without them, for work and for Python, once
a month each month since January of this year, and even more of such trips that's
been arranged all the way until August 2019. It really has not been easy for
all of us. But it motivated me to make the most of my time at the sprint.</p>
<p>Thanks to the core developers who came, away from their home, from their family and work,
for Python. We had many great discussions and chats during the past week, they've
all been very productive, and I really enjoyed being able to spend time with everyone
for Python.</p>
</div>
<div class="section" id="daily-updates">
<h2>Daily Updates</h2>
<p>I've posted my daily updates on twitter.</p>
<p>Here's the copy-pasta 🍝 version:</p>
<p><a class="reference external" href="https://twitter.com/mariatta/status/1039506319676387330">Day 1</a> report:</p>
<ul class="simple">
<li>automerge bot</li>
<li>reviewed Larry's fake f-strings hack</li>
<li>CLA discussion with Brett</li>
<li>#PEP581 discussion with Ezio</li>
<li>helped Ethan/Carol with git</li>
<li>trying to name project</li>
<li>started new unnamed project</li>
<li>wrote emails</li>
</ul>
<p><a class="reference external" href="https://twitter.com/mariatta/status/1039742549727031304">Day 2</a> report:</p>
<ul class="simple">
<li>show off automerge bot</li>
<li>CLA discussion with Brett</li>
<li>chat about workflow, bots, #PEP581 with Kushal, Victor, Pablo, and Guido</li>
<li>helped Ethan with git</li>
<li>decided on new project name: blurb_it</li>
<li>wrote emails</li>
</ul>
<p><a class="reference external" href="https://twitter.com/mariatta/status/1040062970728837120">Day 3</a> report:</p>
<ul class="simple">
<li>#PEP581 group chat with Ezio, Ned, Pablo, Petr</li>
<li>work on blurb_it</li>
<li>core dev group chat</li>
<li>small enhancement to automerge bot</li>
<li>bought an xbox</li>
</ul>
<p><a class="reference external" href="https://twitter.com/mariatta/status/1040433812407107584">Day 4</a> report:</p>
<ul class="simple">
<li>dealt with CoC case</li>
<li>chat about aiohttp async task queues with Andrew</li>
<li>work on blurb_it</li>
<li>PSF infra chat with Ernest</li>
<li>core dev group chats</li>
<li>gave lightning talk about miss-islington and blurb_it at Microsoft meetup</li>
</ul>
<p><a class="reference external" href="https://twitter.com/mariatta/status/1040765915518754816">Day 5</a> report:</p>
<ul class="simple">
<li>miss-islington rate limit issues 😕</li>
<li><a class="reference external" href="https://github.com/python/devguide/pull/414">self-declaration</a> as &quot;interested in emoji&quot; 😎</li>
<li>Python language summit planning with Łukasz</li>
<li>deployed unofficial blurb_it</li>
<li>exhausted 😩</li>
<li>three shots of tequila 🥃</li>
</ul>
</div>
<div class="section" id="new-python-core-developers">
<h2>New Python Core Developers</h2>
<p>Welcome Emily Morehouse-Valcarcel and Lisa Roach as new Python core developers!
They're both brilliant, and have been <a class="reference external" href="https://mail.python.org/pipermail/python-committers/2018-September/006059.html">contributing to Python</a>
in the past couple years.</p>
</div>
<div class="section" id="miss-islington">
<h2>miss-islington</h2>
<p>miss-islington is a GitHub bot that first developed at last year's core sprint.
The original task of miss-islington was to automatically create backport PRs.</p>
<p>Over time, she gained new privilege. She's been allowed to merge her own PR once
it has been approved by another core dev.</p>
<p>This week, miss-islington gained a new superpower. She can now automatically
merge any pull requests that core dev wants her to merge.</p>
<p>As context, there had been long and lengthy discussion about this &quot;automerge&quot;
ability. Discussion started in <a class="reference external" href="https://github.com/python/core-workflow/issues/29">core-workflow issue #29</a>,
opened by Donald Stufft February 2017. It is one functionality that GitLab
has that improves productivity, that GitHub does not yet provide. And as indication
of how complicated CPython workflow is, further discussion about this spilled over to
<a class="reference external" href="https://github.com/python/bedevere/issues/14">bedevere issue #14</a>.</p>
<p>While we have come to the resolution and decision of <a class="reference external" href="https://github.com/python/bedevere/issues/14#issuecomment-399585735">how the automerge</a> should
work, I guess I just have not find any time to completely focus and work
on implementing it. I spent almost the whole day of the first day of sprint
to implement this. I don't normally have that &quot;one full day to focus and undisturbed to work on Python&quot;
thing, so needless to say, I might never get this done without coming to the sprint.</p>
<p>If you're curious of how this was implemented, miss-islington is <a class="reference external" href="https://github.com/python/miss-islington">open source</a>.
In addition, I will give a keynote speech at <a class="reference external" href="https://2018.djangocon.us/news/mariatta-wijaya/">DjangoCon US 2018</a>,
titled <strong>Don't Be a Robot; Build the Bot</strong>
where I plan to describe some of miss-islington's architecture and challenges in
building it.</p>
<p>These are the pull requests related to automerge feature:</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/python/miss-islington/pull/146">Automerge PR labeled with &quot;automerge&quot;</a></li>
<li><a class="reference external" href="https://github.com/python/miss-islington/pull/151">Normalize commit messages on automerge</a></li>
<li><a class="reference external" href="https://github.com/python/miss-islington/pull/152">Don't automerge if there is &quot;DO-NOT-MERGE&quot; label and &quot;CLA not signed&quot; label</a></li>
</ul>
<p>Open issues that we will need to address, eventually:</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/python/miss-islington/issues/153">Rate limited since the automerge has been deployed.</a></li>
<li><a class="reference external" href="https://github.com/python/miss-islington/issues/155">Keep track of who triggered the automerge</a></li>
<li><a class="reference external" href="https://github.com/python/miss-islington/issues/154">Miss-islington should not self-assign PR that failed to backport</a></li>
<li><a class="reference external" href="https://github.com/python/miss-islington/issues/159">automerge shouldn't let GH wrap the first line of the commit message</a></li>
</ul>
<p>You can also read my announcement to <a class="reference external" href="https://mail.python.org/pipermail/python-committers/2018-September/006043.html">python-committers</a> about the automerge,
as well as watch a <a class="reference external" href="https://youtu.be/p85YtKKLNno">YouTube demo video</a>.</p>
</div>
<div class="section" id="blurb-it">
<h2>Blurb it!</h2>
<p>Part of our requirement for every pull requests that you send to CPython, is a news
entry describing the change. This had been heavily discussed and designed in
<a class="reference external" href="https://github.com/python/core-workflow/issues/6">core-workflow issue #6</a>,
and we now have Larry Hasting's tool, <a class="reference external" href="https://pypi.org/project/blurb/">blurb</a>
(available on PyPI), to help with this. In addition, we have a status check in place
by <a class="reference external" href="https://github.com/python/bedevere">bedevere</a> to ensure that the news
file exists, and that we don't forget to add it.</p>
<p>Larry's blurb works really great, and everyone has been using it without issues.</p>
<p>My personal nitpick about this, is that (and it's because I'm very lazy), blurb
is a command line tool, and so I have to be on my computer in order to use it.
A lot of time, I found myself reviewing a pull request while on my phone,
and all it needed was a news entry. But since I was on my phone, on transit,
by the beach, or whatever, I could not complete this process, and had to
wait until I'm back on the computer.</p>
<p>So I've been thinking that it would be nice and convenient if there was a web
interface for blurb. A place for me to fill in a form, and the news file automatically
gets added to the pull request. I had asked Larry earlier at PyCon what he thinks
about this idea. He said that he's okay with it, and he had in fact <a class="reference external" href="https://mail.python.org/pipermail/python-dev/2017-June/148448.html">mentioned it himself</a>: <em>&quot;... it should be easy for
some JavaScript expert to write a static page that generates blurb files
for you--it provides a form, you fill it out, and you &quot;download&quot; the
blurb file. (I've seen pages that do that sort of thing, though I don't
know how to write that kind of JavaScript myself.)&quot;</em> (python-dev, June 24, 2017).</p>
<p>Since I don't actually know how to write that kind of JavaScript either, I wrote
it all in Python 3.7, using fine libraries like <a class="reference external" href="https://aiohttp.readthedocs.io/en/latest/">aiohttp</a>, <a class="reference external" href="https://aiohttp-session.readthedocs.io/en/latest/">aiohttp-session</a>,
<a class="reference external" href="https://aiohttp-jinja2.readthedocs.io/en/stable/">aiohttp-jinja2</a>, asyncio, and
<a class="reference external" href="https://gidgethub.readthedocs.io/en/latest/">gidgethub</a>.</p>
<p>Before starting to write this project, I needed to come up with a project name,
and of course it was the hardest part of the process. I had thought of unimaginative
names like, &quot;Blurb on the web&quot; or &quot;blurb_ee (ee: extended edition, pronounced <em>blurbee</em>)&quot;.
Gregory P. Smith suggested &quot;Blurb 2.0&quot;. It sounds okay, except that I'm not actually implementing
a new &quot;blurb&quot;. I'm trying to provide an enhancement of &quot;blurb add&quot; command, so it
is only a subset of the full &quot;blurb&quot;. &quot;Blurb 2.0&quot; sounds incorrect to me. Larry
himself suggested: &quot;webLurb&quot; (pronounced webblurb, or maybe we blurb?). In the end,
I went with, &quot;blurb_it&quot;, to which Guido responded: &quot;ship_it&quot;. 🚢</p>
<p>I demoed the prototype of blurb_it at Microsoft meetup on Thursday. I've started
a <a class="reference external" href="https://github.com/python/blurb_it/pull/2">pull request</a>, and currently
it is available on my own free Heroku instance at <a class="reference external" href="https://my-blurb-it.herokuapp.com/">https://my-blurb-it.herokuapp.com/</a></p>
<p>There are still more work to be done for blurb_it:</p>
<ul class="simple">
<li>Write unit tests</li>
<li>Add travis CI integration to the repo</li>
<li>Transfer app ownership to The PSF</li>
<li>Make it as a GitHub App instead of an OAuth App</li>
<li>Add form validation that the news entry has to be more than 30 characters</li>
<li>Ask for Andrew's feedback on best practises when using aiohttp-session</li>
</ul>
</div>
<div class="section" id="to-be-continued">
<h2>To be continued</h2>
<p>That is all the time I have to write up about the sprint. I'm heading back to
Vancouver, and will be out-of-open source for the rest of the month. But I plan
to continue with more details of some of the other projects.</p>
<p><strong>Update</strong>: <a class="reference external" href="https://mariatta.ca/core-sprint-2018-part-2.html">Part 2</a>.</p>
<p>Thanks for reading.</p>
</div>
PyCon 20182018-05-19T14:00:00-07:002018-05-19T14:00:00-07:00Mariattatag:mariatta.ca,2018-05-19:/pycon-2018.html<p>I was at PyCon from May 9 - May 15. It's my fourth PyCon US, and has been very
special to me in many ways. (Also my busiest yet!)</p>
<img alt="" src="../img/pycon2018-badge.jpg" style="width: 200px;" />
<div class="section" id="representing-zapier">
<h2>Representing Zapier</h2>
<p>Thanks Zapier for fully supporting my trip to PyCon, and for allowing me to
take the time away from work …</p></div><p>I was at PyCon from May 9 - May 15. It's my fourth PyCon US, and has been very
special to me in many ways. (Also my busiest yet!)</p>
<img alt="" src="../img/pycon2018-badge.jpg" style="width: 200px;" />
<div class="section" id="representing-zapier">
<h2>Representing Zapier</h2>
<p>Thanks Zapier for fully supporting my trip to PyCon, and for allowing me to
take the time away from work for more than a week. The significance of this, for
me personally, is that for the first time I didn't need to apply for financial
aid in order to attend PyCon.</p>
<p>With Zapier's support, I was able to stay for two days of sprints. It means
I get to contribute for open source for <strong>two full days</strong>! 😆🌮</p>
</div>
<div class="section" id="python-language-summit">
<h2>Python Language Summit</h2>
<p>I attended the Python Language Summit for the second year. This time I presented
two topics. I had planned to do a lightning talk too, but by end of the day
I was too exhausted, so no lightning talk from me.</p>
<p>The language summit was open to Python core developers, and by invitation only.
There was no recording, however there will be an article by Jake Edge from LWN.
I presented two talk topics at the language summit. I'll leave you in suspense
as you await the LWN article.</p>
<p>A little side anecdote, when I first became a Python Core Developer last year,
a couple core devs and a BDFL each told me about the language summit. And each
one of them <strong>warned</strong> me of a certain <em>incident</em> happened at the language summit in
the past. To protect the identity and the integrity of the folks involved, I won't
say what the incident was.</p>
<p>Throughout the year, I kept hearing of the same incident mentioned by several
other core devs. So I came to think of it as an urban legend.</p>
<p>Anyways...</p>
<p>There might have been two new urban legends born at Python Language
Summit 2018.</p>
</div>
<div class="section" id="tutorial">
<h2>Tutorial</h2>
<p>I gave a <a class="reference external" href="https://youtu.be/ZwvjtCjimiw">tutorial</a> at PyCon. I think it went quite well.
I definitely can be a better instructor next time, but I believe the attendees had
fun and learned many new things.</p>
<p>I wanted to thank my friends for coming and helping out at my tutorial. Many attendees
faced technical difficulties, and I would not have been able to attend to them
one by one. Really, it would not have gone as well without their help!</p>
<p>So thank you friends: Jane Williams, Matt Davis, Ned Deily, Victor Stinner,
Stéphane Wirtel, Eric V. Smith, Christian Heimes. You're all the best!
Thanks Carol Willing and Guido van Rossum for dropping by, and special thanks
Brett Cannon for the cameo!</p>
</div>
<div class="section" id="talks">
<h2>Talks</h2>
<p>I gave a talk, <a class="reference external" href="https://youtu.be/hhj7eb6TrtI">What is a Python Core Developer</a>.
Poured my heart out, and felt really good afterwards. Thank you
everyone who came to my talk, (and for the standing ovation 🙇🏻‍♀️).</p>
<p>I only managed to go to a several keynotes and talks:</p>
<ul class="simple">
<li><a class="reference external" href="https://www.youtube.com/watch?v=ITksU31c1WY">Dan Callahan's Keynote</a></li>
<li><a class="reference external" href="https://www.youtube.com/watch?time_continue=2935&amp;v=tzFWz5fiVKU">Brett Cannon's Keynote</a></li>
<li><a class="reference external" href="https://youtu.be/3kta4GB3PAw">Catherine Devlin's Keynote</a></li>
<li>Anna Ossowski: <a class="reference external" href="https://youtu.be/GmbaKdd6o6A">Flourishing FLOSS: Making Your Project Successful</a></li>
<li>Christopher Neugebauer, Josh Simmons, Sam Kitajima-Kimbrel: <a class="reference external" href="https://youtu.be/C7ZhMnfUKIA">How we designed an inclusivity-first conference on a shoestring budget and short timeline</a></li>
<li>Ned Batchelder: <a class="reference external" href="https://youtu.be/duvZ-2UK0fc">Big-O: How Code Slows as Data Grows</a></li>
</ul>
</div>
<div class="section" id="sprint">
<h2>Sprint</h2>
<p>I felt quite productive during the sprint days!!</p>
<p>Over the course of two days I made these contributions to open source:</p>
<ul class="simple">
<li>Created python/miss-islington <a class="reference external" href="https://github.com/python/miss-islington/issues/88">PR #88</a>:
Assign the failed PR to be backported to the core dev who merged it</li>
<li>Reviewed and merged python/core-workflow <a class="reference external" href="https://github.com/python/core-workflow/pull/238">PR #238</a>:
Change single quotes to double quotes in get_author_info_from_short_sha to fix error in Windows</li>
<li>Reviewed and merged python/devguide <a class="reference external" href="https://github.com/python/devguide/pull/363">PR #363</a>:
fix: fixed typo in the setup dev guide</li>
<li>Reviewed and merged python/cpython <a class="reference external" href="https://github.com/python/cpython/pull/6609">PR #6609</a>:
bpo-22069: Flush is implied also when write contains a carriage return</li>
<li>Reviewed python/cpython <a class="reference external" href="https://github.com/python/cpython/pull/142">PR #142</a>:
bpo-1025395: Fix email.utils.parseaddr to handle multiple hops</li>
<li>Reviewed python/cpython <a class="reference external" href="https://github.com/python/cpython/pull/6883">PR #6883</a>
bpo-21475: Support the Sitemap extension in robotparser</li>
<li>Created pycqa/pylint <a class="reference external" href="https://github.com/PyCQA/pylint/pull/2091">PR #2091</a>:
Add a new check: <cite>logging-fstring-interpolation</cite></li>
<li>Created pycqa/pylint <a class="reference external" href="https://github.com/PyCQA/pylint/pull/2092">PR #2092</a>:
Fix weird indentation in contributing guide</li>
<li>Created python/devguide <a class="reference external" href="https://github.com/python/devguide/pull/362">PR #362</a>:
Add link to zulipchat in communications page</li>
<li>Released <a class="reference external" href="https://pypi.org/project/cherry-picker/">cherry_picker v1.1.1</a> to PyPI.</li>
<li>Discussed the documentation for PEP 557 with Eric V. Smith and Ned Deily.</li>
</ul>
<p>I slacked off too!</p>
<p>I still found time to chat and gossip with other folks during the sprint days.
Thanks Ned Batchelder, Anna Ossowski, Jeff Triplett, Ernest W. Durbin III, and Guido
van Rossum for being available and lending their ears.</p>
</div>
<div class="section" id="regret">
<h2>Regret</h2>
<p>I had wanted to help writing the documentation for PEP 557, the dataclasses module.
In the end I was not able to help with anything. Thank you Eric V. Smith for
writing up the proper documentation. Check it out <a class="reference external" href="https://docs.python.org/3.7/library/dataclasses.html">here</a>.</p>
<p>Eric also gave me a crash course of the dataclasses module. No better way to
learn about it from the creator himself!</p>
</div>
<div class="section" id="rainbow-roses">
<h2>Rainbow Roses</h2>
<p>I ordered a dozen rainbow roses to be delivered to my hotel room. They're very
lovely. I think I will make this a new ritual. 🌹💐</p>
<p>One of the roses didn't make it, that's why there are only eleven in the photo. 😛</p>
<img alt="" src="../img/pycon2018-rainbowroses.jpg" style="width: 400px;" />
</div>
<div class="section" id="poison">
<h2>Poison</h2>
<p>In total, I had 11 shots of tequila over the period of 7 days. Eric Holscher
started to make a comment about it and James Bond and martini... 🤐
<em>I'm much less exciting than James Bond!!</em></p>
<p>At dinner one evening with Victor and Guido, I didn't see tequila on the menu.
So we ended up with this cute drink that has only 12% alcohol. 😭</p>
<img alt="" src="../img/pycon2018-cutedrink.jpg" style="width: 400px;" />
</div>
<div class="section" id="wat">
<h2>Wat?</h2>
<ul class="simple">
<li>Dave Beazley included <cite>&gt;&gt;&gt;F&quot;Yes!&quot;</cite> in his <a class="reference external" href="https://twitter.com/loooorenanicole/status/995343478015102976">talk slides</a>.
I didn't realize that he'd been reading my tweets. 🤭</li>
<li>The number of people who proudly wore their PyCascades t-shirt at PyCon truly amazed me.
Thank you!!!
🙇🏻‍♀️</li>
<li>All the folks who said hi and told me that they know me by reputation...
🙇🏻‍♀🙇🏻‍♀🙇🏻‍♀🙇🏻‍♀</li>
</ul>
</div>
<div class="section" id="photos">
<h2>Photos</h2>
<p>Other favorite memories from PyCon 2018.</p>
<ul>
<li><p class="first">The dessert at PyLadies lunch (on Mother's Day).</p>
<img alt="" src="../img/pycon2018-pyladieslunch.jpg" style="width: 400px;" />
</li>
<li><p class="first">PyCascades founders, 4 out of 6: Sebastian Vetter, Don Sheu, Eric Holscher, and myself.</p>
<img alt="" src="../img/pycon2018-pycascades.jpg" style="width: 400px;" />
</li>
<li><p class="first">Met up with my brother and we ate lots of seafood at
<a class="reference external" href="www.boilingseafoodcrawfishoh.com">Boiling Seafood Crawfish</a>.</p>
<img alt="" src="../img/pycon2018-seafood.jpg" style="width: 400px;" />
</li>
<li><p class="first">I didn't recognized my hero at first (never met him in person until PyCon), but he
recognized me. 🙈</p>
<img alt="" src="../img/pycon2018-hero.jpg" style="width: 400px;" />
</li>
<li><p class="first">Python Language Summit chairs handover/initiation meeting.</p>
<img alt="" src="../img/pycon2018-languagesummitchairs.jpg" style="width: 400px;" />
</li>
<li><p class="first">My luggage was searched by the TSA. 🛃 #PyNutella</p>
<img alt="" src="../img/pycon2018-pynutella.jpg" style="width: 400px;" />
</li>
</ul>
</div>
<div class="section" id="until-next-time">
<h2>Until next time</h2>
<p>I tried to include as many memories as I can into this post, but I'm unable to include
everything. 😥</p>
<p>I got to chat and met with many many more people: all the Python Core Developers,
Python BDFL, open source project maintainers, PyLadies members, speakers, and various members
of this community. It's been inspiring and I learned a lot from all of you.</p>
<p>PyCon 2018 had been very very busy, intense, special, and lovely. Thank
you organizers, volunteers, sponsors, and all the wonderful Python community for these memories.</p>
<p>🌮</p>
</div>
#IceCreamSelfie at PyCon US 2018, Cleveland2018-05-13T19:54:00-07:002018-05-13T19:54:00-07:00Mariattatag:mariatta.ca,2018-05-13:/ics-pyconus-2018.html<p>At <a class="reference external" href="https://mitchellshomemade.com/">Mitchell's Homemade Ice Cream</a> in Cleveland, May 2018.</p>
<img alt="" src="../img/ics-pyconus-2018.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="https://mitchellshomemade.com/">Mitchell's Homemade Ice Cream</a> in Cleveland, May 2018.</p>
<img alt="" src="../img/ics-pyconus-2018.jpg" style="width: 200px;" />
Hiatus2018-05-01T11:20:00-07:002018-05-01T11:20:00-07:00Mariattatag:mariatta.ca,2018-05-01:/hiatus.html<p>For the whole month of April, I made a personal goal to take a break from
participating in open source and the community.</p>
<p>First of all, thank you to everyone who gave me lots of moral support about this!</p>
<p>I felt kind of guilty at first. I was worried if …</p><p>For the whole month of April, I made a personal goal to take a break from
participating in open source and the community.</p>
<p>First of all, thank you to everyone who gave me lots of moral support about this!</p>
<p>I felt kind of guilty at first. I was worried if my non-activity would mean
that other Python core devs will have to pick up the slack.</p>
<p>But let's give more credit to the core devs! Python has flourished for 20+ years
without my involvement. One month without me is fine.</p>
<div class="section" id="i-still-did-some-volunteering">
<h2><strong>I still did some volunteering</strong> 😥</h2>
<p>Some of these I sort of anticipated, many were unexpected.</p>
<p><strong>Released cherry_picker v1.1.0</strong></p>
<p>I had offered to help Andrew Svetlov with building a GitHub bot similar to
<a class="reference external" href="https://github.com/python/miss-islington">miss-islington</a>, but for maintaining
<a class="reference external" href="https://github.com/aio-libs/aiohttp">aiohttp</a>. Part of the work
needed to be done is to make cherry_picker customizable for other projects.
Andrew had made the necessary code changes, but there was one small bug.
All I needed to do was <a class="reference external" href="https://github.com/python/core-workflow/pull/233">review the PR</a>,
approve it, and publish the fix to PyPI. It didn't take
too much of my time, so I was quite happy to do it.</p>
<p><strong>Shadowed Larry and Barry</strong></p>
<p>This might sound cryptic, but I'll leave it at that for now. I'm also not quite
sure how it came to be, but this was something the BDFL asked me
to do. Who am I to say no?</p>
<p><strong>Organized a PyLadies Vancouver meetup</strong></p>
<p>I was hoping my co-organizers could take care of this for me, and I wished I
didn't have to be involved. But we were having trouble finding a sponsor who would
host our April meetup. (I will rant about this in detail some other time).</p>
<p>We reached out to at least five companies, and even tried booking a free meeting room
at Vancouver Public Library. Our requests were either denied or ignored.</p>
<p>I asked other meetup organizers and several Python friends in town for help. In
the end, we pushed the event to <a class="reference external" href="https://www.meetup.com/PyLadies-Vancouver/events/249657234/">May</a>,
and <a class="reference external" href="https://twitter.com/CiscoSecurity">Cisco</a> stepped up to host.</p>
<p><strong>Got myself invited to yet another community Slack channel</strong></p>
<p>Related to our difficulty with finding a meetup venue, the experience
prompted me to reach out to the other meetup organizers in town. One group
I talked to called themselves the Gastown Gang. Previously, they had lured me in with
promises of pasta. 🍝😋</p>
<p>No pasta yet, but we had been talking about a new initiative for shared
resources among the local meetup communities in Vancouver,
how things can be more transparent and open, and how the different communities
can help and support each other. Somehow this ended with me joining a new community
Slack team. 😛</p>
<p><strong>Volunteered to write the docs for PEP 557: Data Classes</strong></p>
<p>I had <a class="reference external" href="https://bugs.python.org/issue32216">volunteered</a> to do it a couple
months ago, but never got around doing anything. After a gentle ping from an
eager member of the community, I emailed Eric and Raymond to see if we could
sprint on this at PyCon.</p>
<p><strong>I engaged with the community, on Twitter</strong></p>
<p>Ok maybe <em>engaged</em> was not the right word. More like, ... <em>provoked</em>?</p>
<p>I expressed my <a class="reference external" href="https://twitter.com/mariatta/status/987450414298685440">extreme disappointment</a>
to the community. I knew the risks and the repercussions for speaking up about
diversity issues. But I did it anyway.</p>
<p>And then the twitter broke. I mean, the twitter <em>on my phone</em> broke.</p>
<p>After having to block three people, I deleted the app for the rest of the month.</p>
<p><strong>Read up about PEP 572</strong></p>
<p>Several Python core devs told me about this PEP, so I read some of
the python-dev emails about it. <em>Keeping personal opinions to myself</em>. 🤐</p>
</div>
<div class="section" id="i-really-did-take-time-off">
<h2><strong>I really DID take time off!</strong></h2>
<p>Other than Andrew's PR, I didn't review any other pull requests.</p>
<p>Did not read any mailing list emails, except that one thread about PEP 572.</p>
<p>Did not follow any issues in the bug tracker, except for <a class="reference external" href="https://bugs.python.org/issue3692">bpo-3692</a>. But that was raised at work, so I don't
consider it as volunteering.</p>
<p>I read Twitter only for my own notifications, mentions, and direct messages,
up until the weekend where my twitter broke.</p>
<p>What did I do for my own me time?</p>
<p><strong>Put in extra effort for my work at Zapier</strong></p>
<p>I got a couple new features shipped! 🌮 They're documented
<a class="reference external" href="https://zapier.com/developer/documentation/v2/partner-api/#paging-through-results-using-limit-and-offset">here</a>
and <a class="reference external" href="https://zapier.com/developer/documentation/v2/shared-zaps-test-trigger/#embed-widget-faq">there</a>. 😄
I'm working on a new feature, wanted by several partners. Stay tuned!</p>
<p><strong>Netflix and ...</strong></p>
<p>🤭 Eh, ... I watched a lot of shows on Netflix: All 3 seasons of Hannibal, Lucky
Number Slevin, and Troy: Fall of a City.</p>
<p><strong>Played Ramen Sensei on my phone</strong> 🍜</p>
<p>I'm still under the delusion that I can successfully run a ramen shop if I ever
need to leave tech.</p>
<p><strong>Went to my oldest son's first piano recital</strong> 🎹</p>
<p>He did great! 😊</p>
<p><strong>Worked on my GitHub Bot tutorial</strong></p>
<p>I spent two weekend afternoons to work on the tutorial. While I open-sourced
the material, I don't count this as a <em>volunteer</em> work since I'll be getting paid
for it at PyCon. Thanks to Brett who reviewed it.</p>
<p><strong>Investigated if we could get a pet turtle</strong></p>
<p>Let's not tell my kids about this. After one afternoon of reading how to care
for a pet turtle, I realized I don't really want additional responsibilities.</p>
<p><strong>Watched My Little Pony</strong></p>
<p>My kids are into My Little Pony these days. Not something I'm familiar with. I'm
still learning all the ponies' name.</p>
<p><strong>Did my taxes</strong></p>
<p>Procrastinated doing it until pretty much the final day.</p>
</div>
<div class="section" id="stuff-i-wanted-to-do-but-didn-t">
<h2><strong>Stuff I wanted to do, but didn't</strong></h2>
<ul class="simple">
<li>I had been working on a <a class="reference external" href="https://github.com/pypa/warehouse/pull/3306">pull request for Warehouse</a>. I was planning
to find some time to finish it up, but didn't. 😥</li>
<li>I've been wanting to do at least some kind of cooking, baking, try out new recipe,
or at least make a batch of handmade noodles. None of that happened. 😕</li>
<li>My review was requested for a <a class="reference external" href="https://github.com/python/core-workflow/pull/238">bugfix PR</a>
to cherry_picker. I still haven't looked at it. 😔</li>
</ul>
</div>
<div class="section" id="happiness">
<h2><strong>Happiness</strong></h2>
<ul class="simple">
<li>I received a happiness packet. Thanks Anna. 💖</li>
<li>Met up with my friends <a class="reference external" href="https://twitter.com/mariatta/status/986368161690759168">Seb and Dan</a>.
We chatted about the community, about PyCon, and, of course, about how awesome f-strings are.
I also got Dan to <a class="reference external" href="https://twitter.com/mariatta/status/986360574450651136">autograph</a> my copy of his
book! 🤩</li>
<li>Received compliments about miss-islington and my GitHub Bot tutorial.
Thanks <a class="reference external" href="https://twitter.com/nicoddemus/status/980963184189329408">Bruno</a>
and <a class="reference external" href="https://twitter.com/webology/status/985167199043235842">Jeff</a>. 😊</li>
<li>Found out that my tutorial at PyCon is now full! 😳️</li>
<li>Thankful for the supportive Python community. 💖</li>
</ul>
</div>
<div class="section" id="what-now">
<h2><strong>What now</strong></h2>
<p>I miss getting involved in open source, and being part of the community. But I
have other priorities for the moment.</p>
<p>I'm still wanting a break from contributing to open source for another month,
except when I'm at PyCon for the sprints.</p>
<p>I will however, start getting involved in my local Python community again.
I need to follow up with Gastown Gang, and start planning the next PyLadies Vancouver
meetups.</p>
<p>I'm so looking forward to PyCon! Can't wait for my next ice cream selfie!</p>
</div>
<div class="section" id="things-to-improve">
<h2><strong>Things to improve</strong></h2>
<p>The past month still felt busier than I wanted to. I'm still thinking up better
ways to do this. 😥</p>
<p><strong>Better Gmail filters</strong></p>
<p>I needed to adjust the email filters several times to get it right. I think
it is still not optimal. Some emails from GitHub and b.p.o were still going through.</p>
<p>Some important emails got missed, because the sender uses an email system that always
include the word &quot;unsubscribe&quot;. 🤷🏻‍♀️</p>
<p><strong>Delete twitter on my phone</strong></p>
<p>I should have done it from the get go. I should not even bother with
checking my mentions or direct messages. It got me into trouble.</p>
<p><strong>O-O-OS autoreply GitHub bot</strong></p>
<p>I was thinking it might be cool to have my own out-of-open source autoreply GitHub
bot. For example if someone mentions me or requested review from me, the bot can
respond on my behalf and let people know that I won't get to it for a while,
so they can find someone else. But I'm worried it'll just add noise to the thread.
More design is needed.</p>
<p><strong>Choose a different month</strong></p>
<p>I'll definitely do this again next year. Question is, which month? 😅</p>
<p>I'm learning now that the months before and during PyCon are busy times of the year for
a Python core developer. Same as any month where there's a scheduled release it seems.</p>
<p>Will it be so irresponsible if I choose to be off during those months?
And do I need to co-ordinate with other core devs so we don't all go on a
break at the same time?</p>
<p><em>Why is this so complicated?</em> 🙃</p>
</div>
20172017-12-31T11:00:00-08:002017-12-31T11:00:00-08:00Mariattatag:mariatta.ca,2017-12-31:/reflections-2017.html<ol class="arabic simple" start="2017">
<li>What a year. There might not be another year quite like this one for me.</li>
</ol>
<p>A number of highlights, but some low points too. Net positive, I think.</p>
<p>It's been ... busy. I want to be less busy in 2018.</p>
<p>Back in January, my only wish for this year was to …</p><ol class="arabic simple" start="2017">
<li>What a year. There might not be another year quite like this one for me.</li>
</ol>
<p>A number of highlights, but some low points too. Net positive, I think.</p>
<p>It's been ... busy. I want to be less busy in 2018.</p>
<p>Back in January, my only wish for this year was to get my talk accepted at PyCon US.
<em>That would be this year's highlight.</em></p>
<p>Instead, a lot of things happened. Mostly good things.</p>
<p>Writing all of these down, as a therapy for myself.</p>
<div class="section" id="pycascades">
<h2>PyCascades</h2>
<p>Got an email from my friend Seb one morning, talked about organizing a Python
conference in the Pacific Northwest.</p>
<p>I didn't think twice before saying yes.</p>
<p>I just thought that a Python conference in this part of the world will be great
for the growing Python community here. And it wasn't going to happen on its own.
A person wouldn't be able to do it alone. But a group of people all sharing
the same ideals? It could work.</p>
<p>I had no clue what it's going to involve. I got introduced to the other folks:
Don, Alan, Bryan, and Eric. Don and Alan have build a huge Python community
in Seattle. Eric organizes Write The Docs conference. <em>They know what
they're doing.</em></p>
<p>We chose a name: PyCascades. First one's in Vancouver.
Started looking for a venue. It's happening.</p>
<p>Organizing PyCascades has been very challenging. Perhaps one day I'll write more
about the challenges. I'm just really proud that I get to be part of it. Lucky
that I get to be part of it.</p>
</div>
<div class="section" id="pycon-talk-acceptance">
<h2>PyCon talk acceptance</h2>
<p>At about the same time that we started organizing PyCascades, I was notified
that my talk was accepted at PyCon. I couldn't believe it! I read the email
again and again. It felt amazing! It was like a dream come true! I must have told
everyone I knew about it.</p>
<p>And then I got scared. <strong>I'm going to be give a non-technical talk at PyCon.</strong>
Maybe nobody will show up for my talk. Maybe people showed up and then be disappointed.</p>
<p>Negative thoughts creeping in. Booked a session with my therapist.</p>
</div>
<div class="section" id="djangocon-europe-talk-acceptance">
<h2>DjangoCon Europe talk acceptance</h2>
<p>Still reveling and freaking out about PyCon, I found out that I've been
accepted to speak at DjangoCon Europe. Florence! I had never been to Europe!
Of course I accepted. My employer wasn't going to sponsor my trip. Submitted
my vacation request. Thanks to DjangoCon Europe's financial aid, I could actually
afford to go.</p>
</div>
<div class="section" id="new-python-core-developer">
<h2>New Python Core Developer</h2>
<p>I knew I was going to get busy for the first half of the year. And it was only January.</p>
<p>Then, a life-changing event happened.</p>
<p>My mentor, Raymond, messaged me. &quot;I have good news for you&quot;, he said.
&quot;I nominated you for core-dev privileges.&quot;</p>
<p>😱</p>
<p>&quot;Are you sure I'm ready for this?&quot;, I asked.</p>
<p>&quot;Not to worry, I'll be responsible for your commits for a while. I'll continue
to mentor, help, and cheer you along the way. You'll be an important part of the
project.&quot;</p>
<p>😱</p>
<p>Core-dev privileges? What are they? What does it even mean, to be a Python Core
Developer? I guess, technically, somewhere, there's going to be a boolean flag
getting flipped. It's got to be more than that. The commit bit, comes with
special super power. With power, comes responsibility. Right? <em>Right?</em> Except
I had no idea.</p>
<p>I chatted with my other mentor, Guido.</p>
<p>&quot;Raymond nominated me to be a core dev. What do you think? 'cause I'm not sure I'm
ready for this&quot;.</p>
<p>&quot;Ah, you'll grow into the role.&quot;, he dismissed my concerns.
&quot;It will be good for Python to have you.&quot;</p>
<p>😱</p>
<p><em>Sure about this??</em></p>
<p>Excited. Happy. Scared. Anxious. All at once.</p>
<p><em>I didn't even know how to feel!</em></p>
<p>The next day, there's a new entry in the Dev Guide of a new Python Core Developer.</p>
<p>My life changed that day.</p>
</div>
<div class="section" id="more-talk-acceptance">
<h2>More talk acceptance</h2>
<p>Spring time. Got my talk accepted at several other conferences.
I'd love to go to all of them, but my work wouldn't sponsor. It would mean that
I'll have to go on my own dime and take personal time off. I couldn't afford to go.
And I really should go on vacations with my husband and kids instead of traveling by myself.</p>
<p>I said no to most of them. I thought I'd be done speaking for the rest of the year
after PyCon US. But then I then I decided to speaking at PyCon Australia.</p>
<p>And I went to Australia for the first time.</p>
</div>
<div class="section" id="broken">
<h2>Broken</h2>
<p>Between PyCon US and PyCon Australia, I started applying for a new job again.
One rejection email after another. I ignored those emails. I needed to focus
on giving a new talk.</p>
<p>Gave my talk, a talk about f-strings. I felt good about it. Now that it's done, I
finally have time to ponder about those rejection emails.</p>
<p>I sat all alone in my hotel room in Melbourne. I thought about what I wanted to
do next.</p>
<p>I still wanted to get a new job. I suppose I should learn from my failures and
try to do better at the next interviews. So I read those emails again. I had asked
the recruiters if they have specific feedback of what I could improve.</p>
<p><em>after reviewing your code, we don’t think you’re exactly the right fit for our role</em>.</p>
<p>How could they even determine this simply by looking at my code?
I guess this is just a generic message they send to everyone who failed. They
wouldn't even bother with giving me an honest feedback.</p>
<p>Another reject email, dated July 17.</p>
<pre class="literal-block">
... we don't think it makes sense to move forward
right now- primarily because we want to see continued growth in your technical skills.
However, we are really impressed with you overall and think you'd be a great culture
fit for &lt;company&gt;. Please keep us in mind and reach out if you'd like to enter the
process again in 1-2 years - we'd love to talk with you then.
</pre>
<p>What. Is. This.</p>
<p><em>we want to see continued growth in your technical skills.</em></p>
<p>What the f--- have I been doing in the last 15 years, if not that? What else do
I need to do?</p>
<p>I was lost. I didn't know what else I could do to be better at the next interview.
I keep trying to find a lesson to be learned out of this. And I could not.</p>
<p>I think it's not technical skill that I lacked. I don't know what they want.
After all these years, I'm still not good enough.</p>
<p>I broke down. Buried my face in the pillow. Cried myself to sleep.</p>
<p>Next morning came. Took a shower. Negative thoughts.</p>
<p>Looked at the time. It's time to get going.</p>
<p>Wiped my tears and washed my face one more time.</p>
<p>Still unable to find any positivity. No light. Only darkness.</p>
<p>I got to the sprint venue. Wrote some code. Replied to emails.
Tried to forget everything. I uploaded <a class="reference external" href="https://github.com/Mariatta/tic_tac_taco_pizza">tic tac taco pizza</a> to PyPI.</p>
<p><em>One of the most useless thing to be in PyPI</em>. Didn't matter. For once, I
wrote code for myself. My kids would love it though.</p>
<p>Katie came over and showed me that she installed tic tac taco pizza and had
played it. Thank you Katie.</p>
<p>I then went on a road trip with Trey. The Great Ocean Road trip. It was great.
I saw the ocean. I love the ocean.</p>
<p><em>All of my sadness, taken by the sea ...</em></p>
</div>
<div class="section" id="python-core-sprint">
<h2>Python Core Sprint</h2>
<p>September. 20 core devs got together for a week. Facebook and The PSF sponsored my trip.
I had a great time. Really enjoyed meeting other core devs and spent time with them.
Because I had spent all of my vacation days, I was only able to be at the sprint
for 3 days instead of the full week. Lame. Wished I could have stayed longer.</p>
<p>Most of the core devs worked on CPython. New PEPs being discussed. Ezio worked
on the Dev Guide.</p>
<p>I made <a class="reference external" href="https://github.com/python/miss-islington">miss-islington</a>, a
GitHub bot to backport changes from master to the other
maintenance branches. We needed this bot since we moved to GitHub months ago.
So far it has backported more than 300 pull requests.</p>
</div>
<div class="section" id="picking-up-the-pieces">
<h2>Picking up the pieces</h2>
<p>I thought that I was done for the year. Time to take a break.
Time to catch up on things I'd put off earlier.</p>
<p>Mike wanted me to write for <a class="reference external" href="https://www.blog.pythonlibrary.org/2017/09/25/pydev-of-the-week-mariatta-wijaya/">PyDev of the Week</a>
since a couple months ago. Finally got around doing it.</p>
<p>I became a guest at <a class="reference external" href="http://castalio.info/episodio-114-mariatta-wijaya-cpython.html">Castalio Podcast</a>.
I had a lot of fun. I laughed a lot during the interview!</p>
<p>Dan asked me to write the foreword for <a class="reference external" href="https://dbader.org/products/python-tricks-book/">his book</a>.
Thanks Dan for this opportunity.</p>
<p>PyLadies Vancouver members wanted a workshop about Python Packaging. I thought
of Brett. Brett helped me publish <a class="reference external" href="http://pypi.org/project/cherry-picker">something</a> to PyPI for the first time ever.
Asked Brett if he could give a <a class="reference external" href="https://www.meetup.com/PyLadies-Vancouver/events/243207518/">workshop</a>.
He agreed. Thanks Brett.</p>
<p><a class="reference external" href="https://2017.pycon.ca/">PyCon Canada</a> asked me to give a keynote. What an honor.</p>
<p>Two different friends wanted to nominate me for some kind of <a class="reference external" href="https://www.redhat.com/en/about/women-in-open-source">award</a>.
Wow! Thanks Gloria and Victor. Don't think I stack up against the other nominees
but it meant a lot that you both thought of me.</p>
<p>Gregory nominated me for <a class="reference external" href="https://opensource.googleblog.com/2017/10/more-open-source-peer-bonus-winners.html">Google Open Source Peer Bonus</a> award. That felt great.
Thanks Gregory.</p>
</div>
<div class="section" id="new-family-doctor">
<h2>New Family Doctor</h2>
<p>My family doctor no longer practicing. So I met with a new doctor. He reviewed
my medical history.</p>
<p>&quot;I see here you have <em>mood swings</em>?&quot;</p>
<p>Perhaps he didn't want to say the dirty word in front of my kids.</p>
<p>But it should not be a dirty word. They probably won't understand it now.
In that split moment I decided that I wanted my kids to hear it.
That this is something we can talk about, openly.</p>
<p>&quot;I have depression. And anxieties. Come and go in waves.&quot;</p>
<p>&quot;Do you take medication?&quot;</p>
<p>&quot;No. Trying to manage it by seeing a therapist.&quot;</p>
<p>&quot;That's good. But come to me if you need medication.&quot;</p>
<p>I hope I never need to.</p>
</div>
<div class="section" id="quitting">
<h2>Quitting</h2>
<p>I was ready to give up hope and to remain the my current job. A job that was no
longer satisfying. I tried leaving, but had no where else to go.</p>
<p>Three different people had told me about this other company. <em>Great culture, great people. Give it a try!</em>.</p>
<p>I really didn't think I could handle yet another rejection.</p>
<p>I got tired of trying.</p>
<p><em>For the last time</em>. That's what I said the time before. For real this time.</p>
<p>They seemed really nice and friendly. <em>&quot;Great people, great culture.&quot;</em> Will I
belong?</p>
<p>They offered me the job. The next day I gave my notice.</p>
<p>&quot;Anything we can do to keep you here?&quot;</p>
<p>I guess I could have asked for more money? For the promotion they denied me earlier?</p>
<p><em>Don't make me beg for things.</em></p>
<p>&quot;Thank you. But I'm leaving.&quot;</p>
<p>My heart is someplace else now.</p>
</div>
<div class="section" id="reflecting-back">
<h2>Reflecting back</h2>
<p>Almost a year since I became a Python Core Developer. Still not sure what
it really means to be a core dev. <em>&quot;What is it like?&quot;</em> Busy. <em>&quot;How can I become a core dev too?&quot;</em>
I dunno. I got lucky. <em>&quot;How much time do you spend contributing?&quot;</em> Way too much time.</p>
<p>I really made lots of contributions to open source and to Python this year.
Wrote a lot of documentation. Wrote some code. Made more than 600 pull requests.
Also reviewed a lot of them. Wrote &quot;Thanks and congrats on your first
contribution to CPython&quot; many many times.</p>
<p>That shiny green &quot;Squash and merge&quot; button is no longer intimidating.
&quot;You can always revert things.&quot;, Brett said early on.
&quot;Don't worry, you won't be breaking Python.&quot;</p>
<p>😱</p>
<p>One time I thought I had erased the entire history of Python.</p>
<p>😱</p>
<p>I did not. But I really thought I did. Longest 10 minutes of my life.</p>
<p>I learned how to revert things on GitHub.</p>
<p>A lot of things happened this year.</p>
<p>Some good. Some bad.</p>
<p>Net positive.</p>
<p>2018? I only have one wish: that my tutorial gets accepted at PyCon.</p>
<p>Hmm, that sounds familiar ...</p>
</div>
#IceCreamSelfie at PyCon CA 2017, Montréal2017-11-20T11:35:00-08:002017-11-20T11:35:00-08:00Mariattatag:mariatta.ca,2017-11-20:/ics-pyconca-2017.html<p>At <a class="reference external" href="https://www.facebook.com/LaCabaneDeDanny/">La Cabane De Danny</a> in Montréal, November 2017. Bubble waffle with
vanilla and matcha ice cream. Never seen it anywhere else before! 😋🍦🤳</p>
<img alt="" src="../img/ics-pyconca-2017.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="https://www.facebook.com/LaCabaneDeDanny/">La Cabane De Danny</a> in Montréal, November 2017. Bubble waffle with
vanilla and matcha ice cream. Never seen it anywhere else before! 😋🍦🤳</p>
<img alt="" src="../img/ics-pyconca-2017.jpg" style="width: 200px;" />
#IceCreamSelfie at PyCon Australia 2017, Melbourne2017-10-23T10:40:00-07:002017-10-23T10:40:00-07:00Mariattatag:mariatta.ca,2017-10-23:/ics-pyconau-2017.html<p>At <a class="reference external" href="http://www.milkcow.com.au/">Milkcow Australia</a> in Melbourne, August 2017.</p>
<img alt="" src="../img/ics-pyconau-2017.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="http://www.milkcow.com.au/">Milkcow Australia</a> in Melbourne, August 2017.</p>
<img alt="" src="../img/ics-pyconau-2017.jpg" style="width: 200px;" />
#IceCreamSelfie at PyCon US 2017, Portland2017-10-23T10:35:00-07:002017-10-23T10:35:00-07:00Mariattatag:mariatta.ca,2017-10-23:/ics-pyconus-2017.html<p>At <a class="reference external" href="http://www.whatsthescooppdx.com/">What's the Scoop PDX</a> in Portland, May 2017.</p>
<img alt="" src="../img/ics-pyconus-2017.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="http://www.whatsthescooppdx.com/">What's the Scoop PDX</a> in Portland, May 2017.</p>
<img alt="" src="../img/ics-pyconus-2017.jpg" style="width: 200px;" />
#IceCreamSelfie at DjangoCon Europe and PyCon Italy 2017, Florence, Italy2017-10-23T10:30:00-07:002017-10-23T10:30:00-07:00Mariattatag:mariatta.ca,2017-10-23:/ics-italy-2017.html<p>Somewhere in Florence, April 2017.</p>
<img alt="" src="../img/ics-florence-2017.jpg" style="width: 200px;" />
<p>Somewhere in Florence, April 2017.</p>
<img alt="" src="../img/ics-florence-2017.jpg" style="width: 200px;" />
#IceCreamSelfie at PyCaribbean 2017, Puerto Rico2017-10-23T10:25:00-07:002017-10-23T10:25:00-07:00Mariattatag:mariatta.ca,2017-10-23:/ics-pycaribbean-2017.html<p>At <a class="reference external" href="https://sanjuanpuertorico.com/condado-beach/">Condado Beach</a> in Puerto Rico, February 2017.</p>
<img alt="" src="../img/ics-pycaribbean-2017.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="https://sanjuanpuertorico.com/condado-beach/">Condado Beach</a> in Puerto Rico, February 2017.</p>
<img alt="" src="../img/ics-pycaribbean-2017.jpg" style="width: 200px;" />
#IceCreamSelfie at DjangoCon US 2016, Philadephia2017-10-23T10:20:00-07:002017-10-23T10:20:00-07:00Mariattatag:mariatta.ca,2017-10-23:/ics-djangoconus-2016.html<p>At <a class="reference external" href="http://www.capogirogelato.com/">Capogiro Gelato</a> in Philadelphia, July 2016.</p>
<img alt="" src="../img/ics-djangoconus-2016.jpg" style="width: 200px;" />
<p>At <a class="reference external" href="http://www.capogirogelato.com/">Capogiro Gelato</a> in Philadelphia, July 2016.</p>
<img alt="" src="../img/ics-djangoconus-2016.jpg" style="width: 200px;" />