This media is not supported in your browser
VIEW IN TELEGRAM
#میم
توضیحعلی برای کودک سال ها:
بهش میگن RCA connector
تو تلویزیونای قدیمی و اینا بود
زرد واسه تصویره
سفید واسه صدای مونو/چپ
قرمز واسه صدای راست [برای استریو]
ادیت: ونگوگ باید بجای قرمز، سفید میداشت.
🚁 Hicte Blog
توضیحعلی برای کودک سال ها:
تو تلویزیونای قدیمی و اینا بود
زرد واسه تصویره
سفید واسه صدای مونو/چپ
قرمز واسه صدای راست [برای استریو]
🚁 Hicte Blog
👍7🤣4🔥2😢2❤1😁1
#کتاب
Understanding the Linux Kernel: From I/O Ports to Process Management
Author: Daniel P. Bovet and Marco Cesati
Edition: 3rd
Date: December 2005
Publisher: O'Reilly Media
Length: 942 pages
Amazon 👀
Download 😉
🚁 Hicte Blog
Understanding the Linux Kernel: From I/O Ports to Process Management
Author: Daniel P. Bovet and Marco Cesati
Edition: 3rd
Date: December 2005
Publisher: O'Reilly Media
Length: 942 pages
Amazon 👀
Download 😉
🚁 Hicte Blog
👍3
HICTE Blog
#کتاب Understanding the Linux Kernel: From I/O Ports to Process Management Author: Daniel P. Bovet and Marco Cesati Edition: 3rd Date: December 2005 Publisher: O'Reilly Media Length: 942 pages Amazon 👀 Download 😉 🚁 Hicte Blog
توضیحات:
In order to thoroughly understand what makes Linux tick and why it works so well on a wide variety of systems, you need to delve deep into the heart of the kernel. The kernel handles all interactions between the CPU and the external world, and determines which programs will share processor time, in what order. It manages limited memory so well that hundreds of processes can share the system efficiently, and expertly organizes data transfers so that the CPU isn't kept waiting any longer than necessary for the relatively slow disks.
The third edition of Understanding the Linux Kernel takes you on a guided tour of the most significant data structures, algorithms, and programming tricks used in the kernel. Probing beyond superficial features, the authors offer valuable insights to people who want to know how things really work inside their machine. Important Intel-specific features are discussed. Relevant segments of code are dissected line by line. But the book covers more than just the functioning of the code; it explains the theoretical underpinnings of why Linux does things the way it does.
This edition of the book covers Version 2.6, which has seen significant changes to nearly every kernel subsystem, particularly in the areas of memory management and block devices. The book focuses on the following topics:
Memory management, including file buffering, process swapping, and Direct memory Access (DMA)
The Virtual Filesystem layer and the Second and Third Extended Filesystems
Process creation and scheduling
Signals, interrupts, and the essential interfaces to device drivers
Timing
Synchronization within the kernel
Interprocess Communication (IPC)
Program execution
Understanding the Linux Kernel will acquaint you with all the inner workings of Linux, but it's more than just an academic exercise. You'll learn what conditions bring out Linux's best performance, and you'll see how it meets the challenge of providing good system response during process scheduling, file access, and memory management in a wide variety of environments. This book will help you make the most of your Linux system.
HICTE Blog
#کوئیز 🚁 Hicte Blog
توی تکه کد بالا booo چی هست؟
Anonymous Quiz
19%
یه alias برای تایپ پوینتر به یه تابع که آرگومانی نمیگیره و signed char بر میگردونه.
17%
یه alias برای تایپ یه تابع که آرگومانی نمیگیره و پوینتر به signed char بر میگردونه.
12%
اسم یه تابع که آرگومانی نمیگیره و پوینتر به signed char بر میگردونه.
12%
syntax error.
40%
اطلاعی ندارم ✋.
👍3🔥1
#کتاب
Software Architecture: The Hard Parts
Author: Neal Ford and Mark Richards and Pramod Sadalage and Zhamak Dehghani
Edition: 1st
Date: November 2021
Publisher: O'Reilly Media
Length: 459 pages
Amazon 👀
Download 😉
🚁 Hicte Blog
Software Architecture: The Hard Parts
Author: Neal Ford and Mark Richards and Pramod Sadalage and Zhamak Dehghani
Edition: 1st
Date: November 2021
Publisher: O'Reilly Media
Length: 459 pages
Amazon 👀
Download 😉
🚁 Hicte Blog
👍4🔥1
HICTE Blog
#کتاب Software Architecture: The Hard Parts Author: Neal Ford and Mark Richards and Pramod Sadalage and Zhamak Dehghani Edition: 1st Date: November 2021 Publisher: O'Reilly Media Length: 459 pages Amazon 👀 Download 😉 🚁 Hicte Blog
توضیحات:
There are no easy decisions in software architecture. Instead, there are many hard parts--difficult problems or issues with no best practices--that force you to choose among various compromises. With this book, you'll learn how to think critically about the trade-offs involved with distributed architectures.
Architecture veterans and practicing consultants Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani discuss strategies for choosing an appropriate architecture. By interweaving a story about a fictional group of technology professionals--the Sysops Squad--they examine everything from how to determine service granularity, manage workflows and orchestration, manage and decouple contracts, and manage distributed transactions to how to optimize operational characteristics, such as scalability, elasticity, and performance.
By focusing on commonly asked questions, this book provides techniques to help you discover and weigh the trade-offs as you confront the issues you face as an architect.
Analyze trade-offs and effectively document your decisions
Make better decisions regarding service granularity
Understand the complexities of breaking apart monolithic applications
Manage and decouple contracts between services
Handle data in a highly distributed architecture
Learn patterns to manage workflow and transactions when breaking apart applications
#دواپس
توابع در ترافرم
توابع در ترافرم ابزاری هستن که بهت اجازه میدن مقادیر رو ترکیب کنی یا عملیات مختلف روش انجام بدی.
توابع رو توی ترافرم میشه توی فایلهای
اولین نکتهای که باید در نظر بگیریم اینه که هر تابع روی نوع خاصی از دادهها توی ترافرم اجراپذیر هست. یعنی مثلاً نمیتونی تابع عددی رو روی رشته اعمال کنی.
در کل توابع توی ترافرم به چند دسته تقسیم میشن:
۱. توابع رشتهای (String Functions)
۲. توابع لیست و مپ (Collection functions)
۳. توابع عددی (Numeric functions)
مثال کامل استفاده از توابع در
اینجوری میشه که فرض کنید ما یک ARN داریم به صورت
واسه یک ماشینی توی AWS و میخوایم که با استفاده از توابع براش ریسورس تعریف کنیم اینجوری میشه:
الان تابع Split که از توابع لیست هست اومده تو خط اول اون رشته ARN رو به لیست تعریف کرده و region و اکانت آیدی و اینستنس آیدی رو هم که الان دیگه تبدیل به لیست شده رو به راحتی از آرایه هاش استفاده کرده.
🚁 Hicte Blog | (Nariman Tj)
توابع در ترافرم
توابع در ترافرم ابزاری هستن که بهت اجازه میدن مقادیر رو ترکیب کنی یا عملیات مختلف روش انجام بدی.
توابع رو توی ترافرم میشه توی فایلهای
main.tf یا variables.tf یا در بلاکهای resource و variable و کلاً توی همه بلوکها استفاده کرد.اولین نکتهای که باید در نظر بگیریم اینه که هر تابع روی نوع خاصی از دادهها توی ترافرم اجراپذیر هست. یعنی مثلاً نمیتونی تابع عددی رو روی رشته اعمال کنی.
در کل توابع توی ترافرم به چند دسته تقسیم میشن:
۱. توابع رشتهای (String Functions)
upper("abc") → "ABC"
lower("ABC") → "abc"
replace("hello world", "world", "terraform") → "hello terraform"۲. توابع لیست و مپ (Collection functions)
length(["a", "b", "c"]) → 3
join(",", ["a", "b", "c"]) → "a,b,c"
split(",", "a,b,c") → ["a", "b", "c"]
lookup(map("key1", "val1"), "key1", "default") → "val1"
۳. توابع عددی (Numeric functions)
max(1, 5, 3) → 5
min(1, 5, 3) → 1
abs(-7) → 7
مثال کامل استفاده از توابع در
main.tfاینجوری میشه که فرض کنید ما یک ARN داریم به صورت
ARN of AWS EC2 = arn:aws:ec2:eu-west-1:123456789012:instance/i-0fb379ac92f436969
واسه یک ماشینی توی AWS و میخوایم که با استفاده از توابع براش ریسورس تعریف کنیم اینجوری میشه:
resource "aws_instance" "web" {
# arguments omitted for brevity
}
locals {
arn = split(":", aws_instance.web.arn)
region = local.arn[3] # eu-west-1
account_id = local.arn[4] # 123456789012
instance_id = local.arn[5] # instance/i-0fb379ac92f436969
}الان تابع Split که از توابع لیست هست اومده تو خط اول اون رشته ARN رو به لیست تعریف کرده و region و اکانت آیدی و اینستنس آیدی رو هم که الان دیگه تبدیل به لیست شده رو به راحتی از آرایه هاش استفاده کرده.
🚁 Hicte Blog | (Nariman Tj)
👍4❤1🔥1
[ Source >> @sudoshz ]
#متفرقه_لینوکس
📢 معرفی دوره کاربری آرچ لینوکس
🎯 همواره رسالت رسانه محتوای باز بر آن بوده که اولویت را بر آن نهد که آموزشهایی که در وب فارسی از جنس نرمافزارهای آزاد/متنباز، کمتر بدان پرداخته شده را مد نظر قرار دهد.
🐧 میتوان مدعا شد که توزیع گنو/لینوکسی آرچ لینوکس یکی از مواردی است که آموزش فارسی اندکی را در دهکده جهانی به خود اختصاص داده است.
🚀 لذا بر آن شدیم تا آموزش ویدئویی کاربری سیستمعامل آرچ لینوکس را تهیه و تدوین و به رایگان منتشر کنیم.
🛠️ دوره آموزش کاربری آرچ لینوکس (Arch Linux) که توسط علیرضا فیضآبادی و رسانه محتوای باز در اختیار شما قرار گرفته، کلیه مطالب اصولی و پایهای را دربردارد و میتوانید از این دوره آموزشی بهره لازم را ببرید.
💻 در این دوره با مقدمهای بر دنیای آرچ لینوکس و نحوه نصب آن بر روی کامپیوترهای خانگی به همراه توضیحاتی در مورد نحوه کارکرد برخی از اجزای آن، تست بر روی ویرچوال باکس و مشکلاتی که ممکن است در دنیای آرچ با آن مواجه شویم؛ آشنا میگردید.
🔗 لینک دوره: [ https://opencontent.ir/product/arch-linux-course ]
🚁 Hicte Blog | (smm)
#متفرقه_لینوکس
📢 معرفی دوره کاربری آرچ لینوکس
🎯 همواره رسالت رسانه محتوای باز بر آن بوده که اولویت را بر آن نهد که آموزشهایی که در وب فارسی از جنس نرمافزارهای آزاد/متنباز، کمتر بدان پرداخته شده را مد نظر قرار دهد.
🐧 میتوان مدعا شد که توزیع گنو/لینوکسی آرچ لینوکس یکی از مواردی است که آموزش فارسی اندکی را در دهکده جهانی به خود اختصاص داده است.
🚀 لذا بر آن شدیم تا آموزش ویدئویی کاربری سیستمعامل آرچ لینوکس را تهیه و تدوین و به رایگان منتشر کنیم.
🛠️ دوره آموزش کاربری آرچ لینوکس (Arch Linux) که توسط علیرضا فیضآبادی و رسانه محتوای باز در اختیار شما قرار گرفته، کلیه مطالب اصولی و پایهای را دربردارد و میتوانید از این دوره آموزشی بهره لازم را ببرید.
💻 در این دوره با مقدمهای بر دنیای آرچ لینوکس و نحوه نصب آن بر روی کامپیوترهای خانگی به همراه توضیحاتی در مورد نحوه کارکرد برخی از اجزای آن، تست بر روی ویرچوال باکس و مشکلاتی که ممکن است در دنیای آرچ با آن مواجه شویم؛ آشنا میگردید.
🔗 لینک دوره: [ https://opencontent.ir/product/arch-linux-course ]
🚁 Hicte Blog | (smm)
👍5
HICTE Blog
#کوئیز 🚁 Hicte Blog | (smm)
اعلانی از تابع foo که توی خط 5 نوشته شده معادل کدوم گزینه هست؟
Anonymous Quiz
11%
fv *foo(int, fv *);
11%
pfv foo(int, pfv);
5%
fv foo(int, fv *);
10%
fv foo(int, pfv);
13%
گزینههای 1 و 2
0%
گزینههای 3 و 4
7%
هیچکدام
43%
اطلاعی ندارم
👍1
#دواپس
بخش اول
لیبل(label) چیه؟
لیبل ها توی کوبرنیتز برای تگ زدن آبجکت ها(مثل دیپلویمنت و پاد و رپلیکا ست و ...) استفاده میشن و تا بشه اونها رو دسته بندی و شناسایی کرد٬ لیبل ها کارشون توصیف ریسورس هست بدون هیچ عاملیتی.
سلکتور(selector) یعنی چی؟
یه جور شرط هست که میگه آبجکت هایی که اون لیبل رو دارن انتخاب بشن.
سلکتور برای سرویس—> سرویس با این سلکتورش داره میگه من دنبال پادی هستم با این لیبل
app: myapp
پادی که اون لیبل رو داره:
خب حالا طبق فرمت بالا سرویس به راحتی میتونه با پاد مچ بشه چون سلکتورش همون چیزی هست که رو لیبل پاد وجود داره!
🚁 Hicte Blog | (Nariman Tj)
بخش اول
لیبل(label) چیه؟
لیبل ها توی کوبرنیتز برای تگ زدن آبجکت ها(مثل دیپلویمنت و پاد و رپلیکا ست و ...) استفاده میشن و تا بشه اونها رو دسته بندی و شناسایی کرد٬ لیبل ها کارشون توصیف ریسورس هست بدون هیچ عاملیتی.
سلکتور(selector) یعنی چی؟
یه جور شرط هست که میگه آبجکت هایی که اون لیبل رو دارن انتخاب بشن.
سلکتور برای سرویس—> سرویس با این سلکتورش داره میگه من دنبال پادی هستم با این لیبل
app: myapp
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: myapp
ports:
- port: 80
پادی که اون لیبل رو داره:
apiVersion: v1
kind: Pod
metadata:
name: mypod
labels:
app: myapp
خب حالا طبق فرمت بالا سرویس به راحتی میتونه با پاد مچ بشه چون سلکتورش همون چیزی هست که رو لیبل پاد وجود داره!
🚁 Hicte Blog | (Nariman Tj)
👍4
HICTE Blog
#دواپس بخش اول لیبل(label) چیه؟ لیبل ها توی کوبرنیتز برای تگ زدن آبجکت ها(مثل دیپلویمنت و پاد و رپلیکا ست و ...) استفاده میشن و تا بشه اونها رو دسته بندی و شناسایی کرد٬ لیبل ها کارشون توصیف ریسورس هست بدون هیچ عاملیتی. سلکتور(selector) یعنی چی؟ یه جور…
#دواپس
بخش دوم
اما نکته ای که باید در نظر بگیریم بحث به همینجا ختم نمیشه و ما توی دیپلویمنت وقتی میخوایم یه سرویسی رو باهاش مچ کنیم حتما باید لیبل بخش پادهاش یکسان باشه با سلکتور سرویسمون وگرنه اون دیپلویمنت نمیتونه از اون سرویس استفاده کنه اینجوری:
--------------------------------------------------------
اون قسمتی که نوشته matchLabels پادهایی هست که دیپلویمنت میخواد باهاشون مچ داشته باشه و اون قسمت template لیبلش برای پادهایی که در آینده قراره ساخته بشن و اگر این دو با هم یکسان نباشن دیپلویمنت ما هیچوقت به وضعیت readiness نمیرسه چون پاد میسازه بعد میبینه لیبلش با لیبلی که دنبالش میگرده(matchLabels) یکی نیست و این روال هی ادامه پیدا میکنه پس باید این دو قسمت لیبل هاشون یکسان باشه منطقا.
🚁 Hicte Blog | (Nariman Tj)
بخش دوم
اما نکته ای که باید در نظر بگیریم بحث به همینجا ختم نمیشه و ما توی دیپلویمنت وقتی میخوایم یه سرویسی رو باهاش مچ کنیم حتما باید لیبل بخش پادهاش یکسان باشه با سلکتور سرویسمون وگرنه اون دیپلویمنت نمیتونه از اون سرویس استفاده کنه اینجوری:
apiVersion: v1
kind: Deployment
metadata:
name: vote-webapp
labels: ###اینا لیبل های خود دیپلویمنتن و برای کوئری زدن تو مانیتورینگ و پایپلاین ها و اینجور کاربردها هستن###
app: app1
function: front-end
annotations:
buildversion: 1.4
spec:
replicas: 3
selector:
matchLabels:
app: App1 ####مچ میشه با لیبل پادها###
template:
metadata:
labels: ###لیبل های این بخش لیبل پادهایی هستند که دیپلویمنت در آینده میسازه ###
app: app1
function: front-end
spec:
containers:
- name: vote-app
image: vote-app
--------------------------------------------------------
apiVersion: v1
kind: Service
metadata:
name: frontendservice
spec:
selector:
app: app1 ###باید مچ بشه با لیبل پادها که بالاتر هم توی بخش مچ لیبل اومده
ports:
- protocol: TCP
port: 80
targetport: 9376
اون قسمتی که نوشته matchLabels پادهایی هست که دیپلویمنت میخواد باهاشون مچ داشته باشه و اون قسمت template لیبلش برای پادهایی که در آینده قراره ساخته بشن و اگر این دو با هم یکسان نباشن دیپلویمنت ما هیچوقت به وضعیت readiness نمیرسه چون پاد میسازه بعد میبینه لیبلش با لیبلی که دنبالش میگرده(matchLabels) یکی نیست و این روال هی ادامه پیدا میکنه پس باید این دو قسمت لیبل هاشون یکسان باشه منطقا.
🚁 Hicte Blog | (Nariman Tj)
👍4🔥1
[ Source >> @openpcb ]
#شبکه
دیروز، ۵ می ۲۰۲۵، سالگرد پنجاه و یکمین تولد پروتکل TCP بود؛ پایهایترین جزء اینترنت مدرن که ارتباطات دیجیتال ما رو ممکن کرده.
تولد TCP از یک مقاله شروع شد. ماه مه ۱۹۷۴، وینت سرف و باب کان مقالهای با عنوان «A Protocol for Packet Network Intercommunication» تو مجله IEEE منتشر کردن. این مقاله اولین توصیف عمومی از پروتکل TCP بود؛ هدفش هم برقراری ارتباط بین شبکههای مختلف با استفاده از بستههای داده بود. این نوآوری، پایهگذار اینترنتی شد که امروز میشناسیم.
بیایید ببینیم TCP چیه و چرا اهمیت داره!
پروتکل کنترل انتقال یا همون TCP، مسئول اطمینان از تحویل صحیح، کامل و مرتب دادهها بین دو نقطه در شبکهست. قبل از انتقال داده، یه ارتباط بین دو طرف برقرار میکنه و با حفظ ترتیب بستهها و تنظیم سرعت انتقال بر اساس شرایط شبکه، مطمئن میشه که همه بستهها به مقصد برسن. این ویژگیها باعث شده که TCP برای برنامههایی مثل وبگردی، ایمیل و انتقال فایلها ایدهآل باشه.
اگه بخوایم time-line پیدایش این پروتکل رو مرور کنیم:
نوامبر ۱۹۷۳: مقاله TCP برای بررسی به IEEE ارسال شد.
دسامبر ۱۹۷۴: RFC 675 با عنوان «Specification of Internet Transmission Control Program» منتشر شد.
ژانویه ۱۹۸۳: شبکه ARPANET بهطور رسمی از NCP به TCP/IP مهاجرت کرد؛ اتفاقی که به عنوان تولد رسمی اینترنت مدرن شناخته میشه.
یه نکتهی جالب درباره TCP اینه که از پروژه فرانسوی CYCLADES، به رهبری لوئیس پوزن، که مفهوم دیتاگرامها رو معرفی کرده بود، تأثیر زیادی گرفته.
قابل ذکره که وینت سرف و باب کان در سال ۲۰۰۴ بهخاطر کارهای بنیادینشون در توسعه TCP/IP، جایزه معتبر تورینگ رو دریافت کردن.
و حالا، بعد از گذشت بیش از پنج دهه، TCP همچنان ستون فقرات قابل اعتماد اینترنت باقی مونده؛ پروتکلی که با مکانیزمهای کنترلی دقیق مثل three-way handshake، windowing و congestion control، تضمین میکنه دادهها بهدرستی، بدون تکرار و بهترتیب به مقصد برسن.
در جهانی که سرعت، امنیت و مقیاسپذیری از اهمیت بالایی برخوردارن، TCP با وجود تمام رقبای جدید مثل QUIC، هنوز هم انتخاب اول برای بسیاری از سرویسهای حیاتی باقی مونده.
پنجاه و یک سال از تولدش میگذره، اما نقش TCP تو زیرساخت ارتباطی اینترنت، همچنان حیاتی، زنده و در حال تکامله.
جالبه بدونید وینت در زمان انتشار مقاله ۳۱ سالش بود و دکتری علوم کامپیوتر داشت و باب ۳۵ ساله دکتری برق.
مقالهی مذکور هم توی گروه ارسال شده و میتونید اگه دوست داشتید یه نگاهی بهش بندازید.
🚁 Hicte Blog | (smm)
#شبکه
دیروز، ۵ می ۲۰۲۵، سالگرد پنجاه و یکمین تولد پروتکل TCP بود؛ پایهایترین جزء اینترنت مدرن که ارتباطات دیجیتال ما رو ممکن کرده.
تولد TCP از یک مقاله شروع شد. ماه مه ۱۹۷۴، وینت سرف و باب کان مقالهای با عنوان «A Protocol for Packet Network Intercommunication» تو مجله IEEE منتشر کردن. این مقاله اولین توصیف عمومی از پروتکل TCP بود؛ هدفش هم برقراری ارتباط بین شبکههای مختلف با استفاده از بستههای داده بود. این نوآوری، پایهگذار اینترنتی شد که امروز میشناسیم.
بیایید ببینیم TCP چیه و چرا اهمیت داره!
پروتکل کنترل انتقال یا همون TCP، مسئول اطمینان از تحویل صحیح، کامل و مرتب دادهها بین دو نقطه در شبکهست. قبل از انتقال داده، یه ارتباط بین دو طرف برقرار میکنه و با حفظ ترتیب بستهها و تنظیم سرعت انتقال بر اساس شرایط شبکه، مطمئن میشه که همه بستهها به مقصد برسن. این ویژگیها باعث شده که TCP برای برنامههایی مثل وبگردی، ایمیل و انتقال فایلها ایدهآل باشه.
اگه بخوایم time-line پیدایش این پروتکل رو مرور کنیم:
نوامبر ۱۹۷۳: مقاله TCP برای بررسی به IEEE ارسال شد.
دسامبر ۱۹۷۴: RFC 675 با عنوان «Specification of Internet Transmission Control Program» منتشر شد.
ژانویه ۱۹۸۳: شبکه ARPANET بهطور رسمی از NCP به TCP/IP مهاجرت کرد؛ اتفاقی که به عنوان تولد رسمی اینترنت مدرن شناخته میشه.
یه نکتهی جالب درباره TCP اینه که از پروژه فرانسوی CYCLADES، به رهبری لوئیس پوزن، که مفهوم دیتاگرامها رو معرفی کرده بود، تأثیر زیادی گرفته.
قابل ذکره که وینت سرف و باب کان در سال ۲۰۰۴ بهخاطر کارهای بنیادینشون در توسعه TCP/IP، جایزه معتبر تورینگ رو دریافت کردن.
و حالا، بعد از گذشت بیش از پنج دهه، TCP همچنان ستون فقرات قابل اعتماد اینترنت باقی مونده؛ پروتکلی که با مکانیزمهای کنترلی دقیق مثل three-way handshake، windowing و congestion control، تضمین میکنه دادهها بهدرستی، بدون تکرار و بهترتیب به مقصد برسن.
در جهانی که سرعت، امنیت و مقیاسپذیری از اهمیت بالایی برخوردارن، TCP با وجود تمام رقبای جدید مثل QUIC، هنوز هم انتخاب اول برای بسیاری از سرویسهای حیاتی باقی مونده.
پنجاه و یک سال از تولدش میگذره، اما نقش TCP تو زیرساخت ارتباطی اینترنت، همچنان حیاتی، زنده و در حال تکامله.
جالبه بدونید وینت در زمان انتشار مقاله ۳۱ سالش بود و دکتری علوم کامپیوتر داشت و باب ۳۵ ساله دکتری برق.
مقالهی مذکور هم توی گروه ارسال شده و میتونید اگه دوست داشتید یه نگاهی بهش بندازید.
🚁 Hicte Blog | (smm)
👍6🔥3