به ریپو ساختم برای ران کردن لاراول با داکر اگر نمیخواین از sail استفاده کنید میتونید از این ریپو استفاده کنید
https://github.com/mnr73/laravel-docker-compose
https://github.com/mnr73/laravel-docker-compose
GitHub
GitHub - mnr73/laravel-docker-compose: run latest Laravel version with docker compose
run latest Laravel version with docker compose. Contribute to mnr73/laravel-docker-compose development by creating an account on GitHub.
👍2👏1🙏1
توی انتخاب شغل آیندمون رفتار گلهای نداشته باشیم
البته توی هیچ کاری نباید کورکورانه تقلید کنیم و قبل از هر کاری اون رو بسنجیم و به نتیجه اون کار فکر کنیم ولی مسیر شغلی بخش مهمی از زندگی ما هست و رفتار گلهای توی این مورد میتونه زمان زیادی از زندگی ما رو تحت تاثیر قرار بده.
خیلی از آدمها نمیدونن که به چی علاقه دارن یا اصلا میخوان در آینده چکار کنن. هیچ برنامهای ندارند و فقط دنبال یک راهی برای پول در آوردن میگردن که البته حق هم دارن و درک میکنم که شرایط اقتصادی و وضعیت کار توی این کشور چطوریه. ولی نباید کورکورانه دنبال پول باشیم.
دقیقا خیلی از پیجهای اینستاگرام و پکیج فروش ها از این رفتار گلهای آدم ها سواستفاده میکنند و سود زیادی هم میبرن.
یک مثال خیلی واضح برای این موضوع شغل کاشت ناخن یا ناخن کار هست. چند سال پیش توی صفحه های اینستاگرم استوری هایی گذاشته میشد که مثلا من ناخن کار هستم و ماهی 200 میلیون یا حتی مبالغ خیلی بیشتر درآمد دارم. که خوب احتمالا بعضی از این مبالغ هم نادرست نبوده. ولی خیلی از افراد با دیدن اینها رفتن سراغ آموزش ناخن کاری بدون اینکه اصلا علاقه ای به این کار داشته باشن.
در نتیجه این کار ناخن کارهای قدیمی پول بیشتری هم به دست آوردن، با آموزش به افراد جدید. ولی رفته رفته با ادامه دار شدن این وضع کار به جایی رسید که بازار اشباع شد. یعنی اگر مثلا 5 سال پیش به ازای هر 20 دختر 1 ناخن کار وجود داشت در حال حاضر به ازای هر 20 دختر دست کم 40 ناخن کار وجود داره. خوب طبیعیه که دیگه افراد جدید نمیتونن موفق بشن چون مشتری نیست. این وسط افرادی هم شروع به وارد کردن محصولات متنوع کردن و با فروش لوازم کار ناخن کاری سود زیادی به جیب زدن. دقیقا مثل بیل فروشان در آمریکا در دوره ای که همه دنبال طلا بودن.
این فقط یک مثال خیلی ساده بود تقریبا رفتار مردم همیشه اینطوری بوده که به صورت گلهای عمل کردن همونطور که گفتم حق هم دارن. اگر میخوای رفتار گله ای رو توی مردم یک کشور افزایش بدی و بتونی ازشون سو استفاده کنی باید مردم اون کشور رو تا جایی که میشه فقیر کنی. وقتی مردم فقیر باشند و هر روز توی شبکه های اجتماعی زندگی ها و لایف استایل های لاکچری ببینن دیگه عنان عقلشون رو از دست میدن و بدون تفکر هر کاری میکنن تا پولدار بشن. وقتی به خودشون میان میبینن کلی از عمرشون رفته و نه پولی دارن و نه دیگه انرژی چند سال قبل رو.
دقیقا همین رفتار گله ای رو ما توی سایر حوزه ها و حوزه برنامه نویسی هم داریم یعنی یه عده فقط به خاطر درآمد و پول وارد این حوزه میشن و وقت و انرژی خودشون رو هدر میدن.
مارک زاکربرگ میگه برای اینکه توی کاری موفق باشی یا باید اولین باشی یا بهترین باشی.
وقتی رفتار گلهای داشته باشیم قطعا اولین نیستیم. و برای بهترین بودن هم علاقه نیازه. شما وقتی به کارت علاقه نداشته باشی نمیتونی توش بهترین باشی.
اگر یه ناخن کاری علاقه نداشته باشی نمیتونی بهترین ناخن کار بشی.
اگر به برنامهنویسی علاقه نداشته باشی نمیتونی بهترین برنامهنویس بشی.
و همینطور تا ادامه.
سخن آخر اینکه، اول از همه سعی کنید کاری رو کنید که بهش علاقه دارین. اینطوری احتمال اینکه توی اون کار بهترین بشید خیلی بیشتره. ولی اگر صرفا دنبال پول هستید ایده های جدید رو امتحان کنید، سعی کنید اولین یا جزو اولین ها باشین.
و مولانا چه زیبا میگه:
مر مرا تقلیدشان بر باد داد
که دو صد لعنت بر آن تقلید باد
البته توی هیچ کاری نباید کورکورانه تقلید کنیم و قبل از هر کاری اون رو بسنجیم و به نتیجه اون کار فکر کنیم ولی مسیر شغلی بخش مهمی از زندگی ما هست و رفتار گلهای توی این مورد میتونه زمان زیادی از زندگی ما رو تحت تاثیر قرار بده.
خیلی از آدمها نمیدونن که به چی علاقه دارن یا اصلا میخوان در آینده چکار کنن. هیچ برنامهای ندارند و فقط دنبال یک راهی برای پول در آوردن میگردن که البته حق هم دارن و درک میکنم که شرایط اقتصادی و وضعیت کار توی این کشور چطوریه. ولی نباید کورکورانه دنبال پول باشیم.
دقیقا خیلی از پیجهای اینستاگرام و پکیج فروش ها از این رفتار گلهای آدم ها سواستفاده میکنند و سود زیادی هم میبرن.
یک مثال خیلی واضح برای این موضوع شغل کاشت ناخن یا ناخن کار هست. چند سال پیش توی صفحه های اینستاگرم استوری هایی گذاشته میشد که مثلا من ناخن کار هستم و ماهی 200 میلیون یا حتی مبالغ خیلی بیشتر درآمد دارم. که خوب احتمالا بعضی از این مبالغ هم نادرست نبوده. ولی خیلی از افراد با دیدن اینها رفتن سراغ آموزش ناخن کاری بدون اینکه اصلا علاقه ای به این کار داشته باشن.
در نتیجه این کار ناخن کارهای قدیمی پول بیشتری هم به دست آوردن، با آموزش به افراد جدید. ولی رفته رفته با ادامه دار شدن این وضع کار به جایی رسید که بازار اشباع شد. یعنی اگر مثلا 5 سال پیش به ازای هر 20 دختر 1 ناخن کار وجود داشت در حال حاضر به ازای هر 20 دختر دست کم 40 ناخن کار وجود داره. خوب طبیعیه که دیگه افراد جدید نمیتونن موفق بشن چون مشتری نیست. این وسط افرادی هم شروع به وارد کردن محصولات متنوع کردن و با فروش لوازم کار ناخن کاری سود زیادی به جیب زدن. دقیقا مثل بیل فروشان در آمریکا در دوره ای که همه دنبال طلا بودن.
این فقط یک مثال خیلی ساده بود تقریبا رفتار مردم همیشه اینطوری بوده که به صورت گلهای عمل کردن همونطور که گفتم حق هم دارن. اگر میخوای رفتار گله ای رو توی مردم یک کشور افزایش بدی و بتونی ازشون سو استفاده کنی باید مردم اون کشور رو تا جایی که میشه فقیر کنی. وقتی مردم فقیر باشند و هر روز توی شبکه های اجتماعی زندگی ها و لایف استایل های لاکچری ببینن دیگه عنان عقلشون رو از دست میدن و بدون تفکر هر کاری میکنن تا پولدار بشن. وقتی به خودشون میان میبینن کلی از عمرشون رفته و نه پولی دارن و نه دیگه انرژی چند سال قبل رو.
دقیقا همین رفتار گله ای رو ما توی سایر حوزه ها و حوزه برنامه نویسی هم داریم یعنی یه عده فقط به خاطر درآمد و پول وارد این حوزه میشن و وقت و انرژی خودشون رو هدر میدن.
مارک زاکربرگ میگه برای اینکه توی کاری موفق باشی یا باید اولین باشی یا بهترین باشی.
وقتی رفتار گلهای داشته باشیم قطعا اولین نیستیم. و برای بهترین بودن هم علاقه نیازه. شما وقتی به کارت علاقه نداشته باشی نمیتونی توش بهترین باشی.
اگر یه ناخن کاری علاقه نداشته باشی نمیتونی بهترین ناخن کار بشی.
اگر به برنامهنویسی علاقه نداشته باشی نمیتونی بهترین برنامهنویس بشی.
و همینطور تا ادامه.
سخن آخر اینکه، اول از همه سعی کنید کاری رو کنید که بهش علاقه دارین. اینطوری احتمال اینکه توی اون کار بهترین بشید خیلی بیشتره. ولی اگر صرفا دنبال پول هستید ایده های جدید رو امتحان کنید، سعی کنید اولین یا جزو اولین ها باشین.
و مولانا چه زیبا میگه:
مر مرا تقلیدشان بر باد داد
که دو صد لعنت بر آن تقلید باد
👍5❤🔥1❤1
اگر شما هم از Docker روی WSL ویندوز استفاده میکنید حتما به این مورد بر خوردید که بعضی وقت ها خطا میده که این پورت ها بسته هست
Error response from daemon: Ports are not available: exposing port TCP ...
ولی شما از اون پورت ها استفاده نمیکنید. برای حل این مشکل لازم نیست ویندوز رو ریاستارت کنید😭 . کافیه PowerShell رو به صورت Administrator باز کنید و دستورهای زیر رو به ترتیب بزنید.
همچنین با دستور زیر میتونید رنج پورت هایی که محروم شدن رو ببینید🥳
#داکر #wsl #docker
Error response from daemon: Ports are not available: exposing port TCP ...
ولی شما از اون پورت ها استفاده نمیکنید. برای حل این مشکل لازم نیست ویندوز رو ریاستارت کنید
net stop winnat
net start winnat
همچنین با دستور زیر میتونید رنج پورت هایی که محروم شدن رو ببینید
netsh int ipv4 show excludedportrange protocol=tcp
#داکر #wsl #docker
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥2👍2🔥1
چند روز پیش به طور اتفاقی متوجه شدم وقتی توی صفحه مرورگر از تاچ پد لپتاپ برای zoom کردن استفاده میکنم رفتارش با zoom کردن معمولی که با ctrl+scroll wheel موس انجام میدیم متفاوته. یعنی zoop مرورگر افزایش پیدا نمیکنه و خود اون قسمت زوم میشه.
به نظرم قابلیت خوبی اومد سعی کردم راهی پیدا کنم تا همین رفتار رو با موس بشه انجام داد ولی راهی نبود. دست آخر توی اکستنشن ها دنبالش گشتم تا اکستنشن زیر رو پیدا کردم.
✅ به نظرم این قابلیت خیلی مفیده برای وقت هایی که میخوای توی یه سایتی یه چیزی رو بزرگتر ببینی مثلا عکس پروفایل.
✅ یا مثلا اگر برنامه نویس فرانت هستی و میخوای جزئیات بیشتری رو ببینی میتونی از این اکستنشن استفاده کنی.
😜 بعد از نصب باید مرورگر رو از اول باز کنی
https://chromewebstore.google.com/detail/mouse-pinch-to-zoom/pffiadlahfhoniddbipeiiohjnlongfi
به نظرم قابلیت خوبی اومد سعی کردم راهی پیدا کنم تا همین رفتار رو با موس بشه انجام داد ولی راهی نبود. دست آخر توی اکستنشن ها دنبالش گشتم تا اکستنشن زیر رو پیدا کردم.
https://chromewebstore.google.com/detail/mouse-pinch-to-zoom/pffiadlahfhoniddbipeiiohjnlongfi
Please open Telegram to view this post
VIEW IN TELEGRAM
Google
Mouse Pinch-To-Zoom - Chrome Web Store
Zoom in on a specific part of the website, like you would with a touchpad gesture!
👍5❤🔥2❤1
mnr tech
اگر شما هم از Docker روی WSL ویندوز استفاده میکنید حتما به این مورد بر خوردید که بعضی وقت ها خطا میده که این پورت ها بسته هست Error response from daemon: Ports are not available: exposing port TCP ... ولی شما از اون پورت ها استفاده نمیکنید. برای حل این…
از این روش اگر استفاده کنید داکر درست میشه ولی git push و git pull کار نمیده دیگه. گفتم در جریان باشید تا سر فرصت بررسی کنم ببینم چطور باید این مشکل رو حل کرد.
👍2
Forwarded from زرینپال | ZarinPal
📣 اختلال سراسری به دلیل Iran Access
🟡 پذیرندگان گرامی زرینپال
به اطلاع میرساند با توجه به اعلام شاپرک و نهادهای امنیتی، تا اطلاع بعدی تمام پرداختهای حضوری و غیر حضوری شبکه بانکی و مالی کشور، فقط با IP ایران و از داخل کشور قابل دسترس است. در غیر این صورت ممکن است پرداختها با اختلال همراه باشد.
با تشکر از همراهی و همدلی شما
💛 @zarinpal
🟡 پذیرندگان گرامی زرینپال
به اطلاع میرساند با توجه به اعلام شاپرک و نهادهای امنیتی، تا اطلاع بعدی تمام پرداختهای حضوری و غیر حضوری شبکه بانکی و مالی کشور، فقط با IP ایران و از داخل کشور قابل دسترس است. در غیر این صورت ممکن است پرداختها با اختلال همراه باشد.
با تشکر از همراهی و همدلی شما
💛 @zarinpal
🤬1
زرینپال | ZarinPal
📣 اختلال سراسری به دلیل Iran Access 🟡 پذیرندگان گرامی زرینپال به اطلاع میرساند با توجه به اعلام شاپرک و نهادهای امنیتی، تا اطلاع بعدی تمام پرداختهای حضوری و غیر حضوری شبکه بانکی و مالی کشور، فقط با IP ایران و از داخل کشور قابل دسترس است. در غیر این صورت…
تمام درگاه ها ایران اکسس شده و اگر هاست یا سروری دارین با ip خارج پرداخت های کاربران به مشکل میخوره. امیدوارم این اتفاق موقت باشه و به زودی حل بشه. در غیر این صورت این یک گام بزرگ به سمت محدودیت اینترنت و اینترنت ملی هست.
👍1
پلتفرم پایش و کنترل شیواامواج
نمونه اولیه این پلتفرم در کمتر از یک ما برای دمو در بیست و چهارمین نمایشگاه بینالمللی تهران آماده شد و در حال حاظر با موفقیت در غرفه شیواامواج در نمایشگاه قرار دارد.
در حال حاظر این پلترفم برای پایش ترانس های برق کاربرد دارد ولی به زودی محصولات دیگری در زیمنه IOT به این سامانه اضافه میشود.
برای وبسایت این محصول از vue.js و Laravel و برای ارتباط با دستگاه از پروتکل MQTT استفاده شده که که ارتباط لحظه ای را فراهم میکند، همچنین برای بخش سخت افزاری از ماژول Quectel EC200U استفاده شده که برنامه نویسی آن را همکارم به عهده داشت.
خوشحالم که افتخار این رو داشتم و شرکت شیواامواج این فرصت رو بهم داد که در طراحی سیستم و تعریف این پروژه نقش پررنگی داشته باشم و همچنین مواردی مانند طراحی بکند، فرانت سامانه، ui/ux و پیاده سازی زیرساختها را انجام دهم و همچنین داشتن ارتباط نزدیک با همکارم که بخش الکترونیکی آن را به عهده داشت موجب موفقیت اولیه در این پروژه شد.
البته این فقط نسخه اولیه و شروع کار است و در روزهای پیش رو این پروژه هر روز کاملتر میشود.
پست در لینکدین
نمونه اولیه این پلتفرم در کمتر از یک ما برای دمو در بیست و چهارمین نمایشگاه بینالمللی تهران آماده شد و در حال حاظر با موفقیت در غرفه شیواامواج در نمایشگاه قرار دارد.
در حال حاظر این پلترفم برای پایش ترانس های برق کاربرد دارد ولی به زودی محصولات دیگری در زیمنه IOT به این سامانه اضافه میشود.
برای وبسایت این محصول از vue.js و Laravel و برای ارتباط با دستگاه از پروتکل MQTT استفاده شده که که ارتباط لحظه ای را فراهم میکند، همچنین برای بخش سخت افزاری از ماژول Quectel EC200U استفاده شده که برنامه نویسی آن را همکارم به عهده داشت.
خوشحالم که افتخار این رو داشتم و شرکت شیواامواج این فرصت رو بهم داد که در طراحی سیستم و تعریف این پروژه نقش پررنگی داشته باشم و همچنین مواردی مانند طراحی بکند، فرانت سامانه، ui/ux و پیاده سازی زیرساختها را انجام دهم و همچنین داشتن ارتباط نزدیک با همکارم که بخش الکترونیکی آن را به عهده داشت موجب موفقیت اولیه در این پروژه شد.
البته این فقط نسخه اولیه و شروع کار است و در روزهای پیش رو این پروژه هر روز کاملتر میشود.
پست در لینکدین
🔥5
اگر از wsl روی ویندوز استفاده میکنید حتما شده که فایلی رو از ویندوز به wsl کپی کنید یا انتقال بدید. وقتی این کار رو میکنید یه فایل به همون اسم با پسوند
فایلهای Zone.Identifier فایلهای متادادهای هستند که توسط ویندوز ایجاد میشوند تا اطلاعات مربوط به منطقه امنیتی فایلها (security zone) را ذخیره کنند. این اطلاعات مشخص میکنند که یک فایل از چه منبعی آمده است (مثلاً اینترنت، شبکه محلی، یا سیستم محلی) و به ویندوز کمک میکنند تصمیم بگیرد که آیا فایل باید با احتیاط بیشتری باز شود یا نه.
آیا حذف این فایلها مشکلی ایجاد میکند؟
حذف فایلهای Zone.Identifier معمولاً مشکلی ایجاد نمیکند و باعث نمیشود فایل اصلی تحت تأثیر قرار بگیرد، زیرا این فایلها تنها اطلاعات متاداده هستند. با این حال، با حذف آنها ممکن است برخی ویژگیهای امنیتی ویندوز از کار بیفتند (مثلاً هشدار درباره باز کردن فایلهای دانلود شده).
نکنه اول اینکه حتما این فایل هارو به .gitignore اضافه کنید تا الکی توی پروژه هاتون پوش نشن.
بعد اگر فایل ها رو اعصابتونن و الکی ریپویی که روش کار میکنید رو شلوغ کردن دو راه دارین یا برین توی روت پروژه و دستور زیر رو بزنید تا همه فایل ها کلا حذف بشن
یا اینکه ولشون کنین و بذارین به زندگی خودشون ادامه بدن (سازمان حمایت از حقوق فایل های Zone.Identifier 😂) ولی یه کاری کنید که توی vsCode نشون داده نشن برای این کار کافیه کانفیگ زیر رو به فایل setting.json اضافه کنید
محتوای این پست با کمک chat GPT درست شده
:Zone.Identifier ساخته میشه.فایلهای Zone.Identifier فایلهای متادادهای هستند که توسط ویندوز ایجاد میشوند تا اطلاعات مربوط به منطقه امنیتی فایلها (security zone) را ذخیره کنند. این اطلاعات مشخص میکنند که یک فایل از چه منبعی آمده است (مثلاً اینترنت، شبکه محلی، یا سیستم محلی) و به ویندوز کمک میکنند تصمیم بگیرد که آیا فایل باید با احتیاط بیشتری باز شود یا نه.
آیا حذف این فایلها مشکلی ایجاد میکند؟
حذف فایلهای Zone.Identifier معمولاً مشکلی ایجاد نمیکند و باعث نمیشود فایل اصلی تحت تأثیر قرار بگیرد، زیرا این فایلها تنها اطلاعات متاداده هستند. با این حال، با حذف آنها ممکن است برخی ویژگیهای امنیتی ویندوز از کار بیفتند (مثلاً هشدار درباره باز کردن فایلهای دانلود شده).
نکنه اول اینکه حتما این فایل هارو به .gitignore اضافه کنید تا الکی توی پروژه هاتون پوش نشن.
*.Identifier
// یا این
*:Zone.Identifier
بعد اگر فایل ها رو اعصابتونن و الکی ریپویی که روش کار میکنید رو شلوغ کردن دو راه دارین یا برین توی روت پروژه و دستور زیر رو بزنید تا همه فایل ها کلا حذف بشن
find . -type f -name "*:Zone.Identifier" -exec rm -f {} +یا اینکه ولشون کنین و بذارین به زندگی خودشون ادامه بدن (سازمان حمایت از حقوق فایل های Zone.Identifier 😂) ولی یه کاری کنید که توی vsCode نشون داده نشن برای این کار کافیه کانفیگ زیر رو به فایل setting.json اضافه کنید
"files.exclude": {
"**/*:Zone.Identifier": true
}محتوای این پست با کمک chat GPT درست شده
👍2❤1
امروز با همکارم احسان توی سمینار 900 نفری Sisoog که در مورد IOT و سیستم های امبدد بود شرکت کردیم و مطالب جالبی یاد گرفتیم.
برای اولین بار جادی رو از نزدیک دیدم که در مورد RTOS صحبت کرد و بسیار لذت بردم و استفاده کردم. همچنین سخنرانی محسن طهماسبی در مورد امنیت در IOT که دید خیلی خوبی بهم داد تا در پروژه های پیش رو استفاده کنم. و همچنین محمد مزارعی که در مورد ECU ماشین ها اطلاعات ارزشمندی رو با شرکت کنندگان به اشتراک گذاشت.
در آخر ممنونم از تیم سیسوگ و دانشگاه صنعتی اصفهان که سمیناری با این تعداد افراد را با مدیریت خوب برگذار کردن و امیدوارد در آینده شاهد برگذاری سمینار های بیشتری در این حوزه در اصفهان باشیم.
برای اولین بار جادی رو از نزدیک دیدم که در مورد RTOS صحبت کرد و بسیار لذت بردم و استفاده کردم. همچنین سخنرانی محسن طهماسبی در مورد امنیت در IOT که دید خیلی خوبی بهم داد تا در پروژه های پیش رو استفاده کنم. و همچنین محمد مزارعی که در مورد ECU ماشین ها اطلاعات ارزشمندی رو با شرکت کنندگان به اشتراک گذاشت.
در آخر ممنونم از تیم سیسوگ و دانشگاه صنعتی اصفهان که سمیناری با این تعداد افراد را با مدیریت خوب برگذار کردن و امیدوارد در آینده شاهد برگذاری سمینار های بیشتری در این حوزه در اصفهان باشیم.
❤5
اگر قرار باشه توی یک پروژه کاربرای بینالمللی داشته باشیم چطور باید شماره هارو هندل کنیم؟
شاید توی پروژه های بزرگ بینالمللی براتون سوال بشه که ما چطور میتونیم شماره موبایل ها با کد های کشور های مختلف رو هندل کنیم؟
خوب قسمت راحت کار اینجاست که بگیم کاربر رو مجبور میکنیم طبق استاندارد E.164 شماره کامل رو با کد کشور وارد کنه مثلا برای ایران به این صورت
+98901*******
خوب این ساده ترین حالته ولی ux خوبی نداره مخصوصا برای کاربرای ایرانی که معمولا شمارشون رو با 0 وارد میکنن.
پس باید چکار کرد؟ شاید به ذهنتون برسه که یه ولیدیشن ساده مینویسیم و با چند تا شرط هندلش میکنیم ولی قراره به چالش های زیادی بخوریم. پس بیاین اول به سوالات زیر جواب بدیم.
آیا کد کشور ها همه تعداد ارقامش یکسانه؟
خیر. مثلا کد ایران 98 و آمریکا 1 هست
آیا طول شماره های موبایل کشور های مختلف بدون کد کشور یکسان هست؟
خیر. طول شماره موبایل در خیلی از کشور ها 10 رقم هست (بدون کد کشور)
ولی استثنا هم داریم برای مثال شماره موبایل توی آلمان میتونه بین 10 تا 13 رقم متغییر باشه.
آیا شماره موبایل همه کشور ها وقتی از کد استفاده نمیکنیم از 0 ابتدای شماره استفاده میکنیم؟ و آیا با اضافه کردن کد 0 اول شماره حذف میشه؟
در بیشتر کشور ها شماره های موبایل با صفر شروع میشه و با اضافه شدن کد کشور صفر حذف میشه ولی همیشه اینطوری نیست
ایران:
09123456789 → +989123456789
هند:
09876543210 → +919876543210
آلمان:
015123456789 → +4915123456789
در شماره های بالا دقیقا همینطوره ولی در بعضی موارد مثل موارد زیر اینطوری نیست
استثناها و نکات:
برخی کشورها اصلاً از صفر ابتدایی استفاده نمیکنند: مثلاً در ایالات متحده، شمارهها مستقیماً با کد منطقه (area code) شروع میشوند، و وقتی کد کشور اضافه میشود، هیچ تغییری در ساختار داخلی شماره رخ نمیدهد:
آمریکا:
1234567890 → +11234567890
صفر ممکن است حفظ شود: در برخی از کشورها، حتی در حالت بینالمللی، صفر ابتدایی شماره حفظ میشود:
ایتالیا: (صفر حفظ میشود).
03491234567 → +3903491234567
استاندارد E.164: این استاندارد که در مخابرات جهانی استفاده میشود، تأکید میکند که شمارهها در قالب بینالمللی باید بدون صفر ابتدایی نوشته شوند، مگر اینکه صفر بخشی از شماره واقعی باشد.
خوب حالا برای ولیدیشن و ux بهتر باید چکار کرد؟ شاید به ذهنتون رسیده باشه که بشینید و از اول یه کلاسی بنویسید که با توجه به کشور انخاب شده یه سری rule هایی در نظر گرفته بشه و بر اساس اونها شماره ولیدیت بشه یا برای ux بهتر در صورت نیاز فرمتش به صورت خودکار عوض بشه و بعد توی دیتابیس ذخیره بشه.
ولی نیاز به این کار نیست چون از قبل پکیج هایی برای این کار نوشتن. مثلا libphonenumber برای جاوااسکریپت و پایتون
همچنین این پکیج برای لاراول
https://github.com/Propaganistas/Laravel-Phone
مثلا به کمک این پکیج وقتی کاربر کشورش رو انتخاب میکنه دیگه توی فیلد شماره موبایل فرقی نمیکنه کاربر شماره رو با 0 وارد کنه یا بدون 0 چون به راحتی شما توی بکند میتونید با توجه به کشورش شماره رو به فرمت استاندارد E.164 در بیارین و بعد توی دیتابیس ذخیره کنید.
دقت کنید حتما وقتی همچین پکیج هایی اضافه میکنید به پروژتون برای عملکرد مورد انتظارتون چند تا تست بنویسید.
شاید توی پروژه های بزرگ بینالمللی براتون سوال بشه که ما چطور میتونیم شماره موبایل ها با کد های کشور های مختلف رو هندل کنیم؟
خوب قسمت راحت کار اینجاست که بگیم کاربر رو مجبور میکنیم طبق استاندارد E.164 شماره کامل رو با کد کشور وارد کنه مثلا برای ایران به این صورت
+98901*******
خوب این ساده ترین حالته ولی ux خوبی نداره مخصوصا برای کاربرای ایرانی که معمولا شمارشون رو با 0 وارد میکنن.
پس باید چکار کرد؟ شاید به ذهنتون برسه که یه ولیدیشن ساده مینویسیم و با چند تا شرط هندلش میکنیم ولی قراره به چالش های زیادی بخوریم. پس بیاین اول به سوالات زیر جواب بدیم.
آیا کد کشور ها همه تعداد ارقامش یکسانه؟
خیر. مثلا کد ایران 98 و آمریکا 1 هست
آیا طول شماره های موبایل کشور های مختلف بدون کد کشور یکسان هست؟
خیر. طول شماره موبایل در خیلی از کشور ها 10 رقم هست (بدون کد کشور)
ولی استثنا هم داریم برای مثال شماره موبایل توی آلمان میتونه بین 10 تا 13 رقم متغییر باشه.
آیا شماره موبایل همه کشور ها وقتی از کد استفاده نمیکنیم از 0 ابتدای شماره استفاده میکنیم؟ و آیا با اضافه کردن کد 0 اول شماره حذف میشه؟
در بیشتر کشور ها شماره های موبایل با صفر شروع میشه و با اضافه شدن کد کشور صفر حذف میشه ولی همیشه اینطوری نیست
ایران:
09123456789 → +989123456789
هند:
09876543210 → +919876543210
آلمان:
015123456789 → +4915123456789
در شماره های بالا دقیقا همینطوره ولی در بعضی موارد مثل موارد زیر اینطوری نیست
استثناها و نکات:
برخی کشورها اصلاً از صفر ابتدایی استفاده نمیکنند: مثلاً در ایالات متحده، شمارهها مستقیماً با کد منطقه (area code) شروع میشوند، و وقتی کد کشور اضافه میشود، هیچ تغییری در ساختار داخلی شماره رخ نمیدهد:
آمریکا:
1234567890 → +11234567890
صفر ممکن است حفظ شود: در برخی از کشورها، حتی در حالت بینالمللی، صفر ابتدایی شماره حفظ میشود:
ایتالیا: (صفر حفظ میشود).
03491234567 → +3903491234567
استاندارد E.164: این استاندارد که در مخابرات جهانی استفاده میشود، تأکید میکند که شمارهها در قالب بینالمللی باید بدون صفر ابتدایی نوشته شوند، مگر اینکه صفر بخشی از شماره واقعی باشد.
خوب حالا برای ولیدیشن و ux بهتر باید چکار کرد؟ شاید به ذهنتون رسیده باشه که بشینید و از اول یه کلاسی بنویسید که با توجه به کشور انخاب شده یه سری rule هایی در نظر گرفته بشه و بر اساس اونها شماره ولیدیت بشه یا برای ux بهتر در صورت نیاز فرمتش به صورت خودکار عوض بشه و بعد توی دیتابیس ذخیره بشه.
ولی نیاز به این کار نیست چون از قبل پکیج هایی برای این کار نوشتن. مثلا libphonenumber برای جاوااسکریپت و پایتون
همچنین این پکیج برای لاراول
https://github.com/Propaganistas/Laravel-Phone
مثلا به کمک این پکیج وقتی کاربر کشورش رو انتخاب میکنه دیگه توی فیلد شماره موبایل فرقی نمیکنه کاربر شماره رو با 0 وارد کنه یا بدون 0 چون به راحتی شما توی بکند میتونید با توجه به کشورش شماره رو به فرمت استاندارد E.164 در بیارین و بعد توی دیتابیس ذخیره کنید.
دقت کنید حتما وقتی همچین پکیج هایی اضافه میکنید به پروژتون برای عملکرد مورد انتظارتون چند تا تست بنویسید.
GitHub
GitHub - Propaganistas/Laravel-Phone: Phone number functionality for Laravel
Phone number functionality for Laravel. Contribute to Propaganistas/Laravel-Phone development by creating an account on GitHub.
👍4🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از پکیجی که توی پست قبل معرفی کردم ببینید چه ux خوبی میشه پیاده سازی کرد.
من به عنوان کاربر شماره رو با صفر و بدون صفر زدم حتی با 98 و با استفاده از همین پکیج توی بکند راحت تبدیلش میکنم به شماره استاندارد. و لازم نیست به کاربر بگم شماره رو حتما طبق فرمت مورد نظر من وارد کن.
فقط کافیه کد iso کشور و شماره رو داشته باشیم.
حتی خودش ولیدیشن داره و به راحتی با توجه به کشور و شماره اون رو ولیدیت میکنه و اگر مشکلی داشته باشه خطا بر میگردونه.
من به عنوان کاربر شماره رو با صفر و بدون صفر زدم حتی با 98 و با استفاده از همین پکیج توی بکند راحت تبدیلش میکنم به شماره استاندارد. و لازم نیست به کاربر بگم شماره رو حتما طبق فرمت مورد نظر من وارد کن.
فقط کافیه کد iso کشور و شماره رو داشته باشیم.
حتی خودش ولیدیشن داره و به راحتی با توجه به کشور و شماره اون رو ولیدیت میکنه و اگر مشکلی داشته باشه خطا بر میگردونه.
👍2
آخرین چالشی که داشتم و تونستم با موفقیت انجامش بدم پیاده سازی Single Sign On یا همون SSO بود.
اولین باری که از من خواسته شد این کار رو انجام بدم کمی مخالفت کردم چون هم فکر میکردم کار رو پیچیده کنه و کلی چالش و هزینه اضافه میکنه و هم اینکه ما نهایتا دو سایت داشتیم و نیاز شدیدی به SSO نداشتیم.
اما بعدش بیشتر روی این موضوع فکر کردم و دوست داشتم انجامش بدم، تصور این که یک سرویس SSO مثل Google oAuth پیاده سازی کنم بدجوری من رو هیجان زده کرده بود. همچنین تعداد سایت های شرکت بیشتر شد و توی پلن های آینده قرار بود بیشتر هم بشه. پس کمی در موردش تحقیق کردم و با Chat GPT مشورت کردم و بعدش این رو به عنوان یه طرح دوباره پیشنهاد دادم. وقتی موافقت شد حدود 2 هفته طول کشید که این سرویس جدید با موفقیت دپلوی بشه و در اولین سایت استفاده بشه.
به دلیل این که تا الان فقط از Sanctum توی Laravel استفاده کرده بودم، پیاده سازی یک SSO با پاسپورت کمی برام چالش بر انگیز بود و خوب من عاشق چالش های جدیدم، البته که طبق معمول از chat GPT هم کم کمک نگرفتم.
اولین باری که از من خواسته شد این کار رو انجام بدم کمی مخالفت کردم چون هم فکر میکردم کار رو پیچیده کنه و کلی چالش و هزینه اضافه میکنه و هم اینکه ما نهایتا دو سایت داشتیم و نیاز شدیدی به SSO نداشتیم.
اما بعدش بیشتر روی این موضوع فکر کردم و دوست داشتم انجامش بدم، تصور این که یک سرویس SSO مثل Google oAuth پیاده سازی کنم بدجوری من رو هیجان زده کرده بود. همچنین تعداد سایت های شرکت بیشتر شد و توی پلن های آینده قرار بود بیشتر هم بشه. پس کمی در موردش تحقیق کردم و با Chat GPT مشورت کردم و بعدش این رو به عنوان یه طرح دوباره پیشنهاد دادم. وقتی موافقت شد حدود 2 هفته طول کشید که این سرویس جدید با موفقیت دپلوی بشه و در اولین سایت استفاده بشه.
به دلیل این که تا الان فقط از Sanctum توی Laravel استفاده کرده بودم، پیاده سازی یک SSO با پاسپورت کمی برام چالش بر انگیز بود و خوب من عاشق چالش های جدیدم، البته که طبق معمول از chat GPT هم کم کمک نگرفتم.
👍3