Dutchman Daily
906 subscribers
114 photos
16 videos
18 files
132 links
The other side of me
This is me:
@its_dutchman
Download Telegram
Forwarded from CrowNest (Hirbod Behnam)
نمی‌دونم چه جوری همچین چیزی ممکنه ولی رزبری KVM ساپورت میکنه. و QEMU می‌تونه روش VM بالا بیاره. من الان یه کرنل لینوکس روش اوردم بالا.
نمی‌دونم چرا اصلا باید همچین دستگاهی VMX (یا هر چی اسمش توی ARM هست) داشته باشه😂😂😂

And now that we know this, we are going to do the funniest thing ever...
😁2👍1
من پوزیشن کاریم توی شرکت رو خیلی دوست دارم. یکی از دلیلایی که خیلی دوستش دارم؛ شبیه بودنش به CTF هست.

جنرالی کارم ساپورت تکنیکال هست. در وهله‌ی اول وقتی بهش فکر می‌کردم خیلی برام جالب نبود ولی هرچی جلوتر می‌رفتم خیلی شبیه CTF می‌شد برام.

عموما چیزایی که میاد سمتم، هیچ ایده‌ای برای حلش ندارم. یک باگی که حتی خود کسی که کد زده هم نتونسته برطرفش کنه و حالا من باید بگردم و کدش و زیرساختش و سیستمش و نتورکش رو دیباگ کنم تا ببینم دلیل باگش چیه.

هیچ ایده‌ای ندارم باگه چیه، چرا داره اتفاق میوفته. هیچ ایده‌ای نسبت به پلتفرم و یا استکی که دارن برای کدشون استفاده می‌کنن ندارم و کلا چند ساعت وقت دارم تا با همه چی آشنا شم و دیباگ کنم و اینجا وقتی به پرچم میرسم که بتونم باگ رو پیدا کنم و فیکسش کنم.

خیلی قشنگه. خیلی سخته در اصل و واقعا خیلی می‌ترسم که یه جا توش کم بیارم ولی خیلی قشنگه. لیترالی هیچ کمکی نداری و باید دنبال یک root cause توی گرافی بگردی که خودت صرفا توی یه node از اون گرافی. هیچ ایده‌ای نداری گراف چه شکلیه و چجوریه.
🔥20👍2🤯1
چند روز پیش یک باگی از یکی از مشتریامون اومد سمتم. تقریبا ۲ روز مداوم و حدود ۱۱ ساعت وقت برد تا مشکلشو پیدا کنم.

خلاصه‌ی ماجرا:
این مشتری‌مون می‌خواست کلا استورج MinIOشو از public url برداره. برای این کار میخواست از nginx‌ای که توی namespace مشابه با همون پاد MinIOش بود، به آدرس داخلی MinIO Console بیاد nginx رو route کنه. اینجوری public url کنسول MinIO رو هم برمی‌داشت و می‌تونست از طریق nginx بیاد و route بشه به MinIO.

در همین حال می‌خواست یک basic auth هم سر این route از nginxش بذاره که علاوه بر authentication خود MinIO یک basic auth هم باشه.

کاری که کرده بود این بود که یک basic auth توی اون route از nginxش ثبت کرده بود. وقتی که وارد اون url می‌شدیم اول یوزر پس basic auth رو می‌زدیم و حالا وارد صفحه‌ی لاگ‌این MinIO Console می‌شدیم. بعدش که یوزر و پس MinIO هم می‌زدیم، authorised نمی‌شدیم و وارد نمیشد و رول بک می‌کرد باز به اول صفحه و دومرتبه basic auth رو می‌خواست.

خلاصه پیدا کردن باگ این قضیه با هزاران سرچ و تست‌های متفاوت چیزی حدود ۱۱ ساعت وقت از من برد.

در نهایت باگ این بود که باید توی همون کانفیگ nginx می‌زدیم که هدر Aurhorised رو خالی ست کنه. چرا؟ چون به صورت عادی باید به آدرس داخلی پاد MinIO Console ریکوئست http بزنیم و چون MinIO Console متود Authenticate خودشو داشت، وقتی ریکوئست رو میگرفت انتظار داشت که این هدر خالی باشه. ولی درصورتی‌که چون این مشتری می‌خواست حتما basic auth هم داسته باشه، وقتی که ما basic auth رو وارد می‌شدیم، این هدر یک پارامتر می‌گرفت و دیگه خالی نبود و وقتی می‌رسید دست MinIO Console، ریجکت می‌شد و باعث می‌شد که کنسول ما رو authorised نکنه و رول بک کنه به اول صفحه‌.
🔥18
This media is not supported in your browser
VIEW IN TELEGRAM
چقدر باحال! بنظر که دنیا داره به این سمت میره.
https://nostr.com/
🔥4🤔1
شرکت OpenAI داره با تک تک شرکت‌ها قرارداد میبنده و مخشون رو میزنه تا از اطلاعاتشون استفاده کنه.

اول که Stack Over Flow و حالا هم که Reddit.

دلیلش چیه؟ چون که از وقتی ChatGPT اومده، دیگه خیلی کم ملت سراغ این سایتا میرن و این سایتا وقتی دیدن که دارن کم میارن، رفتن با OpenAI قرارداد بستن که بیاد سایت‌هاشون رو Crawl کنه و از دیتاشون استفاده کنه.

https://openai.com/index/openai-and-reddit-partnership/

https://stackoverflow.co/company/press/archive/openai-partnership
💔7
disk.img
190 MB
سوال خیلی قشنگی بود، فردا حلشو بهتون می‌گم. (آسونم هست اگر خواستید حلش کنید حتما.)
👍4
اینم خیلی جالب بود، مسابقه که تموم شد حلشو می‌گم بهتون.
4
Dutchman Daily
disk.img
این رو نمی‌دونم نگاهش کردید یا نه. این یک اسنپ‌شات از دیسکه. فرض کنید مثلا از دیسک‌تون یه لحظه یه اسنپ‌شات می‌گیرید. اگر mountش می‌کردید و توی فایل‌هاش می‌گشتید، یک فایل موزیک پیدا می‌کردید که این فایله یه کد مورس بود و باید می‌دادید به یه decoderی. دیکدش می‌شد فلگ.
👍2
این هم فایلش بود
👍1
این رو من خیلی روش‌های متعددی زدم ولی نشد. strings و حدف یکی از rgbها و یه سری ابزار forensic و این‌ها. خلاصه نشد که نشد.
حلش چه شکلیه ولی. بنظر که png یه چی داره توی فایل فرمتش به اسم pallete. پالت چیه:
a table of (usually) 256 colors to allow for better compression.
👍2
به طور ساده پالت یه مجموعه‌ای از رنگ‌هاس که توی تصویرن. هر پیکسل توی عکس به یکی از رنگ‌های موجود در پالت اشاره می‌کنه. پالت هم مجموعه محدودی از رنگ‌ها داره. از پالت که استفاده میشه باعث میشه حجم فایل کم‌تر شه چون مثلا به جای اینکه بیاد اطلاعات هر پیکسل رو نگه دارین،‌صرفا میگه این پیکسل به این شماره پالت اشاره می‌کنه.
👍1
این ایده‌ش رو مهدی داد که احتمالا پالت‌هاش همه یه رنگن و اگر بیاییم عوض کنیم، فلگ مشخص شه. در واقع یعنی اومدن شماره‌ی پالت هر پیکسل رو یه چیز یکسان گذاشتن. به عبارتی همونجور که می‌بینید اومدن کل عکس رو سیاه کردن، پس اگر میومدیم رنگ پالت‌ها رو عوض می‌کردیم، اوکی می‌شد یحتمل.
👍1
دادیم کدش رو chat gpt برامون زد و اینکه خب درست هم زد!
👍1
این اسکریپتی بود که داد برای عوض کردن پالت‌های عکس:

from PIL import Image

def change_palette(image_path, output_path, new_colors):
"""
Change the palette of a PNG image to a new set of colors.

:param image_path: Path to the input PNG image.
:param output_path: Path to save the modified PNG image.
:param new_colors: List of RGB tuples representing the new colors for the palette.
"""
# Open the image
img = Image.open(image_path)

# Ensure the image is in palette mode
if img.mode != 'P':
raise ValueError("Image is not in palette mode")

# Flatten the new_colors list
new_palette = [value for color in new_colors for value in color]

# The palette should be 768 values (256 RGB tuples)
# If new_palette is shorter, pad it with zeros
if len(new_palette) < 768:
new_palette.extend([0] * (768 - len(new_palette)))
elif len(new_palette) > 768:
raise ValueError("Too many colors provided. The palette can have a maximum of 256 colors.")

# Apply the new palette
img.putpalette(new_palette)

# Save the modified image
img.save(output_path)

# Example usage:
image_path = 'pals.png' # Path to your input PNG image
output_path = 'output.png' # Path to save the modified PNG image

# Define a new palette (example: a few basic colors)
new_colors = [
(255, 0, 0), # Red
(0, 255, 0), # Green
(0, 0, 255), # Blue
(255, 255, 0), # Yellow
(255, 0, 255), # Magenta
(0, 255, 255), # Cyan
# Add more colors as needed...
]

change_palette(image_path, output_path, new_colors)
👍3
Dutchman Daily
اینم خیلی جالب بود، مسابقه که تموم شد حلشو می‌گم بهتون.
و خب بله وقتی پالتارو عوض کردیم، اون عکس شد این عکس:
👍3
👍4