import __hello__
277 subscribers
16 photos
55 links
Канал про IT, здебільшого WEB та Python, але буває й у інші теми заносить
Download Telegram
Microsoft скасувала фінансування проєкта Faster CPython і звільнила частину команди (як я зрозумів, тих кого не звільнили - розподілять по іншим проєтам). Причому лист про звільнення надіслали коли команда була на пів-шляху до PyCon Pittsburg.
🫠😥
😢15🤬1🌚1
import __hello__
Microsoft скасувала фінансування проєкта Faster CPython і звільнила частину команди (як я зрозумів, тих кого не звільнили - розподілять по іншим проєтам). Причому лист про звільнення надіслали коли команда була на пів-шляху до PyCon Pittsburg. 🫠😥
Щось про це Гвідо мовчить, але він репостнув ось що: у липні вийде документалка про Python 🐍

The full film features: Barry Warsaw, Brett Cannon, @drewhouston, @gvanrossum, @gutworth, @jessicamckellar, Lambert Meertens, Lisa Guo, Lisa Roach, @mariatta, @mitsuhiko, @myriadicity, Robin Friedrich, Robert Kahn, @paulweveritt, @pwang, Sjoerd Mullender, @stevenpemberton, @timoreilly, @teoliphant, @tonroosendaal


У оригінальному твіті перелічено багато людей, причому судячи по нявності там Armin Ronacher (mitsuhiko) - фільм стосується не лише core-python розробників. Ну щож, треба буде подивитись (шкода що у кінотеатрах не покажуть 😁).

https://fxtwitter.com/gvanrossum/status/1924092904932282569
🔥32😁1🤡1
Внутрішні інструменти Google та їх альтернативи
В Google є величезна кількість внутрішних технологій та інструментів. Й є чудовий репозиторій з альтернативними інструментами та технологіями для/від колишніх гуглерів. Не для всього є альтернативи, але можна побачити різноманіття того, що застосовується всередені Google. Якщо цікаво ознайомитися, то ось лінк - https://github.com/jhuangtw/xg2xg
👍7🤔1👀1
Штука котра вартувала мені не однієї години дебагу.
У starlette є два типи мідлварів - BaseHTTPMiddleware та Pure ASGI Middleware. Я хз навіщо аж два, тим паче що "чисту" мідлварь писати не надто складніше ніж іншу.
Але у BaseHTTPMiddleware є особливість, на яку любʼязно вказує документація:
Using BaseHTTPMiddleware will prevent changes to contextvars.ContextVars from propagating upwards.

Тобто якщо ви проставите значення у контекстварі усередині ендпоінта, то усередні мідлварі ви це значення вже не побачите.
Здається звʼязане це із тим що у цьому випадку starlette копіює контекст та пропагує його у ендпоінти, але так як це копія - зміни зроблені у ньому не будуть відображатись у оригіналі.
Але ок, документація вказує що Pure ASGI Middleware не має цієї особливості.
To overcome these limitations, use pure ASGI middleware, as shown below.

Тож ок, мені треба реквесто-специфічний контекст, я для цього роблю свою "чисту" мідлварь, імплементую у ній що треба і все ок, так?
А от і ні, як виявляється, BaseHTTPMiddleware (тварюка така) не лише факапить контекст для себе, а вона ще й факапить контекст навіть для "чистих" мідлварей, якщо BaseHTTPMiddleware вказана першою.

Тобто отак наша мідлварь у якій ми використовуємо contextvars буде робити

app = Starlette()
app.add_middleware(PureMiddleware) # Pure ASGI Middleware який використовує contextvars
app.add_middleware(BaseMiddleware)


А отак вже не буде

app = Starlette()
app.add_middleware(BaseMiddleware)
app.add_middleware(PureMiddleware)


І в принципі до цього можна б було і своєю головою додуматись, бо по класиці мідлварі обгортають одна одну і та що зверху може афектити нижні.
Але дока це явно не пише, і до того ж ти явно можеш і не побачити що у тебе використовується мідлварь якщо юзаєш 3rd-party інтеграції (що зі мною і сталось)
Ось наприклад https://github.com/bobbui/json-logging-python використовує чогось саме BaseHTTPMiddleware.
Коротше якщо вам у starlette (і у fastapi, і подібних фреймворках) треба мідлварь котра використовує contextvars - ставте її завжди першою, бо однієї лише наявності
Pure ASGI Middleware, як виявилось, недостатньо

У першому коменті напишу приклад, як воно працює насправді.


Лінки:
- https://www.starlette.io/middleware/#basehttpmiddleware
- https://www.starlette.io/middleware/#pure-asgi-middleware
👍84
😁9🗿52🤡1💯1
​​Обожнюю таке. Нещодавно вийшла стаття, яка розглядає вплив ChatGPT на змогу людського мозоку розвиватися. Стаття, безумовно, цікава, повна пояснень та висновків, та досить велика. А ще доволі клікбейтна, бо там може бути написано, що люди тупішають, а може навпаки, що використання ChatGPT може допомогти розвивати мозок. Короче, ніпанятна, треба читати.

І тут стає найцікавіше. Багато журналістів, блогерів та усіх таких, написали про це у своїх виданнях із подачею, що люди тупішають, бо використовують ChatGPT. Сенсація, клікбейт, хайп.

А потім виявилось, що у статтю був вбудований промт інджекшн, який казав, що для LLM треба подавати статтю однобоко, з позиції, що люди тупішають. І журналісти це зробили, бо ж клікбейт. Ну й тому що вони не читали статтю. Отупішали, короче, і журналісти і читачів трошки також.
😁18🤡3
Вже давно хочеться щось по вечорам попілити, але придумувати новий пет проєкт щоб потім його не дороблювати не хочеться, а до Advent of Code ще цілий місяць. Добре що я згадав що є така штука як codecrafters.io
Це не просто якісь абстрактні завдання типу літкода чи туду листів, це платформа яка пропонує робити завдання "а давай відтворимо redis|kafka|git|etc. на мові яка тобі подобається".
Наприклад відтворюємо Redis - там десь близько 90 завдань, для кожного є набір тесткейсів і ти шаг за шагом робиш свій редіс, попутньо розбираючись у тому як все працює у справжньому редісі, у протоколі RESP і тд.
А якщо обрати мову яку ти не знаєш, то окрім розуміння того як працює технологія ще й нову мову вивчиш 😁.
Коротше прикольна ідея, кому також інколи хочеться щось покодити але не хочеться видумувати проєкт, пропрацьовувати задачі і писати тести, а просто хочеться кодити - можете звернути увагу

Можливо комусь буде здаватись що це реклама, але це не реклама. Камон, у мене канал на 250 підписників у який я щось пощу раз на пів-року 😁
🔥161😁1👀1
Цього року (і кожного наступного) AOC буде тривати 12 днів замість 25 (прям як пивні адвент календарі) і більше не буде глобального лідерборда.

Зникнення лідерборда мене не хвилює, бо я у ньому не приймав участі, бо люблю поспати 😁
А 12 днів мабуть буде навіть краще, менше стресу що не встигнеш закінчити івент до кінця року. Взагалі не розумію як автор АОС протримався так довго і скільки взагалі сил і вільного часу було покладено на цей івент за 10 років.
👍14🤯4🤔1
😁16💯2🤪2
Вийшла 9 версія pytest, і тепер у ньому з’явилась повноцінна підтримка subtests.
Цю фічу вони підрізали у стдлібного unittest. Але навіщо, якщо у pytest є такий зручний маркер parametrize?
Бо parametrize корисний лише коли дані для теста відомі ще до того як тест почався, якщо ж щоб отримати ці дані треба спочатку зробити виклик у апі, чи у БД, то зробити це через paramtrize не вийде.
Я часто на ці обмеження натикався і або тягнув якийсь сторонній плагін який реалізовував схожу функціональність, або, що частіше, просто доводилось писати декілька однотипних тестів.

Приклад:


def test_math(subtests):
for a, b, result in [(1, 2, 3), (2, 2, 4), (5, 5, 11)]:
with subtests.test(msg=f"{a}+{b}"):
assert a + b == result


Тепер якщо один підкейс падає — весь тест не валиться, а репорт покаже всі помилки окремо.
Приклад у цьому виді безглуздий, бо саме тут краще зробити як і раніш:


import pytest

@pytest.mark.parametrize(
"a, b, result",
[
(1, 2, 3),
(2, 2, 4),
(5, 5, 11),
]
)
def test_math(a, b, result):
assert a + b == result


Але якщо для отримання значень a, b або result треба робити якісь обчислення, котрі неможливо виконати до початку теста - тоді subtests стане дуже в нагоді.

Лінки:
- https://docs.pytest.org/en/stable/how-to/subtests.html
- https://github.com/pytest-dev/pytest/issues/1367
- https://docs.pytest.org/en/stable/example/parametrize.html
- https://docs.python.org/3.4/library/unittest.html#distinguishing-test-iterations-using-subtests
👍82🥱1
Ну шо, поїхали

https://adventofcode.com/2025/day/1
🔥102
import __hello__
Ну шо, поїхали https://adventofcode.com/2025/day/1
Хто застряг на 2 дні - ось підказка
😁5🤯21🤓1
import __hello__
Хто застряг на 2 дні - ось підказка
Ось вам і до сьогоднішнього дня підказка, не дякуйте
1🙈1
З НР🎅
12🎉4🎄4