If USA was good, the “USB” never has been invented 😒
.gitignore کار نمیکند!
آیا اول پروژهی خود را به نسخه رساندهاید و سپس تصمیم گرفتید پروژه را Gitدار کنید؟
آیا پروندهی .gitignore در گیت خود گذاشتهاید اما انگار کار نمیکند؟
آیا از دیدن پروندههای Cache و Build پروژه که هی کم و زیاد میشوند و تغییرات گیت را بیخودی زیاد میکنند رنج میبرید؟
راه حل شما تنها همین دو دستور گیت است تا Cache گیت را پاک کنید:
|
1 2 |
git rm -rf --cached . git add . |
شیعةُ علیٍّ
شیعةُ علیٍّ هم الذین … و هم الذین لایراهم الله حیث نهاهم و لا یفقدهم حیث امرهم …
شیعیان علی(ع) کسانی هستند که … و خداوند آنها را در جایی که نهی کرده، نمیبیند و در آن جا كه امر كرده، هميشه حاضر مىبيند …
امام حسن عسکری(ع)
(بحارالأنوار / ج65 / ص163)
جالب بود؛ خداوند آنها را «نمیبیند» و «میبیند».
اتصال SSH و SCP به WSL2 در شبکه محلی
اگر از یکی از توزیعهای لینوکس به صورت WSL (Windows Subsystem for Linux) در ویندوز استفاده میکنید، شاید لازم داشته باشید تا از دستگاه دیگری در شبکه محلی به آن ssh بزنید.
اگر شبکهی WSL به صورت NAT تنظیم شده باشد، IP لینوکس همان IP شماست؛ اما لینوکس IP خود را چیزی شبیه به 172.xxx.xxx.xxx/20 معرفی میکند.
پس چگونه باید به آن ssh بزنیم؟
پورت فورواردینگ در ویندوزِ میزبان
اتصال ssh به صورت پیشفرض روی پورت 22 انجام میشود (میتوان از پرونده /etc/ssh/sshd_config آن را تغییر داد)؛ برای اتصال از دستگاههای دیگر در شبکه، باید یکی از پورتهای دستگاه میزبان (ویندوز خودمان) را به پورت 22 لینوکسمان فوروارد کنیم.
یک ترمینال Powershell با دسترسی Run As Administrator اجرا کرده و از دستور زیر استفاده کنید (نشانی IP را تغییر دهید) تا پورت 2222 ویندوز (یا هر پورت دیگری) به پورت 22 لینوکس فوروارد شود:
|
1 2 3 4 |
# Forward all IPv4 traffic on port 2222 to WSLs port 22 netsh interface portproxy add v4tov4 ` listenaddress=0.0.0.0 listenport=2222 ` connectaddress=172.xxx.xxx.xxx connectport=22 |
اجازه دادن به پورت در فایروال ویندوز
حالا با استفاده از همان ترمینال Powershell، دستور زیر را وارد کنید تا پورت 2222 برای استفاده TCP آزاد شود:
|
1 2 3 4 5 6 |
New-NetFirewallRule ` -DisplayName "WSL2 SSH (2222)" ` -Direction Inbound ` -Action Allow ` -Protocol TCP ` -LocalPort 2222 |
اتصال
حالا میتوان با اضافه کردن مقدار پورت به دستورات ssh و scp، به لینوکس روی wsl متصل شد:
|
1 2 3 4 |
# SSH (-p) ssh -p 2222 linuxUser@192.168.1.xxx # SCP (-P) scp -P 2222 .\Desktop\test.txt linuxUser@192.168.1.xxx:~ |
نصب Microsoft Edit روی Debian
مایکروسافت به تازگی نسخهی بازسازی شدهی ویرایشگر معروف و قدیمی تحت خط فرمان خود (edit) را با زبان برنامهنویسی راست (Rust) و به صورت متن باز منتشر کرده است.

این ویرایشگر با وجود اینکه به تازگی منتشر شده، نظر بسیاری از کاربران را به خود جلب کرده و نظر شخصی خودم هم این است که این ویرایشگر به زودی مانند Visual Studio Code، جای خود را بین ویرایشگرهای TUI باز کرده و جایگزین آنها میشود؛ دلیل آن هم «استاندارد» بودن رابط کاربری این نرمافزار است. به طور مثال کاربران میدانند که در تمام نرمافزارها Ctrl+Q برای خروج، Ctrl+F برای یافتن (Find) و Ctrl+S برای ذخیرهکردن (Save) است و این استانداردها مورد پذیرش همه قرار گرفته است؛ در حالی که مثلا در vim، برای خروج باید به صورت زیر عمل کرد:
- کلید Esc را بزنید تا وارد حالت عادی (Normal Mode) شوید
- کلید «:» را بزنید تا وارد حالت خط فرمان (Command Line Mode) شوید
- حالا یک «:» ظاهر میشود؛ یکی از دستورات زیر را وارد کنید:
:qto quit (short for:quit):q!to quit without saving (short for:quit!):wqto write and quit:wq!to write and quit, attempting to force the write if the file lacks write permission:xto write and quit; like:wqbut writes only if modified (short for:exit):qato quit all (short for:quitall):cqto quit, without saving, with a nonzero exit code to indicate failure (short for:cquit)
موفق باشید!
بگذریم؛ برای نصب این ویرایشگر روی ویندوز، میتوان به راحتی از طریق WinGet اقدام کرد:
|
1 |
winget install Microsoft.Edit |
در توزیعهای دبیانی، به دلیل اینکه هنوز Edit وارد بستههای apt نشده است، میتوان از طریق دستورات زیر به صورت مستقیم دانلود و نصب کرد:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Download the package wget https://github.com/microsoft/edit/releases/download/v1.2.0/edit-1.2.0-x86_64-linux-gnu.tar.zst # Extract the archive tar xvf edit-1.2.0-x86_64-linux-gnu.tar.zst # Include it in the bin directory for anywhere access # Have extracted to the user's home directory, adjust the path accordingly sudo ln -s ~/edit /usr/bin/msedit # Launch the editor msedit |
ممکن است هنگامی که مطلب را میخوانید، نسخه جدیدی به جای 1.2.0 منتشر شده باشد.
این دستور نام عمومی «msedit» را برای اجرا تنظیم میکند (ممکن است برنامه دیگری با نام edit وجود داشته باشد، لذا از آن استفاده نشد)
کجاست اون شکلک مرتبط؟!
وقتی بعضی کانالهای تلگرامی (به خصوص کانال خبرگزاریها) رو میخوانم، گاهی سردرگم میشوم که چطور نظرم رو در مورد اون مطلب با شکلکهای پای مطلب ابراز کنم؟
اگر لایک کنم یا قلب بذارم یعنی «موافقم» اگر دیسلایک کنم یا شکلک فحش (🤬) بذارم، ممکنه اینطور برداشت بشه که با موضوع یا فردی که در مطلب ازش یاد شده مخالفم؛ دقیقا با چه شکلکی میشه به نویسندهی مطلب گفت که تو خیلی … چیز یعنی شما در نوشتن مطلب سهلانگاری کرده و خطا کردهاید که این مطلب را نوشتهاید؟ 😑
فرمول اکسل تولید شماره موبایل تصادفی
با استفاده از فرمول اکسل زیر میتوانید شمارههای تلفن همراه تصادفیای را بسازید که دارای پیششمارههای تصادفی ولی معتبر و 7 رقم شماره تصادفی باشد:
|
1 |
=CHOOSE(RANDBETWEEN(1,5),"0937","0912","0919","0910","0935") & TEXT(RANDBETWEEN(1000000,9999999),"0000000") |
در اکسلهایی که به جای , از ؛ پشتیبانی میکنند:
|
1 |
=CHOOSE(RANDBETWEEN(1؛5)؛"0937"؛"0912"؛"0919"؛"0935"؛"0910") & TEXT(RANDBETWEEN(1000000؛9999999)؛"0000000") |
جهانبینی از «دانشجویان نخبه»
«تعارف در اجرای قوانین» … نه، بذار اینجوری بگویم: در میان بیقانونی و ضعف فرهنگی، اگر برای ایجاد یک محیط فرهنگی و مثبتاندیش زیادی عجله کنی چه میشود؟
گروهی که با نام دانشجویان نخبه ایجاد شده بود، کم کم هم از غیر دانشجویان پر شد و هم از مطالب نانخبگی. حالا در این شرایط باید چه کاری انجام میشد؟ تسامح؟ اخراج؟ بزرگترین اشتباه، بزرگ کردن گروه بود و البته برنامهی خاصی هم برای گروه وجود نداشت.
کمکم مثبتاندیشی گروه مسخره شد و البته دروغ چرا، اعضای گروه هم عمر کردند و هم از طوفان بیرون از گروه که همه را برده، به آنها هم رسید؛ نتیجه هم چند سری اخراج که از احترامات کم میکرد و ظاهرا فایدهای نداشت و در نهایت بستن گروه (نمیدانم چرا این لغت «collapse» همش در ذهنم میچرخد).
اما این تراژدی چند روز پیش به کمدی تبدیل شد؛ به نحوی که گروه به جانشین مدیر رسید و گروه احیا شد، بعضی کاربران خارج شدند، کاربران اخراجی وارد شدند و نام گروه به آزاد اندیشی مزین شد؛ آزاد اندیشیای هم که همه میدانیم یعنی چه! یعنی تماشای فوروارد اخراجیها از کانالهای بیسروته و سپس غرغر در ذیل آن!
بیشتر از این حوصلهی نوشتنم نمیآید، مجبور به ترک گروه شدم اما حیف از خاطراتی که به خاطرش سالها گروه را نگه داشته بودم. خندهام گرفته است؛ یاد ایمیلی که قبل از تشکیل گروه برای آقای نیرومند فرستاده بودم افتادم و فکرهایی که در سر داشتم!
سر تا پا شبیه جهانی که در آن زندگی میکنیم است، همین!
حروف عربی/فارسی که با هم اشتباه گرفته میشوند
در برنامهنویسی رایانه و کار با دادهها و پایگاههای داده (از دیتابیسهای ساده مانند اکسل تا دادههای عظیم کشوری) یکی از چالشها برای زبان فارسی، این است که تعدادی حرف با شکل نمایشی یکسان یا مشابه اما با شناسه یونیکد متفاوت وجود دارد که ممکن است به جای یکدیگر استفاده شوند.
یکی از مثالهای معروف آن «ي» و «ی» هستند که اولی یای عربی است و چون زودتر از یای فارسی وارد کدپیجهای سیستمعاملها و چینش کیبوردها شده است، تقریبا در تمام دادههای قدیمی به جای آن به کار رفته است. متاسفانه بعد از معرفی یونیکد 1.1 (ژوئن 1993) هم که هر دو حرف در آن معرفی شدند، به دلیل آنکه بعضی فناوریهای قدیمی مثل فلش و جاوا هیچگاه درست یای فارسی را پشتیبانی نکردند، بسیاری از دادهها با این حرف ثبت شده است یا میشود.
و حالا مشکل این بهکارگیری جابجای حروف همشکل چیست؟ خب، متاسفانه یا خوشبختانه منطق رایانه شباهت ظاهری را نمیفهمد و حروف مشابه را از هم کاملا جدا میداند. حالا فرض کنید یک پایگاه داده از نام و نام خانوادگی افراد دارید و میخواهید کاربر نامی را به نرمافزار بدهد و در پایگاه داده جستجو کند. کاربر مینویسد «علی» و آن را جستجو میکند اما هیچ نتیجهای پیدا نمیشود! چرا؟ چون کارمندی که نامها را وارد کرده بود از یک سیستم پنتیوم با ویندوز 98 و فارسیساز پارسا 99 استفاده میکرده که کیبورد فارسی آن فقط «ي» داشته 😂 پس «علی» نداریم بلکه «علي» داریم که از نظر حروفی با هم فرق دارند…
در این مطلب سعی میکنم تا حروفی که معمولا با یکدیگر اشتباه گرفته میشوند را قرار دهم تا در طراحی برنامهها برای استانداردسازی استفاده شود:
تبدیل String عدد ممیزدار به Int و بلعکس در سیشارپ
برای تبدیل متغیر Stringای که حاوی یک عدد است از دستور int.parse() استفاده میکنند؛ اما اگر عدد حاوی تعدادی ممیز (یا کاما) باشد این دستور خطا خواهد داد.
|
1 2 3 |
"geram18": { "p": "35,560,000" } |
برای تبدیل اعداد ممیزدار، میتوان پارامتر NumberStyles.AllowThousands را به دستور int.parse() اضافه کرد.
حالا اگر بخواهیم یک متغیر عددی را به صورت متنی ممیزدار نمایش بدهیم چه؟ برای این کار میتوان از دستور String.Format() و قالب {0:N0} استفاده کرد تا عدد به صورت 3 رقم 3 رقم ممیزدار شود.
|
1 2 3 4 5 6 |
string chiz = "123,456,789"; // chiz = "123,456,789" int chiz2 = int.Parse(chiz, NumberStyles.AllowThousands); // chiz2 = 123456789 string chiz3 = String.Format("{0:N0}", chiz2); // chiz3 = "123,456,789" |