نوشته‌های ترمینالی
2.62K subscribers
424 photos
12 videos
32 files
2.25K links
Download Telegram
Forwarded from Lack of leak XD
وقتی شروع میکنید به ساختن ستاپ خودتون و سیستمتون رو رایس میکنید ، بهتره نگاهی به این لیست داشته باشید :

https://github.com/fosslife/awesome-ricing

#ricing

✍️ @lack_xd
👍1
من تو تیم طراحی سوالات مسابقه‌ی «هم‌کد Golang» که جمعه‌ی اخیر برگزار شد بودم.
اگه دوست داشتید سوالا رو حل کنید یا ببینید می‌تونید از اینجا پیداشون کنید:
https://quera.org/problemset


به طور خاص سوال «پیپ» رو دوست دارمش و اگه وقت داشتید حلش کنید.
https://quera.org/problemset/181682/
7
مطالبی که با هشتگ #توصیه‌ها منتشر شده بود رو جمع‌بندی کردم و در قالب یک مطلب ویرگولی منتظر کردم.
اگه دوست داشتید یه مروری کنید یا منتشر کنید می‌تونه گزینه‌ی خوبی باشه.
https://vrgl.ir/v8sZi
10👍2
اگه برنامه‌نویسی بک‌اند (حداقل کمی) بلد هستین و می‌خواین با پکیج net/http خود گولنگ هم دوست بشید این آموزش از داکیومنت‌های خودشون تا حد خوبی گویاست و توصیه می‌شه:

https://go.dev/doc/articles/wiki/
6👎1🔥1
یک visualization خیلی زیبا روی گیتهاب
به این شکل که اومده بر اساس star مشترک آدما، فاصله برای پروژه ها تعریف کرده و به همین ترتیب خوشه بندی کرده.
مثلا این قسمت که من بهش علاقه دارم خوشه‌ی ترمیناله، داخلش از vim و nvim و shell های مختلف و dotfiles ... به چشم میخوره.

https://anvaka.github.io/map-of-github/#4.8/-19.28/-9.98


جالبه که قسمت مربوط به هوش و قسمت فرانت (احتمالا پکیج های node) خیلی بزرگن
👍4🤩1
Forwarded from Woland's Linux Journal (Woland)
⚠️خبر:
قرار آرچ لینوکس زیرساخت خودش رو از آپاچی SVN به گیت تغییر بده.
در پی این مهاجرت اسم برخی از مخازن هم تغییر خواهد کرد.

🔴مخزن community با extra تلفیق می‌شن و فقط extra باقی می‌مونه.
🟡مخزن testing به دوشاخه‌ی core-testing و extra-testing تقسیم میشه.
🔵مخزن staging هم به core-staging و extra-staging تقسیم میشه.

این پروسه جمعه شروع میشه و تا یکشنبه ادامه داره که در طی این مدت هیچ آپدیتی منتشر نمیشه و اتصال rsync و HTTP به مخازن قطع میشه.
اگه همه‌چیز درست پیش بره از سایت آرچ یک خبر جدید به همراه مراحل ضروری از سمت کاربر اعلام خواهد شد.
👍9🔥1
می‌دونستین با دستور زیر می‌تونید به آخرین پوشه‌ای که داخلش بودید برگردین؟

cd -

مخصوصا وقتی کاربرد داره که یه cd به یه جای دور کردین و می‌خواید برگردین.
👍26🔥6😁1
این لینک دونیت به منه، اگه مطالب این چنل یا وبلاگم توی ویرگول رو دوست داشتین، می‌تونید با دونیت خوشحالم کنید و البته از ادامه فعالیت حمایت کنید. 🙂
https://zarinp.al/rsharifnasab
👍16🔥5👎3🕊31
یه هدری توی http هست که مرورگرها ارسال می‌کنن به اسم user agent که قرار بوده برای سرور مشخص کنه چه مرورگری/کلاینتی داره درخواست اون محتوا رو میده

مثلا شکلش چنین چیزیه:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.1.

و خب خیلی نمیشه فهمید الان این مال چه مرورگریه (این مال اجه)

به قول دوستمون:
No wonder it's hard to do browser detection, they're all pretending to be one another!

اما داستان چیه؟
خلاصه‌شو اینجا بخونید:
https://stackoverflow.com/questions/1114254/why-do-all-browsers-user-agents-start-with-mozilla
👍112😁1
نوشته‌های ترمینالی
یه آموزش متنی خوب برای tmux برای کسایی که هنوز شروع به استفاده نکردن: https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/
با tmux خیلی هامون آشنا هستیم. یه terminal multiplexer قدیمی و خفن.
ولی متاسفانه کار باهاش یه مقداری سخته و راه دست نیست.
یه جایگزین خوب براش با rust نوشتن که البته هنوز در حالت بتا است ولی مشکل خاصی نداره.
اسمش zellij‌ئه.
سایتش:
https://zellij.dev/


صفحه گیتهابش:
https://github.com/zellij-org/zellij

و صفحه معرفیش:
https://www.linuxuprising.com/2021/04/zellij-is-new-terminal-multiplexer.html

البته توی این معرفی هنوز تازه اومده و بتا است. الان بالغ تر شده.
🔥8👍21👎1
دوست دارید توی ترمینال اسکرین‌سیور زیبا داشته باشید؟
می‌تونید از pipes.sh استفاده کنید.
https://github.com/pipeseroni/pipes.sh

نتیجه می‌شه یه چنین چیزی که همیشه هم پویاست و داره شکل‌های قشنگ جدید تولید می‌کنه!
🔥6😍1😐1
اگر میخواهید یه پروژه رو کلون کنید و حجمش زیاده، میتونید برای بهینه سازی، دو تا کار کنید:
۱- فقط کامیت آخر رو دانلود کنید، مثلا اگر می‌خواهیم فقط برنامه رو از سورس دانلود کنید و با تاریخچه‌اش کاری نداریم منطقیه.
۲- فقط برنچ اصلی (master یا main) رو دانلود کنید چون احتمالا با باقی برنچ‌ها کاری نداریم.

دستورش چی میشه؟
git clone --branch master --depth 1 https://github.com/neovim/neovim.git
👍22
Forwarded from Semicolon (Ali Moeinian)
GitHub Licenses.pdf
1.2 MB
با حمایت کردن، خیلی خیلی برای ادامه‌ی کار بهم انرژی میدید :
https://www.coffeete.ir/alimoeinian

مرسی از همگی ❤️
5👍1👏1
نوشته‌های ترمینالی
در مورد llvm بیشتر بدانیم. https://www.infoworld.com/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html
خیلی از زبون‌ها رو می‌شنویم که از llvm استفاده می‌کنن؟
این چی بود اصلا که همه کامپایلرها رو گرفت؟

ماجرا از اینجا شروع می‌شه که کامپایلرها باید برای کامپایل کردن یک فایل از زبون مبدا (مثلا راسط) به زبان ماشین، این عملیات رو انجام بدن:
۱- خوندن کیلدواژه به کلیدواژه‌ی سورس‌کد مبدا
۲- پارس کردن ساختار‌های مختلف با کمک کلیدواژه‌ها (parsing خیلی مفصله ماجراش و الگوریتم‌های متنوعی داره که باشه برای بعد)
۳- بررسی اینکه این کدی که نوشته شده چیه، مثلا تایپ‌هاش درست هستن؟ معنی میده اصلا؟ بهینه‌سازی‌ای نیاز نداره و اینا.
۴- تبدیل کد ماشین

حالا این تبدیل کد ماشین رو ما خیلی ساده می‌گیم ماشین اما کدوم ماشین؟ x86؟ arm؟ پس فردا risc-v و mips چی؟ بعد هر کدوم از اینا نسخه دارن و instruction مختلفی بهشون اضافه می‌شه. اینکه فقط بخوایم یه کدی تولید کنیم شاید خیلی سخت نباشه ولی بهینه‌ کردنش و اطمینان از اینکه درست کار می‌کنه و پشتیبانی از معماری پردازنده‌های مختلف واقعا کار سختیه. این کار سخت رو مثلا کامپایلر GCC خودش انجام میده.

اما همه‌ی کامپایلرها اینطور کار نمی‌کنن. مثلا جاوا یک رویکرد تقریبا منحصر به فرد پیش گرفت. گفت من کامپایلرم نمی‌تونه کد به هر پلتفرم مقصدی تولید کنه، بلکه میام یه «کد میانی» تولید می‌کنم به اسم byte code. یعنی چی؟ یعنی این کد میانی یه جور کد ماشینیه که واقعا هیچ ماشینی بلد نیست اجراش کنه، یه اسمبلیه برای یک پردازنده‌ی فرضی. مزیتش برای کامپایلر اینه که فقط لازمه دغدغه‌ش این باشه که همین رو تولید کنه و همین رو بهینه کنه.
اما در مرحله‌ی بعد چه کسی اینو اجرا کنه؟ مجبوریم یه VM (به اسم JVM یا java virtual machine) دااشته باشیم که اون بایت‌کد رو می‌گیره و ترجمه می‌کنه به زبان ماشین و همونجا هم اجراش میکنه. مثلا JVM برای پردازنده‌ی x86 و الی آخر.
جای تعجب نداره که جاوا اونقدر نمی‌تونه سریع باشه چون این JVM به هر حال سربار داره، هرچقدر هم بهینه‌ش کنن چون به هر حال داره ترجمه‌ای رو انجام می‌ده.

اما حالا فرض کنید که کامپایلر ما همون کار راحت تولید یه bytecode رو انجام می‌داد، اما به جای اینکه خود byte code رو بدیم به ملت و اونجا مجبور باشن VM نصب کنن، این bytecode رو یکی تبدیل می‌کرد به کد ماشین و بهینه‌ش هم میکرد. خب llvm همینجا وارد می‌شه!
یعنی چی؟ یعنی به کامپایلر راسط میگه شما لازم نیست خودت کد اسمبلی/زبان ماشین تولید کنی، بلکه بیا LLVM IR یا LLVM intermediate representation تولید کن. من اینو تبدیل می‌کنم به کد ماشین بهینه!
و اینجا یه مفهوم front-end و back-endی هم شکل می‌گیره. فرانت‌اند به قسمتی که سورس‌کد رو می‌خونه و پارس می‌کنه و ... تا IR تولید بشه میگن و بک اند میشه قسمتی که IR رو می‌خونه و پردازش می‌کنه و کد ماشین تولید می‌کنه. LLVM برای ما نقش یک بک‌اند رو داره.

حالا سینتکس LLVM IR چه شکلیه؟ خیلی برامون مهم نیست ولی می‌تونیم ببینیمش. مثلا به clang بگیم که به جای تولید کد ماشین نهایی، برامون LLVM IR رو خروجی بده. می‌تونه این کارو بکنه. حتما حدس می‌زنید که clang یه کامپایلر بر پایه‌ی llvmئه که این قابلیت رو داره.
clang -S -emit-llvm foo.c

با کمک این دستور می‌تونید IR رو مشاهده کنید و حتی می‌تونید با کمک llvm اجراش کنید. با دستور lli یا llvm interpreter می‌تونید به شکل تفسیری اجراش کنید یا با llc کامپایلش کنید.


اما llvm باز هم کار ما رو ساده‌تر می‌کنه، به جای اینکه از فرانت‌اند بخواد که یکجا بهش IR رو تحویل بده، میاد از visitor design pattern استفاده می‌کنه. خلاصه‌ش اینطوریه که به جای اینکه نهایتا خروجی IR رو ازمون بگیره،‌ در روال ساختش هم مشارکت می‌کنه. مثلا میگه تو می‌دونی که یه تابع داری ولی محتواش رو هنوز نخوندی؟ عیب نداره تا همینجا به من بگو من برات می‌سازم. خب یه if توش داری؟ من داخل تابع اضافه‌ش می‌کنم. و الی آخر. برای اینکه از این قابلیت استفاده کنیم لازم داریم که توابعی که llvm داره مثلا برای ساخت تابع، داخل فرانت‌اندمون صدا کنیم. اینجا یه مشکلی که داریم اینه که به شکل پیش‌فرض کتاب‌خونه‌ش فقط برای cpp وجود داره، که البته چون خیلی از کامپایلرها با cpp هستن برامون کافیه. ولی همچنین یکسری binding (غیررسمی) برای باقی زبون‌ها هم وجود داره مثلا کامپایلر haskell و rust از همین binding ها استفاده می‌کنن چون کامپایلرشون به ترتیب با haskell و rust نوشته شده.
👍10❤‍🔥3