
Społeczność
Python
Dla programistów Python
W Pythonie 3.14 moduł http.server otrzymał w końcu natywną obsługę HTTPS.
https://docs.python.org/3/library/http.server.html#cmdoption-http.server-tls-cert
Teraz dzięki poniższej komendzie można na szybko wystawić stronę na świat lub podzielić się plikami z innymi korzystając z zaszyfrowanego połączenia:
python -m http.server 8080 \
--tls-cert <*.crt> \
--tls-key <*.key> \
-d <directory>
#technologia #python #programowanie
Zaloguj się aby komentować
Poprawiłem sobie wykresik bilansu energii dla mojego gospodarstwa domowego, jestem z siebie dumny więc wrzucam żeby się pochwalić #stepujacybudowlaniec
KOD:
#!/usr/bin/env python3
import psycopg
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
# ---- KONFIGURACJA BAZY ----
DB_NAME = "rachunki_prad"
DB_USER = "raport_reader"
DB_PASSWORD = "bezpieczne_haslo"
DB_HOST = "192.168.123.11"
DB_PORT = "5432"
# ---- POŁĄCZENIE Z BAZĄ ----
conn = psycopg.connect(
dbname=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
host=DB_HOST,
port=DB_PORT
)
# ---- POBRANIE SUM MIESIĘCZNYCH ----
query = """
SELECT
to_char(date_trunc('month', date), 'YYYY-MM') AS month,
SUM(b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11 +
b12 + b13 + b14 + b15 + b16 + b17 + b18 + b19 + b20 + b21 + b22 + b23) AS total_bilans
FROM energy_balance
GROUP BY month
ORDER BY month;
"""
df = pd.read _sql(query, conn)
conn.close()
# ---- PRZYGOTOWANIE DANYCH ----
df["month"] = pd.to _datetime(df["month"], format="%Y-%m")
df = df.set_index("month").sort_index()
# przelicz Wh → kWh i odwróć znak (żeby dodatni bilans był produkcją nad osią)
df["total_bilans"] = -(df["total_bilans"] / 1000)
# ---- UZUPEŁNIENIE BRAKUJĄCYCH MIESIĘCY ----
full_index = pd.date _range(df.index.min(), df.index.max(), freq="MS")
df = df.reindex(full_index, fill_value=0)
df.index = df.index.strftime("%Y-%m")
# ---- WYKRES ----
fig, ax = plt.subplots(figsize=(13, 12)) # 2x wyższy wykres
colors = df["total_bilans"].apply(lambda x: "green" if x >= 0 else "red")
bars = df["total_bilans"].plot(kind="bar", color=colors, ax=ax)
# linia zerowa
ax.axhline(0, color="black", linewidth=1.0)
#
ax.grid(True, axis="y", linestyle="--", linewidth=0.5)
ax.grid(True, axis="x", linestyle="--", linewidth=0.3, alpha=0.3)
ax.set_axisbelow(True)
#
for i, label in enumerate(df.index):
year = int(label[:4])
if year % 2 == 0: # parzysty rok
ax.axvspan(i - 0.5, i + 0.5, color='lightgray', alpha=0.2)
# opisy i tytuł
ax.set_xlabel("Miesiąc")
ax.set_ylabel("Bilans energii [kWh]")
ax.set_title("Miesięczny bilans energii")
# legenda
from matplotlib.patches import Patch
legend_elements = [
Patch(facecolor="green", label="Nadwyżka produkcji"),
Patch(facecolor="red", label="Nadwyżka zużycia")
]
ax.legend(handles=legend_elements, loc="upper left")
plt.xticks(rotation=45, ha="right")
plt.tight_layout()
plt.savefig("raport_miesieczny_bilans.png", dpi=150)
plt.show ()

Zaloguj się aby komentować
Nie używałem dużo Pyhonowskiego REPL - ale teraz jak ma już na Linuksie kolorowanie błędów i można z niego wyjść za pomocą exit lub quit (chociaż CTRL + D działało odkąd pamiętam
Tutaj więcej info o zmianach w REPL, które przyniósł Python 3.13:
-
Dane wyjściowe do konsoli mają teraz domyślnie włączony kolor.
-
Interaktywną przeglądarkę pomocy pydoc można otworzyć, naciskając F1.
-
Możesz przeglądać historię wiersza polecenia za pomocą F2.
-
Możesz łatwiej wkleić duże bloki kodu, naciskając F3, aby włączyć specjalny tryb wklejania bloków.
-
Możesz po prostu wpisać exit lub quit, zamiast exit() lub quit(), aby opuścić REPL.
Należy pamiętać, że te ulepszenia są obecnie dostępne tylko w systemach Linux i macOS. Nie są one dostępne w systemie Microsoft Windows, nawet w przypadku korzystania z nowego terminala systemu Windows.
#technologia #programowanie #python

Zaloguj się aby komentować
Napisałem tak dobre skrypty pod siebie, że aż muszę się pochwalić
Skrypt przekształca video plik mkv wyodrębniając jego dźwięk.
a następnie na jego podstawie jest robiony plik txt co kto tam mówi
po co to, komu zapytacie...
Byłem na szkoleniu, które mam nagrane i teraz sam będę prowadzić takie szkolenia
więc w ramach notatek
Zaloguj się aby komentować
Napisałem sobie taki krótki program do robienia zdjęć z kamerki, gdzie potem sklejam z tego timelapse, ale nie rozumiem jednej rzeczy - zdjęcia zapisują się... z opóźnieniem. Musiałem dolać ukorzeniacza do awokado, więc zabierałem je sprzed kamerki. Po skończonej robocie (9:47) usiadłem do kompa i sprawdziłem poprzednie zdjęcia czy ustawiłem rośliny w miarę w tych samych miejscach. A tu się okazuje, że zdjęcie które powinno być zrobione w momencie skończenia, to tak naprawdę zdjęcie sprzed kilku minut. Łącznie zajęło mu 8 minut (5 zdjęć), zanim dotarł do momentu w którym skończyłem. Dlaczego tak jest? Czegoś tu nie rozumiem?
Kod:
import cv2
from time import sleep
from datetime import datetime
cam = cv2.VideoCapture(0)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080.0)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920.0)
cam.set(cv2.CAP_PROP_AUTO_WB, 0.0)
cam.set(cv2.CAP_PROP_WB_TEMPERATURE, 7000)
cam.set(cv2.CAP_PROP_SATURATION, 75)
cam.set(cv2.CAP_PROP_CONTRAST, 100)
while True:
retval, frame = cam.read()
dt = datetime.now()
ts = int(datetime.timestamp(dt))
if retval != True:
print(str(dt) + ": Can't read frame")
sleep(5)
continue
cv2.imwrite(str(ts) + '.png', frame)
print(str(dt) + ": saved img " + str(ts) + ".png")
sleep(120)
#python #programowanie





@markxvyarov dlaczego tak uważasz? Jeśli retval będzie false, to kontynuuję loop, żeby nie wywalać całego programu, ale nie zapisuję obrazu
@Prucjusz najwolniejsze w opencv w moim przypadku jest inicjalizowanie kamery przez cv2.VideoCapture(0). Ja loopuję się już po inicjalizacji, nie zwalniam kamery. Sam zapis odbywa się w ciągu ~0,1s, zakładając że sleep trwa równe 120s (takie mam różnice w timestampach).
@psalek dzięki, to mi wiele powiedziało. Wygląda na to że to właśnie bufor. Niby mogę zastosować te rozwiązania (choć porzucanie ramek przez opencv z tego co znalazłem odbywa się poprzez ustawianie odpowiednich properties kamery i nie jestem pewien czy 1. jest to wspierane przez mój model, 2. jest to nadal w opencv, bo gdzieś była wzmianka, że to usunęli), ale to w sumie byłaby sztuka dla sztuki - a w moim przypadku rozwiązanie się w sumie sprawdza. Zwyczajnie mnie ciekawiło dlaczego tak się dzieje i mam odpowiedź. Dzięki
@GrindFaterAnona ffmpeg na wsl (bo na windowsie nie działa globbing, trzeba jakoś kombinować, mi było łatwiej to odpalić na wsl):
`ffmpeg -hwaccel cuda -hwaccel_output_format cuda -framerate 60 -pattern_type glob -i '*.png' -c:v hevc_nvenc -gpu any -rc vbr -cq 28 out.mp4`
Tu akurat z akceleracją gpu, jeśli masz nvidię 1xxx lub nowszą to powinno działać, na AMD się nie orientuję - ale zawsze można wywalić parametry hwaccel i przeliczać procesorem.
Zaloguj się aby komentować
W pracy, udało nam się przepisać celery z Pythona na nasz własny menedżer tasków w Rust.
Wydajność jest zauważalnie lepsza, bo korzystamy ze starych komponentów i tam różnice są o wiele bardziej widoczne, niż na zwykłym komputerze, gdzie oba rozwiązania przetwarzają zadania niemal natychmiast.
Zatem mamy część z kodem w Rust, ale ciągle część z obliczeń musimy wykonać w pojedynczym procesie pythona do którego wysyłamy resty z zapytaniami.
Jednak celery miało jeden duży plus - uruchamiało się jako osobne procesy(co wydłużało o kilka sekund proces uruchamiania programu), dzięki czemu operacje numpy/scipy na CPU, były ładnie rozdzielane po stronie pythona na wszystkie wątki(na urządzeniu są 4 rdzenie i tyle samo procesów celery było uruchamianych)
Operacje obliczania statystyk(mowa o powyższym zadaniu korzystającym z numpy/scipy) są często zlecane w większej ilości na raz, dlatego ważne jest by to zrównoleglić.
Próbowałem robić to przez proste rozdzielanie tasków na wiele wątków, jednak, czasy bywały nawet czasami gorsze, niż jak robiłem to w jednym wątku - domyślam się że to wina GIL i tego że nie działa zbytnio dobrze, gdy wątki wykonują masę rzeczy na cpu.
Drugim problemem jest to że w przypadku równoległych działań wyskakują dziwne ostrzeżenia, przez co myślę że np. matplotlib, nie jest przystosowany do działania z wielu wątków(mimo że zadania które wykonuję od początku do końca działają tylko w jednym wątku), bo przechowuje globalnie jakieś parametry ze swoim stanem.
Kojarzycie, w jaki sposób, mógłbym w miarę prosto, móc wykonywać te obliczenia po stronie pythona na wielu wątkach?
#python
@qarmin jest standardowy moduł w Pythonie, nazywa się multiprocessing. W nim znajdziesz Pool i metody typu starmap i map. Najczęściej z tego korzystam gdy trzeba zrównoległość obliczenia.
https://superfastpython.com/multiprocessing-pool-map/
# SuperFastPython.com
# example of parallel map() with the process pool
from random import random
from time import sleep
from multiprocessing.pool import Pool
# task executed in a worker process
def task(identifier):
# generate a value
value = random()
# report a message
print(f'Task {identifier} executing with {value}', flush=True)
# block for a moment
sleep(value)
# return the generated value
return value
# protect the entry point
if __name__ == '__main__':
# create and configure the process pool
with Pool() as pool:
# execute tasks in order
for result in pool.map(task, range(10)):
print(f'Got result: {result}', flush=True)
# process pool is closed automatically
Na zamieszczonym zdjęciu znajdziesz wszystkie metody z klasy Pool które możesz wykorzystać.

@qarmin dla tego podałem multiprocessing a nie threading. Przy tym drugim, wątki są blokowane przez GIL, i są one obsługiwany tylko przez jeden rdzeń procesora. Najczęściej wykorzystuje się do zrównoleglenia operacji IO. Tym czasem multiprocessing uruchamia oddzielne procesy pochodne od głównego, dlatego każdy proces może być w tym samym czasie obsłużony przez CPU.
Metoda którą Ci podałem jest o tyle prosta że o nic nie trzeba dbać, a funkcje zwracają wyniki obliczeń.
Zaloguj się aby komentować
A z jakich jednolinijkowców Wy korzystacie?
#technologia #programowanie #python

@wonsz - itertools to są ubertools
Zaloguj się aby komentować
⚡ Podsumowanie dla użytkownika @koszotorobur! ⚡
✍️ Twoje wpisy ✍️
-
Liczba Twoich wpisów (które nadal istnieją): 55
-
Suma wszystkich otrzymanych przez Ciebie piorunów: 1686
-
Suma wszystkich komentarzy pod Twoimi wpisami: 903
-
Twój najbardziej piorunowany wpis (215 pioruny): https://www.hejto.pl/wpis/hejto-podsumowanie-roku-2024-dajesz-zap-dostajesz-podsumowanie-w-speech-balloon-
-
Twój najbardziej komentowany wpis (261 komentarze): https://www.hejto.pl/wpis/hejto-podsumowanie-roku-2024-dajesz-zap-dostajesz-podsumowanie-w-speech-balloon-
-
Najczęściej przez Ciebie używane społeczności: Hydepark (10), Gry (7), Ciekawostki (6), Muzyka (5), Komputery (4)
-
Najczęściej przez Ciebie używane tagi: gry (11), technologia (5), komputery (5), muzyka (5), gotowanie (5)
💬 Twoje komentarze 💬
-
Liczba wszystkich napisanych przez Ciebie komentarzy (które nadal istnieją): 6877
-
Twój najbardziej piorunowany komentarz (82 pioruny): https://www.hejto.pl/wpis/ale-mam-zly-dzien-wlasnie-sobie-siedze-i-patrze-na-dwoje-pracownikow-zatrudniony?commentId=cadd38b9-1f7a-4f7d-ac6f-bf31ac4d16e1
Zaloguj się aby komentować
Po przeczytaniu tego artykułu dowiesz się jak łatwo wczytywać, przetwarzać i analizować dane w Pythonie.
#technologia #programowanie #python #pandas

@TuzZaRogiem - próbowałeś ominąć ten rząd przy wczytywaniu może: https://www.statology.org/pandas-read-excel-skip-rows/
Zaloguj się aby komentować
Exploring Python’s Lesser - Known Standard Libraries
Artykuł opisujący niezwykle przydane moduły ze Standardowej Biblioteki Pythona takie jak collections, itertools oraz functools - wraz z przykładami!
#technologia #programowanie #python

Zaloguj się aby komentować
Przydatne wskazówki do optymalizacja kodu Pythona tak aby wykonywał się szybciej.
#technologia #programowanie #python

Zaloguj się aby komentować
100 praktycznych zadań do ćwiczenia Pythona.
#technologia #programowanie #python

Zaloguj się aby komentować
Poradnik jak dokonać migracja z modułu pytz do modułu zoneinfo:
https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
Moduł zoneinfo został dodany do biblioteki standardowej w Pythonie 3.9 - jeśli dalej używasz modułu pytz do obsługi stref czasowych to zalecana jest migracja do zoneinfo.
#technologia #programowanie #python #pytz #zoneinfo

Zaloguj się aby komentować
Kanał wyjaśniający zaawansowane tematy dotyczące Pythona w przystępny i zwięzły sposób - po angielsku.
#technologia #programowanie #python
Zaloguj się aby komentować
Polars vs. pandas: What’s the Difference?
Dla zainteresowanych Data Science co używają pandas ale nie słyszeli jeszcze o zorientowanym na szybkość polars.
#technologia #python #datascience #polars #pandas
Zaloguj się aby komentować
Starannie dobrane biblioteki Pythona, z naciskiem na obróbkę danych oraz uczenie maszynowe!
#programowanie #python
Yo generalnie to na githubie to prawie do wszystkiego jest takie repo. Wpisujecie interesującą was frazę np język programowania, nazwę systemu, menagera okien itp + "awesome" i macie czasem nawet kilka wyników. Przykłady: awesome-nodejs awesome-kde awesome-hyprland czy najzabawniejsze awesome-awesome-wm (bo jest coś takiego jak awesome-wm xD).
Zaloguj się aby komentować
Krótkie video porady na temat Pythona:
https://www.youtube.com/@b001/shorts
Bo czasami lepiej zobaczyć na własne oczy by zrozumieć
#programowanie #python #tipsandtricks
@piotrb - ze wszystkimi poradnikami i tutorialami trzeba uważać i patrzeć na nie krytycznie
Niemniej dużo tych porad w tych filmikach to po prostu standardy pythonowe, które nie są oczywiste dla początkujących oraz ludzi przechodzacy z innych języków.
Ja osobiście nie znalazłem źródła 100% poprawnego - prócz może oficjalnej dokumentacji, która jest blisko, ale nie jest jednak skondensowanym źródłem wiedzy do uczenia się "na szybko".
Zaloguj się aby komentować
Oficjalny poradnik do tego jak skonfigurować vscode pod Pythona i jak go używać.
#programowanie #python #vsc #vscode #visualstudiocode
Zaloguj się aby komentować
Jak nauczyć nastolatka Pythona?
Nie szukam teoretycznych informacji bo to sam jestem w stanie sobie znaleźć.
Szukam praktycznych rad i opinii osob które mają doświadczenie w uczeniu programowania młodych osób - nawet jeśli odnieśli porażkę to mogą być w stanie poradzić czego nie robić/unikać.
Hejto pomóż!
#programowanie #python
Kiedyś wpadłem na https://www.codingame.com/home I pomyślałem że może się nadawać do nauki.
Ale nie sprawdzałem.
Dla mnie zrobienie jednego z ich challenge było niezłą frajdą.
@koszotorobur to zależy czego chcesz nauczyć.
Przygotowanie do olimpiady informatycznej to jest jakaś opcja i UW ma dużo materiałów na ten temat oraz są dostępne zadanka https://szkopul.edu.pl/p/default/problemset/oi/19
Ja w tym wieku jak się uczyłem sam to chyba najprostsza była logomocja (z żółwiem) bo było widać gdzie się znajduje żółw po odpaleniu programu i co skopałem. Też są jakieś zawody, ale tu byś musiał poszukać.
No chyba że dzban, to mu pokaż Django i niech klepie CRUDy aż mu się znudzi xD
@wombatDaiquiri - olimpiady to nie koniecznie - to są zwykłe nastolatki bez szczególnych zainteresowań i talentów
Moim celem - i właściwie ich celem bo się na to zgodzili - jest zrozumienie czym tak naprawdę jest programowanie i poznanie Pythona i jego możliwości w takim zakresie, który umożliwi im napisanie prostego programu samodzielnie.
Oni są tak zieloni, że muszę im pokazać jak się Pythona instaluje i jak zainstalować VSC i skonfigurować go pod Pythona - wtedy przejdę do podstaw samego języka.
Cały dzień o tym myślę i już mam plan i proste zadania - może napiszę kiedyś co przygotowałem dla nich i jak uczenie poszło.
@koszotorobur ja dla takich niezainteresowanych pracuję nad zajęciami mocno korzystającymi z ChatGPT i zakładającymi że już mają dostęp do komputera z profesjonalnym i przygotowanym IDE. Może to jest kierunek? W końcu chyba łatwiej się nauczyć zadawać pytania jak można dostać odpowiedź w chwilę o każdej porze dnia i nocy?
Zaloguj się aby komentować













