۱۰ خرداد، ۱۴۰۲
@amir یک مقاله تازه به اسم وب سایت پارس کلیک بازنشسته میشود! نوشت.
با سلام خدمت کاربران گرامی وبسایت پارس کلیک،
در ابتدا از شما که در این چند سال گذشته همراه و پشتیبان ما بودید، از صمیم قلب تشکر میکنم. در این مدت زمان طولانی، ما با تکیه بر حمایت شما، تلاش کردیم تا بهترین و مفیدترین محتوا را برای شما تولید کنیم.
اما همانطور که میدانید، ما با مشکلاتی روبرو هستیم که خارج از دسترسی ماست. برای به حداقل رساندن این مشکلات و همچنین برای ادامه فعالیت هایی که ما از سال ها قبل داشتیم، تصمیم به تغییرات بنیادین در نحوه عملکرد پارس کلیک گرفتهایم.
با توجه به محدودیتهایی که به خاطر تحریمهای ایران وجود دارد، دیگر نمیتوانیم هزینههای جاری مانند هاست و دامین را تامین کنیم. از این رو، با دلسردی اعلام میکنم که فقط وبسایت پارس کلیک به زودی در تاریخ ۹ سپتامبر ۲۰۲۳ از فعالیت وبسایت خود بازنشسته میشود.
با این حال، این پایان نیست. ما همچنان قصد داریم به ارائه محتوای مفید و کیفیتی که شما از ما انتظار دارید، ادامه دهیم. از این پس، تمامی فعالیتهای ما در پلتفرم یوتیوب ادامه خواهد یافت. ما از شما دعوت میکنیم تا با ما در این سفر جدید همراه شوید و همچنان از حمایتهای بیدریغتان به ما بپردازید.
از همه شما عذرخواهی میکنم و امیدوارم که با حمایت شما، ما بتوانیم به ارائه خدماتی که شما لایق آن هستید، ادامه دهیم.
۲۸ اسفند، ۱۴۰۱
@amir به گفتگوی چه ویدیویی یا درسی رو دوست دارید درست کنم؟ جواب داد.
آموزش تایپ اسکریپت کمتر از دو ساعت رو ساختم.
۱۸ اسفند، ۱۴۰۱
@amir به گفتگوی چه ویدیویی یا درسی رو دوست دارید درست کنم؟ جواب داد.
@mina20088 Hey, that course is archived and there weren't any exercise files to begin with just to let you create your own assets that way you can learn faster. Good luck
۱۷ اسفند، ۱۴۰۱
۱۳ اسفند، ۱۴۰۱
@amir یک مقاله تازه به اسم چت جی پی تی چیست؟ نوشت.
چت جی پی تی یک مدل زبانی هوشمند است که توسط شرکت OpenAI طراحی شده است. این مدل قادر است با استفاده از شبکه های عصبی عمیق، به پرسش ها و درخواست های کاربران پاسخ دهد و در برخی موارد حتی قادر به گرفتن تصمیمات هوشمندانه در مورد وظایف خاص است. در این مقاله به مزایا و کاربردهای چت جی پی تی برای وبسایت های فارسی می پردازیم.
با توجه به اینکه چت جی پی تی در ایران هنوز به صورت رسمی و در دسترس عمومی قرار نگرفته است، باز هم بسیاری از کاربران این ابزار را با استفاده از ابزارهای پروکسی و VPN در ایران استفاده میکنند.
استفاده از چت جی پی تی به عنوان یکی از راهکارهایی است که برای بهبود تجربه کاربری در سایتها و برنامههای اینترنتی مورد استفاده قرار میگیرد. با استفاده از این ابزار، کاربران میتوانند سوالات خود را به صورت مستقیم و بدون نیاز به جستجو در صفحات مختلف وبسایت پرسیده و به سرعت پاسخ دریافت کنند.
همچنین، استفاده از چت جی پی تی به عنوان یکی از ابزارهای پشتیبانی مشتریان در سایتهای تجاری و خدماتی، بسیار مورد توجه قرار گرفته است. با استفاده از این ابزار، کاربران میتوانند به سادگی و بدون نیاز به تماس تلفنی یا ارسال ایمیل، با کارشناسان مربوطه در ارتباط باشند و مشکلات خود را به سرعت حل کنند.
"چت جی پی تی" یک مدل زبانی هوش مصنوعی است که توسط شرکت OpenAI طراحی شده است و از طریق آن میتوان با یک سیستم هوشمند و ماشینی در مورد موضوعات مختلف گفتگو کرد. در این مقاله به معرفی چت جی پی تی و کاربردهای آن در وبسایتهای فارسی میپردازیم.
استفاده از چت جی پی تی در وبسایتهای فارسی
یکی از مزایای استفاده از چت جی پی تی برای وبسایت های فارسی، این است که این مدل به زبان فارسی آموزش دیده است و به سادگی می تواند با کاربران فارسی زبان ارتباط برقرار کند. این به کاربران امکان می دهد که درخواست های خود را به زبان خودشان مطرح کنند و به راحتی با وبسایت تعامل داشته باشند. همچنین، استفاده از چت جی پی تی برای وبسایت های فارسی به دلیل اینکه به یکی از مدل های معتبر در دنیای هوش مصنوعی تبدیل شده است، به کاربران اطمینان می دهد که با یک مکانیزم قابل اعتماد برای برقراری تعامل با وبسایت همراه هستند.
یکی از کاربردهای چت جی پی تی در وبسایتهای فارسی، ارائه پاسخ به سوالات کاربران و همچنین ارائه خدمات پشتیبانی به صورت خودکار است. این امر میتواند به بهبود تجربه کاربری و همچنین کاهش هزینههای شرکتها منجر شود.
با توجه به توانایی چت جی پی تی در درک زبان طبیعی، میتوان آن را به عنوان یک واسط کاربری برای سفارشات آنلاین و خریدهای اینترنتی نیز استفاده کرد. با استفاده از چت جی پی تی، کاربران میتوانند به صورت خودکار با سیستم هوشمند در مورد جزئیات سفارشات خود گفتگو کرده و نیازهای خود را مطرح کنند.
از دیگر کاربردهای چت جی پی تی در وبسایتهای فارسی میتوان به کمک در بهبود SEO سایتها اشاره کرد. با توجه به این که سیستم چت جی پی تی به طور مداوم با کلمات کلیدی مختلف در تعامل با کاربران استفاده میشود، میتواند به بهبود رتبهبندی سایت در موتورهای جستجو کمک کند.
@amir به گفتگوی نحوه حذف و ویرایش یک فیلد پیش فرض در اسکریپت Perfex CRM جواب داد.
برای حذف یک فیلد پیشفرض در بخش Custom fields در اسکریپت Perfex CRM، شما باید ابتدا به فایل مربوط به مدل مورد نظر در فولدر app/models مراجعه کنید. به عنوان مثال، اگر میخواهید یک فیلد پیشفرض را از مدل کاربر(User) حذف کنید، باید به فایل app/models/User_model.php مراجعه کنید.
در این فایل، باید به دنبال تابعی به نام getCustomFields بگردید. این تابع آرایهای از فیلدهای شخصیسازی شده را برمیگرداند که برای مدل مورد نظر تعریف شده است. برای حذف یک فیلد پیشفرض، میتوانید کد مربوط به آن فیلد را از آرایهی برگشتی تابع getCustomFields حذف کنید.
برای ویرایش یک فیلد پیشفرض، نیاز است که به همان فایل مراجعه کنید و مقدارهای مربوط به فیلد را تغییر دهید. برای مثال، اگر میخواهید نام فیلد پیشفرض را تغییر دهید، باید این تغییر را در کد مربوط به فیلد در تابع getCustomFields و همچنین در تابع مربوط به فرم ایجاد و ویرایش رکورد (مانند تابع addEditUser) اعمال کنید. به عنوان مثال، اگر میخواهید نام فیلد "شماره تماس" را به "شماره تماس تحصیلی" تغییر دهید، باید این تغییر را در کد مربوطه در هر دو تابع اعمال کنید.
@amir به گفتگوی استفاده از سایر زبان های برنامه نویسی در محیط های کدنویسی جواب داد.
سلام. بله، شما میتوانید زبانهای دیگری مانند Python یا PHP را در برنامههای اندرویدی استفاده کنید، اما به دلیل اینکه زبانهای دیگر برای برنامهنویسی اندروید به طور رسمی پشتیبانی نمیشوند، این کار نیازمند تلاش و تنظیمات خاصی است.
یک راه برای استفاده از زبانهای دیگر در اندروید، استفاده از ابزارهایی مانند Kivy یا PyMob است که برای برنامهنویسی اندروید با استفاده از Python طراحی شدهاند.
در مورد استفاده از زبانهای دیگر در برنامههای اندروید با استفاده از Android Studio، ابتدا باید برنامه را با زبانهای قابل پشتیبانی از جمله Java یا Kotlin ایجاد کنید. سپس میتوانید کلاسهای خود را با زبان دیگری مانند Python یا PHP نوشته و در کلاسهای جاوا یا کاتلین به عنوان یک واسط استفاده کنید.
برای این کار، میتوانید کدهای زبان دیگری خود را در یک فایل جداگانه بنویسید و سپس از طریق متدهای ارتباطی از جمله JNI (Java Native Interface)، به برنامه جاوا خود اضافه کنید. به عنوان مثال، در فایل main-activity.java میتوانید از متد های زبان دیگری استفاده کنید و با استفاده از JNI به آنها دسترسی داشته باشید.
البته توجه داشته باشید که استفاده از زبانهای دیگر در برنامههای اندروید بسیار پیچیده است و باید دانش کافی در زمینه برنامهنویسی اندروید و همچنین زبان دیگری که قصد دارید استفاده کنید، داشته باشید.
@amir به گفتگوی مشکل در اجرای برنامه در دستگاه های اندروید جواب داد.
بله، مشکل ممکن است به دلیل آی پی باشد. به عنوان یک راه حل اصولی، شما باید یک IP ثابت برای دستگاه اندروید خود تنظیم کنید و به عنوان مقصد در فایل config.xml در پرونده ریشه پروژه Cordova خود اضافه کنید. به عنوان مثال:
<allow-navigation href="http://192.168.0.100:8080/*" />
در این مثال، IP ثابت دستگاه اندروید شما 192.168.0.100 است و برنامه شما باید روی پورت 8080 اجرا شود. شما باید مقدار آدرس URL را با آدرس IP و پورت خود جایگزین کنید.
همچنین مطمئن شوید که دستگاه اندروید شما در یک شبکه قرار دارد که به آن دسترسی دارید و پورتی که برنامه شما بر روی آن اجرا می شود، در این شبکه باز است. در نهایت، مطمئن شوید که برنامه Cordova شما برای پلتفرم اندروید ساخته شده است و تمام پکیج های مورد نیاز برای اجرای آن بر روی دستگاه اندروید نصب شده است.
@amir به گفتگوی نوار پیشرفت - ProgressBar جواب داد.
برای نمایش ProgressBar در ویو Laravel، شما میتوانید از کتابخانهی vue-progressbar استفاده کنید. این کتابخانه به شما امکان میدهد تا یک ProgressBar قابل تنظیم را در ویوهای Laravel استفاده کنید.
برای استفاده از این کتابخانه، ابتدا آن را با استفاده از دستور زیر نصب کنید:
npm install vue-progressbar --save
سپس در فایل app.js، کد زیر را به انتهای فایل اضافه کنید:
import VueProgressBar from 'vue-progressbar'
Vue.use(VueProgressBar, {
color: '#00c853',
failedColor: '#ff1744',
thickness: '5px'
})
در کد بالا، ما VueProgressBar را با اندازه، رنگ، ضخامت، و... تنظیم کردهایم.
در نهایت، برای استفاده از ProgressBar در ویو Laravel، کافیست که دستور خواندن فایل اکسل را در یک متد و با استفاده از متد set از کتابخانه VueProgressBar، پیشرفت ProgressBar را به صورت دلخواهی تنظیم کنید.
import VueProgressBar from 'vue-progressbar'
export default {
methods: {
readExcelFile() {
this.$Progress.start()
// کد خواندن فایل اکسل
this.$Progress.set(50)
// کد پردازش فایل اکسل
this.$Progress.finish()
}
}
}
در مثال بالا، ما با فراخوانی start از ProgressBar شروع میکنیم، سپس با استفاده از متد set، میتوانیم پیشرفت ProgressBar را به صورت دلخواهی تنظیم کنیم و در نهایت با فراخوانی finish، ProgressBar را به پایان میرسانیم.
@amir به گفتگوی استفاده از library ریسایزر تصاویر بصورت realtime جواب داد.
بله، استفاده از تصاویر با کیفیت بالا و ریسایز آنها در لحظه نمایش، منابع سرور را بیشتر درگیر می کند. اما با استفاده از روش های بهینه شده و مناسب برای ریسایز تصاویر مانند استفاده از کش، فشرده سازی تصاویر، بارگیری تصاویر از منابع سرور سریع و ... می توانید این مشکل را کمتر کنید. همچنین، انتخاب یک سرویس مناسب و با کیفیت برای ریسایز تصاویر، می تواند بهبود روشنایی و سرعت سایت شما را فراهم کند.
در مورد سرویسی که دیجی کالا و علی بابا برای این کار استفاده می کنند، باید گفت که می تواند یکی از بهترین و حرفه ای ترین راه حل های ریسایز تصاویر باشد. با این حال، هزینه استفاده از چنین سرویس هایی باید در نظر گرفته شود.
@amir به گفتگوی ریسپانس فایل در روبی آن ریلز و رد ماین جواب داد.
سلام. برای حل مشکل شما، بهتر است از چندین راه میانبر برای دانلود فایل استفاده کنید تا کاربران بتوانند به راحتی فایل را دانلود کنند.
یکی از راههای میانبر، استفاده از نرمافزار IDM برای دانلود فایل است. این نرمافزار به صورت پیشفرض قابلیت ادامه دانلود را دارد و در صورت از دست دادن اتصال به اینترنت، دانلود را از آخرین نقطه قطع شده ادامه خواهد داد.
راه دیگر، استفاده از فایلهای تقسیم شده برای دانلود است. با استفاده از این روش، فایل را به چندین بخش تقسیم کرده و هر قسمت را به صورت جداگانه دانلود میکنید. در صورت قطع شدن اتصال به اینترنت، شما میتوانید از آخرین قسمت دانلود شده برای ادامه دانلود استفاده کنید.
همچنین، بهتر است فایلهای بزرگ را در یک پوشه جداگانه قرار دهید و از آدرس این پوشه برای دانلود استفاده کنید تا از ایجاد مشکلاتی مانند کش نشدن فایلها در مرورگرها جلوگیری کنید.
@amir به گفتگوی کش نشدن تصاویر از ساب دامین جواب داد.
این مشکل ممکن است به دلیل عدم تنظیم صحیح کش برای تصاویر باشد. برای رفع این مشکل میتوانید از روشهای زیر استفاده کنید:
استفاده از نسخهبندی تصاویر: با استفاده از نسخهبندی تصاویر، شما میتوانید تصاویر را با اضافه کردن یک پارامتر منحصر به فرد به URL آنها کش کنید. برای مثال، اگر شما یک تصویر با نام "example.jpg" دارید، میتوانید یک پارامتر منحصر به فرد مانند "v=1" به آن اضافه کنید، به این صورت:
<img src="https://subdomain.example.com/images/example.jpg?v=1" alt="Example Image">
هربار که شما تصویر را تغییر دهید، میتوانید شماره نسخه را تغییر داده و تصویر را بازنویسی کنید.
استفاده از تنظیمات کش مرورگر: برای تنظیم کش مرورگر در لاراول میتوانید از کتابخانههایی مانند Laravel Cache و Cache-Control استفاده کنید. این کتابخانهها به شما اجازه میدهند که تنظیمات کش را برای فایلهای خود تنظیم کنید تا از این مشکلات جلوگیری کنید.
استفاده از CDN: استفاده از شبکه توزیع محتوا (CDN) میتواند به شما کمک کند تا تصاویر را به صورتی کش شوند که در همهی مرورگرها مطابقت داشته باشند. با استفاده از CDN، شما میتوانید تصاویر را به سرعت بارگذاری کنید و از مشکلات کش مرورگر جلوگیری کنید.
@amir به گفتگوی Git , Remote جواب داد.
برای این کار میتوانید از دستور زیر استفاده کنید:
git push origin delet_comment/delete_comments_b2:master
در این دستور، شاخه جدیدی به نام delet_comment/delete_comments_b2 را ایجاد میکنید و آن را به شاخه master در ریموت متصل میکنید. این کار باعث میشود تا شاخه delet_comment/delete_comments_b2 زیر شاخه master در ریموت قرار بگیرد.
برای بررسی شاخههای موجود در ریموت و همچنین اطلاعات جدیدی که به آن اضافه کردهاید، میتوانید از دستور زیر استفاده کنید:
git branch -r
این دستور تمامی شاخههای ریموت را نشان میدهد. همچنین با استفاده از دستور زیر میتوانید اطلاعات مربوط به شاخه مورد نظر خود را ببینید:
git show remotes/origin/master/delet_comment/delete_comments_b2
@amir به گفتگوی نصب multi-domain ssl روی هاست جواب داد.
درسته، برای استفاده از SSL برای دو دامنه مختلف، شما باید از یک گواهینامه SSL چند دامنه ای استفاده کنید. گواهینامه های SSL چند دامنه ای یا SAN (Subject Alternative Name) SSL Certificate، به شما اجازه می دهند تا بیش از یک دامنه را با یک گواهی SSL پوشش دهید.
استفاده از گواهینامه SSL رایگان Let's Encrypt برای گرفتن گواهینامه SSL چند دامنه ای نیز ممکن است. برای این کار، باید گواهی SSL را با اضافه کردن هر دامنه مجزا به آن درخواست کنید. به عنوان مثال، اگر دو دامنه example1.com و example2.com دارید، شما باید هر دو دامنه را به عنوان دامنه های جایگزین در گواهینامه SSL خود اضافه کنید.
اگر از یک سرویس دهنده میزبانی استفاده می کنید، ممکن است گواهینامه SSL چند دامنه ای در بستر خود ارائه شده باشد. در این صورت، باید دامنه های مورد نیاز خود را به گواهینامه اضافه کنید. در غیر این صورت، باید گواهینامه SSL چند دامنه ای را از یک سازمان صادر کننده SSL معتبر تهیه کنید.
@amir به گفتگوی نحوه redirect کردن صفحه در twig template engine جواب داد.
سلام، در Twig دستوری برای redirect کردن صفحه به صفحه دیگر وجود ندارد. برای redirect کردن صفحه در Symfony (فریمورکی که Twig در آن استفاده میشود)، باید از کلاس Symfony\Component\HttpFoundation\RedirectResponse استفاده کنید.
برای این کار، ابتدا از تابع redirect() برای ایجاد یک شیء از این کلاس استفاده کنید و سپس URL مورد نظر خود را به عنوان آرگومان به این تابع بدهید. سپس شیء RedirectResponse را به Twig برای render کردن به عنوان response بدهید.
مثال:
در کنترلر:
use Symfony\Component\HttpFoundation\RedirectResponse;
// ...
public function someAction()
{
$url = $this->generateUrl('route_name'); // نام روت جایگزین کنید
$response = new RedirectResponse($url);
return $response;
}
در فایل توییگ:
{% if app.request.get('redirect') %}
{% set redirectUrl = app.request.get('redirect') %}
{% set redirectResponse = app.redirect(redirectUrl) %}
{{'{{'}} redirectResponse.send() }}
{% endif %}
در این مثال، اگر یک پارامتر به نام redirect به URL کنترلر ارسال شود، کد بالا از RedirectResponse استفاده میکند و صفحه را به صفحه مورد نظر redirect میکند. لازم به ذکر است که این کد را باید به نیازهای خودتان تطبیق دهید.
@amir به گفتگوی نوشتن یک متن در جاوا جواب داد.
سلام، برای اینکه در جاوا بتوانید به فایل بنویسید، میتوانید از کلاس FileWriter استفاده کنید. این کلاس یک شیء FileWriter برای نوشتن داده ها به فایل ایجاد میکند. برای این کار، شما می توانید از کد زیر استفاده کنید:
try {
FileWriter writer = new FileWriter("path/to/file.txt", true);
writer.write("نوشتن اون متن موفقیت آمیزه");
writer.write("\r\n"); // برای رفتن به خط بعدی
writer.close();
System.out.println("نوشتن در فایل با موفقیت انجام شد.");
} catch (IOException e) {
System.out.println("خطا در نوشتن در فایل: " + e.getMessage());
}
در کد بالا، FileWriter مشخص می کند که فایلی که باید در آن بنویسید کجا قرار دارد. آرگومان دوم که true است، مشخص می کند که برای نوشتن اطلاعات به انتهای فایل بروید، به جای اینکه محتویات فایل را پاک کنید.
برای نوشتن متن جدید به فایل، از کد زیر استفاده کنید:
try {
FileWriter writer = new FileWriter("path/to/file.txt", true);
writer.write("متن جدید");
writer.write("\r\n"); // برای رفتن به خط بعدی
writer.close();
System.out.println("نوشتن در فایل با موفقیت انجام شد.");
} catch (IOException e) {
System.out.println("خطا در نوشتن در فایل: " + e.getMessage());
}
از طریق پارامتر دوم، true، می توانید متن جدید را به انتهای فایل اضافه کنید. در غیر این صورت، متن جدید موجودیت های قبلی را پاک خواهد کرد.
@amir به گفتگوی ایندکس گذاری در الستیک سرچ جواب داد.
در Elasticsearch شما می توانید فیلدهای مختلف را برای ایندکس گذاری تعریف کنید و به آنها تنظیمات مختلفی اعم از نوع داده، نوع ایندکس و پارامترهای دیگر اختصاص دهید. برای مثال، می توانید فیلدی را با نوع رشته (string) و پارامتر index set کنید تا برای جستجوی متنی قابل استفاده باشد.
از طرفی، شما می توانید فیلدها را به عنوان کلید یکتا (unique key) تعریف کنید. این کار با استفاده از فیلدهای کلیدی (key fields) انجام می شود. به عنوان مثال، فرض کنید شما یک فیلد "id" با مقدار یکتا برای هر سند در ایندکس تعریف کرده اید. شما می توانید با استفاده از شناسه سند، بدون نیاز به جستجوی تمام سندها، سند مورد نظر خود را پیدا کنید.
برای تعریف فیلدها و تنظیمات مختلف آنها، می توانید از فایل تنظیمات الستیکسرچ یعنی elasticsearch.yml استفاده کنید. همچنین شما می توانید از API های موجود در Elasticsearch برای تنظیمات دقیق تر فیلدها استفاده کنید.
به عنوان مثال، فرض کنید شما می خواهید فیلد "title" را به عنوان یک فیلد رشتهای و همچنین به عنوان یک فیلد کلیدی تعریف کنید. برای این کار، می توانید از این متن استفاده کنید:
PUT my_index/_mapping
{
"properties": {
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
در این کد، فیلد "title" به عنوان یک فیلد رشتهای با نوع "text" و همچنین یک فیلد کلیدی با نوع "keyword" تعریف شده است. با این تنظیمات، می
@amir به گفتگوی تغییر فونت در جاوا جواب داد.
برای گزینهی سوم، شما باید همزمان از دو فونت بولد و کج استفاده کنید. برای این کار میتوانید از مثلاً Font.BOLD | Font.ITALIC استفاده کنید. این مقدار جمعهی بولد و کج را برای فونت تعیین میکند. به عنوان مثال، کد زیر باید کار خود را انجام دهد:
private void boldActionPerformed (java.awt.event.ActionEvent evt)
{
int fontStyle = Font.PLAIN;
if (bold.isSelected()) {
fontStyle = Font.BOLD;
}
if (italic.isSelected()) {
fontStyle |= Font.ITALIC;
}
Jtx2.setFont(new Font("Monotype Corsiva", fontStyle, 15));
}
private void italicActionPerformed(java.awt.event.ActionEvent evt) {
int fontStyle = Font.PLAIN;
if (italic.isSelected()) {
fontStyle = Font.ITALIC;
}
if (bold.isSelected()) {
fontStyle |= Font.BOLD;
}
Jtx2.setFont(new Font("Monotype Corsiva", fontStyle, 15));
}
@amir به گفتگوی مشکل در ساخت پیج برای vue-element-admin جواب داد.
سلام،
Vue-element-admin یک پنل مدیریتی بسیار قدرتمند و گسترده است که برای پروژه های متوسط و بزرگ مناسب است. برای رفع مشکلاتی که مطرح کردید، ممکن است نیاز باشد تا کدهای موجود در پروژه را بررسی کنید.
در مورد اولین مشکل، اگر نمیتوانید متد login را تغییر دهید، باید بررسی کنید که آیا به درستی از فایل های مربوط به آن استفاده شده است و آیا تغییرات شما اعمال شده است.
در مورد دومین مشکل، ممکن است نیاز باشد که صفحات خود را به درستی با استفاده از router تعریف کنید و همچنین اطمینان حاصل کنید که مسیرها به درستی تعریف شده اند.
در مورد سومین مشکل، بهتر است که از component های موجود در پنل استفاده کنید و از آنها به عنوان الگوی خود استفاده کنید. همچنین میتوانید از داکیومنت های مربوط به پنل و کتابخانههای مورد استفاده آن استفاده کنید تا با نحوه استفاده از آنها آشنا شوید.
در کل، Vue-element-admin یک پنل مدیریتی قدرتمند است که برای پروژههای بزرگ مناسب است ولی نیازمند آشنایی کامل با Vue.js و فریمورکهای دیگر مورد استفاده آن است.
@amir به گفتگوی ست کردن چند دامنه برای APP URL در لاراول env جواب داد.
سلام، برای این کار باید از چندین راهکار استفاده کنید. یکی از راههایی که میتوانید برای این کار انجام دهید استفاده از subdomain ها است. به این صورت که برای هر دامنهی مورد نظر یک subdomain بسازید که به همان IP و سروری که سایتتان در آن میزبانی میشود اشاره کند. سپس با استفاده از تنظیمات سرور و مسیریابی، برای هر subdomain آدرس دامنهی مورد نظر را برای تصاویر و لینکهای سایت خودتان استفاده کنید.
در ضمن، میتوانید از تنظیمات DNS هر دامنه نیز استفاده کنید و با تنظیم CNAME رکورد های مربوط به هر دامنه را به دامنه اصلی سایت متصل کنید. این کار باعث میشود که هر دامنه با آدرس موجود در نوار آدرس مرورگر، به سایت اصلی متصل شود و تصاویر و لینکهای سایت از همان دامنهی اصلی بخوانده شوند.
در نهایت، باید به یاد داشته باشید که تمام این راهها نیازمند تغییراتی در تنظیمات سرور و DNS هستند و بهتر است در صورت عدم آشنایی کافی با این مسائل، از کمک یک فنیساز حرفهای استفاده کنید.
@amir به گفتگوی نمایش سرگروه های دارای محصول جواب داد.
سلام! به نظر میرسد که از یک سیستم پویا و سازماندهی شده برای نمایش دستهبندی محصولات استفاده کردهاید. برای نمایش اینکه آیا یک سرگروه یا زیر گروه دارای محصول هست یا خیر، میتوانید از تابع زیر استفاده کنید:
public function hasProducts()
{
if ($this->products->count() > 0) {
return true;
}
foreach ($this->child as $child) {
if ($child->hasProducts()) {
return true;
}
}
return false;
}
این تابع برای هر دسته بندی (سرگروه یا زیرگروه)، ابتدا بررسی میکند که آیا آن دسته بندی محصولی دارد یا نه. اگر داشت، مقدار true را برمیگرداند. در غیر این صورت، برای هر زیرگروه، تابع را صدا میزند تا بررسی کند که آیا زیرگروهی محصول دارد یا نه. در صورتی که هیچ یک از زیرگروهها محصول نداشتند، مقدار false برگردانده میشود.
حالا برای نمایش دستهبندیها در وبسایت، میتوانید از یک حلقه foreach برای گرفتن هر دستهبندی و اعمال تابع hasProducts بر روی هر یک استفاده کنید. به طور مثال:
@foreach($categories as $category)
<li>
<a href="/category/{{'{{'}} $category->id }}">{{'{{'}} $category->title }}</a>
@if($category->hasProducts())
(دارای محصول)
@endif
@if(count($category->child))
<ul>
@include('partials.category', ['categories' => $category->child])
</ul>
@endif
</li>
@endforeach
@amir به گفتگوی ارسال درخواست ها خرید جدید با نوتیفیکیشن جواب داد.
برای ارسال نوتیفیکیشن در PWA، شما می توانید از Web Push API استفاده کنید. این API به شما اجازه می دهد که پیام های push برای کاربران خود ارسال کنید. در اینجا چند سرویس محبوب برای ارسال push notification در PWA معرفی می شوند:
- OneSignal
- Pusher
- FCM (Firebase Cloud Messaging)
در مورد چک کردن وجود درخواست های خرید، بهترین روش استفاده از یک وب سوکت (WebSocket) است. این به شما امکان می دهد تا ارتباط دائمی با سرور را برقرار کنید و در صورتی که درخواستی برای هر کاربر جدید دریافت شود، به آنها نوتیفیکیشن ارسال کنید.
در مورد سرویس ارسال نوتیفیکیشن، ممکن است با توجه به تحریم های ایران، استفاده از سرویس های خارجی مشکلی ایجاد کند. با این حال، شما می توانید از سرویس های داخلی مانند Pusher یا بسته های پیاده سازی شده Laravel مانند Laravel Web Push Notification استفاده کنید. همچنین می توانید از سرویس هایی مانند Node.js با استفاده از کتابخانه هایی مانند web-push برای پیاده سازی پیام push خود استفاده کنید. در مورد استفاده از شکن، این به عنوان یک راه حل موقتی می تواند به کار گرفته شود، اما باید مطمئن شوید که از یک شکن مطمئن و قابل اعتماد استفاده می کنید.
@amir به گفتگوی ایجاد یک پیج بیلدر برای اضاف کردن ایتم در صفحه ایندکس جواب داد.
سلام ببخشید دیر جواب میدم خیلی وقته اینجا نبودم ولی در جواب باید بگم، برای اضافه کردن اسلایدر، منو و دیگر ایتمهای صفحه به صفحات وب خود میتوانید از پکیجهایی مانند Laravel Jetstream یا Laravel Nova استفاده کنید.
در Laravel Jetstream میتوانید از قابلیت Inertia.js برای ساخت صفحات واکنشگرا با استفاده از Vue.js استفاده کنید. با این روش، شما میتوانید از کتابخانههایی مانند Swiper.js برای ایجاد اسلایدر و Tailwind CSS برای طراحی واکنشگرا استفاده کنید.
در Laravel Nova نیز میتوانید از قابلیت Layouts برای ایجاد صفحات سفارشی با استفاده از ترکیبهای مختلف از ابزارهای مختلف استفاده کنید.
همچنین، اگر میخواهید از پکیجهای بیشتری استفاده کنید، میتوانید از پکیجهایی مانند Laravel Backpack یا Voyager استفاده کنید که امکانات بیشتری برای ایجاد پنل مدیریت وب سایت فراهم میکنند.
@amir به گفتگوی راهی وجود داره که بتوانیم وبسایتی شبیه به nslookup بسازم. جواب داد.
سلام ببخشید دیر جواب میدم خیلی وقته اینجا نبودم ولی در جواب باید بگم بله، برای این منظور میتوانید از APIهای مختلفی استفاده کنید که جزئیات یک دامنه را در اختیار شما قرار میدهند. برخی از این APIها شامل موارد زیر هستند:
WHOIS API: این API جزئیات مربوط به یک دامنه را شامل اطلاعاتی مانند نام دامنه، نام مالک دامنه، تاریخ انقضا و غیره میکند. برخی از سرویسهایی که از این API استفاده میکنند شامل WhoisXML API و Whois API Inc. میشوند.
DNS Lookup API: این API اجازه میدهد تا اطلاعاتی مانند آدرس IP مرتبط با یک دامنه، سرویس DNS مورد استفاده و غیره را برای شما بازگرداند. برخی از سرویسهایی که از این API استفاده میکنند شامل DNS Checker و DNSlytics میشوند.
Domain Availability API: این API اطلاعاتی مانند وضعیت قابلیت استفاده یک دامنه را برای شما بازگردانده و این امکان را میدهد تا بررسی کنید که یک دامنه در دسترس است یا خیر. برخی از سرویسهایی که از این API استفاده میکنند شامل Namecheap و Domainr میشوند.
باید توجه داشت که برخی از این APIها رایگان هستند و برخی دیگر نیاز به پرداخت هزینه دارند. همچنین برای استفاده از این APIها، باید به صورت مستقیم با API Provider ارتباط برقرار کنید و درخواست خود را ارسال کنید. برای استفاده از این APIها در وبسایت خود، میتوانید از زبانهای برنامهنویسی مختلفی مانند JavaScript، Python، Ruby و غیره استفاده کنید.
@amir به گفتگوی نمایش فایل ها با فرمت docs, xls, csv, pdf, pptx و ... توی صفحه html جواب داد.
روشی که شما استفاده کردهاید، استفاده از تگ iframe، یکی از روشهای معمول برای نمایش فایلهای مختلف در صفحات وب است. اما این روش در برخی موارد به مشکلاتی مانند پشتیبانی نکردن از فرمتهای مختلف یا لود نشدن فایل در اولین دفعه برخورد میکند.
برای حل این مشکلات میتوانید از روشهای دیگری مانند استفاده از کتابخانهها و ابزارهایی مانند Google Docs Viewer، Microsoft Office Viewer و Embedly استفاده کنید. این ابزارها به شما اجازه میدهند تا فایلهای مختلف را به صورت داینامیک در صفحات وب خود نمایش دهید.
به عنوان مثال، برای نمایش فایلهای PDF میتوانید از Google Docs Viewer استفاده کنید، همانطور که در کدی که ارسال کردهاید استفاده شده است. برای نمایش فایلهای دیگر نیز میتوانید از ابزارهای مشابه استفاده کنید.
همچنین، اگر مشکل لود نشدن فایل در اولین دفعه باقی مانده است، میتوانید از روشهای دیگری مانند استفاده از تگ object یا استفاده از APIهای مربوط به هر نوع فرمت فایل استفاده کنید.
@amir به گفتگوی چرا همه از DOT NET مایکروسافت فراری هستن؟! جواب داد.
سلام! درست میفرمایید، .NET Core یک تکنولوژی جالب و پویاست که از جمله قابلیتهای آن عبارتند از:
- پشتیبانی از چندین سیستم عامل از جمله ویندوز، لینوکس و macOS
- ارائه فریمورکهای قدرتمند و متنوعی برای توسعه برنامههای تحت وب، دسکتاپ، موبایل و ...
- پیشرفت همیشگی و به روزرسانیهای مداوم
- بودن open-source و رایگان
- امکان انتقال پروژههای قدیمی .NET Framework به .NET Core با دستورالعملهای مشخص
نفرت و پدرکشتگی از هر تکنولوژی بسیار غیرمنطقی است و معمولاً به دلایل شخصی، ناشی از تجربیات قبلی یا عدم آشنایی دقیق با آن تکنولوژی ایجاد میشود. برای شروع کار با .NET Core، بهتر است که در مورد آن بیشتر بخوانید و به صورت عملی با آن کار کنید. این کار به شما کمک خواهد کرد تا بهترین تصمیم را بگیرید که آیا باید وقت و انرژی بیشتری را برای یادگیری و استفاده از .NET Core بگذارید یا خیر.
بله، .NET Core یکی از تکنولوژیهای معروف برنامه نویسی است و میتوانید به عنوان یک رزومه شغلی نگاه کنید. همچنین، با توجه به پیشرفتهای مداوم و رونق رو به رشد .NET Core، میتوان انتظار داشت که آینده آن خوب باشد و موفقیتهای بیشتری در پی داشته باشه
@amir به گفتگوی نصب Magento جواب داد.
سلام، بله نصب Magento 2.4.x با استفاده از CLI امکان پذیر است و می توانید با دستورات زیر نسخه جدید Magento را نصب کنید:
در ابتدا، از طریق دستورات CLI ابزار Composer را به روز کنید:
composer self-update
برای شروع نصب Magento 2.4.x، دستورات زیر را اجرا کنید:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.* mymagento
cd mymagento
این دستورات یک پروژه Magento جدید با نسخه 2.4.x ایجاد می کنند و در پوشه mymagento قرار می دهند.
سپس، فایل app/etc/env.php را با استفاده از ویرایشگر متنی خود ویرایش کرده و تنظیمات دیتابیس را با مشخص کردن نام دیتابیس و اطلاعات دیتابیس (نام کاربری، رمز عبور و غیره) وارد کنید.
در ادامه، دستورات زیر را برای نصب Magento اجرا کنید:
php bin/magento setup:install \
--base-url=http://localhost/mymagento \
--db-host=localhost \
--db-name=database_name \
--db-user=database_user \
--db-password=database_password \
--admin-firstname=Admin \
--admin-lastname=User \
[email protected] \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
در این دستورات، اطلاعات دیتابیس و تنظیمات مدیر سیستم (Admin) و تنظیمات مربوط به منطقه زمانی، زبان، پول و غیره وارد می شوند.
بعد از اجرای دستورات بالا، Magento باید با موفقیت نصب شده باشد و می توانید وارد پنل مدیریت Magento شوید و به فروشگاه خود دسترسی پیدا کنید.
لطفا توجه داشته باشید که برای نصب Magento 2.4.x، نیاز به پیکربندی سرور قدرتمندی دارید و باید از نیازمندی های سیستمی Magento پیروی کنید. همچ
@amir به گفتگوی bitcoin جواب داد.
سلام، برای ارتباط با شبکههای بلاکچین مانند بیت کوین یا اتریوم معمولا از APIهای خاصی استفاده میشود. این APIها اجازه میدهند که برنامه شما با شبکههای بلاکچین ارتباط برقرار کند و اطلاعاتی را از آنها دریافت کند.
به عنوان مثال برای اتریوم میتوانید از Infura استفاده کنید که یک API رایگان برای ارتباط با شبکه اتریوم است. همچنین برای بیت کوین نیز APIهای متعددی وجود دارند مانند Blockcypher و Chain.com.
اگر با برنامه نویسی و ارتباط با شبکههای بلاکچین آشنایی ندارید، میتوانید از کتابخانههای موجود در زبانهای برنامهنویسی مختلف مانند web3.js برای اتریوم و bitcoinjs-lib برای بیت کوین استفاده کنید که امکانات و ویژگیهای مختلفی را برای ارتباط با شبکههای بلاکچین فراهم میکنند.
از طرفی اگر میخواهید برنامهای برای استخراج بیت کوین یا اتریوم بنویسید، باید دسترسی لازم برای انجام این کار را داشته باشید. استخراج بلاکهای جدید نیاز به قدرت پردازش بالایی دارد و معمولا برای انجام این کار باید از تجهیزات و سختافزارهای خاصی مانند ASICها یا GPUهای قدرتمند استفاده کنید.
@amir به گفتگوی مشکل اضافه کردن اسکریپت در Vue JS جواب داد.
بله، میتوانید در Vue.js هم به جای Import از روش دیگری استفاده کنید تا فایلهای اسکریپت را به پروژه اضافه کنید. اما باید توجه داشته باشید که بهتر است از Import استفاده کنید چرا که این روش بهینهتر است و ماژولهای مورد نیاز را فقط در زمان نیاز به برنامه اضافه میکند. در ادامه روش دیگر را برای اضافه کردن اسکریپتها در Vue.js توضیح خواهیم داد:
ابتدا باید فایلهای اسکریپت مورد نظر خود را در پوشه public قرار دهید و سپس با استفاده از تگ script در فایلهای قالب خود، فایلهای اسکریپت را به پروژه اضافه کنید.
مثال:
<template>
<div>
<h1>Vue App</h1>
</div>
</template>
<script>
export default {
mounted() {
let Scripts_Path = [
"/Vendor/aos/aos.js",
"/Vendor/glightbox/js/glightbox.js",
"/Vendor/glightbox/js/glightbox.min.js",
"/Vendor/swiper/swiper-bundle.min.js",
"/Vendor/isotope-layout/isotope.pkgd.js",
"/Vendor/isotope-layout/isotope.pkgd.min.js",
"/Vendor/purecounter/purecounter.js",
"/Js/Main/All.js",
];
Scripts_Path.forEach((script) => {
let tag = document.createElement("script");
tag.setAttribute("src", script);
document.body.appendChild(tag);
});
},
};
</script>
در این مثال، فایلهای اسکریپت در پوشه public قرار دارند و آدرس آنها به تگ script در فایلهای قالب اضافه شده است. لازم به ذکر است که آدرس فایلهای اسکریپت، از پوشه public شروع میشود و باید به صورت نسبی (بدون ذکر پروتکل و دامنه) مشخص شود.
اگر همچنان مشکلی با آدرسدهی دارید، لطفا مشخص کنید که فایلهای اسکریپت شما در چه مسیری در پروژه شما قرار دارند.
@amir به گفتگوی تغییر عکس صفحه دسته بندی وردپرس با استفاده از Jquery جواب داد.
jQuery(function($) {
// آدرس تصویر جدید را در اینجا قرار دهید
var newImage = 'http://example.com/new-image.jpg';
// این کد باعث میشود که تصویر پس زمینه تغییر کند
$('body:not(.template-slider) #Header_wrapper.category-4 #Subheader').css('background-image', 'url(' + newImage + ')');
});
در این کد، $('body:not(.template-slider) #Header_wrapper.category-4 #Subheader')
به ما کمک میکند که تنها از #Subheader برای دستهبندی category-4 استفاده کنیم و به این ترتیب تصویر پسزمینه تنها در صفحات این دستهبندی تغییر میکند.
اگر همچنان مشکل دارید، لطفاً با اطلاعات بیشتری درباره مشکل خود و صفحهای که قصد تغییر تصویر آن را دارید، به من اطلاع دهید.
@amir به گفتگوی ساخت مثلث سرپینسکی در جاوا اسکریپت و مبحث فراکتال ها یا اشکال خود تکرار شونده جواب داد.
ابتدا به صفحه HTML خود یک canvas اضافه کنید:
<canvas id="myCanvas"></canvas>
سپس در کد جاوا اسکریپت خود، این canvas را با استفاده از getElementById دریافت کنید و یک متغیر برای context آن تعریف کنید:
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
حالا میتوانید کد مربوط به مثلث سرپینسکی را درون یک تابع drawTriangle قرار دهید. این تابع باید یک آرگومان بگیرد که اندازه مثلث را تعیین میکند. میتوانید کد زیر را برای تابع drawTriangle استفاده کنید:
function drawTriangle(size) {
// محاسبه ابعاد مثلث
var height = (size * Math.sqrt(3)) / 2;
var midX = canvas.width / 2;
var topY = (canvas.height - height) / 2;
// تنظیم رنگ وضخامت خطوط
ctx.strokeStyle = "#000000";
ctx.lineWidth = 1;
// شروع رسم مثلث
ctx.beginPath();
ctx.moveTo(midX, topY);
ctx.lineTo(midX - size / 2, topY + height);
ctx.lineTo(midX + size / 2, topY + height);
ctx.closePath();
// رسم مثلث
ctx.stroke();
// اگر اندازه مثلث بزرگتر از 10 بود، مثلثهای کوچکتر را نیز رسم کنید
if (size > 10) {
drawTriangle(size / 2);
drawTriangle(size / 2);
drawTriangle(size / 2);
}
}
حالا میتوانید تابع drawTriangle را با مقدار دلخواه فراخوانی کنید، مثلا با فراخوانی زیر:
drawTriangle(400);
این کد، مثلث سرپینسکی را با اندازه ۴۰۰ پیکسل رسم میکند.
۳۰ بهمن، ۱۴۰۱
@amir به گفتگوی مشکل در ارسال ایمیل دعوت برای کلندر گوگل از طریق سرویس اکانت ای پی آی جواب داد.
فکر میکنم که حساب سرویس مربوط به ای پی آی کلندر، اجازه دعوت کردن شرکت کنندگان به یک رویداد را ندارد و برای این کار باید ابتدا "Domain-Wide Delegation of Authority" را برای حساب سرویس تنظیم کنید.
برای این کار، باید تو Google Cloud Console با حساب Google خود وارد شوید. بعد به بخش "APIs & Services" بری و گزینه "Credentials" را انتخاب کنی. بعد بر روی دکمه "Create Credentials" کلیک کنی و گزینه "Service account key" را انتخاب کنی. در ادامه، حساب سرویس خود را انتخاب کنید، و در بخش "Role"، نقش "Project" را انتخاب کنید. در بخش "Key type"، نوع "JSON" را انتخاب کنید و روی دکمه "Create" کلیک کنید تا یک فایل JSON حاوی اطلاعات احراز هویت حساب سرویس شما ایجاد شه. سپس این فایل را در پروژه خود اضافه کرده و برای حساب کلید خود، "Domain-Wide Delegation of Authority" را فعال کنید.
در نهایت، باید با استفاده از "client_email" و "private_key" در فایل JSON، حساب سرویس خود را احراز هویت کرده و با آن یک رویداد در Google Calendar بسازید و شرکت کنندگان را دعوت کنی.
۱۰ بهمن، ۱۴۰۱
@amir به گفتگوی مسیر یادگیری زبان go جواب داد.
برای یادگیری Go for Web Development
، می تونی این مراحل رو دنبال کنی:
-
با اصول زبان
Go
آشنا شوید. -
بستههای کتابخانه استاندارد
Go
مربوط به توسعه وب (net/http
،html/template
، و غیره) را یاد بگیری. -
ساختن برنامه های کاربردی وب را با کتابخانه
net/http
تمرین کنی. -
چارچوب های وب محبوب
Go
مانندGin
،Echo
وIris
را مطالعه کنی. در مورد بهترین چارچوب، به نیازها و ترجیحات شما بستگی داره. برخی از گزینه های محبوب و پرکاربرد: -
جین: حداقل، سریع و انعطاف پذیر.
-
اکو: ساده، با کارایی بالا و انعطاف پذیر.
-
Iris: دارای ویژگی های غنی، آسان برای استفاده، و به خوبی مستند.
یکی را انتخاب کنید که با نیازهای پروژه شما مطابقت داشته باشد و با اهداف یادگیری شما همسو باشد.
۲۹ دی، ۱۴۰۱
@amir یک گفتگو به اسم چه ویدیویی یا درسی رو دوست دارید درست کنم؟ درست کرد.
درود بچه ها.
میدونم خیلی وقت هست که از ساختن درس برنامه نویسی میگذره و بیشتر ویدیوهای ما شده ولاگ و تکنولوژی یا مهاجرت ولی فکر میکنم خیلی از تکنولوژی ها آپدیت شده و میخواستم بپرسم که از چه زبان یا چارچوب هایی دوست دارید ویدیو ببینید؟ اگر ویدیوی غیر از برنامه نویسی هم نبود اشکالی نداره باز هم نظر بدید.
در آخر اینکه اگر قرار باشه ویدوی برنامه نویسی درست کنم، اونها ویدیوهای طولانی یک جلسه ای خواهد بود.
۱۰ تیر، ۱۴۰۱
@amir به گفتگوی همگام سازی پروژه فورک شده با پروژه اصلی موجود در مخزن محلی شما با Git جواب داد.
@alimehr75 مرسی اما نه نیست. ولی امکان فارسی نوشتن هست چون ما فارسی زبانیم وگرنه وبسایت های انگلیسی زیاده
من درستش کردن.
۵ تیر، ۱۴۰۱
@amir به گفتگوی تبلیغ در شبکه های اجتماعی برای پارس کلیک؟ جواب داد.
سیستم بانکی ایران در مقابل غرب یک جوک هست. اگر نبود اینقدر دزدی نبود تو کشور. بعد به انگلیس مربوط نیست تمام دنیا ایران رو تحریم کردن.
۱۶ فروردین، ۱۴۰۱
@amir به گفتگوی برنامه نویسی وب جواب داد.
@radin من میگم دانش یونیکس و سرور هم برای نگه داشتن وب سایت مهمه
۶ دی، ۱۴۰۰
۳۰ آذر، ۱۴۰۰
۲۸ مهر، ۱۴۰۰
@amir به گفتگوی درخواست فایل پروژه آموزش پی اچ پی جواب داد.
فایل ها رو میتونی دانلود کنی مشکل حل شد
۲۷ مهر، ۱۴۰۰
@amir به گفتگوی دیتابیس پروژه widget_corp ویدیو آموزش php جواب داد.
فایل های تمرینی رو درست کردم، گوگل لینک و تنظیمات رو عوض کرده بود ولی الان میتونی دانلود کنی
@amir به گفتگوی فایل های تمرینی جواب داد.
@mohammad990 فایل های تمرینی رو درست کردم، گوگل لینک و تنظیمات رو عوض کرده بود ولی الان میتونی دانلود کنی
۱۵ مهر، ۱۴۰۰
@amir یک مقاله تازه به اسم اصول سالید یا SOLID نوشت.
SOLID
(سالید) یک کلمه مخفف برای ۵ اصل هست. هدف معرفی این اصول اینه که برنامهها قابل درکتر، انعطافپذیر تر و بیشتر قابل نگهداری باشن. به عنوان یک برنامهنویس، توسعهدهنده و مهندس نرمافزار، یادگیری این پنج اصل جزو "باید" ها هست. این اصول میتونن توی هر طراحی شیگرایی اعمال بشن.
سالید بر پایه پنج اصل زیر هست. من برای هر کدوم از این اصول توضیحات آکادمیک و رسمی اون اصل رو نوشتم و برای درک بهتر هر اصل، لینک توضیح کامل و اختصاصی رو براتون قرار دادم.
-
اصل تک مسئولیتی (
Single Responsibility Principle
) هر کلاسی که توی برنامهی ما وجود داره، باید یک مسئولیت خاص و مشخص داشته. در واقع این کلاس باید فقط و فقط مسئول یک عملکرد توی برنامه باشه. -
اصل باز - بسته (
Open/Closed Principle
) موجودیتهای یک نرمافزار (کلاسها، ماژولها، توابع و ...) باید برای توسعه داده شدن، باز و برای تغییر دادن، بسته باشن -
اصل جایگزینی لیسکوف (
Liskov Substitution Principle
) اگر S یک زیر کلاس T باشه، آبجکتهای نوع T باید بتونن بدون تغییر دادن کد برنامه، با آبجکتهای نوع S جایگزین بشن. به بیان سادهتر کلاسهای فرزند نباید رفتار و ویژگیهای کلاس والد رو تغییر بدن -
اصل جداسازی اینترفیسها (
Interface Segregation Principle
) کلاسها نباید مجبور باشن متدهایی که به اونها احتیاجی ندارن رو پیادهسازی کنن. در واقع این اصل میگه که ما باید اینترفیس (Interface
) ها رو جوری بنویسیم که وقتی یک کلاس از اون استفاده میکنه، مجبور نباشه متدهایی که لازم نداره رو پیادهسازی کنه. -
اصل وارونگی وابستگی (
Dependency Inversion Principle
) کلاسهای سطح بالا نباید به کلاسهای سطح پایین وابسته باشن؛ هر دو باید وابسته به انتزاع (Abstractions
) باشن. موارد انتزاعی نباید وابسته به جزییات باشن. جزییات باید وابسته به انتزاع باشن
- اکثر الگوهای طراحی (
Design Patterns
) که وجود دارن، تلاش میکنن اصول سالید رو پیادهسازی کنن. مخصوصا اصل اول و دوم. - برنامههای خیلی کمی وجود دارن که همهی این 5 اصل رو همزمان پیادهسازی کرده باشن.
- مثل دنیای واقعی، رعایت کردن همه اصول غیر ممکن هست.
- اعمال کردن هر اصل باید با چشم باز انجام بگیره. وگرنه باعث میشه مشکل پیچیدهتر بشه.
- اصول سالید پای ثابت سوالات مصاحبه هست.
ویدیویی در این رابطه ساختم که حتما ببینید:
۱۲ شهریور، ۱۴۰۰
۱۳ تیر، ۱۴۰۰
@amir به گفتگوی کاربرد سرور در ناکس nuxtJs جواب داد.
سلام اگر درس هاشو نگاه کنید اونجا گفتم که SSR
چی هست.
۲ اردیبهشت، ۱۴۰۰
@amir به گفتگوی تغییر تنظیمات وب پک و ترجمه es6 به es5 جواب داد.
ES6 توسط وب پک همیشه به ES5 تبدیل میشه و اگر شما نمیکنید باید بکنید. درس های وب پک رو که دادم.
۸ بهمن، ۱۳۹۹
@amir به گفتگوی نحوه دسترسی به ویدئوهای ویژه جواب داد.
@farnam همه ی ویدیوها رایگانه. این بحث بسته میشه.
۲۸ دی، ۱۳۹۹
@amir به گفتگوی استاندارد اسم مدل و کنترلر در لاراول ۸ جواب داد.
فرقی نداره هر چی دوست داری. میتونی جمع ببندی با منفردش کنی.
@amir به گفتگوی استخراج متن از php جواب داد.
از این پکیج میتونی استفاده کنی اگر از لاراول استفاده میکنی وگرنه اگر فقط از پی اچ پی استفاده میکنی به فایلش اینجا نگاه کن
https://github.com/spatie/pdf-to-text/blob/master/src/Pdf.php
باید باینری pdftotext
رو نصب کنی نسبت به OS
ی که داری
apt-get install poppler-utils
// یا
brew install poppler
// یا
yum install poppler-utils