Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.01K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
اگه تصمیم گرفتید module ای از یک multi module mono repo تفکیک کنید و در یک repo مستقل با حفظ تاریخچه commits نگهدارید لینک زیر بخوبی اینکار رو ‌توضیح میده.

پی نوشت: خودم این روش رو بصورت متداول تو پروژه ها بکار میگیرم.

https://docs.github.com/en/get-started/using-git/splitting-a-subfolder-out-into-a-new-repository

#DevTwitter | <ShayanSbi/>

🕊 @gopher_academy | @GolangEngineers
4
#دون
زبان سالیدیتی یا Solidity یک زبان برنامه‌نویسی است که برای توسعه قراردادهای هوشمند (smart contracts) بر روی بلاکچین اتریوم (Ethereum) استفاده می‌شود.

بنیان‌گذار زبان Solidity Vitalik Buterin و تیم اتریوم آن را در سال 2014 طراحی کردند.

استفاده از زبان Solidity اجازه می‌دهد تا قراردادهای هوشمندی را که تعریف می‌کنند و بر روی بلاکچین اجرا می‌شوند، ایجاد کرد. این قراردادها مواردی مانند معاملات مالی، انتقال دارایی‌ها، اجرای قراردادهای توزیع شده، و بسیاری دیگر از عملیات مهم دیگر را امکان‌پذیر می‌کنند.

با استفاده از Solidity، توسعه‌دهندگان می‌توانند قراردادهای هوشمند را طراحی و پیاده‌سازی کنند و سپس آن‌ها را بر روی شبکه اتریوم اجرا کنند. این زبان برنامه‌نویسی مبتنی بر جاوااسکریپت بوده و دارای ساختاری شبیه به C++ می‌باشد.

سالیدیتی یکی از زبان‌های محبوب‌ترین برای توسعه قراردادهای هوشمند در اتریوم است و تاکنون بسیاری از پروژه‌های موفق بلاکچین از این زبان برنامه‌نویسی برای توسعه استفاده کرده‌اند.

#DevTwitter | <shayan/>

🕊 @gopher_academy | @GolangEngineers
🔥8
از نوشتن کامیت های معمولی گیت خسته شده اید؟
از commitizen برای نوشتن کامیت های بهتر استفاده کنید. این ابزار به شما کمک میکند تا کامیت های کاملی را به راحتی ایجاد کنید.

#DevTwitter | <the_coding_tips/>

🕊 @gopher_academy | @GolangEngineers
7
اگه یک توسعه دهنده نرم افزار هستید این سایت بهترین ابزار رو در این حوزه بهتون معرفی می‌کنه که متر شمارو سریعتر و آسون تر می‌کنه.

https://dev.to/koladev/tools-that-make-me-productive-as-a-software-engineer-2dge

#DevTwitter | <amir atar/>


🕊 @gopher_academy | @GolangEngineers
🔥51
آیا DuckDB رقیب جدی SQLite  است؟
دیتابیس DuckDB :
طراحی شده برای استفاده از تمام هسته های CPU
بهینه سازی شده برای complex queries
مدعی سرعت بالاتر از SQLite
تعداد functionality built-in بیشتر بدون وابستگی
فرمت های Parquet و  Apache Arrow را میخونه

#DevTwitter | <MehrdadLinux/>

🕊 @gopher_academy | @GolangEngineers
👍9🍾2🔥1
نوشته ای برای توسعه دهندگان نرم افزار که تجربیات و شرح کار یک برنامه نویس است که شما را بیشتر با چالش های این حوزه آشنا می کند.

https://thenewstack.io/writing-for-software-engineers-read-me-first/

#DevTwitter | <amir atar/>

🕊 @gopher_academy | @GolangEngineers
👍3🍾3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
هر روز دارم ساعت ها با Git کار میکنم. در واقع کارمه ولی هنوز یه چیزاییش هست که برام گنگه...

این انیمیشن خیلی خوووب به نظرم نشون داده که Git چطوری کار میکنه! برای من یه سری داستاناش حل شد.. مخصوصا اون Staging area یا Head که توی کامندا گاهی استفاده میکردم ولی دقیقا متوجه نمیشدم!

#DevTwitter | <Sam98/>

🕊 @gopher_academy | @GolangEngineers
👍13🍾32
یکی از سوال های محبوب مصاحبه بک اند: فرق Kafka و RabbitMQ چیه؟

۱. Performance and Scalability
کافکا برای throughput بالا و horizontal scalability ساخته شده است. هرچند RabbitMQ پرفرمنس بالایی دارد وقتی throughput و حجم داده زیاد باشد کافکا مناسب تر است.

۲. Message Ordering
در RabbitMQ در یک صف ترتیب پیام ها حفظ میشود. در کافکا در یک پارتیشن ترتیب پیام های یک topic حفظ میشود اما نه در پارتیشن های مختلف.

۳. Message Priority
در RabbitMQ از اولویت پیام ها پشتیبانی میشود که اجازه میدهد پیام های با اولویت بالا زودتر پردازش شوند. کافگا به صورت built-in از اولویت پشتیبانی نمیکند.

۴. Message Model
مدل پیام های RabbitMQ مبتنی بر صف است و از پروتکل AMQP تبعیت میکند اما کافکا مدل لاگ توزیع شده دارد.

۵. Durability:
برای اینکه پیام ها Durable باشند یعنی اگر failure رخ دهد از بین نروند، در RabbitMQ نیاز به تنظیمات است اما کافکا به طور درونی از این مورد پشتیبانی میکند.

۶. Message Routing
در Rabbit برای مسیریابی پیام ها پیشرفته تر و با استفاده از exchange و binding انجام میشود اما در کافکا ابتدایی تر و با استفاده از topic و پارتیشن ها انجام میشود.

۷. Replication
در Rabbit برای replication می توان از Mirrored Queue استفاده کرد. و کافکا نیز به صورت درونی از partition replication پشتیبانی میکند.

8. Stream Processing
هر دو کافکا و Rabbit از پردازش Stream پشتیبانی می کنند.

9. Latency
طراحی RabbitMQ برای تاخیر کم است و در جایی که نیاز به پردازش نزدیک به realtime است، استفاده میشود.

10. License
لایسنس Rabbit از نوع Mozilla Public License و لایسنس کافکا از نوع 2.0 Apache است.

‏RabbitMQ یک message broker اما کافکا یک distributed streaming platform است. 
یک فرق اساسی این است که کافکا pull-based اما RabbitMQ داری پروتکل push-based است.
یک سیستم pull-based صبر می کند تا مصرف کننده ها داده را درخواست کنند.
یک سیستم push-based به صورت اتوماتیک پیام ها را به مصرف کنندهای که subscribe کردهاند میفرستد.
یک سیستم pull-based برای کافکا معنی میدهد. چون در کافکا پیام های هر پارتیشن ترتیب دارد و کاربران می توانند با throughput بیشتری داده ها را دریافت کنند.

‏RabbitMQ یک push model با محدودیت prefetch دارد. برای پیام هایی با low-latency مناسب است. هدف اصلی مدل push این است که پیام ها هر چه سریعتر توزیع شوند اما یکی یکی.

‏RabbitMQ می تواند هر ثانیه 4k تا 10k پیام هر ثانیه بفرستد اما کافکا می تواند ۱ میلیون پیام هر ثانیه بفرستد.
در Rabbit مدل smart broker و dumb consumer استفاده میشود اما در کافکا مدل dumb broker و smart consumer استفاده میشود.
نگه داری پیام در RabbitMQ به صورت acknownledge-based اما در کافکا به صورت policy-based است.
در RabbitMQ هیچ محدودیتی برای سایز payload نیست اما در کافکا به صورت پیش فرض یک مگابایت است.

تمرین عملی: یک اپلیکیشن چت بنویسید که چند نمونه از بک اند بالا باشد و هر کلاینت به یک بک اند وصل شود و از طریق کافکا یا RabbitMQ بک اند ها رو با هم sync کنید.

#DevTwitter | <Pouria Jahandideh/>

🕊 @gopher_academy | @GolangEngineers
👍1311
اگر برای محیط توسعه localhost نیاز به HTTPS داشتیدو برای  TLS certificateو امضای آن استفاده از mkcert یا local-ssl-proxy یا ... حتی خود openssl براتون سخته
استفاده از anchor lcl   یک راه کار ساده است
https://github.com/anchordotdev/cli

#DevTwitter

🕊 @gopher_academy | @GolangEngineers
101
حجم در ایمیج داکر اهمیت زیادی داره،
با analyze بسته های داخلی یک ایمیج به وسیله docker-phobia و Visualize کردن آنها میتونیم راحتر بفهمیم هر بسته چقدر از حجم ایمیج را به خودش اختصاص داده
https://github.com/remorses/docker-phobia

You can install docker-phobia with:
go install github.com/remorses/docker-phobia@latest


Usage
docker-phobia
# Use the arrow keys to navigate: ↓ ↑ → ←
# ? Select a Docker image:
# ▸ node:18-slim
# postgres:latest

# or pass the image tag as an argument
docker-phobia node:18-slim


#DevTwitter | <MehrdadLinux/>

💚 Donate
🤍 @gopher_academy
❤️ @GolangEngineers
7👍1
یکی از مهم ترین قابلیت های گولنگ concurrency هست که قدرتش رو از go scheduler داره

این ویدیو سعی کرده بصورت مصور و عمیق scheduler رو بررسی کنه که کلی نکته داره و میتونه دید خوبی به شما بده در مورد نحوه کارش

Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency

https://youtu.be/-K11rY57K7k?si=1Qdlhna11caQIXFK

#DevTwitter | <Hossein Nazari/>


👑 @gopher_academy
🔥82👍1🕊1
‏اگر دوست دارید بدونید که در لایه های مختلف برنامه ای که توسعه دادید چه ابزار هایی هست که بتونید ازشون استفاده کنید (از دیتابیس گرفته تا CI/CD) این سایت احتمالا کمکتون کنه.

به اضافه اطلاعات خیلی خوبی راجع به هر ابزار داده:

landscape.cncf.io

#DevTwitter | <Reza/>

👑 @gopher_academy
👍8🔥2
یک نقشه تعاملی عااالی از کرنل لینوکس Linux kernel
خدایش زحمت کشیده
یک مرجع عالی ،
makelinux.github.io/kernel/map/

#DevTwitter | <MehrdadLinux/>

👑 @gopher_academy
7