👾 Geek Engineers
539 subscribers
51 photos
42 files
318 links
👾 Extremist software engineering guidance for Geeks.

Website:
https://geekengineers.netlify.app

Github:
https://github.com/geekengineers
https://github.com/tahadostifam

Community:
@geek_engineers_community
Download Telegram
let's.go.learn.to.build.professional.web.applications.pdf
7.1 MB
Let’s Go: Learn to build professional web applications with Go, 2nd Edition (2025)

پ.ن: لول مقدماتی
7
anyone.can.code.algorithmic.thinking.pdf
2.8 MB
Anyone Can Code: Algorithmic Thinking (2023)

پ.ن: برا درک الگوریتم کتاب خوبیه. ولی زیاد تخصصی نیستش.
9
📝 عنوان مقاله: کاهش پیچیدگی در سیستم‌های برنامه‌نویسی شیءگرا (OOP)

چکیده: این مقاله بررسی می‌کند که چگونه روش‌های منضبط در برنامه‌نویسی شیءگرا، مانند ترجیح ترکیب بر وراثت و کوچک نگه داشتن کلاس‌ها، می‌توانند به مدیریت پیچیدگی کمک کنند. همچنین، برنامه‌نویسی داده‌محور (DOP) را به عنوان یک پارادایم جایگزین معرفی می‌کند که به طور بنیادین با جدا کردن کد از داده، پذیرش تغییرناپذیری (immutability) و استفاده از ساختارهای داده‌ی عمومی به حل پیچیدگی می‌پردازد. این متن توضیح می‌دهد که چرا سیستم‌های OOP ممکن است پیچیده شوند و اصول اصلی DOP را به عنوان یک رویکرد مکمل یا جایگزین برای ساخت نرم‌افزارهای قوی‌تر و قابل نگهداری‌تر ارائه می‌دهد.

زمان مطالعه: ۴ دقیقه
برچسب‌ها: OOP, DOP, طراحی نرم‌افزار, پارادایم‌های برنامه‌نویسی, TypeScript

https://geekengineers.netlify.app/blog/alleviating-complexity-in-oop-systems
110
🔺 برنامه‌نویسی کوانتومی (Quantum Programming)

برنامه‌نویسی کوانتومی بر پایه قوانین مکانیک کوانتوم ساخته شده. به جای بیت‌های کلاسیک (۰ و ۱)، در اینجا با کیوبیت سروکار داریم؛ کیوبیت می‌تونه همزمان در چند حالت باشه (به این می‌گن Superposition) و حتی با کیوبیت‌های دیگه Entanglement پیدا کنه. همین ویژگی‌ها باعث می‌شه بعضی محاسبات خیلی سریع‌تر از کامپیوترهای معمولی انجام بشه.

نکته مهم اینه که برنامه‌های کوانتومی قطعی (Deterministic) نیستن، بلکه احتمالی (Probabilistic) هستن. یعنی خروجی از طریق چندین بار اندازه‌گیری کیوبیت‌ها به‌دست میاد و هر بار بعد از اندازه‌گیری، حالتشون به یک مقدار مشخص فرو می‌ریزه.

🔺 برای نوشتن برنامه‌های کوانتومی، زبان‌ها و فریم‌ورک‌های مخصوصی وجود داره:

- Qiskit (مبتنی بر پایتون)
- Quipper (مبتنی بر Haskell)
- Cirq (از گوگل)

و این برنامه‌ها روی پردازنده‌های کوانتومی مثل IBM Quantum یا Google Sycamore اجرا می‌شن.

تو این دنیا به جای دستورهای کلاسیک، از گیت‌های کوانتومی (مثل Hadamard, CNOT, Pauli-X و...) استفاده می‌کنیم. همین ابزارها پایه‌ی کاربردهای بزرگی مثل رمزنگاری نسل بعدی، بهینه‌سازی، شبیه‌سازی سیستم‌های فیزیکی و شیمیایی هستن. البته تکنولوژی هنوز در مراحل اولیه رشدشه.

🔺 برنامه‌نویسی کوانتومی در خانه: واقعاً ممکنه؟

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

محدودیت‌های سخت‌افزاری مثل تعداد کم کیوبیت‌ها یا ناپایداری هنوز وجود دارن، اما BlueQubit به شما کمک می‌کنه همین امروز وارد دنیای کوانتوم بشید، یاد بگیرید و آماده آینده‌ای بشید که کوانتوم داره تبدیل به بخش اصلی محاسبات می‌شه. با این ابزار می‌تونید بدون نیاز به زیرساخت‌های خاص، در خونه یا کسب‌وکار خودتون وارد ماجراجویی کوانتومی بشید.

🔺 زبان‌های برنامه‌نویسی کوانتومی

برای نوشتن الگوریتم‌های کوانتومی، فقط سخت‌افزار کافی نیست؛ به زبان‌های مخصوص هم نیاز داریم. زبان‌های کوانتومی طوری طراحی شدن که بتونن با کیوبیت‌ها، گیت‌های کوانتومی و عمل اندازه‌گیری کار کنن و در عین حال ابستراکشن‌های سطح بالا به برنامه‌نویس بدن.

برخلاف زبان‌های کلاسیک، این زبان‌ها از مفاهیم ویژه کوانتوم مثل Superposition (هم‌زمان بودن در چند حالت)، Entanglement (درهم‌تنیدگی) و Quantum Parallelism (محاسبات موازی کوانتومی) پشتیبانی می‌کنن.

این زبان‌ها به پژوهشگرها و توسعه‌دهنده‌ها کمک می‌کنن برنامه‌های کوانتومی واقعی بنویسن و حتی بتونن اون‌ها رو با کدهای کلاسیک ترکیب کنن. نتیجه این ترکیب، سیستم‌های هیبریدی (کوانتوم + کلاسیک) هستن که فعلاً اصلی‌ترین مسیر توسعه کاربردهای کوانتومی به حساب میان.

https://www.bluequbit.io/quantum-programming-languages

https://learn.microsoft.com/en-us/azure/quantum/qsharp-overview

اینجا quickstart با #Q وجود داره و پیشنهاد میکنم حتمی یک نگاهی بهش بندازید‌:

https://learn.microsoft.com/en-us/azure/quantum/qsharp-quickstart
13👍1
یک json parser خیلی ساده با هدف educational recreational ساختم با OCaml و بسی لذت بردم از پاردایم های فانکشنال =) پیشنهاد میکنم به اهداف و فلسفه های زبان های فانکشنال نگاهی بندازید و سعی کنید توی کد هاتون (حتی با زبان غیر فانکشنال) ازش استفاده بکنید. Immutable data processing is insanely helpful.

https://github.com/tahadostifam/JsonParser

توضیحاتی مختصر راجب زبان OCaml:

OCaml یک زبان برنامه‌نویسی چند‌پارادایمی است که از سبک‌های فانکشنال، ایمپرِیتیو و شیءگرا پشتیبانی می‌کند. هسته‌ی زبان بسیار قدرتمند و ایمن است و دارای سیستم نوع قوی و استاتیک است که بسیاری از خطاهای رایج در زمان کامپایل شناسایی می‌شوند.

» Immutable by default: اکثر داده‌ها به‌صورت پیش‌فرض تغییرناپذیر هستند، که باعث افزایش قابلیت اطمینان و ساده‌تر شدن reasoning در برنامه‌ها می‌شود.

» Pattern matching: یکی از ابزارهای قدرتمند برای کار با داده‌های پیچیده، به‌خصوص در پردازش AST یا JSON.

» Type inference: نیازی به مشخص کردن نوع داده‌ها در اکثر مواقع نیست؛ کامپایلر خودش نوع‌ها را تشخیص می‌دهد.

» Functional programming: توابع درجه‌یکم، closure و higher-order functions به‌صورت طبیعی پشتیبانی می‌شوند.

» Performance: برخلاف برخی زبان‌های فانکشنال، OCaml کامپایل به باینری‌های سریع دارد و برای پروژه‌های واقعی هم قابل استفاده است.
👾74👍1
بلاخره یه مشارکت واقعی کردم

https://github.com/rust-lang/rust/issues/146739

قضیه ازین قراره که داشتم cross compile میکردم با Rust(Cargo) که خروجی Windows GNU بگیرم. روی لینوکس یک سری لایبرری همیشه لینک میشه به باینری ها از جمله rsbegin.o و rsend.o که در اصل linker helper objects هستن و ربطی به کد ما ندارن. یعنی جزوی از رانتایم gcc هست (GCC runtime support infrastructure). که روی ویندوز این ها به اون صورت وجود نداره و نباید لینک بشه.

اینجا داره روش کار میشه و امیدواریم که تو نسخه های بعدی کراس کامپایل بهبود پیدا کنه :)

https://github.com/rust-lang/rust/pull/146758
18🔥4
📝 عنوان مقاله: Data-Oriented Parser Design with Token Streams

چکیده: این مقاله توضیح می‌دهد که چرا طراحی پارسر به‌صورت داده‌محور (Data-Oriented) و بر پایه‌ی مصرف توکن‌ها از طریق یک Iterator<Token> می‌تواند ساده‌تر و قدرتمندتر از رویکرد سنتی با state مرکزی باشد. در این مدل، هر تابع پارسر فقط روی استریم توکن ورودی کار می‌کند و خبری از current_token یا peek_token سراسری نیست. نتیجه‌ی این طراحی: رفع آسان‌تر ابهام‌های نحوی، ماژولار بودن کد، و حتی بهبود کارایی در بعضی سناریوها. مقاله همچنین این رویکرد را با معماری‌های مرسوم مانند recursive descent و Pratt parser مقایسه کرده و بهترین شیوه‌های پیاده‌سازی را جمع‌بندی می‌کند.

زمان مطالعه: ۶ دقیقه
برچسب‌ها: parsers, compiler-design, data-oriented, token-streams, language-design, iterator-pattern

https://geekengineers.netlify.app/blog/data-oriented-parser-design-with-token-streams
👾7
7
کدینگ استایل پیشنهادی گوگل برای TypeScript

https://google.github.io/styleguide/tsguide.html
🔥6
اینم لایبرری برای برنامه نویسی فانکشنال با Go هستش. من بسی لذت بردم ازش. درکل هدف از مطالعه فانکشنال اینه که طرز فکر خوبی میده به آدم برای حل مسائل :)

https://github.com/IBM/fp-go
🔥5🤣1
اینم از دیگر تلاش هام یعنی ساختن یک دیتابیس کوچیک و educational.

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

بنابر این خیلی unstable هست و ممکنه breaking change داشته باشه در آینده. اما در نظر دارم که یک سری فیچر دیگه هم در آینده بهش اضافه بکنم و تو پروژه های کوچیک خودمون ازش استفاده کنیم. انشالله هر وقت زبان مون استیبل شد.

ستاره دادن تو گیت هاب و کامنت فراموش نشه❤️🍻.

https://github.com/cyrus-lang/SampleDB
🔥172
ch8bModified.pdf
485.4 KB
یک ارائه ای کوچکی راجبDynamic relocation using a relocation register که میتونید کپی پیست کنید اسمشو عوض کنید به نام خودتون بزنید و تو دانشگاه ارائه بدید ۲۰ بگیرید.
6🤣1
📝 عنوان مقاله: Dynamic Relocation in Operating Systems: A Detailed Guide and Comparison with Static Relocation

چکیده: این مقاله به بررسی دو رویکرد جابجایی ایستا (Static Relocation) و جابجایی پویا (Dynamic Relocation) در سیستم‌عامل‌ها می‌پردازد. توضیح داده می‌شود که چگونه جابجایی پویا با پشتیبانی سخت‌افزاری در زمان اجرا آدرس‌ها را ترجمه می‌کند و در مقایسه با روش ایستا انعطاف‌پذیری، حفاظت حافظه و کارایی بهتری ارائه می‌دهد. در ادامه، هر دو روش از نظر مزایا، محدودیت‌ها و کاربرد در سیستم‌عامل‌های مدرن مانند Linux kernel مقایسه می‌شوند.

زمان مطالعه: ۷ دقیقه
برچسب‌ها: operating-systems, memory-management, dynamic-relocation, static-relocation, linux-kernel, virtual-memory

https://geekengineers.netlify.app/blog/dynamic-relocation-in-operating-systems
🔥9
https://en.wikipedia.org/wiki/Bus_error#Unaligned_access

خلاصه ای از unaligned access:

در معماری‌های پردازشی، دسترسی غیرهم‌تراز (unaligned access) به وضعیتی اطلاق می‌شود که در آن، داده‌های چندبایتی (مثلاً 16، 32 یا 64 بیتی) در آدرس‌های حافظه‌ای ذخیره می‌شوند که با مرزهای مورد انتظار آن نوع داده هم‌تراز نیستند. این وضعیت می‌تواند منجر به خطای Bus Error شود.

توضیح بیشتر:

دستگاه‌های پردازشی معمولاً داده‌ها را در واحدهای 8 بایتی (بایت) آدرس‌دهی می‌کنند.

برای دسترسی به داده‌های چندبایتی، این داده‌ها باید در آدرس‌هایی قرار گیرند که با اندازه آن‌ها هم‌تراز باشد. به‌عنوان مثال:

برای داده‌های 16 بایتی، آدرس‌های 0، 2، 4، 6 و غیره هم‌تراز هستند.

برای داده‌های 32 بایتی، آدرس‌های 0، 4، 8، 12 و غیره هم‌تراز هستند.

اگر داده‌ای در آدرسی ذخیره شود که با اندازه آن داده هم‌تراز نباشد (مثلاً داده 32 بایتی در آدرس 3)، تلاش برای دسترسی به آن می‌تواند منجر به خطای Bus Error شود.
🔥3👍1
یک منبع جالبی ست این از دانشگاه illinois آمریکا راجب درک و بعد ساختن یک memory allocator.

https://cs341.cs.illinois.edu/coursebook/Malloc#memory-allocator-tutorial
7