diff --git a/pythonetc/assert.md b/pythonetc/assert.md
index d8f8f0e..e24fdce 100644
--- a/pythonetc/assert.md
+++ b/pythonetc/assert.md
@@ -9,7 +9,7 @@ def assert_(test, *args):
assert_(2 + 2 == 4, 'the world is broken')
```
-However, there are few advantages of assert as directive over assert as function:
+However, there are few advantages of assert as directive over assert as a function:
1. All asserts removed on the bytecode compilation step if [optimization is enabled](https://t.me/pythonetc/115).
diff --git a/pythonetc/cached-property.md b/pythonetc/cached-property.md
index 7398d3b..1217895 100644
--- a/pythonetc/cached-property.md
+++ b/pythonetc/cached-property.md
@@ -4,12 +4,12 @@ Decorator `@cached_property` is an amazing way to simplify your code. It's like
class C:
@cached_property
def p(self):
- print('computating...')
+ print('computing...')
return 1
c = C()
c.p
-# computating...
+# computing...
# 1
c.p
diff --git a/pythonetc/class-body.md b/pythonetc/class-body.md
index 0ecc8d2..28e4c29 100644
--- a/pythonetc/class-body.md
+++ b/pythonetc/class-body.md
@@ -1,4 +1,4 @@
-Basically, the class body is the same as, let's say, the function body, [with only a few limitations](https://t.me/pythonetc/438). You can put any statements inside, reuse previous results and so on:
+The class body is the same as, let's say, the function body, [with only a few limitations](https://t.me/pythonetc/438). You can put any statements inside, reuse previous results and so on:
```python
class A:
diff --git a/pythonetc/data-descriptors.md b/pythonetc/data-descriptors.md
index ad3e8b6..c281616 100644
--- a/pythonetc/data-descriptors.md
+++ b/pythonetc/data-descriptors.md
@@ -1,10 +1,7 @@
-
-[Descriptors](https://docs.python.org/3/howto/descriptor.html) are special class attributes with a custom behavior on atribute get, set or delete. If an object defines `__set__` or `__delete__`, it is considered a data descriptor. Descriptors that only define `__get__` are called non-data descriptors. The difference is that non-data descriptors are called only if the attribute isn't presented in `__dict__` of the instance.
-
+[Descriptors](https://docs.python.org/3/howto/descriptor.html) are special class attributes with a custom behavior on attribute get, set, or delete. If an object defines `__set__` or `__delete__`, it is considered a data descriptor. Descriptors that only define `__get__` are called non-data descriptors. The difference is that non-data descriptors are called only if the attribute isn't presented in `__dict__` of the instance.
Non-data descriptor:
-
```python
class D:
def __get__(self, obj, owner):
@@ -23,6 +20,7 @@ c.d
# 1
```
+Data descriptor:
```python
class D:
diff --git a/pythonetc/dunder.md b/pythonetc/dunder.md
index c690cc8..b17153f 100644
--- a/pythonetc/dunder.md
+++ b/pythonetc/dunder.md
@@ -1 +1 @@
-How do you read `__init__`? "underscore underscore init underscore underscore"? Just "init"? There is a convention to read it "dunder init". it was [proposed by Mark Jackson](https://lists.gt.net/python/python/124634#124634) in 2002 and [popularized by Ned Batchelder](https://nedbatchelder.com/blog/200605/dunder.html) in 2006.
+How do you read `__init__` word? "underscore underscore init underscore underscore"? Just "init"? There is a convention to read it "dunder init". it was [proposed by Mark Jackson](https://lists.gt.net/python/python/124634#124634) in 2002 and [popularized by Ned Batchelder](https://nedbatchelder.com/blog/200605/dunder.html) in 2006.
diff --git a/pythonetc/dynamic-class-attribute.md b/pythonetc/dynamic-class-attribute.md
index 8163483..ab63e8b 100644
--- a/pythonetc/dynamic-class-attribute.md
+++ b/pythonetc/dynamic-class-attribute.md
@@ -1,4 +1,4 @@
-[types.DynamicClassAttribute](https://docs.python.org/3/library/types.html#types.DynamicClassAttribute) is a decorator that allows to have a `@property` that behaves differently when it's called from the class and when from the instance.
+[types.DynamicClassAttribute](https://docs.python.org/3/library/types.html#types.DynamicClassAttribute) is a decorator that allows having a `@property` that behaves differently when it's called from the class and when from the instance.
```python
from types import DynamicClassAttribute
diff --git a/pythonetc/enum.md b/pythonetc/enum.md
index 069dd1a..d82c383 100644
--- a/pythonetc/enum.md
+++ b/pythonetc/enum.md
@@ -1,4 +1,4 @@
-The module [enum](https://docs.python.org/3/library/enum.html) provides a way to build an enumerable class. It is a class with predefined list of instances, and every instance is bound to an unique constant value.
+The module [enum](https://docs.python.org/3/library/enum.html) provides a way to build an enumerable class. It is a class with a predefined list of instances, and every instance is bound to a unique constant value.
```python
from colorsys import rgb_to_hls
diff --git a/pythonetc/format.md b/pythonetc/format.md
index 8804fdb..32adaea 100644
--- a/pythonetc/format.md
+++ b/pythonetc/format.md
@@ -1,5 +1,4 @@
-There is built-in function `format` that basically just calls `__format__` method of the passed argument type with passed spec. It is used in `str.format` as well.
-
+There is a built-in function `format` that basically just calls `__format__` method of the passed argument type with passed spec. It is used in `str.format` as well.
```python
class A:
diff --git a/pythonetc/intro.md b/pythonetc/intro.md
index 07d62ef..59f1eac 100644
--- a/pythonetc/intro.md
+++ b/pythonetc/intro.md
@@ -1,4 +1,4 @@
-Welcome into the season 2! In the next episodes:
+Welcome to season 2! In the next episodes:
1. New cool features in Python 3.9 (the final release is planned on 2020-10-05).
2. Python history and features that were removed.
@@ -6,6 +6,9 @@ Welcome into the season 2! In the next episodes:
4. Short and useful code snippets to empower your code.
5. A lot more features and tricks, like in good old season 1.
-Also, @orsinium joins the @pythonetc team. That means more posts and more points of view.
+Also, a few updates:
-Show must go on!
+1. @orsinium joins the @pythonetc team.
+2. No ad in this season. [Support us on ko-fi](https://ko-fi.com/pythonetc) if you like it!
+
+The show must go on!
diff --git a/pythonetc/license.md b/pythonetc/license.md
index 646afb2..f5946d7 100644
--- a/pythonetc/license.md
+++ b/pythonetc/license.md
@@ -1,4 +1,4 @@
-Python provides 2 totally useless bu interesting built-in functions: `copyright` and `license`. `copyright` gives a short overview who owned Python in different moments of history:
+Python provides 2 useless but interesting built-in functions: `copyright` and `license`. `copyright` gives a short overview who owned Python in different moments of history:
```python
>>> copyright()
diff --git a/pythonetc/nullcontext.md b/pythonetc/nullcontext.md
index 4d38d83..36652bf 100644
--- a/pythonetc/nullcontext.md
+++ b/pythonetc/nullcontext.md
@@ -1,6 +1,6 @@
Context manager [contextlib.nullcontext](https://docs.python.org/3/library/contextlib.html#contextlib.nullcontext) is helpful when a block of code not always should be executed in a context.
-A good example is a function that works with database. If a session is passed, the function will use it. Otherwise, it creates a new session, and does it in a context to guarantee fallback logic to be executed:
+A good example is a function that works with a database. If a session is passed, the function will use it. Otherwise, it creates a new session, and does it in a context to guarantee fallback logic to be executed:
```python
from contextlib import nullcontext
@@ -28,7 +28,7 @@ def do_something(silent=False):
...
```
-It was added in Python 3.7. For earlier python versions DIY:
+It was added in Python 3.7. For earlier Python versions DIY:
```python
from contextlib import contextmanager
diff --git a/pythonetc/object-type.md b/pythonetc/object-type.md
index 4d504c9..bac0fcd 100644
--- a/pythonetc/object-type.md
+++ b/pythonetc/object-type.md
@@ -1,4 +1,4 @@
-Every class is an instance of it's metaclass. The default metaclass is `type`. You can use this knowledge to check if something is a class or is an instance:
+Every class is an instance of its metaclass. The default metaclass is `type`. You can use this knowledge to check if something is a class or is an instance:
```python
class A: pass
@@ -13,7 +13,7 @@ isinstance(A(), object) # True
isinstance(A, object) # True
```
-This is because `type` an instance of `object` and subclass of `object` at the same time, and `object` is instance of `type` and no parent classes.
+This is because `type` an instance of `object` and subclass of `object` at the same time, and `object` is an instance of `type` and no parent classes.
```python
type(type) # type
diff --git a/pythonetc/set-name.md b/pythonetc/set-name.md
index d173d38..e9406fd 100644
--- a/pythonetc/set-name.md
+++ b/pythonetc/set-name.md
@@ -1,7 +1,7 @@
-If you're going to store a data in the descriptor, the reasonable question is "where".
+If you're going to store data in the descriptor, the reasonable question is "where".
1. If data stored in the descriptor's attribute, it will be shared between all instances of the class where the descriptor is assigned.
-2. If data is stored in a dict inside of the descriptor, where key is hash of class and value is data, it will lead to a memory leak.
+2. If data is stored in a dict inside of the descriptor, where the key is hash of class and value is data, it will lead to a memory leak.
So, the best solution is to store data in the class itself. But how to name the attribute?