بایگانی ماهیانه: بهمن 1401

دردسر های تاکسی های خودران در سانفرانسیسکو

مدتی هست که مسئولین حمل ونقل سانفرانسیسکو شکایت های مختلفی رو دریافت می‌کنند که منشا اون ها به تاکسی های خودران برمی‌گرده.

قضیه از این قرار هست که تاکسی های خودران یکسری مشکلات رو برای مردم بوجود آورده که شایع ترینش تلف کردن وقت مسافران هست. اما مسئله به همینجا ختم نمی‌شه و این تاکسی ها مشکلات دیگه ای هم بوجود آوردند.

تا به حال سه مورد پیش آومده که کارکنان شرکت های حمل نقل تاکسی های خودران بعد از اینکه جوابی از طرف مسافران دریافت نکردند با 911 تماس گرفتن که بعدا مشخص شده که مسافر توی تاکسی خوابش برده و به همین خاطر جواب نداده.
در موردی دیگر گروهی از تاکسی های خودران بدون دلیل مشخص وسط خیابان از کار افتادن و دیگه حرکت نکردند که باعث ترافیک شدند یا مثلا زمانی که نیرو های آتش نشانی در حال کار روی یک عملیات واقعی بودند برای اینکه ماشین خودران از روی شلنگ آتش نشانی عبور نکنه مجبور شدند که حدود دو دقیقه وقت بذارن و در نهایت هم شیشه ماشین رو شکستن تا بتونن جلوی حرکت ماشین رو بگیرن این در حالی بوده که اپراتور مدعی شده که از مرکز کنترل ماشین رو از کار انداخته.

یکی از اصلی ترین نگرانی های مسئولین سانفرانسیسکو نحوه برخورد مردم با تاکسی های خودران بوده به این خاطر که مردم با این تاکسی ها به همون شکلی برخورد می‌کنند که با وسیله هایی مثل قطار یا اتوبوس برخورد می‌کنند به عنوان مثال توی تاکسی خوابیدن.
مسئولین سانفرانسیسکو اعلام کردند که هیچ کدوم از مشکلات گفته شده تا الان آسیب یا ضربه غیر قابل جبرانی رو ایجاد نکردند اما اون ها به این نتیجه رسیدند که این شهر هنوز برای تاکسی های خودران آماده نیست و همچنین شرکت های اجرا کننده این طرح باید عملکرد بهتری داشته باشند.

منبع

هوش مصنوعی عکس های شما رو ادیت می‌کنه، کافیه فقط بهش بگید!!

جمعی از دانشجو های دانشگاه برکلی (کالیفرنیا) مدلی رو بر اساس هوش مصنوعی ساختن که یک عکس رو به عنوان ورودی می‌گیره و بعد از اون کافیه که شما بهش بگید که چه کاری رو روی عکستون انجام بده و اون هم در عرض چند ثانیه عکس رو ادیت می‌کنه و به شما میده.

عملکرد مدل جالبه، چنتا از عکس هایی که این مدل ادیت کرده رو ببینید

همونطور که داخل سایتشون هم گفتن برای ساختن دیتاست برای آموزش مدلشون از دو مدل از پیش آموزش داده شده ، یکی 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 ساده‌ هست و توی صفحه اصلیشون هم روش نصب و استفادش قرار داره.

از Exception ها برای کنترل جریان برنامه استفاده نکنید!!

توی زبان های مختلف برنامه ‌نویسی راه های مختلفی برای مدیریت کردن 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 برابر سریع تر از روش دوم بوده که عدد قابل توجهی هست. در مورد جزئیات بیستر در مورد نحوه آزمایش و مقایسه می‌تونید مقاله اصلی رو نگاه کنید