Forwarded from LearnPOV | لرن پی او وی
سه نفر حمایت کنن میتونیم استوریم بزاریم🔥😁
البته قابلیت های بیشتری فعال میشه، خلاصه که جینگولای بیشتری به پست ها اضافه میشه 😂
Forwarded from DevTwitter | توییت برنامه نویسی
🌐 دومین بوتکمپ استخدامی برنامهنویسی Asp.Net دانشکار
⭐️ با محتوای جدید و بهروزشده
💻 اگر به برنامهنویسی وباپها، اینترنت اشیاء، اپلیکیشنهای موبایل و ویندورز و کار در شرکتهای بزرگ علاقه داری، این بوتکمپ مناسبته!
🟣 سرفصلهای این دوره شامل:
🔸 Object-oriented programming
🔸 Design patterns
🔸 Algorithm
🔸 Linq
🔸 EFCore
🔸 و ۱۹ سرفصل دیگر!
🔽 مزایای این بوتکمپ:
✅ +۱۰۰ ساعت آموزش و پروژه
✅ اساتید حرفهای از شرکتهای خوب کشور
✅ پروژههای مشابه بازار کار
✅ منتور حرفهای اختصاصی
✅ مدرک معتبر و کمک به استخدام بعد از اتمام دوره
✴️ امکان پرداخت به صورت قسطی!
🔽 برای ثبتنام اولیه و مشاوره رایگان روی لینک زیر کلیک کن:
👇🏻
🔗 https://dnkr.ir/kr8qX
📩 و یا به آیدی زیر پیام بده:
@daneshkar_support
⭐️ با محتوای جدید و بهروزشده
💻 اگر به برنامهنویسی وباپها، اینترنت اشیاء، اپلیکیشنهای موبایل و ویندورز و کار در شرکتهای بزرگ علاقه داری، این بوتکمپ مناسبته!
🟣 سرفصلهای این دوره شامل:
🔸 Object-oriented programming
🔸 Design patterns
🔸 Algorithm
🔸 Linq
🔸 EFCore
🔸 و ۱۹ سرفصل دیگر!
🔽 مزایای این بوتکمپ:
✅ +۱۰۰ ساعت آموزش و پروژه
✅ اساتید حرفهای از شرکتهای خوب کشور
✅ پروژههای مشابه بازار کار
✅ منتور حرفهای اختصاصی
✅ مدرک معتبر و کمک به استخدام بعد از اتمام دوره
✴️ امکان پرداخت به صورت قسطی!
🔽 برای ثبتنام اولیه و مشاوره رایگان روی لینک زیر کلیک کن:
👇🏻
🔗 https://dnkr.ir/kr8qX
📩 و یا به آیدی زیر پیام بده:
@daneshkar_support
Forwarded from DevTwitter | توییت برنامه نویسی
خودمون رو به چالش کشیدیم و گفتیم وقتشه که CI/CD رو به بهترین شکل ممکن پیاده کنیم! نتیجهاش یک راهکار جامع و ساده برای راهاندازی Jenkins و GitLab شد که فرآیندهای استقرار رو کاملاً خودکار میکنه. از Docker و Rsync گرفته تا SSH، همه مراحل رو مستند کردیم تا هرکسی بتونه با کمترین دردسر، همین سیستم رو اجرا کنه.
این داکیومنت رو روی گیت هابمون گذاشتیم تا هر کسی که دنبال یک راهحل سریع و کارآمد برای اتوماسیون توسعه و استقرار هست، بتونه ازش استفاده کنه. حتماً یه نگاهی بندازید!
https://github.com/aligharaei/jenkins_cicd
@DevTwitter | <ali gharaei/>
این داکیومنت رو روی گیت هابمون گذاشتیم تا هر کسی که دنبال یک راهحل سریع و کارآمد برای اتوماسیون توسعه و استقرار هست، بتونه ازش استفاده کنه. حتماً یه نگاهی بندازید!
https://github.com/aligharaei/jenkins_cicd
@DevTwitter | <ali gharaei/>
Forwarded from Ninja Learn | نینجا لرن
💎 معرفی adminer 💎
امروز میخوایم درباره یه ابزار جذاب برای مدیریت دیتابیسها به اسم Adminer صحبت کنیم و در آخر، یاد بگیریم چطوری با استفاده از Docker سریع و راحت یه سرویس Adminer بیاریم بالا. 🚀
حالا Adminer چیه؟ 🤔
خب Adminer یه ابزار تحت وب برای مدیریت دیتابیسهاست که کار باهاش خیلی ساده و رونه. اگه تا حالا با ابزارهایی مثل DBeaver یا HeidiSQL کار کردین و دنبال یه گزینه سبکتر و سادهتر هستین، Adminer بهترین انتخابه این ابزار از دیتابیسهای مختلف مثل MySQL، PostgreSQL، SQLite، و حتی MongoDB پشتیبانی میکنه.
چرا Adminer؟ 🤷♂️
1⃣ سبک و سریع:
دیگه لازم نیست ابزارهای سنگین نصب کنی. Adminer خیلی سبک و کمحجمه.
2⃣ پشتیبانی از دیتابیسهای مختلف: دیتابیسهای معروف رو به راحتی مدیریت میکنه.
3⃣ رابط کاربری ساده:
با یه محیط ساده و بدون شلوغی، سریع به دیتابیسهات دسترسی داری.
4⃣ نصب و راهاندازی راحت:
با چندتا کامند ساده توی Docker میتونی بهسرعت راهش بندازی
چطور با Docker سرویس Adminer رو بالا بیاریم؟ 🐳
حالا بریم سر اصل مطلب بهجای نصب دستی، از Docker استفاده میکنیم تا Adminer رو در عرض چند دقیقه راه بندازیم. 😎
قدمهای راهاندازی Adminer با Docker:
1⃣ نصب Docker:
اگه Docker رو نصب نداری، اول از همه باید Docker رو نصب کنی. برای این کار میتونی به سایت Docker بری و طبق راهنمای اون برای سیستمعامل خودت نصبش کنی.
2⃣ اجرای Adminer با Docker:
بعد از اینکه Docker نصب شد، کافیه دستور زیر رو توی ترمینال اجرا کنی:
توضیحات:
این دستور یه کانتینر در حالت جدا شده (detached) اجرا میکنه.
اسم کانتینرت رو "adminer" میذاره.
-p 8080:8080:
پورت 8080 روی سیستمت رو به پورت 8080 داخل کانتینر متصل میکنه تا بتونی از مرورگر بهش دسترسی داشته باشی.
adminer:
این قسمت میگه که از ایمیج Adminer استفاده کنه.
3⃣ اتصال به Adminer:
حالا Adminer رو توی مرورگر اجرا کن. آدرس زیر رو وارد کن:
پنجرهای برات باز میشه که میتونی اطلاعات دیتابیس رو وارد کنی و به راحتی با دیتابیسهات کار کنی.
4⃣ اتصال به دیتابیس:
حالا باید دیتابیس خودت رو به Adminer وصل کنی. اطلاعات مثل نوع دیتابیس، سرور (مثل db برای Docker یا localhost برای لوکال)، نام کاربری و رمز عبور رو وارد کن و تمام 🚀
5⃣ اجرای همزمان دیتابیس و Adminer:
اگر دیتابیس رو هم با Docker اجرا میکنی، مثلاً MySQL، میتونی با کامپوز Docker (docker-compose) هر دو سرویس رو همزمان بیاری بالا. یه فایل docker-compose.yml شبیه به این درست کن:
حالا با دستور زیر، هر دو سرویس رو اجرا کن:
با این دستور، MySQL و Adminer بهصورت همزمان اجرا میشن و به راحتی میتونی به دیتابیس وصل شی.
جمع بندی 🎯
فهمیدیم اگه دنبال یه ابزار سریع و ساده برای مدیریت دیتابیسهات هستی و میخوای بدون دردسر از طریق Docker یه سرویس بالا بیاری، Adminer بهترین گزینهست.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره یه ابزار جذاب برای مدیریت دیتابیسها به اسم Adminer صحبت کنیم و در آخر، یاد بگیریم چطوری با استفاده از Docker سریع و راحت یه سرویس Adminer بیاریم بالا. 🚀
حالا Adminer چیه؟ 🤔
خب Adminer یه ابزار تحت وب برای مدیریت دیتابیسهاست که کار باهاش خیلی ساده و رونه. اگه تا حالا با ابزارهایی مثل DBeaver یا HeidiSQL کار کردین و دنبال یه گزینه سبکتر و سادهتر هستین، Adminer بهترین انتخابه این ابزار از دیتابیسهای مختلف مثل MySQL، PostgreSQL، SQLite، و حتی MongoDB پشتیبانی میکنه.
چرا Adminer؟ 🤷♂️
1⃣ سبک و سریع:
دیگه لازم نیست ابزارهای سنگین نصب کنی. Adminer خیلی سبک و کمحجمه.
2⃣ پشتیبانی از دیتابیسهای مختلف: دیتابیسهای معروف رو به راحتی مدیریت میکنه.
3⃣ رابط کاربری ساده:
با یه محیط ساده و بدون شلوغی، سریع به دیتابیسهات دسترسی داری.
4⃣ نصب و راهاندازی راحت:
با چندتا کامند ساده توی Docker میتونی بهسرعت راهش بندازی
چطور با Docker سرویس Adminer رو بالا بیاریم؟ 🐳
حالا بریم سر اصل مطلب بهجای نصب دستی، از Docker استفاده میکنیم تا Adminer رو در عرض چند دقیقه راه بندازیم. 😎
قدمهای راهاندازی Adminer با Docker:
1⃣ نصب Docker:
اگه Docker رو نصب نداری، اول از همه باید Docker رو نصب کنی. برای این کار میتونی به سایت Docker بری و طبق راهنمای اون برای سیستمعامل خودت نصبش کنی.
2⃣ اجرای Adminer با Docker:
بعد از اینکه Docker نصب شد، کافیه دستور زیر رو توی ترمینال اجرا کنی:
docker run -d --name adminer -p 8080:8080 adminer
توضیحات:
docker run -d --name adminer
این دستور یه کانتینر در حالت جدا شده (detached) اجرا میکنه.
اسم کانتینرت رو "adminer" میذاره.
-p 8080:8080:
پورت 8080 روی سیستمت رو به پورت 8080 داخل کانتینر متصل میکنه تا بتونی از مرورگر بهش دسترسی داشته باشی.
adminer:
این قسمت میگه که از ایمیج Adminer استفاده کنه.
3⃣ اتصال به Adminer:
حالا Adminer رو توی مرورگر اجرا کن. آدرس زیر رو وارد کن:
https://localhost:8080پنجرهای برات باز میشه که میتونی اطلاعات دیتابیس رو وارد کنی و به راحتی با دیتابیسهات کار کنی.
4⃣ اتصال به دیتابیس:
حالا باید دیتابیس خودت رو به Adminer وصل کنی. اطلاعات مثل نوع دیتابیس، سرور (مثل db برای Docker یا localhost برای لوکال)، نام کاربری و رمز عبور رو وارد کن و تمام 🚀
5⃣ اجرای همزمان دیتابیس و Adminer:
اگر دیتابیس رو هم با Docker اجرا میکنی، مثلاً MySQL، میتونی با کامپوز Docker (docker-compose) هر دو سرویس رو همزمان بیاری بالا. یه فایل docker-compose.yml شبیه به این درست کن:
version: '3'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- "3306:3306"
adminer:
image: adminer
ports:
- "8080:8080"
حالا با دستور زیر، هر دو سرویس رو اجرا کن:
docker-compose up -d
با این دستور، MySQL و Adminer بهصورت همزمان اجرا میشن و به راحتی میتونی به دیتابیس وصل شی.
جمع بندی 🎯
فهمیدیم اگه دنبال یه ابزار سریع و ساده برای مدیریت دیتابیسهات هستی و میخوای بدون دردسر از طریق Docker یه سرویس بالا بیاری، Adminer بهترین گزینهست.
#db #adminer #docker
Forwarded from CleverDevs (Mammad)
progit.pdf
18 MB
عنوان کتاب: Pro Git
نویسندگان : Scott Chacon, Ben Straub
زبان: انگلیسی
تعداد صحفه : 501
معرفی:
کتاب Pro Git یه منبع غنی برای یادگیری درست گیت هست . گیت که معروفترین سیستم کنترل ورژن بین برنامه نویس ها هست امکانات زیادی برای مدیریت پروژه و ورژن بندی همچنین کار تیمی و ... فراهم میکنه اما در مواردی توی پروژه های بزرگتر ممکنه استفاده از گیت براتون سخت باشه با خوندن این کتاب میتونید انواع تریک ها و دستورات گیت مسلط بشید و تو پروژه های پیچیده تر هم ازش استفاده کنید
#book #git
@CleverDevs - @CleverDevsGp
نویسندگان : Scott Chacon, Ben Straub
زبان: انگلیسی
تعداد صحفه : 501
معرفی:
کتاب Pro Git یه منبع غنی برای یادگیری درست گیت هست . گیت که معروفترین سیستم کنترل ورژن بین برنامه نویس ها هست امکانات زیادی برای مدیریت پروژه و ورژن بندی همچنین کار تیمی و ... فراهم میکنه اما در مواردی توی پروژه های بزرگتر ممکنه استفاده از گیت براتون سخت باشه با خوندن این کتاب میتونید انواع تریک ها و دستورات گیت مسلط بشید و تو پروژه های پیچیده تر هم ازش استفاده کنید
#book #git
@CleverDevs - @CleverDevsGp
Forwarded from code2 - تکنولوژی و فناوری (Mahdi Taleghani)
مرورگر Arc که یه مرورگر قوی و پر استقبال برای mac و ویندوز هست یه آسیب پذیری بسیار فاحش داشته که اخیرا برطرف شده میتونید از لینک زیر جزییاتش رو ببینید.
https://www.youtube.com/watch?v=QINoB1_OXUk
البته من چون لینوکسم توفیق نداشتم هنوز تستش کنم ☺️
@code2_ir
https://www.youtube.com/watch?v=QINoB1_OXUk
البته من چون لینوکسم توفیق نداشتم هنوز تستش کنم ☺️
@code2_ir
YouTube
How a simple mistake left Arc Browser wide open to hackers
Try Clerk's awesome authentication platform https://go.clerk.com/SIQSBbP
A major exploit was discovered in the Arc browser recently that allowed an attacker to remotely execute JavaScript on any website. Learn how this vulnerability was caused by a simple…
A major exploit was discovered in the Arc browser recently that allowed an attacker to remotely execute JavaScript on any website. Learn how this vulnerability was caused by a simple…
Forwarded from Geek Alerts
This media is not supported in your browser
VIEW IN TELEGRAM
پست جدید «پااُل دورُو»
۲۷ آگوست سومین روزی بود که من تو اداره پلیس بازداشت بودم، بدون هیچ دستگاه یا دسترسی به اینترنت، حس میکردم یه جور سمزدایی دیجیتالی هم هست.
اون روز طبق معمول یه بازجویی طولانی با پلیس داشتم و بین سوالها و جوابها از وکیلم پرسیدم که جولیا هم واسه بازجویی میاد؟ گفت انتظار داشتیم بیاد ولی نتونست.
من اصرار کردم دلیلش رو بگه و پرسیدم ترسیده؟ از پاریس رفته؟ وکیل یه مکثی کرد و بلاخره گفت «جولیا باردار هست».
جوابی نبود که انتظارشو داشتم، غافلگیر شدم و بعد یه مکث کوتاه از وکیل بابت خبر خوبش تشکر کردم.
بعدا فهمیدم پلیس هم خبر داشته ولی نمیدونستن چجوری به من بگن، اونجا شرایط جشن و شادی نبود.
جولیا تنها تو یه کشور غریب بود، و نمیدونستم کی میتونم دوباره باهاش حرف بزنم.
خوشبختانه اواخر عصر روز بعد آزاد شدم، به اقامتگاه جولیا رفتم، فهمیدم وقتی من نبودم اون خیلی تحت فشار بوده، ظاهرا یه وبلاگنویس شایعه کرده بود که اون «مامور موساد» بوده و این حرف هم کلی پخش شد و البته پستهای دیگه که از دلایل اومدن پلیس به استقبال من توی فرودگاه بودن.
(ادامهدارد)
https://t.iss.one/durov/351
@geekalerts
۲۷ آگوست سومین روزی بود که من تو اداره پلیس بازداشت بودم، بدون هیچ دستگاه یا دسترسی به اینترنت، حس میکردم یه جور سمزدایی دیجیتالی هم هست.
اون روز طبق معمول یه بازجویی طولانی با پلیس داشتم و بین سوالها و جوابها از وکیلم پرسیدم که جولیا هم واسه بازجویی میاد؟ گفت انتظار داشتیم بیاد ولی نتونست.
من اصرار کردم دلیلش رو بگه و پرسیدم ترسیده؟ از پاریس رفته؟ وکیل یه مکثی کرد و بلاخره گفت «جولیا باردار هست».
جوابی نبود که انتظارشو داشتم، غافلگیر شدم و بعد یه مکث کوتاه از وکیل بابت خبر خوبش تشکر کردم.
بعدا فهمیدم پلیس هم خبر داشته ولی نمیدونستن چجوری به من بگن، اونجا شرایط جشن و شادی نبود.
جولیا تنها تو یه کشور غریب بود، و نمیدونستم کی میتونم دوباره باهاش حرف بزنم.
خوشبختانه اواخر عصر روز بعد آزاد شدم، به اقامتگاه جولیا رفتم، فهمیدم وقتی من نبودم اون خیلی تحت فشار بوده، ظاهرا یه وبلاگنویس شایعه کرده بود که اون «مامور موساد» بوده و این حرف هم کلی پخش شد و البته پستهای دیگه که از دلایل اومدن پلیس به استقبال من توی فرودگاه بودن.
(ادامهدارد)
https://t.iss.one/durov/351
@geekalerts
Forwarded from Geek Alerts
گوشی و دستگاههای جولیا هم ضبط شده بود و نمیتونست به حسابهاش توی تلگرام و اینستاگرام دسترسی داشته باشه.
همین سکوت هم باعث شده شایعه وبلاگنویسها بیشتر بشه و جولیا مورد آزار و اذیت سایبری قرار بگیره.
جولیا قوی موند ولی برخلاف من به این روندها عادت نداشت، دو روز قبل پیش دکتر بارداریش رفت و فهمیدیم که قلب بچمون دیگه نمیزنه.
https://t.iss.one/julivavilovaa/304
@geekalerts
همین سکوت هم باعث شده شایعه وبلاگنویسها بیشتر بشه و جولیا مورد آزار و اذیت سایبری قرار بگیره.
جولیا قوی موند ولی برخلاف من به این روندها عادت نداشت، دو روز قبل پیش دکتر بارداریش رفت و فهمیدیم که قلب بچمون دیگه نمیزنه.
https://t.iss.one/julivavilovaa/304
@geekalerts
Forwarded from Geek Alerts
گوشی و دستگاههای جولیا هم ضبط شده بود و نمیتونست به حسابهاش توی تلگرام و اینستاگرام دسترسی داشته باشه.
همین سکوت هم باعث شده شایعه وبلاگنویسها بیشتر بشه و جولیا مورد آزار و اذیت سایبری قرار بگیره.
جولیا قوی موند ولی برخلاف من به این روندها عادت نداشت، دو روز پیش پیش دکتر بارداریش رفت و فهمیدیم که قلب بچمون دیگه نمیزنه.
https://t.iss.one/julivavilovaa/304
@geekalerts
همین سکوت هم باعث شده شایعه وبلاگنویسها بیشتر بشه و جولیا مورد آزار و اذیت سایبری قرار بگیره.
جولیا قوی موند ولی برخلاف من به این روندها عادت نداشت، دو روز پیش پیش دکتر بارداریش رفت و فهمیدیم که قلب بچمون دیگه نمیزنه.
https://t.iss.one/julivavilovaa/304
@geekalerts
Forwarded from a pessimistic researcher (Kc)
هزار و یک باگ
شب دوم - قسمت اول
—————————————————
یک شب دیگه، یک برنامهی دیگه و یک باگ دیگه. نمیدونم چرا ولی همیشه یک سری کارا خیلی ساده به نظر میان. مثلا فرد چندتا رمان روسی میخونه، موزیکهای نئوکلاسیک فانک راک گوش میده، کمی تئوری لرنینگ میخونه، از SVM عبور میکنه و سعی میکنه ماهیت استوکستیک LLM ها رو درک کنه و بعدش به خودش میگه که من تونستم جفت پوچ بودن دستای هستی رو رو کنم، منتهی با گذر زمان میفهمه که انقدر هم اینکار ساده نیست و حتی نمیتونه یک random walk رو توجیه کنه. میفهمه که خیلی عقب وایساده و قرار نیست فیزیک و شیمی مدرن نظری جلوش زانو بزنن. مثلا شخص اثبات کرده که مسئلهی ارضاء پذیری ساختارهای محدود در منطق مرتبهی اول، تصمیم ناپذیره، و فرد میگه که کی همچین زری زده :) من میرم براش یک الگوریتم P مینویسم، منتهی باید کلی روحش سوهان بخوره تا بفهمه راحت که هیچ، شدنی نیست.
این مقدمه شاید لازم بود تا برسیم به مسئلهی مورد بحث که بسیار ساده است. محاسبهی ب.م.م دو عدد با روش اقلیدسی. اگر تا حالا اسم این الگوریتم رو نشنیدید اصلا چیز مهمی نیست. من بهتون توضیح میدم. تصور کنید که شما یک تابع دارید که دو عدد صحیح a و b رو به عنوان ورودی میگیره. این دو عدد بین دوتا Thread به اشتراک گذاشته میشن. ترد اول چنین کدی رو اجرا میکنه
ترد دوم هم به قرینهی ترد اول همین کار رو تقلید میکنه. یعنی چنین کدی رو اجرا میکنه :
بیاید برای درک بهتر الگوریتم یک مثال رو اجرا کنیم. تصور کنید مقدار a و b به ترتیب 10 و 4 باشه. ترد اول بعد یک بار اجرا مقادیر جدید a و b رو به شکل 6 و 4 در میاره. توجه داشته باشید که در طول اجرا ترد دوم فقط میتونه به شکل idle در حلقه بمونه. سپس ترد اول یک بار دیگه اجرا میشه و مقادیر a و b به 2 و 4 تغییر میکنن. حالا ترد اول فقط میتونه به شکل idle لوپ بخوره و ترد دوم بدنهی if رو اجرا کنه. پس از یک بار چرخش، ترد دوم مقادیر a و b رو به 2 و 2 تغییر میده. حالا هر دو تا ترد میتونن با یک بار اجرای حلقه، از while خارج بشن و حاصل ب.م.م. دو عدد هم همونطور که ملاحظه میکنید در a و b قرار داره که 2 میباشد.
همه چیز ساده است. منطق برنامه و رفتار ترد ها. حالا نوبت پرسشه. یک پرسش ساده. آیا این برنامه به ازای هر مقادیر بزرگتر از صفری برای a و b درست کار میکند یا خیر. برای اینکه بتونیم این برنامه رو وریفای کنیم باید یک تعداد assumption و assertion به کدمون اضافه کنیم. این گزارهها لازمه برای انجام وریفیکیشن چرا که مثلا میخوایم این فرض رو داشته باشیم که مقدار ورودی a و b بزرگتر از صفره. حال با اضافه کردن این گزارهها برنامهی ما بدین شکل خواهد شد.
حالا پرسش سادهای که مطرح کردم و فرمال میکنم.
۱. آیا میتونید خودتون با استنتاج روی این کد اثبات کنید که برنامه این Properties رو ارضاء میکنه یا نه. اگر آره استنتاجتون رو شرح بدید.
۲. آیا میتونید یک برنامهای بنویسید که به عنوان ورودی این برنامه رو از شما بگیره و اگر حالتی درش وجود داره که منجر به نقض شدن شرطهای assert میشه رو پیدا کنه و به عنوان یک مثال نقض بهمون یک trace از اجرای برنامه برگردونه؟ اگر چنین برنامهای نوشتید، آیا decision procedure که برای پیدا کردن این trace به کار بردید، sound و complete و optimal هست؟ لطفا اثبات کنید.
شب دوم - قسمت اول
—————————————————
یک شب دیگه، یک برنامهی دیگه و یک باگ دیگه. نمیدونم چرا ولی همیشه یک سری کارا خیلی ساده به نظر میان. مثلا فرد چندتا رمان روسی میخونه، موزیکهای نئوکلاسیک فانک راک گوش میده، کمی تئوری لرنینگ میخونه، از SVM عبور میکنه و سعی میکنه ماهیت استوکستیک LLM ها رو درک کنه و بعدش به خودش میگه که من تونستم جفت پوچ بودن دستای هستی رو رو کنم، منتهی با گذر زمان میفهمه که انقدر هم اینکار ساده نیست و حتی نمیتونه یک random walk رو توجیه کنه. میفهمه که خیلی عقب وایساده و قرار نیست فیزیک و شیمی مدرن نظری جلوش زانو بزنن. مثلا شخص اثبات کرده که مسئلهی ارضاء پذیری ساختارهای محدود در منطق مرتبهی اول، تصمیم ناپذیره، و فرد میگه که کی همچین زری زده :) من میرم براش یک الگوریتم P مینویسم، منتهی باید کلی روحش سوهان بخوره تا بفهمه راحت که هیچ، شدنی نیست.
این مقدمه شاید لازم بود تا برسیم به مسئلهی مورد بحث که بسیار ساده است. محاسبهی ب.م.م دو عدد با روش اقلیدسی. اگر تا حالا اسم این الگوریتم رو نشنیدید اصلا چیز مهمی نیست. من بهتون توضیح میدم. تصور کنید که شما یک تابع دارید که دو عدد صحیح a و b رو به عنوان ورودی میگیره. این دو عدد بین دوتا Thread به اشتراک گذاشته میشن. ترد اول چنین کدی رو اجرا میکنه
Thread I
while ( a != b ) {
if ( a > b ) {
a := a - b
}
}
ترد دوم هم به قرینهی ترد اول همین کار رو تقلید میکنه. یعنی چنین کدی رو اجرا میکنه :
Thread II
while ( a != b ) {
if ( b > a ) {
b := b - a
}
}
بیاید برای درک بهتر الگوریتم یک مثال رو اجرا کنیم. تصور کنید مقدار a و b به ترتیب 10 و 4 باشه. ترد اول بعد یک بار اجرا مقادیر جدید a و b رو به شکل 6 و 4 در میاره. توجه داشته باشید که در طول اجرا ترد دوم فقط میتونه به شکل idle در حلقه بمونه. سپس ترد اول یک بار دیگه اجرا میشه و مقادیر a و b به 2 و 4 تغییر میکنن. حالا ترد اول فقط میتونه به شکل idle لوپ بخوره و ترد دوم بدنهی if رو اجرا کنه. پس از یک بار چرخش، ترد دوم مقادیر a و b رو به 2 و 2 تغییر میده. حالا هر دو تا ترد میتونن با یک بار اجرای حلقه، از while خارج بشن و حاصل ب.م.م. دو عدد هم همونطور که ملاحظه میکنید در a و b قرار داره که 2 میباشد.
همه چیز ساده است. منطق برنامه و رفتار ترد ها. حالا نوبت پرسشه. یک پرسش ساده. آیا این برنامه به ازای هر مقادیر بزرگتر از صفری برای a و b درست کار میکند یا خیر. برای اینکه بتونیم این برنامه رو وریفای کنیم باید یک تعداد assumption و assertion به کدمون اضافه کنیم. این گزارهها لازمه برای انجام وریفیکیشن چرا که مثلا میخوایم این فرض رو داشته باشیم که مقدار ورودی a و b بزرگتر از صفره. حال با اضافه کردن این گزارهها برنامهی ما بدین شکل خواهد شد.
fun foo() {
int a = nondet()
int b = nondet()
assume ( a > 0 && b > 0 )
a := a_in
b := b_in
ThreadI ( a_in, b_in ) -> start
ThreadII ( a_in, b_in ) -> start
ThreadI -> join
ThreadII -> join
int guessed_gcd = nondet()
assume ( guessed_gcd > 1 )
assume ( a_in % guessed_gcd == 0 )
assume ( b_in % guessed_gcd == 0 )
// Properties
assert( a_in % a == 0 )
assert( b_in % a == 0 )
assert( a >= guessed_gcd )
}
حالا پرسش سادهای که مطرح کردم و فرمال میکنم.
۱. آیا میتونید خودتون با استنتاج روی این کد اثبات کنید که برنامه این Properties رو ارضاء میکنه یا نه. اگر آره استنتاجتون رو شرح بدید.
۲. آیا میتونید یک برنامهای بنویسید که به عنوان ورودی این برنامه رو از شما بگیره و اگر حالتی درش وجود داره که منجر به نقض شدن شرطهای assert میشه رو پیدا کنه و به عنوان یک مثال نقض بهمون یک trace از اجرای برنامه برگردونه؟ اگر چنین برنامهای نوشتید، آیا decision procedure که برای پیدا کردن این trace به کار بردید، sound و complete و optimal هست؟ لطفا اثبات کنید.
Forwarded from a pessimistic researcher (Kc)
هزار و یک باگ
شب دوم - قسمت دوم
—————————————————
این بار میخوام برخلاف هزار و یک باگهای قبلی کمی مسئله رو پیش ببرم تا نشون بدم یک مسئلهی به این سادگی تا چه اندازه میتونه پیچیده بشه. فرض کنید برای وریفای کردن این برنامه ما میتونیم متغیرهای a و b رو به شکل symbolic در نظر بگیریم. یعنی هیچ مقدار مشخص ندارن. حالا فرض کنید که ما یک oracle یا پیشگو داریم (در حقیقتا یک SMT Solver) که در هر لحظه از اجرای برنامه میتونیم بهش یک فرمول منطقی بدیم و ازش بپرسیم آیا این فرمول ارضاء پذیر هست یا نه. حال با داشتن این دو یاور شروع کنیم به درستییابی برنامه. در ابتدای اجرا میدونیم که :
اوراکل میگه بله و مشکلی نیست برو جلو. فرمول بعدی a > b هستش و دوباره اوراکل رو صدا میکنیم :
اوراکل میگه بله ارضاء پذیره. کافیه مقدار a برابر باشه با 2b+1. دوباره ترد یک ادامه میده و حلقه رو یک بار دیگه پیمایش میکنه و میرسیم به این پرسش از اوراکل :
اوراکل میگه بله ارضاء پذیره چرا که مقدار a میتونه برابر با 3b+1 باشه. بعد از n بار اجرای حلقه، پرسش از اوراکل میشه :
و اوراکل میگه چون مقدار a میتونه برابر با :
باشه این فرمول ارضا پذیره. همونطور که ملاحظه میکنید پورسهی وریفیکیشن یک برنامهای که میشه اثبات کرد halt میکنه، تصمیم ناپذیر شده و تا بینهات ادامه میده و هیچ وقت converge نمیکنه! و یک مسئلهی به این سادگی اونقدرا هم که فکر میکنیم ساده حل نمیشه.
شب دوم - قسمت دوم
—————————————————
این بار میخوام برخلاف هزار و یک باگهای قبلی کمی مسئله رو پیش ببرم تا نشون بدم یک مسئلهی به این سادگی تا چه اندازه میتونه پیچیده بشه. فرض کنید برای وریفای کردن این برنامه ما میتونیم متغیرهای a و b رو به شکل symbolic در نظر بگیریم. یعنی هیچ مقدار مشخص ندارن. حالا فرض کنید که ما یک oracle یا پیشگو داریم (در حقیقتا یک SMT Solver) که در هر لحظه از اجرای برنامه میتونیم بهش یک فرمول منطقی بدیم و ازش بپرسیم آیا این فرمول ارضاء پذیر هست یا نه. حال با داشتن این دو یاور شروع کنیم به درستییابی برنامه. در ابتدای اجرا میدونیم که :
a > 0 && b > 0به قول معروف، without loss of generality فرض کنید که ترد اول اجرا میشه و به اولین فرمول سیمبولیک بر میخوره یعنی a != b حالا نوبت استفاده از اوراکله. ازش میپرسیم آیا ممکنه این فرمول ارضاء پذیر باشه ؟
a > 0 && b > 0 && a != b
اوراکل میگه بله و مشکلی نیست برو جلو. فرمول بعدی a > b هستش و دوباره اوراکل رو صدا میکنیم :
a > 0 && b > 0 && a != b && a > bاوراکل میگه بله اگر مقدار a برابر با b + 1 باشه این فرمول ها ارضا پذیرن. بعد از اجرای دستور a:= a-b و رسیدن به شروط حلقه و if دوباره باید اوراکل رو صدا بزنیم :
a > 0 && b > 0 && a != b && a > b && a-b ! = b && a-b > b
اوراکل میگه بله ارضاء پذیره. کافیه مقدار a برابر باشه با 2b+1. دوباره ترد یک ادامه میده و حلقه رو یک بار دیگه پیمایش میکنه و میرسیم به این پرسش از اوراکل :
a > 0 && b > 0 && a != b && a > b && a-b ! = b && a-b > b && a-2b != b && a-2b > b
اوراکل میگه بله ارضاء پذیره چرا که مقدار a میتونه برابر با 3b+1 باشه. بعد از n بار اجرای حلقه، پرسش از اوراکل میشه :
a > 0 && b > 0 && a != b && a > b && a-b ! = b && a-b > b && a-2b != b && a-2b > b && ... && a - nb != b && a - nb > b
و اوراکل میگه چون مقدار a میتونه برابر با :
(n+1) b + 1
باشه این فرمول ارضا پذیره. همونطور که ملاحظه میکنید پورسهی وریفیکیشن یک برنامهای که میشه اثبات کرد halt میکنه، تصمیم ناپذیر شده و تا بینهات ادامه میده و هیچ وقت converge نمیکنه! و یک مسئلهی به این سادگی اونقدرا هم که فکر میکنیم ساده حل نمیشه.
Forwarded from Geek Alerts
نسخه جدید چتبات مایکروسافت Copilot اومده و برای دسترسی بهش کافیه کشور رو روی آمریکا تنظیم کنید.
قبل از این کار باید به حساب خودتون لاگین کرده باشید.
https://copilot.microsoft.com
@geekalerts
قبل از این کار باید به حساب خودتون لاگین کرده باشید.
https://copilot.microsoft.com
@geekalerts
Forwarded from a pessimistic researcher (Kc)
بحث سافتور وریفیکیشن که گفتم توی این پست در مورد همین مطالبی هستش که توی پستهای "هزار و یک باگ" بهشون میپردازیم. برای آشنایی با این فیلد میتونید ۳ پستی که با عنوان هزار و یک باگ گذاشتم رو بخونید.
در ضمن دلیل اینکه گفتم بهم پیام بدید و یکمم از خودتون بگید این بود که منم با شماها بتونم آشنا بشم و همه چیز صرفا unicast نباشه.
در ضمن دلیل اینکه گفتم بهم پیام بدید و یکمم از خودتون بگید این بود که منم با شماها بتونم آشنا بشم و همه چیز صرفا unicast نباشه.
Forwarded from Code Module | کد ماژول (𔓙)
Forwarded from Python BackendHub (Mani)
This media is not supported in your browser
VIEW IN TELEGRAM
حق 👌
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
Forwarded from Linuxor ?
یه منبع غنی آموزش دانشگاهی کامپیوتر از دانشگاه های هاروارد، پرینستون، MIT و ...
اگه دانشجو نیستید این خیلی کمکتون میکنه و اگرم دانشجویید میتونید به عنوان منبع آموزشی درسی ازش استفاده کنید :
https://github.com/ossu/computer-science
🐧 @Linuxor
اگه دانشجو نیستید این خیلی کمکتون میکنه و اگرم دانشجویید میتونید به عنوان منبع آموزشی درسی ازش استفاده کنید :
https://github.com/ossu/computer-science
🐧 @Linuxor
Forwarded from LearnPOV | لرن پی او وی
This media is not supported in your browser
VIEW IN TELEGRAM
موزیک ویدیو برنامه نویسی 🙂😂
شیر و ریاکشن یادتون نره 😂❤️
برا بچه هایی که ایسنتا ندارن گذاشتم اینجا، دوست داشتید از اینستامون ببینید 🔻
🌐https://www.instagram.com/coolycode
#️⃣ #fun #programming
🚀 @coolycode
Forwarded from DevTwitter | توییت برنامه نویسی
میخوایی بدونی پس قضیه جاواسکریپت چی میگذره و توی مصاحبه ها هم ازش استفاده کنی ؟
من یه مجموعه مقالاتی به اسم اندراحوالات جاواسکریپت توی سایت ویرگول نوشتم که جواب سوال بالا رو بهت میده:
تا جایی که تونستم هر موضوعی رو به ساده ترین نوع ممکن توضیح و پوشش دادم
اندر احوالات جاوااسکریپت قسمت اول
در مورد نحوه کار js و javascript Engine
https://vrgl.ir/fH7sf
اندر احوالات جاوااسکریپت قسمت دوم
در مورد Execution Context, Call Stack و زیر و بم اش
https://vrgl.ir/REWoF
اندر احوالات جاوااسکریپت قسمت سوم
هر آنچه که باید درمورد Scope و مخلفاتش بدونی
https://vrgl.ir/Zr7QI
اندر احوالات جاوااسکریپت قسمت چهارم
در مورد Hoisting
https://vrgl.ir/A3CVT
اندر احوالات جاوااسکریپت قسمت پنجم (آخر)
در مورد مفهوم this و کاربردش، arrow function و bind
https://vrgl.ir/JpJXp
نبرد async و sync
در مورد مفهوم asynchronous و synchronous - میکروتسک چیه؟نحوه کار کرد؟
https://vrgl.ir/96eJP
@DevTwitter | <Mohammad Bohluli/>
من یه مجموعه مقالاتی به اسم اندراحوالات جاواسکریپت توی سایت ویرگول نوشتم که جواب سوال بالا رو بهت میده:
تا جایی که تونستم هر موضوعی رو به ساده ترین نوع ممکن توضیح و پوشش دادم
اندر احوالات جاوااسکریپت قسمت اول
در مورد نحوه کار js و javascript Engine
https://vrgl.ir/fH7sf
اندر احوالات جاوااسکریپت قسمت دوم
در مورد Execution Context, Call Stack و زیر و بم اش
https://vrgl.ir/REWoF
اندر احوالات جاوااسکریپت قسمت سوم
هر آنچه که باید درمورد Scope و مخلفاتش بدونی
https://vrgl.ir/Zr7QI
اندر احوالات جاوااسکریپت قسمت چهارم
در مورد Hoisting
https://vrgl.ir/A3CVT
اندر احوالات جاوااسکریپت قسمت پنجم (آخر)
در مورد مفهوم this و کاربردش، arrow function و bind
https://vrgl.ir/JpJXp
نبرد async و sync
در مورد مفهوم asynchronous و synchronous - میکروتسک چیه؟نحوه کار کرد؟
https://vrgl.ir/96eJP
@DevTwitter | <Mohammad Bohluli/>