14 subscribers
38 photos
3 files
18 links
Download Telegram
#教え
Интервал range работает подобно срезу, первый индекс включён, второй уже не входит

for i in range(1,3):
print(i)
#1, 2


Как будто общий паттерн
#教え
Mutable - изменяемый, ordered - упорядоченный
This media is not supported in your browser
VIEW IN TELEGRAM
#教え
lambda функции можно дать имя и использовать как обычную функцию

future_tax = lambda income: income * 0.1
savings = future_tax(10000)
.py pinned a GIF
#教え
Сахар для сетов
#教え
Виртуальное окружение(ВО)

Создать

python -m venv <venv_name>


Активировать (в зависимости от терминала команда меняется)
#cmd
<venv_name>\Scripts\activate

#powershell
. <venv_name>\Scripts\Activate.ps1

#unix or mac_os
source myenv/bin/activate


Деактивировать

deactivate

Получение списка установленных библиотек
#глобально установленные пакеты
pip list


#пакеты внутри активного ВО
pip freeze

#собрать список локально установленных пакетов с версиями
pip freeze >
requirements.txt


Установка виртуального окружения из файла requirements.txt
pip install -r requirements.txt
.

Чтобы установить конкретную версию py для определенного ВО
#нужен доп пакет
pip install virtualenv

python -m virtualenv -p "C:\
Program Files\Python310\python.exe" my_second_env

локально установить/удалить пакет

pip install <package name>


создал через терминал окружение, активировал, все запускается, но чтобы pyCharm видел пакеты внутри ide нужно явно указывать окружение:

settings(смотри хот кеи) ->
add python interpreter->
local interpreter->
existing env->
указать python.exe внутри подготовленного виртуального окружения
#pycharm
pyCharm hot keys

Интерфейс
откр/закр терминал: Alt + f12

с терминала переключиться на код без закрытия терминала: Win + Esc

контроль размера окна:
Ctrl + Alt + Shift + arrow_up/arrow_down

переключение между вкладками: Alt + arrow_left/arrow_right
перемещение назад на предыдущую локацию: ctrl + alt + <-

переключение между вкладками с помощью списка: Alt + Tab/Alt + Tab + Shift

Чтобы с файловой
структуры переключиться на открытое окно с кодом без закрытия файловой структуры, достаточно выбрать уже открытый файл и нажать enter

Открыть настройки: Ctrl + Alt + S

откр/закр файловую структуру: Alt + 1


multy cursor/много курсоров
Добавить несколько курсоров (ul li example)Вкл/выкл режим добавления
Shift + alt + insert

Добавление курсора вверх/вниз
Shift + arrow_up/arrow_down

Быстрое добавление курсора
double ctrl + arrowDown


Обработка ошибок
При наведении на почеркнутое слово, можно вызвать контекстное меню быстрых решений
alt + Enter (например чтобы быстро импортнуть недостающий модуль)

Перейти к следующей проблеме (Error or critical warning)
F2
#value
Инфо каналы

1) Артём Шумейко
https://youtube.com/@artemshumeiko?si=u5hOABptrQm-7rxJ - Senior python (лаконично, хороший value про postgresql, pytest, sqlalchemy и нахождение оффера)

2) IT-Kamasutra https://youtube.com/@itkamasutra?si=flKMQ3rZ6nrGKU1Z (редкий проект, огромный value про backend/front минимум)
#git

#вернуться на HEAD коммит
git checkout -


#git add . + git commit -m
git commit -am '<commit info>'
#db

DSN (data source name)/URI for DB

general specification RFC-1738
https://www.ietf.org/rfc/rfc1738.txt


PostgreSQL
dialect+driver://username:password@host:port/database


https://docs.sqlalchemy.org/en/20/core/engines.html
#psy

Техника концентрации

Белый шум

https://youtu.be/h7Bdfv8Iagw?si=H_r1epGc62hTsETT

Шум в голове 🔻
Спокойствие

15 мин

https://youtu.be/mD3QwerSmLs?si=pWbgl1cZIuXDd0-X

Яндекс музыка

https://music.yandex.ru/users/music-blog/playlists/1956?utm_medium=copy_link

В YM под кнопкой паузы, через иконку таймера можно поставить время до отключения трека, чтобы включить белый шум и лечь спать в наушниках если требуется

Так же непроверенного, но если положить половины шарика для пинг-понга на глаза то можно начать видеть галлюцинации
#tt 1/∞ тестовое задание
Python dev + devops

Основа:
Linux + Docker | Windows(bash, sudo)
python или JavaScript или TypeScript

Доп:
Опыт в Solidity, BAS(BrowserAutomationStudio), Zennoposter, GO, Rust, git, node.js, а также автоматизации браузерной работы.


Дали тз

1) подключить сервер по ssh через ключи, офнуть доступ по паролю
2) написать скрипт, которому можно передавать имена валют, которые он будет мониторить через coinmarketcap api, отправляя уведовления о перехождении указанных порогов стоимости актива
3) доп задание - Запустить блокчейн узел Morph.

доступа к пк не было, выполнял на терминале termius на айфоне

1) получил токен coinmarketcap api
2) наладил получение данных с ресурса
3) написал класс принимающий команду подписки на актив, и через список активов отправляет запрос получая данные сразу о нескольких валютах.
4) создал бота, научился запускать скрипт в фоновом режиме через & и контролировать запуск/установку скриптов через .sh

далее приступил к настройке через ssh, создал ключи по мануалу, но не проверил работают ли они и через конфиг отключил вхождение по паролю,

в итоге потерял доступ к серверу и ко всей написанной кодовой базе

детский мат

Выводы:

- научиться настраивать ssh
- сначала проверять работу ключей
- потом отключать доступ по паролю
- использовать SCV в любом кейсе при завершении работы(потерялись 1,5 дня разработки)
- в суперневажные задачи: просмотреть запуск Morph Node.
#教え
Видео 4/22 3:48 -> end

1) map, filter, reduce

генераторы работают быстрее map
но если мы не знаем до какого элемента придется перебирать список, то map будет эффективнее

2) декораторы
использовал его чтобы сравнить скорость map и list comprehention
python 
import time


def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
f = func(*args, **kwargs)
end = time.time()
print(end - start)

return wrapper


как генерить списки для тестов
[random.randint(0, 100) for _ in range(31)]
.py
#psy Техника концентрации Белый шум https://youtu.be/h7Bdfv8Iagw?si=H_r1epGc62hTsETT Шум в голове 🔻 Спокойствие 15 мин https://youtu.be/mD3QwerSmLs?si=pWbgl1cZIuXDd0-X Яндекс музыка https://music.yandex.ru/users/music-blog/playlists/1956?utm_…
#tt 2/∞ тестовое задание
pythonDev 80к
Компания разрабатывает аналитический сервис для торговых инфраструктур по типу мосбиржи

Дали костяк сервера, работающего через websocket нужно реализовать:
- отправку ордеров
- после размещения ордера дается задержка через sleep и возвращается случайный результат выполнения
- реализовать возможность отмены ордера пока действует задержка
- реализовать подписку/отписку на изменение валютного инструмента(приходит ордер, всем подписанным отправляются одновленные котировки)
- написать тесты

предлагали еще сделать фронт, но на бек потратил 6 дней, дальше жирно будет

первый раз писал тесты
логику вынес в отдельный модуль
для модуля создал собственный тип исключений

 выводы 
- в гите после каждой микрозадачи коммит, для наглядности процесса
- найти паттерны тестирования, было неожиданным ступором вопрос, какие кейсы тестировать
- postman незаменим, функциональщина для запросов на сервер
- чем лучше программист вначале познал всю инфраструктуру проекта, тем быстрее он будет выполнять задачи в будущем, скурпулезное чтение кода маст хев
- + asyncio, pytest, fastapi, bidict(нужно узнать получше)

тестовое задание подтвердили, позвали на техническое собеседование
#教え #git
Видео 5/22 start -> end

название текущего локального репозитория
git remote

возможно пушить в несколько репозиториев, например сразу в github, bitbucket
ссылки на удаленные репозитории
для push и fetch отдельно (возможно пушить в один репозиторий, а подтягивать из другого)

git remote -v
#git
git rebase

у тебя есть ветка feature, отпочковавшаяся от мастера,
в мастер внесли несколько коммитов,
закончив в feature, ты хочешь замерджить в мастер, но было бы круто чтобы вся разработка была в одну линию, не разветвляясь,
с помощью rebase ты можешь поменять коммит, от которого отпочковывалась feature изначально, на последний коммит в master, чтобы при merge он fastforward перекинул указатель мастера на feature

так же rebase позволяет изменять порядок коммитов и комментарии к ним перед rebase в режиме interactive

https://selectel.ru/blog/tutorials/how-to-rebase-commits-and-branches/
#ti 2/∞ техническое интервью

после тестового задания позвали на интервью
созвон вели 2 разраба
рассказали про компанию, показали продукт, объяснили чем предстоит заниматься,
минимально спросили про опыт и учебу

во время разговора вскользь поговорили про выполненное тз, напомню что выполнялось оно около 6 дней, но как я понял смотрели его сквозь пальцы, что еще раз говорит о том что больше 2 дней тратить на тех задание не стоит, даже если оффер крутой, будут смотреть общую картину

далее задания в режиме livecoding


❗️разработка под надзором это большой стресс, если ты долгое время ее не практиковал, во время решения, когда ты сталкиваешься с затупом, мозг просто отключается и ты тупишь. Чтобы этого не случалось нужна практика❗️

1) бинарный поиск, знаю как он реализуется, но долго не практиковал, словил затуп на искуственном сужении окна поиска чтобы избежать зацикливание при 2х элементах(один из случаев), додуматься до этого в реале нереально, вывод - тщательно пройти базовые алгоритмы, добро пожаловать leetCode. Были вопросы по сложности алгоритма, так же стоит подумать в каких случаях твое решение может зациклиться.

2) Определить, какой текст будет выведен в результате вызова метода print() у объекта класса Main, учитывая наследование от классов Parent и Mixin, а также использование super().
class Parent:
def print(self):
print("A")

class Mixin(Parent):
def print(self):
print("B")

class Main(Parent, Mixin):
def print(self):

super().print()
print("C")

# What will be printed? Why?
Main().print()

# A
# B
# C

в этой задаче я ответил правильно, по сути интерпретатор ищет слева направо у предков класса, но нужно повторить тему классов и в особенности ромбовидное наследование

3) Вопрос каким будет результат 0.1 + 0.1 + 0.1 == 0.3
видео про эту задачу я смотрел на кануне, ответ будет false, потому что 0.1 на самом деле является бесконечной дробью, из за несовершенства хранения десятичных дробей https://www.youtube.com/watch?v=JVvkBPhNGZY&t=18s

4) datetime
import datetime

datetime.datetime.now = lambda: datetime.datetime(2017, 12, 12)
# Is it correct code? How it can be used?

в этом задании я ответил что python такое может позволить, но позже при отработке я получил
TypeError: cannot set 'now' attribute of immutable type 'datetime.datetime'


используется этот паттерн для отладки если нужно воспроизвести что то на определенном промежутке времени, например когда есть код который работает днем и вечером по разному (как загрузка сбера)

похоже именно этот пример работать не будет но для этого есть отдельный модуль freezegun


Итог:
- тренировать livecoding
- повторить классы, datetime
- тщательно пройти алгоритмы
- на собеседовании стараться не сыпаться и более холодно вести себя как специалист
- выполнять тз край 2 дня


В оффере отказали под предлогом того что нужен более опытный специалист, но я уже чувствую почву под ногами
#教え
Видео 6/22 start -> end

простые задачи, потренил написание тестов

from functools import reduce


def unit_and_sort_lists(lists):
if len(lists) > 1:
total_list = reduce(lambda x, y: x + y, lists, [])
else:
total_list = lists[0]
return sorted(total_list)


def factorial(num):
if num < 0:
return False
if num == 0:
return 0
result = 1
for el in range(1, num + 1):
result *= el
return result


arr_lists = [[1, 3, 5], [2, 4, 6], [7, 8, 9]]
assert_result = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(unit_and_sort_lists(arr_lists))


==========*тесты*=========
from src.tasks import factorial, unit_and_sort_lists
import pytest


@pytest.mark.parametrize(
"n, result",
[
(0, 0),
(1, 1),
(5, 120),
(-1, False),

]
)
def test_factorial(n, result):
assert factorial(n) == result


@pytest.mark.parametrize(
"lists, result", [

([[]], []),
([[1, 2, 3]], [1, 2, 3]),
([[1, 3, 5], [2, 4, 6], [7, 8, 9]], [1, 2, 3, 4, 5, 6, 7, 8, 9]),
([[1, 2, 3], [2, 4, 5], [1, 3, 6]], [1, 1, 2, 2, 3, 3, 4, 5, 6]),
([[-2, -1, 0], [1, 2, 3]], [-2, -1, 0, 1, 2, 3])
]
)
def test_unit_and_sort_lists(lists, result):
assert unit_and_sort_lists(lists) == result