Forwarded from محتوای آزاد سهراب (Sohrab)
Forwarded from ذهن زیبا - A beautiful Mind
احتمالا با Lorem Ipsum آشنا هستید. یک متن ساختگی به خاطر نسبتا طولانی بودنش و همچنین دربر گرفتن تعداد زیادی از حروف الفبای لاتین (و بعدها ترجمههاش به زبانهای دیگر) خیلی در نمونههای گرافیکی، طراحی وبسایت و ... به کار میره.
حالا این هم یک وبسایت با کارایی مشابه ولی در حوزه تصویره:
https://picsum.photos/
اگر برای پر کردن صفحاتی که به عنوان نمونه طراحی میکنید، نیازمند تصویر هستید از دستش ندید.
@haghiri75_blog
حالا این هم یک وبسایت با کارایی مشابه ولی در حوزه تصویره:
https://picsum.photos/
اگر برای پر کردن صفحاتی که به عنوان نمونه طراحی میکنید، نیازمند تصویر هستید از دستش ندید.
@haghiri75_blog
Lorem Picsum
Lorem Ipsum... but for photos
Forwarded from Python BackendHub (Mani)
یک ترد جالب تو ردیت
از اینجور آدما فراری باشید :)
کامنت خیلی خوب بود.. resume driven development 😂
@PyBackendHub
از اینجور آدما فراری باشید :)
کامنت خیلی خوب بود.. resume driven development 😂
@PyBackendHub
Reddit
From the softwarearchitecture community on Reddit
Explore this post and more from the softwarearchitecture community
Forwarded from Python BackendHub (Mani)
یک ترد جالب تو ردیت
از اینجور آدما فراری باشید :)
کامنت خیلی خوب بود.. resume driven development 😂
@PyBackendHub
از اینجور آدما فراری باشید :)
کامنت خیلی خوب بود.. resume driven development 😂
@PyBackendHub
Forwarded from جادی | Jadi
من مستقیما بچه هاش رو نمی شناسم ولی شاید براتون جالب باشه. کد تخفیف jadi رو هم تست کنید شاید به درد خورد (:
❤1
Forwarded from Emeet 2025
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
Media is too big
VIEW IN TELEGRAM
🔶 ویدئو لحظه شروع آتشسوزی در مرکز داده ملی کره جنوبی (NIRS – دائجون) | فاجعه فناوری ۲۶ سپتامبر ۲۰۲۵
#خبر
@TheRaymondDev
#خبر
@TheRaymondDev
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
Forwarded from DevTwitter | توییت برنامه نویسی
ایجاد dark mode فقط با css بدون یک خط js
codepen:
https://codepen.io/ditheringidiot/pen/JjbzNMz
@DevTwitter | <Hesam Valizadeh/>
codepen:
https://codepen.io/ditheringidiot/pen/JjbzNMz
@DevTwitter | <Hesam Valizadeh/>
Forwarded from Gopher Academy
⚙️ مکانیزم گسترش ظرفیت (
وقتی یه slice در Go پر میشه و شما با
Go متوجه میشه که ظرفیت (capacity) فعلی کافـی نیست و باید حافظهی بیشتری اختصاص بده.
به این فرآیند میگن slice growth یا reallocation.
🧠 مرحلهبهمرحله چه اتفاقی میافته؟
فرض کن داریم:
الان:
*
*
حالا اگر بنویسی:
Go متوجه میشه که ظرفیت فعلی (۳) پر شده.
در نتیجه:
1. یه بافر جدید در حافظه ایجاد میکنه (یه آرایهی جدید با ظرفیت بزرگتر)
2. تمام عناصر قبلی (
3. عنصر جدید رو اضافه میکنه
4. و یه slice جدید که به آرایهی جدید اشاره میکنه، برمیگردونه
📈 حالا ظرفیت چقدر زیاد میشه؟
Go از یه الگوریتم رشد پویا (dynamic growth algorithm) استفاده میکنه.
الگو بهصورت تقریبی اینطوریه:
✅ تا ظرفیتهای کوچک:
وقتی
ظرفیت معمولاً ۲ برابر میشه.
مثلاً:
✅ وقتی ظرفیت بزرگ شد (≥ 1024):
Go رشد رو آهستهتر میکنه تا حافظه هدر نره.
تقریباً ظرفیت جدید ≈ ظرفیت فعلی × 1.25 (یعنی حدود 25٪ افزایش).
مثلاً:
🔬 مکانیزم دقیق در سورسکد Go
در پیادهسازی داخلی زبان Go (در
این تابع دقیقاً تصمیم میگیره:
* ظرفیت جدید چقدر باشه
* حافظه جدید کجا اختصاص پیدا کنه
* چطور دادههای قبلی کپی بشن
📌 بخشی از منطق اون (بهصورت سادهشده) اینطوریه:
---
🧩 نتیجه:
*
*
* حافظهی قبلی ممکنه توسط garbage collector آزاد بشه اگه دیگه بهش اشارهای نباشه.
---
📊 مثال برای درک تغییر ظرفیت:
📤 خروجی معمولی:
میبینی چطوری ظرفیت به شکل ۲ برابر رشد میکنه.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
cap) در Sliceوقتی یه slice در Go پر میشه و شما با
append() عنصر جدیدی بهش اضافه میکنی،Go متوجه میشه که ظرفیت (capacity) فعلی کافـی نیست و باید حافظهی بیشتری اختصاص بده.
به این فرآیند میگن slice growth یا reallocation.
🧠 مرحلهبهمرحله چه اتفاقی میافته؟
فرض کن داریم:
s := make([]int, 3, 3)
الان:
*
len(s) = 3*
cap(s) = 3حالا اگر بنویسی:
s = append(s, 10)
Go متوجه میشه که ظرفیت فعلی (۳) پر شده.
در نتیجه:
1. یه بافر جدید در حافظه ایجاد میکنه (یه آرایهی جدید با ظرفیت بزرگتر)
2. تمام عناصر قبلی (
10, 20, 30) رو به آرایهی جدید کپی میکنه3. عنصر جدید رو اضافه میکنه
4. و یه slice جدید که به آرایهی جدید اشاره میکنه، برمیگردونه
📈 حالا ظرفیت چقدر زیاد میشه؟
Go از یه الگوریتم رشد پویا (dynamic growth algorithm) استفاده میکنه.
الگو بهصورت تقریبی اینطوریه:
✅ تا ظرفیتهای کوچک:
وقتی
cap کوچیکه (مثلاً زیر 1024)،ظرفیت معمولاً ۲ برابر میشه.
مثلاً:
cap: 1 → 2 → 4 → 8 → 16 → 32 → ...
✅ وقتی ظرفیت بزرگ شد (≥ 1024):
Go رشد رو آهستهتر میکنه تا حافظه هدر نره.
تقریباً ظرفیت جدید ≈ ظرفیت فعلی × 1.25 (یعنی حدود 25٪ افزایش).
مثلاً:
cap: 1024 → 1280 → 1600 → 2000 → ...
🔬 مکانیزم دقیق در سورسکد Go
در پیادهسازی داخلی زبان Go (در
runtime/slice.go)، تابعی وجود داره به نام:growslice(et *_type, old slice, cap int) slice
این تابع دقیقاً تصمیم میگیره:
* ظرفیت جدید چقدر باشه
* حافظه جدید کجا اختصاص پیدا کنه
* چطور دادههای قبلی کپی بشن
📌 بخشی از منطق اون (بهصورت سادهشده) اینطوریه:
newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
newcap = cap
} else {
if old.cap < 1024 {
newcap = doublecap
} else {
for newcap < cap {
newcap += newcap / 4 // رشد 25 درصدی
}
}
}
---
🧩 نتیجه:
*
append() در واقع یه slice جدید میسازه با آرایهی بزرگتر.*
cap به شکل نمایی (expontential) رشد میکنه تا کارایی حفظ بشه.* حافظهی قبلی ممکنه توسط garbage collector آزاد بشه اگه دیگه بهش اشارهای نباشه.
---
📊 مثال برای درک تغییر ظرفیت:
s := []int{}
for i := 0; i < 10; i++ {
s = append(s, i)
fmt.Printf("len=%d cap=%d\n", len(s), cap(s))
}📤 خروجی معمولی:
len=1 cap=1
len=2 cap=2
len=3 cap=4
len=4 cap=4
len=5 cap=8
len=6 cap=8
len=7 cap=8
len=8 cap=8
len=9 cap=16
len=10 cap=16
میبینی چطوری ظرفیت به شکل ۲ برابر رشد میکنه.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
بریم دقیقتر سراغ الگوریتم رشد پویا (dynamic growth algorithm) توی Go — چون این یکی از طراحیهای خیلی هوشمندانهٔ Go برای مدیریت حافظه و performance هست.
⚙️ تعریف ساده:
وقتی یه slice داری و با
اگر ظرفیت (`cap`) پر شده باشه**، Go باید تصمیم بگیره **چقدر حافظهی جدید رزرو کنه.
الگوریتم رشد پویا دقیقاً وظیفهاش همینه:
> چطور ظرفیت جدید (
🧩 هدف الگوریتم رشد پویا:
Go میخواد بین دو چیز تعادل ایجاد کنه:
| هدف | توضیح |
| 🏎 سرعت بالا | با رشد نمایی (مثل ×2) تعداد دفعات تخصیص حافظه کم میشه.
| 💾 مصرف بهینه حافظه | با رشد تدریجی (مثل ×1.25) در ظرفیتهای بالا از هدر رفت RAM جلوگیری میشه.
🔍 منطق داخلی (بر اساس
الگوریتم در تابع داخلی Go به نام
خلاصهاش به این صورته:
📈 نتیجهی این منطق
| بازهٔ ظرفیت فعلی | نحوهٔ رشد | مثال
|
|
🧠 چرا این الگوریتم هوشمنده؟
1. در ظرفیتهای کوچک:
رشد دو برابری باعث میشه appendها سریعتر باشن (کمتر نیاز به کپی داده داریم).
یعنی
2. در ظرفیتهای بزرگ:
رشد کمتر باعث صرفهجویی در حافظه میشه چون کپیکردن چند مگابایت داده هزینهبره.
3. در مجموع:
الگوریتم به شکل پویا بسته به اندازهٔ فعلی slice تصمیم میگیره چطور رفتار کنه → بهینه برای performance و memory.
📊 مثال واقعی از رشد پویا:
📤 خروجی تقریبی:
میبینی که تا 1024 ظرفیت دو برابر میشه، بعدش رشدش 25٪ میره بالا. 🔥
📚 جمعبندی ساده
| ویژگی | توضیح
| نام الگوریتم | Dynamic Growth Algorithm
| هدف | افزایش ظرفیت slice بهشکل خودکار و بهینه
| تا 1024 | رشد دو برابری (exponential)
| بیش از 1024 | رشد حدود 25٪ در هر بار (incremental)
| مزیت | سرعت بالا + صرفهجویی در حافظه
| محل پیادهسازی |
➖➖➖➖➖➖➖➖
👑 @gopher_academy
⚙️ تعریف ساده:
وقتی یه slice داری و با
append() دادهی جدید بهش اضافه میکنی،اگر ظرفیت (`cap`) پر شده باشه**، Go باید تصمیم بگیره **چقدر حافظهی جدید رزرو کنه.
الگوریتم رشد پویا دقیقاً وظیفهاش همینه:
> چطور ظرفیت جدید (
newCap) محاسبه بشه، تا نه حافظه زیاد هدر بره، نه appendها کند بشن.🧩 هدف الگوریتم رشد پویا:
Go میخواد بین دو چیز تعادل ایجاد کنه:
| هدف | توضیح |
| 🏎 سرعت بالا | با رشد نمایی (مثل ×2) تعداد دفعات تخصیص حافظه کم میشه.
| 💾 مصرف بهینه حافظه | با رشد تدریجی (مثل ×1.25) در ظرفیتهای بالا از هدر رفت RAM جلوگیری میشه.
🔍 منطق داخلی (بر اساس
runtime/slice.go)الگوریتم در تابع داخلی Go به نام
growslice() پیادهسازی شده.خلاصهاش به این صورته:
func growslice(et *_type, old slice, cap int) slice {
newcap := old.cap
doublecap := newcap + newcap // ظرفیت دو برابر
if cap > doublecap {
newcap = cap
} else {
if old.cap < 1024 {
newcap = doublecap // برای ظرفیتهای کوچک: رشد ۲ برابری
} else {
// برای ظرفیتهای بزرگتر: رشد تدریجی (حدود 25٪)
for newcap < cap {
newcap += newcap / 4 // افزایش 25%
}
}
}
// در ادامه حافظه جدید اختصاص داده میشه و دادههای قبلی کپی میشن
}📈 نتیجهی این منطق
| بازهٔ ظرفیت فعلی | نحوهٔ رشد | مثال
|
< 1024 | رشد نمایی (۲ برابر) | 64 → 128 → 256 → 512 → 1024 |
≥ 1024 | رشد خطی-تدریجی (۱.۲۵ برابر) | 1024 → 1280 → 1600 → 2000 → 2500 🧠 چرا این الگوریتم هوشمنده؟
1. در ظرفیتهای کوچک:
رشد دو برابری باعث میشه appendها سریعتر باشن (کمتر نیاز به کپی داده داریم).
یعنی
append تقریباً در زمان amortized O(1) انجام میشه.2. در ظرفیتهای بزرگ:
رشد کمتر باعث صرفهجویی در حافظه میشه چون کپیکردن چند مگابایت داده هزینهبره.
3. در مجموع:
الگوریتم به شکل پویا بسته به اندازهٔ فعلی slice تصمیم میگیره چطور رفتار کنه → بهینه برای performance و memory.
📊 مثال واقعی از رشد پویا:
s := make([]int, 0)
for i := 0; i < 2000; i++ {
s = append(s, i)
if i%200 == 0 {
fmt.Printf("len=%d, cap=%d\n", len(s), cap(s))
}
}
📤 خروجی تقریبی:
len=0, cap=0
len=200, cap=256
len=400, cap=512
len=600, cap=1024
len=800, cap=1024
len=1000, cap=1280
len=1200, cap=1600
len=1400, cap=2000
len=1600, cap=2000
len=1800, cap=2500
len=2000, cap=2500
میبینی که تا 1024 ظرفیت دو برابر میشه، بعدش رشدش 25٪ میره بالا. 🔥
📚 جمعبندی ساده
| ویژگی | توضیح
| نام الگوریتم | Dynamic Growth Algorithm
| هدف | افزایش ظرفیت slice بهشکل خودکار و بهینه
| تا 1024 | رشد دو برابری (exponential)
| بیش از 1024 | رشد حدود 25٪ در هر بار (incremental)
| مزیت | سرعت بالا + صرفهجویی در حافظه
| محل پیادهسازی |
runtime/slice.go → growslice()➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from IRCF | اینترنت آزاد برای همه
به کمک اسکریپت ورکر FoxCloud و اکانت کلودفلر، میتونین یک کانفیگ شخصی Vless درست کرده و #فیلترینگ رو دور بزنین.
🎥 youtube.com/watch?v=5awqhmbEdcs
👉 github.com/code3-dev/foxcloud/releases/latest
🔍 ircf.space
@ircfspace
🎥 youtube.com/watch?v=5awqhmbEdcs
👉 github.com/code3-dev/foxcloud/releases/latest
🔍 ircf.space
@ircfspace
YouTube
آموزش نصب پنل FoxCloud روی Cloudflare Workers
آموزش نصب پنل FoxCloud روی Cloudflare Workers
- ساخت کانفیگ پر سرعت و رایگان Vless
- پشتیبانی از همه کلاینت های xray
- سازگار با 90 درصد وبسایت ها و سرویس ها
- از توییتر و ChatGPT پشتیبانی نمیکند
مخزن پروژه:
https://github.com/code3-dev/foxcloud
لیست…
- ساخت کانفیگ پر سرعت و رایگان Vless
- پشتیبانی از همه کلاینت های xray
- سازگار با 90 درصد وبسایت ها و سرویس ها
- از توییتر و ChatGPT پشتیبانی نمیکند
مخزن پروژه:
https://github.com/code3-dev/foxcloud
لیست…
Forwarded from a pessimistic researcher (Kc)
Linkedin
Looking for a PostDoc, a PhD, and 3-6mth interns as part of my ERC project.
Homepage: https://mboehme.github.io/
Böhme Lab: …
Homepage: https://mboehme.github.io/
Böhme Lab: …
Forwarded from Geek Alerts
یوتیوب از پلیر جدیدش برای نسخه وب، موبایل و تلوزیون رونمایی کرده، پلیر جدید حالت دکمهها گرد، و طراحی کلی نیمه شفاف و شیشهای شده. یه دکمه لایک هم اضافه شده که انیمیشن لایک شدنش بسته به نوع محتوا تغییر میکنه.
آپدیت دیگه اضافه شدن «کامنتهای رشتهای» (Threading) به بخش نظراته که چیزی شبیه به ردیت هست. توی این حالت بحثهای طولانی و چندلایه رو خیلی راحتتر میشه دنبال کرد. در واقع همونطور که در ردیت ارزش کامنتگذاری زیاده اینجا هم در یوتیوب ارزش کامنتها بیشتر میشن و احتمالا شاهد کامنتهای طولانیتری خواهید بود. [L]
🤓 @geekalerts
آپدیت دیگه اضافه شدن «کامنتهای رشتهای» (Threading) به بخش نظراته که چیزی شبیه به ردیت هست. توی این حالت بحثهای طولانی و چندلایه رو خیلی راحتتر میشه دنبال کرد. در واقع همونطور که در ردیت ارزش کامنتگذاری زیاده اینجا هم در یوتیوب ارزش کامنتها بیشتر میشن و احتمالا شاهد کامنتهای طولانیتری خواهید بود. [L]
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Woland's Linux Journal (Woland)
💠پروژه جدید بنیاد نرمافزار آزاد Librephone💠
پروژه جدید FSF به نام Librephone قراره آزادی کامل رو به دنیای موبایل بیاره. بیشتر مردم امروزه از گوشی به عنوان دستگاه اصلی کامپیوترشون استفاده میکنن، و بعد از چهل سال دفاع از آزادی نرمافزار، حالا FSF میخواد همون آزادی مطالعه، تغییر، اشتراک و ویرایش برنامهها رو به گوشیها هم برسونه.
مدیر اجرایی FSF، زویی کویمن گفته:
«وقتی چهل سال پیش FSF رو شروع کردیم، هدفمون آزادی در کامپیوترهای دسکتاپ و سرور بود. تکنولوژی عوض شده، اما تعهدمون به آزادی نه. الان وقتشه همین مسیر رو برای موبایل هم ادامه بدیم. این پروژه پیچیدهست، ولی ما به کارهای بلندمدت عادت داریم.»
هدف Librephone اینه که فاصله بین نسخههای آزاد اندروید و آزادی کامل نرمافزار رو از بین ببره. برای شروع، FSF توسعهدهنده با سابقهای به اسم راب ساووی (از پروژههای DejaGNU، Gnash، OpenStreetMap و غیره) رو استخدام کرده تا وضعیت فریمور و باینریهای غیرآزاد گوشیها رو بررسی کنه. تمرکز اولیه هم روی کارهایی هست که پروژههایی مثل LineageOS انجام دادن، با این تفاوت که Librephone میخواد اون بخشهای بسته و غیرآزاد رو حذف و جایگزین کنه.
سرمایه اولیه این پروژه رو جان گیلمور (عضو هیئتمدیره FSF) داده. خودش گفته:
«من سالها از LineageOS با MicroG و F-Droid استفاده کردم که گوگلافزارها رو حذف میکنه. ولی بعد فهمیدم هنوز بخشهایی از فریمور گوشی به صورت باینری و بسته داخلش هست. بهجای تسلیم شدن، تصمیم گرفتم با همکاری دیگران اون بخشها رو مهندسی معکوس کنیم و کاملاً آزادشون کنیم.»
اولین گام پروژه پیدا کردن یه مدل گوشی با کمترین مشکل از نظر نرمافزار غیرآزاده. بعد از اون، تیم شروع میکنه به جایگزینی کامل کدهای بسته با نرمافزار آزاد. Librephone قراره بستری باشه برای توسعهدهندگانی که میخوان یه سیستمعامل کاملاً آزاد و سازگار با اندروید بسازن.
بنیاد نرمافزار آزاد سالها از پروژههای مشابه مثل Replicant حمایت کرده و حالا با Librephone قدم بعدی رو برمیداره. گیلمور هم اضافه کرده:
«خوششانس بودیم که راب ساووی رو پیدا کردیم، مهندسی با دههها تجربه در نرمافزار آزاد و سیستمهای امبدد.»
ساووی هم گفته:
«بهعنوان کسی که سالها روی سیستمهای امبدد و موبایل کار کرده، خوشحالم که میتونم برای ساخت یه گوشی واقعاً آزاد تلاش کنم. این کار آسون، سریع یا ارزون نیست، ولی ما روی شونهی غولهایی وایستادیم که قبلاً بخش زیادی از مسیر رو رفتن. خوشحال میشیم شما هم با کار یا کمک مالیتون همراه ما بشید.»
اطلاعات بیشتر و نحوه مشارکت:
https://fsf.org/campaigns/librephone
سایت پروژه:
https://librephone.fsf.org
گفتوگو در IRC:
#librephone روی irc.libera.chat
#خبر
پروژه جدید FSF به نام Librephone قراره آزادی کامل رو به دنیای موبایل بیاره. بیشتر مردم امروزه از گوشی به عنوان دستگاه اصلی کامپیوترشون استفاده میکنن، و بعد از چهل سال دفاع از آزادی نرمافزار، حالا FSF میخواد همون آزادی مطالعه، تغییر، اشتراک و ویرایش برنامهها رو به گوشیها هم برسونه.
مدیر اجرایی FSF، زویی کویمن گفته:
«وقتی چهل سال پیش FSF رو شروع کردیم، هدفمون آزادی در کامپیوترهای دسکتاپ و سرور بود. تکنولوژی عوض شده، اما تعهدمون به آزادی نه. الان وقتشه همین مسیر رو برای موبایل هم ادامه بدیم. این پروژه پیچیدهست، ولی ما به کارهای بلندمدت عادت داریم.»
هدف Librephone اینه که فاصله بین نسخههای آزاد اندروید و آزادی کامل نرمافزار رو از بین ببره. برای شروع، FSF توسعهدهنده با سابقهای به اسم راب ساووی (از پروژههای DejaGNU، Gnash، OpenStreetMap و غیره) رو استخدام کرده تا وضعیت فریمور و باینریهای غیرآزاد گوشیها رو بررسی کنه. تمرکز اولیه هم روی کارهایی هست که پروژههایی مثل LineageOS انجام دادن، با این تفاوت که Librephone میخواد اون بخشهای بسته و غیرآزاد رو حذف و جایگزین کنه.
سرمایه اولیه این پروژه رو جان گیلمور (عضو هیئتمدیره FSF) داده. خودش گفته:
«من سالها از LineageOS با MicroG و F-Droid استفاده کردم که گوگلافزارها رو حذف میکنه. ولی بعد فهمیدم هنوز بخشهایی از فریمور گوشی به صورت باینری و بسته داخلش هست. بهجای تسلیم شدن، تصمیم گرفتم با همکاری دیگران اون بخشها رو مهندسی معکوس کنیم و کاملاً آزادشون کنیم.»
اولین گام پروژه پیدا کردن یه مدل گوشی با کمترین مشکل از نظر نرمافزار غیرآزاده. بعد از اون، تیم شروع میکنه به جایگزینی کامل کدهای بسته با نرمافزار آزاد. Librephone قراره بستری باشه برای توسعهدهندگانی که میخوان یه سیستمعامل کاملاً آزاد و سازگار با اندروید بسازن.
بنیاد نرمافزار آزاد سالها از پروژههای مشابه مثل Replicant حمایت کرده و حالا با Librephone قدم بعدی رو برمیداره. گیلمور هم اضافه کرده:
«خوششانس بودیم که راب ساووی رو پیدا کردیم، مهندسی با دههها تجربه در نرمافزار آزاد و سیستمهای امبدد.»
ساووی هم گفته:
«بهعنوان کسی که سالها روی سیستمهای امبدد و موبایل کار کرده، خوشحالم که میتونم برای ساخت یه گوشی واقعاً آزاد تلاش کنم. این کار آسون، سریع یا ارزون نیست، ولی ما روی شونهی غولهایی وایستادیم که قبلاً بخش زیادی از مسیر رو رفتن. خوشحال میشیم شما هم با کار یا کمک مالیتون همراه ما بشید.»
اطلاعات بیشتر و نحوه مشارکت:
https://fsf.org/campaigns/librephone
سایت پروژه:
https://librephone.fsf.org
گفتوگو در IRC:
#librephone روی irc.libera.chat
#خبر