Astro Terminal – Telegram
Astro Terminal
157 subscribers
267 photos
36 videos
28 files
79 links
Welcome to Astro Terminal, I'm CS-Astronaut: {a Retro vibe Astro boy exploring the galaxy of Computer Scince!} 🛸

GH* github.com/CS-Astronaut 👾

PV* @RetroAstro 👾
Download Telegram
Cyan Controversy 🌌🪐
Photo
⁉️
اینجا NASA رو دیدم یادم افتاد راستی🌚👾
شاید باورتون نشه ولی ناسا دسترسی API رایگان داره که یکیش که خیلی جالب بود واسم APOD یا
![Astronomy Picture Of Day](APOD)

میتونید تصویر روز ستاره شناسی رو از کهکشان با یک request پایتون ساده بگیرید و توی پروژه هاتون استفاده کنید 🤷‍♂️

اگر به اخترشناسی و Astronomy علاقه دارید میتونید این اسکریپت پایتون رو یجوری توی زمان بندتون بگنجونید که ران بشه هر روز که سیستمتون روشن میشه و با کپشنش ذخیرش کنه! {جلوتر میگم منظورمو!}
❤‍🔥2
روی هر API بزنید میاره مشخصاتشو اینجا گفته اون درخواست با فرمت HTTP که باید بزنیم چیه که تو پایتون با کتابخونه request میشه:
import requests, openpyxl

r = requests.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY").json()
img = requests.get(r["url"]).content
open("apod.jpg","wb").write(img)

wb = openpyxl.Workbook()
ws = wb.active
ws.append(["noscript","date","explanation","image_url","local_file"])
ws.append([r["noscript"],r["date"],r["explanation"],r["url"],"apod.jpg"])
wb.save("apod_data.xlsx")
فقط حواستون باشه اون api_key=DEMO_KEY رو اوکی کنید و با API KEY خودتون DEMO_KEY رو تعویض کنید
یه Bash Script هم میتونیم بنویسیم و بذاریمش آدرسش رو بذاریم توی یکی از خط های .bashrc سیستم لینوکسیمون که به صورت معمول ران بشه و چک کنه اگر فایل عکس Astronomy امروزمون رو داریم اسکریپت پایتونمون رو اصن ران نکنه!

یا اینکه با دستور crontab بیایم به job scheduler یا همون زمان بند سیستم عامل لینوکسیمون یک تسک اضافه کنیم که هرموقع سیستم ران شد این کار ها رو انجام بده که خودم این راه رو ترجیح میدم:


اول خود bash noscript که اسمشو میذاریم run_apod.sh که قراره اسکریپت پایتون رو به صورت زمان بندی شده ران کنه رو مینویسیم و path فایل هم مینویسیم:

#!/bin/bash
cd /path/to/your/noscript #change this!!!

TODAY=$(date +%Y-%m-%d)
if [ -f "apod_$TODAY.jpg" ]; then
echo "APOD for today ($TODAY) already exists. Skipping."
else
echo "Fetching APOD for $TODAY..."
/usr/bin/python3 apod.py
fi

بعد دستورات زیر رو توی ترمینالمون وارد میکنیم:

به اسکریپتمون دسترسی اجرا شدن میدیم با دستور chmod :
chmod +x /path/to/your/noscript/run_apod.sh


اینجا اون زمان بند رو فراخوانی میکنیم که ورودی هاش رو ادیت کنیم: (ورودی هاش رو از یه فایل میگیره چون توی لینوکس همه چیز فایله!!! 🗃) {راستی نیازه که پکیج cronie رو نصب داشته باشید برای دسترسی به زمان بند}
crontab -e

این خط رو به اون فایل اضافه کنید:
@reboot /path/to/your/noscript/run_apod.sh


ترتیب کارمون شد اینشکلی:
crontab(Bash(python)))
Forwarded from پیکتوره (amin)
2
Forwarded from /g/‘s Tech Memes
👍2
خدا بخیر کنه🌚🤷‍♂️
This media is not supported in your browser
VIEW IN TELEGRAM
When Your Project Pass 2000 Lines and The chaos Kicks In !!!
3
آموزش تکامل به استاد دانش خانواده با رسم شکل
پ.ن: رفرنس پردازش تکاملی😂🧬
این صندلی‌ها نماد علافی‌ان
👍2
The Cloud, 2016

Donald Lipski
Forwarded from پیکتوره (amin)
TorhamDev | تورهام 😳
Photo
تست کردن کانکارنسی در جنگو

دیشب داشتم تسک مصاحبه شرکت صرافی تبدیل میزدم. داخل تسک لازم بود یک api رو تست کنم که مشکل race condition نداشته باشه. برای اینکار با استفاده از pytest-django شروع کردم تسک های معمول نوشتن و همچی اوکی بود. برای تست‌هام هم یک fixture نوشتم که برام یک Seller بسازه و با استفاده از اون ریکوئست بزنم به api. همین api نباید حساب seller بیشتر از چیزی که درخواست داده تایید کنه. مثلا اگر درخواست داده ۱۰۰ تومن زیاد تر بشه اگر همزمان ۲۰ تا درخواست برای تایید این افزایش بیاد فقط یکدونه باید تایید بشه.

مشکل این تایید شدن نیست شما برای این جلوگیری از این ماجرا میتونید lock دیتابیس بگیرید.

مشکل اونجایی پیش اومد که من برای تست این race condition اومدم ۲۰ تا ترد ساختم و اون ۲۰ تا همزمان ریکوئست میزدن به این view ولی اتفاقی که افتاد این بود که Seller ای که من داخل فیکسچر ساخته بودم داخل این تردها انگار وجود نداشت. زمانی که ریکوئست خارج از thread میخورد همچی اوکی بود و api میتونستد sellerای که براش درخواست داده بودم رو پیدا کنه. اما تمام درخواست‌های داخل تردها به ارور ۴۰۴ میرسیدن چون seller وجود نداشت.

بعد از فحش‌ها و تلاش‌های فراوان و تحقیق فهمیدم که جنگو عزیز برای هر تست یک transaction باز میکنم و تغییراتی که ایجاد میشه به خاطر اینکه داخل یک ترنزاکشن هستن کامیت نمیشن :) در نتیجه دیتابیس همچین ابجکتی برای تردهایی که ساختم نداره :) و باید همونطور که در عکس میبینید جنگو فورس کنید که تغییرات کامیت کنه تا داخل ترد‌ها هم بتونید دیتایی که ساختید ببینید.

و تمام اینا تو محیط تست بود دیگه.

@TorhamDevCH