جمعی از دانشجو های دانشگاه برکلی (کالیفرنیا) مدلی رو بر اساس هوش مصنوعی ساختن که یک عکس رو به عنوان ورودی میگیره و بعد از اون کافیه که شما بهش بگید که چه کاری رو روی عکستون انجام بده و اون هم در عرض چند ثانیه عکس رو ادیت میکنه و به شما میده.
عملکرد مدل جالبه، چنتا از عکس هایی که این مدل ادیت کرده رو ببینید
همونطور که داخل سایتشون هم گفتن برای ساختن دیتاست برای آموزش مدلشون از دو مدل از پیش آموزش داده شده ، یکی language model (GPT-3) و دیگری مدل متن به عکس (text to image) استفاده کردن.
اگر خواستین عکس های بیشتری ازش ببینید و یا دقیق تر دنبالش کنید از این لینک استفاده کنید. نسخه دمو برای تست هم داره من چند باری سعی کردم تست بگیرم ولی به لطف دوستان وسط کار ارور میداد که ارتباط قطع شده.
یکی از مشکلاتی که من خیلی وقت ها باهاش برخورد میکنم بحث ورژن های مختلف جاوا برای پروژه های مختلف هست، مثلا یک پروژه با Java 8 کار میکنه و پروژه ی دیگه با Java 17 و من میخوام که همزمان از هر دوی این ها استفاده کنم.
راه حلی که من برای این مشکل استفاده میکنم Jenv هست. Jenv این امکان رو میده که شما به شکل همزمان چند ورژن جاوا مختلف رو روی سیستم داشته باشید و حتی نیاز به سوئیچ کردن بین این ورژن ها رو هم ندارد. توی Jenv شما یک ورژن جاوا به شکل global برای کل سیستم مشخص میکنید و همچنین میتونید برای هر دایرکتوری یک ورژن مشخص از Java رو کانفیگ کنید مثلا من روی سیستم خودم جاوا 17 رو به شکل global قرار دادم و داخل دایرکتوری مربوط به هر پروژه هم Java مربوط به اون پروژه رو کانفیگ کردم. در نتیجه هر دفعه هر کدوم از پروژه ها رو باز کنم به شکل خودکار جاوا مربوط به اون اجرا میشه.
نکته کمکی اینکه ممکنه بعد از نصب jenv متغیر JAVA_HOME تنظیم نشده باشه. اگر خواستید که این متغیر هم با توجه به ورژن های مختلف تغییر کنه دستور زیر رو اجرا کنید. این دستور همونطور که مشخص هست پلاگین export رو فعال میکنه.
jenv enable-plugin export
روش استفاده از Jenv ساده هست و توی صفحه اصلیشون هم روش نصب و استفادش قرار داره.
توی زبان های مختلف برنامه نویسی راه های مختلفی برای مدیریت کردن Error ها وجود دارد. بعضی زبان ها مثل C یا GO از error code استفاده میکنند و بعضی زبان ها هم مثل Java یا CPP از مفهوم Exception برای مدیریت کردن خطا ها یا حالت های استثنا استفاده میکنند.
قبل از اینکه مطلب رو ادامه بدم توضیح کوتاهی در مورد Exception ها بدم. استثنا ها در واقع اتفاق هایی هستند که در زمان اجرای یک برنامه اتفاق میافتند و باعث میشوند که برنامه ها مسیر عادی خودشون رو پیش نرن. به عنوان مثال فرض کنید من قصد دارم داخل برنامم اسم دانش آموز هایی که داخل یک فایل نوشته شدن رو بخونم. اگر در زمان اجرا به هر دلیلی اون فایل وجود نداشته باشه (حذف شده باشه یا کسی اون رو به مسیر دیگه ای منتقل کرده باشه) یا اصلا اون فایل وجود داشته باشه ولی برنامه من مجوز خواندن اطلاعات رو نداشته باشه در این حالت ها Exception اتفاق میافتد.
بودن Exception ها داخل برنامه ها مشکلی نداره و اینکه Error Code روش بهتری هست برای مدیریت خطا یا Exception قابل بحث هست اما نکته ای که مهمه این هست که از Exception ها برای کنترل کردن جریان اجرای برنامه ها استفاده نکنیم.
توی این مطلب ( که این پست هم بر اساس اون نوشته شده ) نویسنده با یک مثال این مفهوم رو توضیح داده : به کد زیر نگاه کنید. داخل این کد تابعی داریم که چک میکنه عدد ما مثبت هست یا منفی و اگر عدد ما منفی هست یک استثنا رو پرتاب میکنه.
int get_positive_value(int x) {
if(x < 0) {
throw std::runtime_error("it is not positive!");
}
return x;
}
حالا فرض کنید یک آرایه داریم که میخواهیم همه عناصرش رو با هم جمع کنیم. دو روش رو میتونیم داشته باشیم. روش اول :
int sum = 0;
for (int x : a) {
if(x < 0) {
sum += -x;
} else {
sum += x;
}
}
روش دوم :
int sum = 0;
for (int x : a) {
try {
sum += get_positive_value(x);
} catch (...) {
sum += -x;
}
}
همانطور که از داخل کد ها هم مشخصه توی روش دوم کنترل جریان برنامه با استفاده از Exception انجام شده.
چیزی که مسلمه و از اول این پست هم چند باری بهش اشاره کردیم این هست که روش دوم روش مناسبی برای برنامه نویسی نیست. اما چرا ؟
دو دلیل اصلی براش وجود داره : دلیل یک ) این شکل از برنامه نویسی تمیز و خوانا نیست. شاید توی نگاه اول بنظر خوانا بیاد ولی توی کد های کمی بزرگتر و پیچیده تر قضیه فرق میکنه.
دلیل دوم ) نویسنده مقاله اصلی این دو تا برنامه رو از نظر performance آزمایش کرده و به نتیجه جالبی رسیده. اونم اینکه توی روش اول کد برنامه 10000 برابر سریع تر از روش دوم بوده که عدد قابل توجهی هست. در مورد جزئیات بیستر در مورد نحوه آزمایش و مقایسه میتونید مقاله اصلی رو نگاه کنید
عنوان این پست یکم عجیب به نظر میرسه ولی قبل از اینکه شروع کنم خوبه نقل قولی از جادی داشته باشیم که توی این پست میگه :
مفهوم هکر مفهومی عامتر از نفوذ و امنیت است. هکر کسیه که از ابزارش استفاده غیرمرسوم و هوشمندانه می کنه و موفق به چیزهایی می شه که از نظر دیگران نشدنی بوده.
جادی دات نت
ظاهرا آقایی توی خونشون یک تلفن قدیمی داشته و تصمیم گرفته که قسمت شماره های کیبوردش رو حذف کنه و به جاش از شمارهگیر تلفن استفاده کنه. جالبیش اینه که نه تنها کار میکنه بلکه برای اینکه جزئی از کیبورد باشه قسمتی از برد اصلی کیبورد رو حذف کرده و این شمارهگیر رو به جای اون قرار داده. از پرینتر سه بعدی هم برای ساخت چند قطعه پلاستیکی استفاده کرده که شمارهگیر رو به کیبرد وصل میکنه.
توی پست اصلی که داخل این لینک میتونید ببیندی دقیق توضیح داده که در هر مرحله چه کار هایی رو انجام داده ، از چه سخت افزاری استفاده کرده، چطوری بخشی از برد اصلی کیبورد رو بریده بدون اینکه مشکلی برای بقیه قسمت های کیبورد پیش بیاد و حتی در مورد الکترونیک و چیز های جالب دیگه ای هم صحبت کرده که خب مسلما بعضی هاش از سطح سواد من بالاتره ولی خوندن و نگاه کردن بهش جالبه.
توی این پست سعی میکنم یک نگاه دسته بندی شده و از بالا به اینترنت، شبکه و وب داشته باشم و توضیح بدم هر کدوم از کلمه هایی که تا اینجای پست نوشتم چی هستن و چه فرق هایی باهم دارن. قبل از اینکه در مورد هر کدوم حرف بزنم این رو بگم که خیلی از این کلمات شاید توضیح رسمی و جزئی براشون وجود داشته باشه اما من قصد دارم اون ها رو به شکل ساده تر و به شکلی که خودم درکشون میکنم توضیح بدم.
شبکه ، اینترنت و وب
اول از همه بیاید در مورد این کلمه ها حرف بزنیم.
شبکه
شبکه یعنی چنتا کامپیوتر بهم دیگه وصل بشن و بتونن بین همدیگه اطلاعاتی رو جابهجا کنن.مثلا اگر شما داخل یک مدرسه کار میکنید و فرض کنیم که هر کلاس یک کامپیوتر داخلش هست و این کامپیوتر ها به شکلی به هم وصل هستن و میتونن اطلاعات جابهجا کنند میتونیم بگیم که داخل اون مدرسه ما یک شبکه داریم.
اینترنت
اینترنت برخلاف چیزی که اغلب مردم عادی فکر میکنند شبکه ای از کامپیوتر ها نیست بلکه شبکه ای از شبکه هاست. برای درک مفهوم اینترنت خوبه که کمی به تاریخچه ی اینترنت نگاه کنیم. در زمان جنگ سرد داخل آمریکا، نظامیان به دنبال روشی بودند که بین دو نقطه که از هم فاصله زیادی دارند ارتباط برقرار کنند که این ارتباط بدون مرکزیت و هسته اصلی باشه چون دشمن میتونه با از کار انداختن اون هسته مرکزی کل ارتباط رو قطع کنه به همین خاطر این سازمان شبکه ای به نام ARPANETساخت که این کار رو انجام بده. بعد از اینکه شکل ارتباطات و پروتکل و … مشخص شده کم کم مشارکت کننده های دیگه ای مثل دانشگاه ها به این شبکه وصل شدند و این شبکه روز به روز بزرگتر شد و در نهایت شد اینترنت فعلی که داریم ازش استفاده میکنیم.
وب
بعد از شکل گرفتن اینترنت سرویس های مختلفی از طریق این شبکه قابل ارائه بودن. به عنوان مثال سرویس ایمیل ، سرویس های انتقال فایل ، سرویس های VOIP و …. وب در واقع یک نوع سرویس هست که روی بستر اینترنت داده میشه. این سرویس اجازه میده که داکیومنت ها، عکس ها و کلا هر چیزی که به عنوان web resource اون رو میشناسیم بتونیم دسترسی داشته باشیم. به عنوان مثال همین صفحه ای که الان دارید میخونید مجموعه ای داکیومنت ها ، عکس ها و … رو داره با شما به اشتراک میذاره.
لایه های وب
حالا که تا اینجا اومدیم و فرق شبکه ، اینترنت و وب رو فهمیدیم خوبه ی نگاهی هم به لایه های وب بندازیم
وب سطحی یا Surface Web اون قسمتی از وب هست که موتور های جست و جو اون رو به ما نشون میدن به شکل ساده تر وب سطحی یعنی هر چیزی که شما داخل یک موتور جستوجو مثل گوگل سرچ میکنید. نکته جالب در مورد وب سطحی این هست که حدس زده میشه فقط چیزی حدود ۱۰ تا ۱۵ درصد از کل وب رو شامل میشه یعنی باز هم به شکل ساده اگر بخوام بگم تمام نتایج جست و جو داخل گوگل ، یاهو و … فقط ۱۰ درصد از وب رو تشکیل میدن. توی این سایت میتونید اندازه وب سطحی رو بر اساس چیزی که موتور های جست و جو ایندکس کردن ببینید.
وب عمیق
به کل وب بجز قسمت سطحی وب Deep Web یا وب عمیق میگن به عبارت دیگه وب عمیق به قسمتی از وب گفته میشه که توسط موتور های جست و جو ایندکس نمیشه. همه ما هر روزه با وب عمیق کار میکنیم بدون اینکه واقعا این موضوع رو درک کنیم به عنوان مثال اگر یک برنامه وب برای مدیریت کردن حساب هاتون استفاده میکنید ، خیلی از سایت های دولتی یا شرکتی یا مثلا سایت گلستان که داخلش نمره های دانشگاه تون رو چک میکنید و در واقع میشه گفت صفحه هایی که نیاز به لاگین دارند مثل اکانت ایمیل تون ، سرویسی که ازش هاست یا سرور گرفتین و خیلی مثال های دیگه همگی جزئی از وب عمیق هستند.
وب تاریک
وب تاریک یا Dark Web بخشی از اینترنت هست که مدعی میشه ما داخلش ناشناس هستیم. برای اتصال به این قسمت از اینترنت نیاز به ابزار های خاصی داریم که یکی از معروفترین هاش مرورگر tor هست. آدرس مربوط به سایت ها داخل این بخش از اینترنت متفاوت هستن و این صفحات قابل جست و جو نیستن یعنی شما نمیتونید داخل سایتی مثل گوگل سرچ کنید فلان مورد رو و به یک سایت داخل دارک وب برسید. برای رسیدن به سایت ها داخل دارک وب نیاز دارید که یک نفر اون آدرس رو به هر طریقی به شما برسونه. نکته جالب هم اینکه آدرس های این بخش از اینترنت به .onion ختم میشن. البته سایت هایی مثل hidden wiki هستن که یکسری آدرس از داخل دارک وب به شما میدن. خیلی چیز خاصی هم داخلش نیست 🙂
صبح روز سهشنبه گوشی های اندرویدی که نزدیک به سانفرانسیسکو بودند نوتیفیکشنی دریافت کردند که هشدار مربوط به وقوع یک زلزله به بزرگی 4.8 ریشتر رو میداد. بیش از یک میلیون کاربر اندرویدی این نوتیفیکیشن رو دیدن و حتی بعضی ها هم قبل از وقوع زلزله پیام به دستشون رسیده.
پروژه هشدار زمین لرزه یا همون ShakeAlert که بخشی از مجموعه سازمان زمین شناسی ایالات متحده هست سعی میکنه زود تر از وقوع زمین لرزه اون رو هشدار بده. هدف این پروژه این هست که در صورت امکان حتی چند ثانیه زودتر از اینکه زلزله اتفاق بیفته اون رو خبر بده و همونطور که میدونید زلزله یک اتفاق غیر قابل پیشبینی هست و هنوز هم تکنولوژی برای پیشبینی زلزله پیدا نشده و سوالی که پیش میاد این هست که گوگل چطور زلزله رو پیشبینی میکنه ؟
جواب این هست که گوگل نمیتونه زلزله رو پیش بینی کنه بلکه زود تر از اینکه آدم ها اون رو احساس کنن متوجه زلزله میشه و اون رو اطلاع میده . روش کار این سیستم به این شکل هست که زمانی که زمین لرزه در حال وقوع هست ابتدا یکسری موج ضعیف که اسمشون رو موج پی یا P wave میذاریم شکل میگیرن. سازمان زمین شناسی ایالات متحده آمریکا شبکه ای شامل 1300 سنسور در منطقه های مختلف داره که اگر به شکل همزمان چهار تا از این سنسور ها لرزش های حاصل از موج های پی رو تشخیص بدن یک پیام به مرکز پردازش اطلاعات فرستاده میشه. اگر مرکز پردازش اطلاعات تشخیص بده که این موج های ضعیف باعث تشکیل موج های قوی تر که به اون های موج های اس یا S wave میگیم بشن که باعث خسارت و آسیب میشن میتونه به سازمان های مختلف خبر بده که احتمال وقوع یک زلزله وجود داره. گوگل هم از همین امکان استفاده میکنه و به گوشی های اندروید یک نوتیفیکیشن ارسال میکنه.
این سیستم محدودیت هایی هم داره به عنوان مثال موج های اس به سرعت حرکت میکنند و هر کسی که به منشا زمین لرزه نزدیک تر باشه زود تر اون رو احساس میکنه و این باعث میشه که گاهی وقت ها نوتیفیکیشن بعد از وقوع زلزله به آدم ها برسه. محدودیت دیگه محاسبه بزرگی زمین لرزه هست که به خوبی و بادقت قابل محاسبه نیست مثلا بزرگی زمین لرزه سانفرانسیسکو حدود 4.8 ریشتر تخمین زده شد در حالی که این زمین لرزه 5.1 ریشتر بوده.
گوگل همچنین گوشی های همراه رو به مجموعه از سنسور های کوچیک تشخیص زلزله تبدیل کرده. بیشتر گوشی های هوشمند سنسور شتابسنج دارند که میتونن با استفاده از این سنسور سیگنال های زمین لرزه رو دریافت کنند. توی این روش زمانی که سنسور گوشی ها لرزش رو احساس کنند یک پیام به سرور ارسال میکنند و اگر اون سرور چند پیام رو از یک موقعیت مکانی مشخص دریافت کنه میتونه تشخیص بده که توی این قسمت از زمین احتمال وقوع زمین لرزه هست. همچنین برای اینکه تشخیص سنسور ها دقیق تر باشه تلفن ها فقط زمانی که به برق وصل باشند و قفل شده باشند این حسگر ها رو فعال میکنن تا اشتباها حرکت تلفن داخل کیف یا جیب رو به جای زمین لرزه تشخیص ندن. این روش تشخیص نسبت به روش ها دیگه ارزون تر و سریع تر هست اما نیاز داریم که حتما تلفن های همراه به محل وقوع زلزله نزدیک باشن.
این پروژه سعی داره بتونه زمین لرزه رو حتی در حد چند ثانیه زود تر از وقوع خبر بده. برای آدم ها زمین لرزه زمانی حس میشه که در حال وقوع هست و در اون لحظه شما دقیقا وسط زمین لرزه هستید و احتمالا ترسیدین یا کار خاصی از دستتون بر نمیاد اما اینکه زود از وقوع اون مطلع بشید میتونه خیلی مفید باشه حتی اگر فقط چند ثانیه وقت داشته باشید. منبع
این روز ها اینقدر درگیری و ذهن مشغولی زیاد هست که دیگه نه حوصله و نه حواس برای هکتبرفست مونده بود (برای آیندگان که این پست رو میخونن اگر میخواین بدونید که الان توی چه وضعیتی هستیم نگاهی به پینوشت داشته باشید). امروز خیلی اتفاقی متوجه شدم که ۱۶ اکتبره و خوبه که به همین بهانه هم در مورد هکتبرفست بگم.
توی آلمان یک جشن بزرگ سالانه وجود داره که تقریبا دوهفته طول میکشه و توی اون آدم ها دور هم جمع میشن ، آبجو میخورن ، خوشحالن و از همه مهمتر آزاد
به همین بهانه هم هر سال توی ماه اکتبر یک فستیوال یک ماهه به نام hacktoberfest با همکاری شرکت های دیجیتال اوشن ، اپرایت و داکر برگزار میشه که داخل اون آدم ها سعی میکنن توی پروژه های اوپن سورس مشارکت کنند و در آخر تیشرت، استیکر و از همه مهم تر سابقه چهار تا pull request به همراه یادگرفتن کلی چیز خوب و باحال رو داشته باشن. ایده ی هکتبرفست این هست که آدم ها شروع کنند توی پروژه های اوپن سورس شرکت کنن و مشارکت داشته باشن.فرصت یادگیری خیلی چیز های جالب و مهم مثل گیت ، گیت هاب و گیت لب و … رو میده پس بهتره همین الان شروع کنید و فرصت رو از دست ندید.
امسال هم طبق روال هر سال این جشن داره برگزار میشه و الان تقریبا نصف اون گذشته ولی هنوزم دیر نیست و میشه توش شرکت کرد ( راستش رو بخواین خودم هم چند دیقه قبل از نوشتن این پست ثبت نام کردم) برای شرکت داخل این جشن کافیه که به آدرس هکتبرفست برید و اونجا اکانت گیت هاب یا گیت لب خودتون رو مشخص کنید، بعدش یک فرم پر کنید و کار رو شروع کنید.
پینوشت ۱ : ایران الان توی اوج اعتراضات خودش قرار داره، خیلی ها اعتصاب کردن، خیلی ها به خیابون ها اومدن و … پینوشت ۲ : جادی باعث آشنایی من با هکتبرفست و خیلی چیز های دیگه شد ولی الان بدون هیچ دلیل یا توضیحی توی زندان هست. خبر زیادی ازش نداریم و امیدوارم خیلی زودتر آزاد بشه پینوشت ۳ : دیشب زندان اوین (که جادی الان اونجا هست) آتیش گرفته ، خبر رسید که جادی به خانوادش تماس گرفته و حالش خوبه و همین بهانه ای شد که این پست توی وبلاگ من نوشته بشه پینوشت ۴ :به امید روز های خوب و آزادی جادی عزیز . به قول جادی با ما باشید که دنیا به هکر های بیشتری نیاز داره 🙂
سایت wttr.in اطلاعات هواشناسی رو داخل ترمینال میتونه به شما نشون بده. برای دیدنش کافیه توی ترمینالتون با استفاده از ابزار curl یک در خواست ارسال کنید 🙂
curl http://wttr.in/esfahan
و نتیجش میشه این
اگر هم مثل من دوست دارید که از این به بعد ازش استفاده کنید کافیه یک فایل مثلا به نام howistheweather داخل مسیر ~/bin/ بسازید و دو خط زیر رو داخلش کپی کنید.
#! /bin/bash
curl http://wttr.in/$1
حالا هر موقع خواستید وضعیت آب و هوا رو بدونید کافیه توی ترمینال دستور زیر رو اجرا کنید :