#دواپس
توابع در ترافرم
توابع در ترافرم ابزاری هستن که بهت اجازه میدن مقادیر رو ترکیب کنی یا عملیات مختلف روش انجام بدی.
توابع رو توی ترافرم میشه توی فایلهای
اولین نکتهای که باید در نظر بگیریم اینه که هر تابع روی نوع خاصی از دادهها توی ترافرم اجراپذیر هست. یعنی مثلاً نمیتونی تابع عددی رو روی رشته اعمال کنی.
در کل توابع توی ترافرم به چند دسته تقسیم میشن:
۱. توابع رشتهای (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
#دواپس
مفهوم دکلرتیو در Devops چی هست؟
در مدل دکلرتیو، شما فقط نتیجه نهایی مورد نظر را تعریف میکنید. ابزار مسئول است که نحوه رسیدن به آن وضعیت را مدیریت کند.
مثالها:
Terraform
Kubernetes manifests
CloudFormation
در Terraform:
شما فقط میگویید: «من یک EC2 با این ویژگیها میخواهم» و Terraform خودش میفهمد که باید آن را بسازد، تغییر دهد یا حذف کند.
مزایا:
سادهتر برای مدیریت منابع پیچیده
idempotent (اجرای چندباره بدون اثر جانبی)
حالت نهایی مهم است، نه مراحل
این Imperative (ایمپرتیو - دستوری)
چی هست؟
در مدل ایمپرتیو، شما مرحلهبهمرحله میگویید چه کاری انجام بده تا به نتیجه دلخواه برسیم.
مثالها:
Ansible (نیمهایمپرتیو)
Bash Scripts
Pulumi (در برخی زبانها)
در Ansible:
شما میگویید: «برو این پکیج رو نصب کن». باید صریحاً بگویید چه کاری و در چه ترتیبی انجام شود.
مزایا:
کنترل دقیقتر روی مراحل
مناسب برای اعمال پیکربندی جزئی
سادهتر برای اسکریپتهای سفارشی
🚁 Hicte Blog | (Nariman Tj)
مفهوم دکلرتیو در Devops چی هست؟
در مدل دکلرتیو، شما فقط نتیجه نهایی مورد نظر را تعریف میکنید. ابزار مسئول است که نحوه رسیدن به آن وضعیت را مدیریت کند.
مثالها:
Terraform
Kubernetes manifests
CloudFormation
در Terraform:
resource "aws_instance" "web" {
ami = "ami-12345678"
instance_type = "t2.micro"
}شما فقط میگویید: «من یک EC2 با این ویژگیها میخواهم» و Terraform خودش میفهمد که باید آن را بسازد، تغییر دهد یا حذف کند.
مزایا:
سادهتر برای مدیریت منابع پیچیده
idempotent (اجرای چندباره بدون اثر جانبی)
حالت نهایی مهم است، نه مراحل
این Imperative (ایمپرتیو - دستوری)
چی هست؟
در مدل ایمپرتیو، شما مرحلهبهمرحله میگویید چه کاری انجام بده تا به نتیجه دلخواه برسیم.
مثالها:
Ansible (نیمهایمپرتیو)
Bash Scripts
Pulumi (در برخی زبانها)
در Ansible:
- name: Install nginx
apt:
name: nginx
state: present
شما میگویید: «برو این پکیج رو نصب کن». باید صریحاً بگویید چه کاری و در چه ترتیبی انجام شود.
مزایا:
کنترل دقیقتر روی مراحل
مناسب برای اعمال پیکربندی جزئی
سادهتر برای اسکریپتهای سفارشی
🚁 Hicte Blog | (Nariman Tj)
👍6❤1
#کتاب
[ Source >> @srfirouzi_channel ]
سادگی زیباتر از پیچیدگی
چند روز پیش با یکی از دوستان صحبت می کردم، متوجه شدم تیم توسعه برای ارتباطاتشون از فایل های ms office استفاده می کنند.(فاجعه مستندسازی)
بهشون Markdown رو پیشنهاد دادم، اما منبع خوبی نداشتم که بهشون معرفی کنم.
تصمیم گرفتم یک کتابچه تهیه کنم.
جالب اینکه با ابزار موجود فقط دو روز طول کشید این کتابچه آماده استفاده شد.
سادهگی زبان markdown موجب شده تهیه فهرست مطالب ، تهیه متن اصلی و ... وقتی کمی به خود اختصاص دهد و کمک از هوش مصنوعی در ویراستاری متن و استفاده از libre office writer این زمان رو به حداقل برساند.
متاسفانه به خاطر مسایلی هنوز امکان ارایه کتابچه به فرمت markdown نبود.
اگر جزیی از تیم توسعه هستید چه برنامه نویس،چه دیزاینر UI/UX و چه مدیر، پیشنهاد می کنم این کتابچه را بخوانید.
لینک به کتابچه
🚁 Hicte Blog | (smm)
[ Source >> @srfirouzi_channel ]
سادگی زیباتر از پیچیدگی
چند روز پیش با یکی از دوستان صحبت می کردم، متوجه شدم تیم توسعه برای ارتباطاتشون از فایل های ms office استفاده می کنند.(فاجعه مستندسازی)
بهشون Markdown رو پیشنهاد دادم، اما منبع خوبی نداشتم که بهشون معرفی کنم.
تصمیم گرفتم یک کتابچه تهیه کنم.
جالب اینکه با ابزار موجود فقط دو روز طول کشید این کتابچه آماده استفاده شد.
سادهگی زبان markdown موجب شده تهیه فهرست مطالب ، تهیه متن اصلی و ... وقتی کمی به خود اختصاص دهد و کمک از هوش مصنوعی در ویراستاری متن و استفاده از libre office writer این زمان رو به حداقل برساند.
متاسفانه به خاطر مسایلی هنوز امکان ارایه کتابچه به فرمت markdown نبود.
اگر جزیی از تیم توسعه هستید چه برنامه نویس،چه دیزاینر UI/UX و چه مدیر، پیشنهاد می کنم این کتابچه را بخوانید.
لینک به کتابچه
🚁 Hicte Blog | (smm)
👍4🔥4
👍5👀3😁1
[ Source >> @ircfspace ]
#خبر
پورتال وزارت راه و شهرسازی کل کدها رو پاک کردن و بجاش یه اسکرینشات ساده گذاشتن.
نمیدونم ایده سایت مقوایی از کدوم نخبهای هست، ولی امیدوارم این اقدام هوشمندانه رو واسه بیتالمال فاکتور نزنه!
🚁 Hicte Blog | (smm)
#خبر
پورتال وزارت راه و شهرسازی کل کدها رو پاک کردن و بجاش یه اسکرینشات ساده گذاشتن.
نمیدونم ایده سایت مقوایی از کدوم نخبهای هست، ولی امیدوارم این اقدام هوشمندانه رو واسه بیتالمال فاکتور نزنه!
🚁 Hicte Blog | (smm)
😐8🏆4😁2🆒2👍1🗿1