بایگانی نویسنده: حمید

اجرای کامند در بکگراند با tmux در لینوکس

نوشته‌شده در توسط .

از اون زمانی که اومدیم دانشگاه و مجبور شدیم کدهای طولانی مدت ران بذاریم مجبور بودم دنبال راهی باشم که بشه یه کامند رو توی بگکراند ران بذاریم. وقتی میگم کامند میتونه به سادگی ران کردن یه کد پایتون بصورت زیر باشه.

یه مدت از کامند nohup استفاده میکردم که چیز خوبی بود ولی مشکلش اینه که اولا بعضی وقتا اصن یهو قطع میشد کارم. دوما قطع کردنش بعضی وقتا داستان بود و باید پروسسش رو پیدا میکردی و kill میکردی و نهایتا بدی بزرگش این بود که پیشرفت کامند رو نمیشد به خوبی چک کرد. البته یه فایل nohup.out داره که بصورت پیشفرض خروجی رو میریزه اونجا ومیشه کاستومایز هم کرد ولی ویژوالی یه چیز دیگست دیدنش 🙂

خلاصه tmux از اون پسرای خوبه روزگاره که میتونید همه ی این مشکلات رو با کلی خوبی دیگه کنار هم ازش داشته باشید. به عنوان یه برگه ی تقلب برای دیدن کامند های اصلیش میتونم اینارو بهتون پیشنهاد بدم.

enter to env: tmux
exit while running the command: ctrl + b then d
join to session: tmux attach
list of sessions: tmux list-sessions
attach to specific session: tmux attach-session -t <session-name>
renaming a session: Ctrl+b and then $
split and add new pane: Ctrl+b and then ” or %

یه ویدئوی کوچولو هم ریکورد کردم که ممکنه کمکتون کنه

بیشتر بخوانید

تدریس خصوصی کار با datatables

نوشته‌شده در توسط .

دیتاتیبل ها همون جدول های معمولی در html هستن با این تفاوت که کلی امکانات دارن که بخواید ازشون استفاده کنید. معروفترین پکیج دیتاتیبل که برای وب توسعه داده شده پکیج datatables.net هست. ساده ترین حرکتی که میتونید با این پکیج بزنید اینه که فایل های css و js این پکیج رو لود کنید و به سادگی فانکشن دیتاتیبل رو روی جدولتون ران کنید.

دستور بالا جدولتون رو سمت کلاینت یه فرمت خوب میده که میتونید مرتب سازی – صفحه بندی – جستجو و… رو روش انجام بدید. کار وقتی پیچیده میشه که داده ی شما حجمش بالا هست و نمیخواید همه رو بیارید اینور و بعد رندر کنید. اگه داده خیلی زیاد باشه مرورگر از پس پردازش این حجم از داده برنمیاد و هنگ میکنه یا خیلی دیر جواب میده.

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

تدریس خصوصی MySQL برای PHP

نوشته‌شده در توسط .

با اینکه این روزها سیستم های مدیریت پایگاه داده noSQL خیلی ترند تر هست ولی همچنان خیلی جاها نیاز هست که ما با سیستم های قدیمی و البته محبوب مثل MySQL کار کنیم. مای اس کیو ال یه سیستم مدیریت پایگاه داده رابطه ای هست. اگر نیاز به یادگیری بصورت آموزش خصوصی MySQL دارید میتونید با من با شماره ۰۹۱۹۹۶۵۶۶۹۳ تماس بگیرید تا یادگیری کار با پایگاه داده با MySQL رو بهتون آموزش بدم.

در این دوره چیا یاد میگیریم؟

مای اس کیو ال از زبان SQL یا structured query language استفاده میکنه که پرسش هایی که داره رو از دیتابیس انجام بده. در این دوره ما قصد داریم با استفاده از زبان برنامه نویسی PHP به شما یاد بدیم که چطور به دیتابیس وصل بشید و کارهایی مثل ذخیره و بازیابی داده و کارهای پیچیده تر مثل join ها و… رو انجام بدید.

بعد از این دوره شما قادر خواهید بود که نیازهای خودتون رو بعنوان یک برنامه نویس متوسط رفع کنید و با کسب تجربه در آینده نزدیک کارهای خفن تری که تو ذهنتون هست رو انجام بدید.

برای تماس با من میتونید از واتساپ استفاده کنید و قطعا خیلی زود جواب خواهید گرفت. شماره من هست:

۰۹۱۹۹۶۵۶۶۹۳

چرا PHP یاد بگیرم و چطور؟

نوشته‌شده در توسط .

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

بیشتر بخوانید

آموزش خصوصی جاوا اسکریپت

نوشته‌شده در توسط .

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

بیشتر بخوانید

اجرای کارها با صف در لاراول

نوشته‌شده در توسط .
آموزش ایجاد صف

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

صف ها در برنامه نویسی به چه دردی میخورن؟

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

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

توی لاراول میتونید با سیستم های مدیریت صف معروف مثل ردیس کار کنید و کافیه فقط یه کانکشن به ردیس بزنید و بقیه خیلی ساده هست ولی برای مدیریت صف های ساده و سبک میتونید از همون صف دیتابیس استفاده کنید.

استفاده از صف دیتابیس در لاراول

اولین کاری که باید بکنید اینه که جدول هاتون رو ایجاد کنید. برای اینکار توی محیط ترمینال لاراول و توی روت پروژه این دستورها رو ران کنید:

با دستور اول یه مایگریشن ایجاد میشه برای ذخیره جاب های صف ها. با دستور دوم یه مایگریشن ایجاد میشه برای جابهایی که به خطا خوردن و با دستور سوم…

خب حالا بذارید یه جاب خیلی ساده بنویسیم. با دستور زیر میتونید یک جاب جدید درست کنید. جابها توی فولدر app/Jobs قرار میگیرن که اگه دستور زیر رو ران کنید فولدر خودش ساخته میشه.

الان اگه فایل MyFirstJob.php رو باز کنید یچی مثل این میبینید:

داخل متد handle این رو بنویسید:

توی این قسمت گفتم که یک عدد تصادفی بین ۰ تا ۱۵ تولید کن و بعد به اندازه اون عدده ثانیه صبر کن و یه خروجی رو توی فایل لاگ بنویس و فرض کنید اون اسلیپ شدنه یه جاب سنگین مثل پردازش ویدیو و… هست. و یادتون نره که Carbon و Log رو use کنید.

گذاشتن جاب در صف

برای گذاشتن جاب توی صف در لاراول کافیه متد dispatch از اون جاب رو صدا بزنیم. برای مثال توی فایل routes/web.php قطعه کد زیر رو اضافه کنید:

گفتم هر بار روت /put با متد get فراخوانی شد یدونه از این جاب رو بذار توی صف. پس کافیه روت /put رو get کنید. بعد از این کار باید توی جدول jobs یه رکورد ایجاد شده باشه. فیلد هایی که جدول jobs داره خیلی پیچیده نیستن و با یه نگاه میتونید ببینید که داره چه اتفاقی میفته.

صف های ایجاد شده در دیتابیس لاراول

تنظیمات درایور صف در لاراول

خب حالا نوبت این رسیده که صف رو توی پروژه ران کنیم. ولی قبلش یه سر به فایل config/queue.php بزنیم. اولین چیزی که احتمالا میبینید خط زیر هست:

این خط میگه که کانکشن پیشفرض من برای اجرای صف ها چی باشه که بصورت پیشفرض روی درایور sync تنظیم شده. درایور sync که یکم پایینتر هم اینجا و هم توی فایل کانفیگ میبینیدش میگه هر جابی که دیسپچ شد همون لحظه شروع بشه به ران شدن. در واقع اصلا صف حساب نمیشه.

یسری کانشکن هم پایین تر از اون و اینسری فقط توی فایل کانفیگ میبینید 🙂 اونها کانکشن های مختلف به سیستم های مدیریت صف مختلف هستن. ما توی اینجا کانکشن پیشفرض رو تنظیمش میکنیم روی database و پایین تر در قسمت failed میتونید مشخص کنید که جابهایی که با خطا مواجه میشن کجا ذخیره بشن.

اجرای یک صف در لاراول

برای اجرای صف خیلی ساده دستور زیر رو اجرا کنید:

این دستور شروع میکنه دونه دونه جابهایی که توی جدول jobs هستند رو اجرا میکنه. و بعد از تموم شدن جابهای صف، بازم منتظر میمونه که جاب جدید dispatch شه.

اجرای صف ها در لاراول

اگه فایل لاگتون رو چک کنید باید یچیزی مثل این رو ببینید که نشون میده هر جاب بعد از جاب قبلی اجرا شده.

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

نصب MongoDB و استفاده در لاراول

نوشته‌شده در توسط .

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

توجه: همه کارایی که من میگم روی Ubuntu 18.04.3 تست شده و بقیه جاها رو نمیدونم.

بعد از اینکه لاراول رو نصب کردید خیلی راحت با دستور زیر مانگو رو هم نصب کنید (البته برای این بخش بهتره از طریق داکیومنت مانگو دی بی پیش برید).

معروف ترین پکیجی که لاراولی ها برای کار با مانگو باهاش کار میکنن jenssegers/laravel-mongodb هست که میتونید نصبش کنید ولی قبلش باید یکار دیگه هم بکنید و اون هم اینه که درایور PHP برای مانگو رو نصب کنید. من چند تا راه رو رفتم و این پست از داکیومنت PHP واسم جواب داد. در واقع اگه PECL داشته باشید خیلی راحت با این کامند کارتون راه میفته:

حالا پکیج jenssegers رو نصب کنید و کارایی که گفته رو انجام بدید. حالا قانونا باید همه چی اوکی باشه ولی بازم واسه من اوکی نبود. اولین کاری که میکنید یبار سرویس مانگو رو استارت کنید.

اگه دستور بالا بدون هیچ پیامی اجرا شد ینی کارتون درسته. بعد باید وارد اینترفیس مانگو بشید و یه یوزر بسازید. برای این کار mongo رو تایپ کنید و اینتر کنید. یه دیتابیس به صورت زیر بسازید.

دستور بالا اگه دیتابیس رو داشته باشید سلکتش میکنه اگه نداشته باشید میسازه. چقد کامند خوبیه 🙂 برای اینکه دیتابیس ها رو ببینید هم میتونید از دستور زیر استفاده کنید.

حالا با دستور زیر میتونید یوزر های این دیتابیس رو ببینید:

توجه کنید که db نباید اسم دیتابیستون باشه و همین db باید باشه. اگه یوزری ندارید باید بسازیدش. برای این کار این شکلی میتونید عمل کنید:

و حالا برید کانکشن دیتابیس رو توی فایل database.php بسازید. و بعدش دیفالت کانکشن رو هم تغییر بدید.

من یوزر و پسورد رو هم اینجا گذاشتم و اررور داد. شما اون یکی دو تا رو توی فایل .env بذارید.

و حالا php artisan migrate کنید. ایشالا که همه چی اوکی باشه.

اگه از قبل دیتابیس مانگو دی بی دارید و میخواید ایمپورتش کنید یه راه ساده استفاده از روش زیر هست که کل کالکشن هاتون رو ایمپورت میکنه:

استفاده از Eloquent در لاراول با MongoDB

اگه میخواید از Eloquent توی لاراول استفاده کنید باید مدل هاتون رو از Eloquent پکیج اسکتند کنید. بعنوان مثال برای مدل Post بصورت زیر عمل کنید:

حالا میتونید توی کنترلرتون از App\Post::all() و… استفاده کنید. البته برای جدول یوزر باید یه حرکت بیشتر هم بکنید و اون اینه:

این باعث میشه که توی مرحله Auth هم به اررور نخورید و مثل حالت معمولی با Auth::attempt لاگین کنید.

نصب پکیج لاراول بدون ssh

نوشته‌شده در توسط .

البته عنوان خیلی سکسی شد چون مجبور بودم کوتاه باشه ولی منظورم اینه که اگه مثلا دسترسی ssh نداریم ولی دسترسی آپلود داریم بتونیم پکیج رو نصب کنیم.

آپلود پوشه‌ی ریپازیتوری

من خودم یک سایت داشتم روی هاست اشتراکی و لازم داشتم که یک پکیج که تازه نصب کردم رو آپلود کنم. برای این کار خیلی راحت اول رفتم توی فولدر vendor و پوشه‌ی ریپازیتوری رو آپلود کردم. مثلا من پکیج barryvdh/cors رو نصب کرده بودم و رفتم پیداش کردم از روتی که داره.

آپدیت کردن فایل autoload

همونطور که میدونید ما بعد از نصب یک پکیج یه dump-autoload میکنیم که فایل های autoload رو آپدیت کنه کامپوزر. ولی چون دسترسی نداریم میریم و فایل vendor/composer/autoload_psr4.php رو پیدا میکنیم و خط هایی که توی فایل لوکالمون هستن رو بهش اضافه میکنیم. برای مثال توی پکیج cors که من نصب کردم خط های زیر بهش ربط داشتن و من آپدیت کردم.

‘Barryvdh\Cors\’ => array($vendorDir . ‘/barryvdh/laravel-cors/src’),
‘Asm89\Stack\’ => array($vendorDir . ‘/asm89/stack-cors/src/Asm89/Stack’),

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

خطای لاراول: Prepared statement needs to be re-prepared

نوشته‌شده در توسط .
خطای لاراول

من هر چند وقت یبار میبینم سایت بالا نمیاد و لاگ رو چک میکنم میبینم یچی مثل خط زیر رو پروژه ی لاراول لاگ داده:

من نه میدونم این اررور چیه و نه میدونم از کجا میاد یهو. تا جایی که خوندم یه باگه. برای حلش این کار رو خوندم که میشه انجام داد. به کانکشن مای اس کیو ال این آپشن رو اضافه کنید و احتمالا مشکل حل خواهد شد.

یعنی الان کانکشنتون باید یچی مثل این بشه:

من کلی گشتم تا پیدا کردم گفتم دیگه شما نگردید 🙂