skip to navigation
skip to content

Planet Python

Last update: July 15, 2020 07:46 AM UTC

July 15, 2020


Codementor

How should I start learning Python

After you have made up your mind that you are going with Python, Here are certain steps that I followed to get started with it and I am sure it will work out for anybody,

July 15, 2020 06:55 AM UTC


Mike Driscoll

Python 101 – Creating Multiple Processes

Most CPU manufacturers are creating multi-core CPUs now. Even cell phones come with multiple cores! Python threads can’t use those cores because of the Global Interpreter Lock. Starting in Python 2.6, the multiprocessing module was added which lets you take full advantage of all the cores on your machine.

In this article, you will learn about the following topics:

This article is not a comprehensive overview of multiprocessing. The topic of multiprocessing and concurrency in general would be better suited in a book of its own. You can always check out the documentation for the multiprocessing module if you need to here:

Now, let’s get started!

Pros of Using Processes

There are several pros to using processes:

Now let’s look at some of the cons of processes!

Cons of Using Processes

There are also a couple of cons to using processes:

Now let’s learn how to create a process with Python!

Creating Processes with multiprocessing

The multiprocessing module was designed to mimic how the threading.Thread class worked.

Here is an example of using the multiprocessing module:

import multiprocessing
import random
import time


def worker(name: str) -> None:
    print(f'Started worker {name}')
    worker_time = random.choice(range(1, 5))
    time.sleep(worker_time)
    print(f'{name} worker finished in {worker_time} seconds')

if __name__ == '__main__':
    processes = []
    for i in range(5):
        process = multiprocessing.Process(target=worker, 
                                          args=(f'computer_{i}',))
        processes.append(process)
        process.start()
        
    for proc in processes:
        proc.join()

The first step is to import the multiprocessing module. The other two imports are for the random and time modules respectively.

Then you have the silly worker() function that pretends to do some work. It takes in a name and returns nothing. Inside the worker() function, it will print out the name of the worker, then it will use time.sleep() to simulate doing some long-running process. Finally, it will print out that it has finished.

The last part of the code snippet is where you create 5 worker processes. You use multiprocessing.Process(), which works pretty much the same way as threading.Thread() did. You tell Process what target function to use and what arguments to pass to it. The main difference is that this time you are creating a list of processes. For each process, you call its start() method to start the process.

Then at the end, you loop over the list of processes and call its join() method, which tells Python to wait for the process to terminate.

When you run this code, you will see output that is similar to the following:

Started worker computer_2
computer_2 worker finished in 2 seconds
Started worker computer_1
computer_1 worker finished in 3 seconds
Started worker computer_3
computer_3 worker finished in 3 seconds
Started worker computer_0
computer_0 worker finished in 4 seconds
Started worker computer_4
computer_4 worker finished in 4 seconds

Each time you run your script, the output will be a little different because of the random module. Give it a try and see for yourself!

Subclassing Process

The Process class from the multiprocessing module can also be subclassed. It works in much the same way as the threading.Thread class does.

Let’s take a look:

# worker_thread_subclass.py

import random
import multiprocessing
import time

class WorkerProcess(multiprocessing.Process):

    def __init__(self, name):
        multiprocessing.Process.__init__(self)
        self.name = name

    def run(self):
        """
        Run the thread
        """
        worker(self.name)

def worker(name: str) -> None:
    print(f'Started worker {name}')
    worker_time = random.choice(range(1, 5))
    time.sleep(worker_time)
    print(f'{name} worker finished in {worker_time} seconds')

if __name__ == '__main__':
    processes = []
    for i in range(5):
        process = WorkerProcess(name=f'computer_{i}')
        processes.append(process)
        process.start()

    for process in processes:
        process.join()

Here you subclassmultiprocess.Process() and override itsrun() method.

Next, you create the processes in a loop at the end of the code and add it to a process list. Then to get the processes to work properly, you need to loop over the list of processes and call join() on each of them. This works exactly as it did in the previous process example from the last section.

The output from this class should also be quite similar to the output from the previous section.

Creating a Process Pool

If you have a lot of processes to run, sometime you will want to limit the number of processes that can run at once. For example, let’s say you need to run 20 processes but you have a processor with only 4 cores. You can use the multiprocessing module to create a process pool that will limit the number of processes running to only 4 at a time.

Here’s how you can do it:

import random
import time

from multiprocessing import Pool


def worker(name: str) -> None:
    print(f'Started worker {name}')
    worker_time = random.choice(range(1, 5))
    time.sleep(worker_time)
    print(f'{name} worker finished in {worker_time} seconds')

if __name__ == '__main__':
    process_names = [f'computer_{i}' for i in range(15)]
    pool = Pool(processes=5)
    pool.map(worker, process_names)
    pool.terminate()

In this example, you have the same worker() function. The real meat of the code is at the end where you create 15 process names using a list comprehension. Then you create a Pool and set the total number of processes to run at once to 5. To use the pool, you need to call the map() method and pass it the function you wish to call along with the arguments to pass to the function.

Python will now run 5 processes (or less) at a time until all the processes have finished. You need to call terminate() on the pool at the end or you will see a message like this:

/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/resource_tracker.py:216: 
UserWarning: resource_tracker: There appear to be 6 leaked semaphore objects to clean up at shutdown

Now you know how to create a process Pool with Python!

Wrapping Up

You have now learned the basics of using the multiprocessing module. You have learned the following:

There is much more to multiprocessing than what is covered here. You could learn how to use Python’s Queue module to get output from processes. There is the topic of interprocess communication. And there’s much more too. However the objective was to learn how to create processes, not learn every nuance of the multiprocessing module. Concurrency is a large topic that would need much more in-depth coverage than what can be covered in this article.

The post Python 101 – Creating Multiple Processes appeared first on The Mouse Vs. The Python.

July 15, 2020 05:05 AM UTC


PSF GSoC students blogs

Week 6 Check-in

What did you do this week?

I started a new PR that adds multimethods for mathematical functions. The multimethods that were added are the following:

Trigonometric functions

Rounding

Sums, products, differences

Other special functions

Arithmetic operations

Handling complex numbers

Miscellaneous

I've also concluded the PR on array manipulation routines from previous weeks which still had some unresolved issues. It turns out that this week's work was mostly spent patching up the previous PR and less working on the new one unfortunately. This ended up delaying the new PR a bit but since the new one already added quite a few multimethods the schedule is unaffected.

What is coming up next?

Continuing the new PR by adding default implementations to the appropriate multimethods and starting a new PR that adds multimethods for functional programming routines. I already did some offline prototyping of default implementations for mathematical functions, the more easy ones at least. The more difficult ones (e.g., unwrap, convolve and interp) should be the focus of that part of next week's work.

Did you get stuck anywhere?

There were no major blocks this week. The only issue was the somewhat precedence that the older PR had which prevented the newer one to advance. For example, both PRs had failing tests in the XND backend so this backend was removed (the project is not maintained anymore) in the older PR. Since this has now been merged the newer PR can now receive those changes that fix its failing tests.

July 15, 2020 12:54 AM UTC

July 14, 2020


PSF GSoC students blogs

Week 7 check-in!

Hello everyone

So we are into Week #7 now. In the last week, we were done with integrating query functions and I had mentioned that next I would be working on BAM serialization.

So yes, BAM serialization took me some time to get the feel of, though finally I was able to implement in successfully with the help of mentors. BAM serialization gives the users and game developers ability to save the generated navmesh in their hard disk and load it from there whenever required. This can be really helpful in games as a lot of time and computational power required to generate navmesh will be saved and hence the games would load faster. So, as for this week, this was the major development done. 

Where did I get stuck? Well, BAM serialization was a totally new concept for me and hence I was stuck in the process of understanding it. Once I understood the concept and how the functions implement it, then it was quite easy to code, though there were moments i got stuck while compiling after implementing BAM serialization. Mentors rescued me there. XD

For next week, I have few things on card: Writing Test Files for BAM, sample code and making more user friendly functions so that users do not have to dig deep into objects to use basic API functions. After that, a few more changes as per the PR review.

See you next week :) 

Stay Safe

July 14, 2020 11:57 PM UTC


Codementor

Your First Stock Trading Bot 🤖🐍Part 2: Buy & Sell Stocks in Python w/ Alpaca!

Python stock trading bot written in Alpaca Python library. Designed for trading stocks programmatically in Python under the alpaca library. Source code available on GitHub!

July 14, 2020 11:09 PM UTC


NumFOCUS

Open Source Developer Advocate

Position Overview The primary role of the Open Source Developer Advocate is to represent and support developers of NumFOCUS open source projects by serving as a link to internal and external stakeholders as well as the global user community. You will generate attention and support by applying your technical knowledge, passion for open source data […]

The post Open Source Developer Advocate appeared first on NumFOCUS.

July 14, 2020 08:36 PM UTC


PyCoder’s Weekly

Issue #429 (July 14, 2020)

#429 – JULY 14, 2020
View in Browser »

The PyCoder’s Weekly Logo


The (Non-)Return of the Python Print Statement

Guido van Rossum recently proposed re-introducing the Python print statement. He was completely serious and even though the idea didn’t gain traction, it’s interesting to know why he made the proposal.
JAKE EDGE

Grow Your Python Portfolio With 13 Intermediate Project Ideas

Get started on 13 Python project ideas that are just right for intermediate Python developers. They’ll challenge you enough to help you become a better Pythonista but will still be doable!
REAL PYTHON course

Scout APM Now Available for Python! Find Performance Issues Fast

alt

Scout’s intuitive UI helps you quickly track down issues so you can get back to building your product. Rest easy knowing that Scout is tracking performance and hunting down issues before they affect customer experience. Get started for free. →
SCOUT APM sponsor

A Beginner’s Guide to Robot Programming With Python

Get a crash course in programming autonomous robots with Python. Don’t have a robot laying around? No problem! Use this open-source simulator to get started.
NICK MCCREA

How JIT Compilers Are Implemented and Fast: PyPy, LuaJIT, Graal and More

Have you ever wondered how JIT compilers like PyPy work? Learn the basics by looking at a number of JITs including PyPy, LuaJIT, and Graal.
CAROL CHEN

Hashing It Out

Take a deep dive into Python dictionaries by looking at four problems and considering their solutions.
AKSHAY RAVIKUMAR

Python import: Advanced Techniques and Tips

The Python import system is as powerful as it is useful. In this in-depth tutorial, you’ll learn how to harness this power to improve the structure and maintainability of your code.
REAL PYTHON

Python Malware on the Rise

Python’s low barrier to entry, enormous ecosystem, and rapid development process has made it one of he most desired programming languages for millions of developers around he globe—including malicious actors. Read the article at the link above and follow the discussion on Hacker News.
AUSTIN JACKSON

Zero-Day Vulnerability in Python Versions 3.8.0 to 3.8.3 Causes Hash Collisions and Leads to DoS

VIJAY PRABHU

Python 3.8.4 Is Now Abailable

PYTHON.ORG

Pytest 6.0.0rc1 Released

TWITTER.COM/NICODDEMUS

Discussions

Shout Out to All the Mediocre Data Scientists Out There

Even if you don’t have a Ph.D. and don’t work at a FAANG company, you still deserve some appreciation!
REDDIT

How Does % Work With Decimals for Instance Why Is 10 % 2.2 Not Equal to 1.2

REDDIT

Python Jobs

Senior Backend Developer (San Francisco, CA, USA)

dumpling

Python Tutorial Authors Wanted (Remote)

Real Python

Quantitative Analyst (Washington, DC, USA)

Convergenz

Senior Python Engineer (Atlanta, GA, USA)

CyberCoders

More Python Jobs >>>

Articles & Tutorials

Too Many Objects: Reducing Memory Overhead From Python Instances

Every Python object has a little bit of memory overhead, and that overhead can really add up if you need to create a huge number of instances. Find out where this overhead comes from and some strategies for reducing memory usage.
ITAMAR TURNER-TRAURING

Learn IP Address Concepts With Python’s ipaddress Module

In this step-by-step tutorial, you’ll learn how to inspect and manipulate IP addresses as Python objects with Python’s ipaddress module, improving your understanding of IP address mechanics and patterns used by the module.
REAL PYTHON

Want To Level-Up Your Python Skills?

alt

Write better code, debug faster, and become more productive with PyCharm, a tightly integrated IDE that understands your code and provides a complete set of tools to help you make it better. Try PyCharm now and code like a pro! Free trial. →
JETBRAINS sponsor

Adding Two Factor Authentication to Django Admin

Django is a “batteries included” framework, but one battery that isn’t included is two-factor authentication (2FA). Learn how to set up 2FA on the Django Admin site using an authentication app like Google Authenticator.
TIMO ZIMMERMAN

Arrange-Act-Assert: A Pattern for Writing Good Tests

Arrange-Act-Assert is a test pattern that forces tests to focus on independent, individual behaviors. Learn how to use it for your tests!
ANDREW KNIGHT

A Practical Introduction to Graphs (Network Diagrams)

Learn how to create a simple graph in Python. Not graph as in chart, but graph is in network diagram (or, dots connected with lines).
ANDREW HEALEY

Solving the Plus Minus Problem in Python

The “Plus Minus Problem” asks whether or not it’s possible, given the numbers 1 to n, to add and subtract them in some manner so that the total sum is zero. The problem may not have many practical applications, but it’s a great way to illustrate how a little bit of reasoning can save you from exponential-time algorithms.
JOHN LEKBERG

HCrystalBall: A Unified Interface to Time-Series Forecasting

HCrystalBall wraps time series forecasting projects like fbprophet, arima with autoarima, exponential smoothing from statsmodels, and (t)bats, and unifies them under a scikit-learn compatible interface so that you can leverage features like scikit-learn pipelines.
MICHAL CHROMČÁK

Deploying a State-Of-The-Art Question Answering System With 60 Lines of Python and Streamlit

Thanks to high-quality pretrained models, Wikipedia, and Streamlit, deploying a state-of-the-art question answering system has never been easier!
MIHAIL ERIC

Projects & Code

pyparsing: Python Library for Creating PEG Parsers

GITHUB.COM/PYPARSING

tsp-art-python: Mathematical Art Based on Weighted Voronoi Stippling and the Travelling Salesman Problem

GITHUB.COM/MATTHRAS

sobot-rimulator: Autonomous Mobile Robot Simulator

GITHUB.COM/NMCCREA

Wikipedia: Pythonic Wrapper for the Wikipedia API

GITHUB.COM/GOLDSMITH

nanogui: Minimalistic C++/Python GUI Library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL

GITHUB.COM/MITSUBA-RENDERER

hcrystalball: Unified API for Commonly Used Libraries and Modeling Techniques for Time-Series Forecasting

GITHUB.COM/HEIDELBERGCEMENT

FaceLean: Experiment to Use a Webcam as a Game Input Device

GITHUB.COM/BORISTSR

PyGM: Sorted Containers With State-Of-The-Art Query Performance and Compressed Memory Usage

GITHUB.COM/GVINCIGUERRA

toolz: A Functional Standard Library for Python

GITHUB.COM/PYTOOLZ

coconut: Simple, Elegant, Pythonic Functional Programming

GITHUB.COM/EVHUB

Nashpy: A Library for the Computation of Nash Equilibria in Two Player Games

GITHUB.COM/DRVINCEKNIGHT

eyeloop: A Python 3-Based Eye-Tracker Tailored Specifically to Dynamic, Closed-Loop Experiments on Consumer-Grade Hardware

GITHUB.COM/SIMONARVIN

Events

PyHEP 2020 (Virtual)

July 13 to July 18, 2020
CERN.CH

Virtual Django Meetup

Jul 23, 2020
MEETUP.COM

EuroPython 2020 Online

July 23 to July 27, 2020
EUROPYTHON.EU


Happy Pythoning!
This was PyCoder’s Weekly Issue #429.
View in Browser »

alt

[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

July 14, 2020 07:30 PM UTC


EuroPython

EuroPython 2020: Please configure your tickets

We would like to remind you how you can configure your tickets and profiles, so that we get the right information for on-boarding you on our Discord server in the coming days and your communication preferences.

This is especially important in case you bought tickets for other people. Without having the registered on our website and assigned a ticket, we cannot on-board them to our Discord server.

Log in to the website

The first step to administer your tickets and account is to log in to the website. If you don’t have an account yet, you can register easily using email and password or Google authentication.

image

Please avoid creating multiple accounts, since this can easily cause confusion and merging accounts is currently not possible.

Assigning tickets to other people

If you are the buyer of the tickets, you can now assign the tickets to other people, e.g. in your company.

In order to assign tickets, the people you want to assign them to need to have an account on our system. Please tell them to register with the EuroPython website and provide you with the email address they use to register.

Once they have registered and you have the email address they used, you can then go to the ticket section and reassign the ticket:

image

Click on “Assign ticket” and then enter the email address of the person to assign the ticket to:

image

Clicking save will then transfer the ticket to the new user.

Configuring your ticket

If you have bought a ticket or have been assigned a ticket, please check the configuration of the ticket.

image

This will take you to a form where you can find the name as we will need it for the Discord registration, expected days of attendance and a (funny) tagline to put on the badge.

Printing your invoice

If you have bought tickets on the website, you will find the invoices for the tickets on your account page as well:

image

You can download the invoice in PDF format, print and save it to your records.

Configuring your EuroPython account

The website also provides a couple of other dialogs which allow you to configure your account:

The “Profile settings” allow you to edit the profile shown on the website. This is especially important for speakers, since their profiles will be public and associated with their presentations.

The “Privacy settings” dialog allows you to opt-in to recruiting emails from our sponsors (among other things):

If you happen to be looking for a new job or freelance opportunity, this is a good way to get more information from sponsors who will present in our recruiting session.

Enjoy,

EuroPython 2020 Team
https://ep2020.europython.eu/
https://www.europython-society.org/

July 14, 2020 04:58 PM UTC


Real Python

Grow Your Python Portfolio With 13 Intermediate Project Ideas

Now that you know the basics of Python, you can put that knowledge to use by building projects to put in your portfolio. The trick is finding project ideas that are just right for your level. Creating a variety of applications is a way to demonstrate your knowledge and share it with others.

In this course, you’ll get 13 project ideas that you can work on as an intermediate Python developer. The project ideas cover a wide range of application type and can be built using a command line, web based, or graphical user interface. You’ll see examples of existing applications for inspiration, and get links to Python libraries and resources to assist in your application development.

In this course, you’ll learn:


[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]

July 14, 2020 02:00 PM UTC


Janusworx

A Hundred Days of Code, Day 007 - Python Basics, Variables, Basic Data Types, Strings and Loops

Started with the Reuven Lerner, Intro Python:Fundamentals course today.
Made surprising headway, even though today was crazily demanding with work and personal stuff.

Notes

  • The difference between == and is
    • If you want to see if two things are equal, use ==
      • like, is 2+2 == 4
    • If you want to know if two objects are the same thing. if they are just pointers to the same memory location, use is. The heuristic is, if you are checking for singleton values, something that there is only one thing of; then in Python, we use is. Use sparingly . Make sure you check mostly to see if things are the same object or practically to see if something is None
      • mostly to check for the presence or absence of things.
      • like x = None and then I go check if x is None
  • True / False heuristic in Python
    • Nearly everything in Python is true
    • except for False, None, 0 or anything empty (empty lists, dictionaries, etc.)
  • Learnt how working with strings in reverse works
    • if I want the last element in a string, I could reference it by calculating it’s length and lopping one off (since indexes start at 0), like with the string s = 'Halt! Who goes there?' I could access the last element by s[len(s)-1] or the last but one, with a s[len(s)-2].
    • This is made a lot more convenient by just dropping the len(s) stuff, just leaving the - numeral part - s[-1] or s[-2]
    • This makes so much sense in my head now, if what I am doing is counting straight and then subtracting one. I should remember, things sometimes are simpler than they seem :)
      For some reason, I always imagined, Python could see the length of my string, so why couldn’t there be a reverse string way of doing things like s.rev[0] that would just count backwards 😂
  • Strings are immutable. They can’t be changed. I can just process a copy and generate new ones, though.
  • just realised that the f in f-strings stands for formatted strings, since when I write raw strings, I use an r for, duh, raw strings
  • Slicing involves carving out a small contiguous part out of a larger string. The thing to note is that when I say s[0:4] it means upto, but not including 4
    • If I say s[0:100], slices are forgiving and give me upto the end of my small string, without throwing an error.
    • Empty colons in slices imply endings. s[:10] means start from 0 and go up to 9. Or s[9:] means start at 9 and go upto the end. Ergo s[:] means from the beginning to the end.
    • I can have step sizes to step over. The default, hidden size is 1. I can step, oh, say every three elements by append :3 to the end of my slice like so, s[0:20:3], basically [start:end:step size]
    • I can also have negative step sizes which will give me the results in reverse. The most common one being -1, because the quickly reverses a string for me (commonly done). But it works with other step sizes too. A -2 will start counting backwards every other character from the end. A reverse slice begins with the end character and then beginning. So s[10:5:-1] to carve out a slice backwards.
  • Sequences are strings, tuples and lists. They all can be sliced and diced and iterated upon.
  • Heuristic, else in a for loop is to match stuff when I don’t encounter a break. the else part matches the for to form the for-else construct, even though the break is inside the for loop
  • while loops are for when you don’t know the end of what you are looking for. there is not finite end. No 0 - 10 happening. You are just searching for something in an amorphous swamp. The swamp is vast, there is no way to say from this end of the swamp to that end.You only give up when you find what you are looking for, or when you decide it’s time to give up (some preset condition).
    • make sure there is a counter that breaks stuff or I might loop forever

Learning / Feedback/ Experiences from doing exercises

  • Realising why Python notebooks are used. Very, very, very, handy to quickly write prose and code at the same time. It fits my mental model of programming perfectly!
  • I keep thinking strings and characters are English and forget to quote them! The number of NameErrors I get, is not funny.
  • Thing that keeps biting me when I write or statments. I should remember to say if x='blah' or x='meh'. I keep writing if x='blah' or 'meh', which is wrong.
  • I keep using a lot of superfluous variables. I should be more intentful. Instead of just printing an expression, I tend to figure out the expression, assign to a variable and then print it. Good for building, probably bad for optimal use. But I won’t worry about it too much now. Just something to improve on in the long term.
  • Reuven is a painstakingly methodical teacher. If he’s so good in his videos, I am jealous of folks attending his live classes

Read all about my Python basics journey here


July 14, 2020 12:56 PM UTC


Kushal Das

Introducing pyage-rust, a Python module for age encryption

age is a simple, modern and secure file encryption tool, it was designed by @Benjojo12 and @FiloSottile.

An alternative interoperable Rust implementation is available at github.com/str4d/rage

pyage-rust is a Python module for age, this is built on top of the Rust crate. I am not a cryptographer, and I prefer to keep this important thing to the specialists :)

pyage-rust demo

Installation

I have prebuilt wheels for both Linux and Mac, Python 3.7 and Python 3.8.

python3 -m pip install pyage-rust==0.1.0

Please have a look at the API documentation to learn how to use the API.

Building pyage-rust

You will need the nightly rust toolchain (via https://rustup.rs).

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install requirements-dev.txt
maturin develop && maturin build

Missing items in the current implementation

I am yet to add ways to use ssh keys or alias features, but those will come slowly in the future releases.

July 14, 2020 10:09 AM UTC


PSF GSoC students blogs

Check-in for week 6

1. What did you do this week?

Last week I was reworking the error handling once again. I moved the self-check from the general queue class to the Redis class and changed it to a simple Redis ping command. I also checked the code coverage w.r.t. tests and made requests with big payloads (e.g. fat cookies).

2. What is coming up next?

The next step is to extract Redis into its own scrapy library. This library should be an official addon to scrapy and eventually not only contain support for Redis but also for other message queues.

3. Did you get stuck anywhere?

No.

 

July 14, 2020 07:38 AM UTC


Mike Driscoll

An Overview of JupyterLab (Video)

Learn the basics of using JupyterLab which is the replacement for Jupyter Notebook, in my latest video tutorial.

Buy the book: https://leanpub.com/jupyternotebook101/

 

The post An Overview of JupyterLab (Video) appeared first on The Mouse Vs. The Python.

July 14, 2020 05:05 AM UTC

July 13, 2020


Anarcat

Not recommending Purism

This is just a quick note to mention that I have updated my hardware documentation on the Librem 13v4 laptop. It has unfortunately turned into a rather lengthy (and ranty) piece about Purism. Let's just say that waiting weeks for your replacement laptop (yes, it died again) does wonders for creativity. To quote the full review:

TL;DR: I recommend people avoid the Purism brand and products. I find they have questionable politics, operate in a "libre-washing" fashion, and produce unreliable hardware. Will not buy again.

People who have read the article might want to jump directly to the new sections:

I have also added the minor section of the missing mic jack.

I realize that some folks (particularly at Debian) might still work at Purism, and that this article might be demoralizing for their work. If that is the case, I am sorry this article triggered you in any way and I hope this can act as a disclaimer. But I feel it is my duty to document the issues I am going through, as a user, and to call bullshit when I see it (let's face it, the anti-interdiction stuff and the Purism 5 crowd-funding campaign were total bullshit).

I also understand that the pandemic makes life hard for everyone, and probably makes a bad situation at Purism worse. But those problems existed before the pandemic happened. They were issues I had identified in 2019 and that I simply never got around to document.

I wish that people wishing to support the free software movement would spend their energy towards organisations that actually do honest work in that direction, like System76 and Pine64. And if you're going to go crazy with an experimental free hardware design, why not go retro with the MNT Reform.

In the meantime, if you're looking for a phone, I recommend you give the Fairphone a fair chance. It really is a "fair" (as in, not the best, but okay) phone that you can moderately liberate, and it actually frigging works. See also my hardware review of the FP2.

July 13, 2020 10:15 PM UTC


PSF GSoC students blogs

Weekly Check-In | Gsoc'2020 | #7

Greetings, People of the world!

First week after our first evaluation was nice. I tried speeding up things. It's been an amazing week.

1. What did you do this week?

This week I added the feature to rotate an icon as well as to flip an icon as a part of customization. Thus now a user can rotate, flip or change colour of an icon according to their requirement. The customized icon are available to be downloaded as SVG only as of now.

 

2. What is coming up next?

This week, I will be add the feature to download these customized icons as PNG and along with it I will try to get started with multiple icon customization too.

 

3. Did you get stuck anywhere?

Nope, not this weekcheeky

 

 

July 13, 2020 09:48 PM UTC

Weekly Check-in #7

What did i do this week? 

I worked on integrating NLP operations with tensorflow dnnclassifier for text classification. I also added an example usage of the same in documentation.

What's next? 

I will be working on adding more NLP operations this week. 

Did I get stuck somewhere?

Yes,  I got stuck in CI test,  it was failing but i wasn't able to reproduce it on my system. It got resolved in weekly meeting.

Also on Saturday,  screen of my laptop went black.  I couldn't give it for repairing on the same day as the state government imposed complete lockdown on weekend. I gave it for repairing today,  it should be good to go by tomorrow.

July 13, 2020 06:33 PM UTC


Python Software Foundation

Pip team midyear report

The grant-funded team working on improvements to pip in 2020 has now passed the halfway mark. Here's an update on where are so far and what's next.

Funding and Timeline Status

The plan that we proposed last year said that, by now, we would have finished Foundational work (Phase I) and Resolver work (Phase II), and the team would be doing Maintenance and Sustainability work (Phase III). Please see the timeline for user experience work and the timelines for development work.

We are behind where we had planned to be in the work roadmap. This is partially because the COVID-19 pandemic disrupted our work, but also because of policy and architecture decisions the project needed, and because foundational user experience research work has taken more time than we originally allotted. Thus, we have finished the Phase I and Phase II sections of the development work, and are approximately 75% of the way through the Phase I and Phase II user experience work. See below for accomplishments so far.

Funding: we predicted that we would be approximately 80% of the way through our one-year project budget (since the second half of the year has a slower work pace, primarily focusing on maintaining and deepening the work we started in the first half). We are now approximately 71% of the way through the budget, which gives us flexibility for the second half of the project.

Accomplishments

  • pip's new dependency resolver is about to go into beta. We released pip 20.1 in April which included an alpha version of the new resolver (hidden behind an optional "--unstable-feature=resolver" flag, but usable). This month we will release pip 20.2, which will include a robust beta of the new resolver (hidden behind an optional "--use-feature=2020-resolver" flag) that we will encourage users to test.
  • User experience data-gathering included:
    • Administered 5 surveys to gather feedback about issues with the pip resolver and dependency management
    • Interviewed and/or did user tests with over 30 maintainers and users so far
  • UX findings and resulting improvements included:

Next steps

Phase III development work commences next month. We will continue to improve the pip dependency resolver in response to testers' feedback. This will help us prepare to release pip 20.3, with the new resolver on by default, in October. We'll also review and respond to code contributions and new issues, to keep up with the pip code and issue review queue, help new contributors develop into continuing contributors, and help existing contributors grow into co-maintainers.

And our user experience work will also enter Phase III, deepening and expanding foundational research in Python packaging. We will recruit more users for interviews and surveys, develop user journey maps & workflows, work with maintainers to write documentation and help messages, develop templates for UI bugs, commands, error messages, output, documentation, and configuration files, and teach pip maintainers UX practices.

For more info or to contribute:

We run this project as transparently as possible, so you can:

Thank you

Thanks to our contractors on this project: Nicole Harris, Bernard Tyers, and Georgia Bullen of Simply Secure; Pradyun Gedam; Ilan Schnell; Paul F. Moore of Atos; Tzu-ping Chung; Sumana Harihareswara of Changeset Consulting.
This award continues our relationship with Mozilla, which supported Python packaging tools with a Mozilla Open Source Support Award in 2017 for Warehouse. 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 the MOSS website to see if you qualify.)

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 the Essential Open Source Software for Science Request for Applications and consider applying for the next round).

Thank you to the pip and PyPA maintainers, to the PSF and the Packaging WG, and to all the contributors and volunteers who work on or use Python packaging tools.

July 13, 2020 06:23 PM UTC


Podcast.__init__

The Past, Present, And Future Of The FLUFL: Barry Warsaw Shares His History With Python

Barry Warsaw has been a member of the Python community since the very beginning. His contributions to the growth of the language and its ecosystem are innumerable and diverse, earning him the title of Friendly Language Uncle For Life. In this episode he reminisces on his experiences as a core developer, a member of the Python Steering Committee, and his roles at Canonical and LinkedIn supporting the use of Python at those companies. In order to know where you are going it is always important to understand where you have been and this was a great conversation to get a sense of the history of how Python has gotten to where it is today.

Summary

Barry Warsaw has been a member of the Python community since the very beginning. His contributions to the growth of the language and its ecosystem are innumerable and diverse, earning him the title of Friendly Language Uncle For Life. In this episode he reminisces on his experiences as a core developer, a member of the Python Steering Committee, and his roles at Canonical and LinkedIn supporting the use of Python at those companies. In order to know where you are going it is always important to understand where you have been and this was a great conversation to get a sense of the history of how Python has gotten to where it is today.

Announcements

  • Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
  • When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With the launch of their managed Kubernetes platform it’s easy to get started with the next generation of deployment and scaling, powered by the battle tested Linode platform, including simple pricing, node balancers, 40Gbit networking, dedicated CPU and GPU instances, and worldwide data centers. Go to pythonpodcast.com/linode and get a $60 credit to try out a Kubernetes cluster of your own. And don’t forget to thank them for their continued support of this show!
  • This episode of Python Podcast is brought to you by Datadog. Do you have an app in production that is slower than you like? Is its performance all over the place (sometimes fast, sometimes slow)? Do you know why? With Datadog, you will. You can troubleshoot your app’s performance with Datadog’s end-to-end tracing and in one click correlate those Python traces with related logs and metrics. Use their detailed flame graphs to identify bottlenecks and latency in that app of yours. Start tracking the performance of your apps with a free trial at datadog.com/pythonpodcast. If you sign up for a trial and install the agent, Datadog will send you a free t-shirt.
  • You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For more opportunities to stay up to date, gain new skills, and learn from your peers there are a growing number of virtual events that you can attend from the comfort and safety of your home. Go to pythonpodcast.com/conferences to check out the upcoming events being offered by our partners and get registered today!
  • Your host as usual is Tobias Macey and today I’m interviewing Barry Warsaw about his role in the Python community, past, present, and future.

Interview

  • Introductions
  • How did you get introduced to Python?
  • For anyone who isn’t familiar with you, how would you characterize your role in the Python language and community?
  • What have been your main areas of focus in your role as a core developer?
    • What are some of the other forms that your contributions to the language and community have taken?
  • What are the contributions to Python that you are most proud of?
  • Looking back at the past 25 years of Python, what do you find most interesting/surprising/exciting?
  • How has the focus of the community changed or evolved since you first began using it?
  • What are you currently focused on in your role in the steering council?
  • What are the aspects of the language and community that you think need greater attention?
  • What are the core strengths of the language and community that you believe will carry it through the next 25 years?
  • In your current and previous roles you acted as a guiding force for Python. What are the main use cases for Python at LinkedIn?
    • What kinds of projects are you involved with to support the other engineers in their use of Python?
  • How much of an impact has the invisible hand of the PSU had on the overall trajectory of Python?
  • Outside of Python, what are the programming languages or communities that you look to for inspiration?
  • What are your personal goals for the future of Python?

Keep In Touch

Picks

Closing Announcements

  • Thank you for listening! Don’t forget to check out our other show, the Data Engineering Podcast for the latest on modern data management.
  • Visit the site to subscribe to the show, sign up for the mailing list, and read the show notes.
  • If you’ve learned something or tried out a project from the show then tell us about it! Email hosts@podcastinit.com) with your story.
  • To help other people find the show please leave a review on iTunes and tell your friends and co-workers
  • Join the community in the new Zulip chat workspace at pythonpodcast.com/chat

Links

The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA

July 13, 2020 05:27 PM UTC


Python Insider

Python 3.8.4 is now available

Python 3.8.4 is the fourth maintenance release of Python 3.8. Go get it here:

https://www.python.org/downloads/release/python-384/

Maintenance releases for the 3.8 series will continue at regular bi-monthly intervals, with 3.8.5 planned for mid-September 2020.

What’s new?

The Python 3.8 series is the newest feature release of the Python language, and it contains many new features and optimizations. See the “What’s New in Python 3.8” document for more information about features included in the 3.8 series.

This is the first bugfix release that is considerably smaller than the previous three. There’s almost 20% fewer changes at 162 commits than the average of previous three bugfix releases. Detailed information about all changes made in version 3.8.4 specifically can be found in its change log. Note that compared to 3.8.3, version 3.8.4 also contains the changes introduced in 3.8.4rc1.

We hope you enjoy Python 3.8!

Thanks to all of the many volunteers who help make Python Development and these releases possible! Please consider supporting our efforts by volunteering yourself or through organization contributions to the Python Software Foundation.


Your friendly release team,
Ned Deily @nad
Steve Dower @steve.dower
Łukasz Langa @ambv

July 13, 2020 05:06 PM UTC


PSF GSoC students blogs

Image Classification - Weekly Check-in 7

End of Week 6  - 13/07/2020


What did you do this week?

I added example usage for using the OpenCV image processing operations to pre-process data before feeding into a Scikit-Learn classification model using DFFML's Command Line Interface. The dataset I used is the FLOWER17 dataset, to classify 17 flower species using their color, shape and texture as their feature maps to feed to the model! Although the accuracy isn't quiet good right now but it can get better if more pre-processing is done on the dataset especially if it's a multi-label classification problem. I've also started working to add pre-trained Convolutional Neural Networks.

What is coming up next?

Next, I will be adding pre-trained CNNs for the purpose of Image classification using Transfer Learning to DFFML.

Did you get stuck anywhere?

I had some issues with the performance of my laptop while training and testing on a large dataset of images. I have since shifted to using the Google Cloud Platform as suggested by my mentor and things have been going a lot smoother and faster now! :D


Thank you for reading!

July 13, 2020 04:52 PM UTC

Weekly Check-in #7

What did i do this week? 

I worked on integrating NLP operations with tensorflow dnnclassifier for text classification. I also added an example usage of the same in documentation.

What's next? 

I will be working on adding more NLP operations this week. 

Did I get stuck somewhere?

Yes,  I got stuck in CI test,  it was failing but i wasn't able to reproduce it on my system. It got resolved in weekly meeting.

Also on Saturday,  screen of my laptop went black.  I couldn't give it for repairing on the same day as the state government imposed complete lockdown on weekend. I gave it for repairing today,  it should be good to go by tomorrow.

July 13, 2020 04:15 PM UTC


Catalin George Festila

Python 3.8.3 : Short intro to Appium-Python-Client python package.

This is a short intro of the Appium-Python-Client python package and Appium based on Client-Server Architecture. The Appium Server can be installed using two ways: using NPM or using Appium Desktop. I download and run the desktop version from here. Appium-windows-1.18.0-beta.1>Appium.exeThe latest version of Java, needed for Android Studio ( you can use the installation of Android Studio with SDK

July 13, 2020 04:09 PM UTC


PSF GSoC students blogs

Weekly Check In #4

 

<meta charset="utf-8">

Hello all!

 

The past 6 weeks have been pretty amazing and I have learned a lot of new things. 

The last week was kinda smooth is what I'd say. I worked on the Comments component that will be added to the Individual Story page. A basic responsive UI is ready and it is working fine. Now we are working on implementing the exact logic for this component so that it supports all the features that any other similar platform offers. I also worked on the 'My Stories' page where users can view stories that they have submitted as well as stories that they are following (stories you have liked/commented). The PR for this was merged but the 'Following' section logic is yet to be done because its backend hasn't been created yet. Once the comments section work is finished followed by the 'liking' mechanism I'll work on this section and complete it. Other than this I worked on resolving several UI related issues that emerged when the backend connectivity was added.

I did not face any major issue this week as a lot of the work was done by my partner this week. All the issues were resolved easily over a small video call and I think we are working at a decent pace.

Now, I'll be working on the Comments section and ensure that all of its logic is finished by the end of this week. Also, I'll work on adding the 'like' feature on the story page. If I get time then I'll also work on the 'Timeline' of every story.

July 13, 2020 03:59 PM UTC

GSoC Weekly Check-In #4

What did I do this week?
I did some code refactoring, some UI tweaks based on my mentor's suggestions, wrote tests for delete and edit feature in chat and added the image and document upload feature in mscolab chat.

What is coming up next?

There are some small changes required in file upload feature. I will be finishing up those. After that, I would be discussing with my mentors if any change or addition is required in the work I have done. If not I would be starting work on my final component of GSoC proposal which is the Offline editing of flightpaths.

Did I get stuck anywhere?
Mostly, I get stuck while creating the UI with PyQT5. Still getting a hang of how it. It takes me some time but I am able to do it.

July 13, 2020 03:48 PM UTC

Comment queries and edit mutations in the feature request system in GSOC’20

Sometimes we are not able to express all our thoughts and ideas in one go. A great idea may strike later or you may want to comment and give some suggestions and feedback to stories of other users. Come explore with me some exciting features that I added to our feature request system using Strapi , GraphQL and React this week.

What did I do this week?

A strange bug starts the week with some thrill and action. Our whole application breaks when a user logs in to the system and submits a new user story. Crash!

We were checking and dividing our user stories on our client side according to their current status. No status gets assigned by default to a new user story as that is an admin or root level permission feature. In Strapi I cannot assign a default status to a relation type field because relations between models can be of various types. I solved the bug on the client side by assigning every new user story a status of “Under Consideration” in my GraphQL mutation.

A user may want to check out their own stories at some point of time so I implemented a GraphQL query to fetch all user stories based on their user id. Users need to be authenticated to access their own stories. They can check their stories for status updates, votes, likes and comments from other users.

The next was the most awaited feature of allowing our beloved users to edit their own user stories. However, they cannot change the already added description. Content can just be added to the existing information. This is just to avoid trolls. :P

What is coming up next?

This week I will create a product model so that we can relate all our products at EOS Design System with a separate user story system. Users can filter their stories for different products.

I am also working on user comments system so that we can display all comments properly and further allow users to add more comments.

Did I get stuck anywhere?

Development without getting stuck is no fun. We learn fast from our mistakes. Initially I was happy to complete the edit story functionality and it worked well. Then my mentors could hack into the system easily. Security compromised. :P

They could edit stories of other users as well after writing into the famous localStorage . I solved the bug easily by implementing a function to verify and allow editing only if the user is the owner of the story.

This ended the week on a sweet note with quite some features added. Stay tuned for more fun and action. :)

July 13, 2020 03:09 PM UTC