اینم یه تجربه پراکنده دیگه!

یکی از مشکلاتی که همیشه در محل‌هایی که من فعالیت داشتن وجود داشته اینه که چطور پهنای باند رو بین تمام استفاده کنندگان تقسیم کرد بصورتی که اگه ۱۰ کاربر داریم که در حال حاضر ۲ تاشون فعالن، پهنای باند بین دو نفر تقسیم بشه و اگه به عنوان مثال ۳ نفر فعال باشن پهنای باند بین اون ۵ نفر تقسیم بشه. مزایای این اتفاق بسیاره که اگه عمری بود در موردش مینویسم. سعی میکنم مراحل کار رو اینجا با مثال رو شکل توضیح بدم:

  1. ابتدا باید به منوی firewall -> traffic shaper -> limiter رفته و یه limiter جدید میسازیم
    1.0
  2. سپس اسم limiter رو برای راحتی کار آینده download میگذاریم و اون رو فعال میکنیم
    1.1
  3. سپس تو قسمت bandwidth یک گزینه جدید اضافه می‌کنیم
    1.2
  4. بعد توی قسمت bandwidth حد دانلود رو وارد می‌کنیم. و ذخیره می‌کنیم
    1.3
  5. توی صفحه بعد گزینه اضافه کردن یک صف جدید رو انتخاب می‌کنیم
    2.0
  6. توی این قسمت هم تنها یه اسم وارد کنید که بعدا بتونید به یاد بیاردش و مثلا download_lan باشه و نحوه انتخاب رو براساس آدرس مقصد انتخاب کنید و تنظیمات رو ذخیره کنید
    2.1
  7. حالا بایستی همین کار برای آپلود هم انجام بشه پس یه limiter جدید ساخته میشه
    3.0
  8. یه اسم برای آپلود انتخاب کنید و تنظیمات رو ذخیره کنید
    3.1
  9. حال دوباره توی قسمت bandwidth یک گزینه جدید اضافه کنید
    3.2
  10. پهنای باند آپلود رو اینجا وارد کنید و تغییرات رو ذخیره کنید
    3.3
  11. دوباره برای این قسمت هم یک صف اضافه می‌کنیم
    4.0
  12. توی این قسمت هم تنها یه اسم وارد کنید که بعدا بتونید به یاد بیاردش و مثلا upload_lan باشه و نحوه انتخاب رو براساس آدرس مبدا انتخاب کنید و تنظیمات رو ذخیره کنید
    4.1
  13. حالا به بخش قوانین مسیریابی برید و قانون اصلی رو که اجازه میده ترافیک رد بشه ویرایش کنید
    5.0
  14. به بخش In/Out برید و روی گزینه advance کلیک کنید
    5.1
  15. و برای خروجی از صف upload_lan و برای ورودی از صف download_lan استفاده کنید.
    5.2

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

منبع: اینجا

اینم یه تجربه پراکنده دیگه!

من مدت‌هاست که به عنوان یکی از کارهای اصلی به زبان C برای سیستم‌های Embeded برنامه می‌نویسم. یعنی یه دستگاه محدود رو آماده میکنم که یه کار خاص رو انجام بده.

یکی از بزرگترین ویژگی‌های این دستگاه‌ها اینه که حافظه محدودی دارن و بعضی وقت‌ها بایستی حواس برنامه نویس به اینکه اولا چقدر حافظه مصرف شده و دوما اینکه متغیرها‌ی برنامه ای که مینویسه کجای حافظه تعریف میشن باشه.

اگه با اسمبلی آشنا باشید هر برنامه از سه قسمت Data, Code, Stack تعریف میشه. که خود  Data Segment هم از سه بخش Heap, Data, BSS تشکیل میشه. که توضیح هرکدوم این بخش‌ها داستان متفاوتی داره. حالا توی شبه کد پایین توضیح میدم که  اینها با هم چه تفاوتی داره

int a;

void myFunc(void)
{
	int b;
	static int c;
	int *d = malloc(sizeof(int));

	...

	return;
}

توی این شبه کد متغیر global به نام a وجود داره که توی data و یا ‌BSS تعریف میشه. متغیر b چون یک متغیر محلیه توی stack تعریف میشه. متغیر c یک متغیر محلی استایتک هست و به دلیل استاتیک بودنش توی data و یا ‌BSS تعریف میشه.  پوینتر d همه به یه آدرس توی heap اشاره میکنه چون این متغیر بصورت داینامیک تعریف شده و متغیر داینامیک در heap درست میشه. تفاوت data و BSS در اینه که متغیرهایی که مقدار اولیه غیر صفر دارن توی data تعریف میشن و متغیرهایی که مقدار اولیه ندارن و یا صفرن توی BSS تعریف میشن.

حالا مشکلی که وجود داشت اینه که من متغیرهای بزرگی توی متن تابع هام داشتم که باعث میشد حجم محدود stack موجود پر بشه و نرم افزار به خطای زمان اجرا بر بخوره. که با تغییر اونها به متغیرهای static محل نگهداری اونها به BSS یا Data تغییر مکان پیدا کرد و مساله حل شد.

همین!

اینم یه تجربه پراکنده دیگه!
من یه مدته که سعی میکنم با استفاده از ابزارهایی کاراییم رو بیشتر کنم تا بتونم به اهدافم نزدیک تر بشم. یکی از این ابزارها لیست کارها و ابزار دیگه اشتراک و همکاری بین افراد در یک پروژه است.
من در ابتدا برای هر دو کار ترلو استفاده میگردم. این ابزار با سادگی و تو دل برو بودنش امکانات اولیه مدیریت پروژه و همکاری یک تیم کوچک رو فراهم میکنه.  نتیجه کار باهاش هم تا الان بسیار راضی کننده بوده. اما تنها مشکل من باهاش نیاز دسترسی مداوم به اینترنته. این موضوع خودش رو تو کلاینت موبایلش بیشتر نشون میده.

به همین خاطر تصمیم گرفتم از یه ابزار ساده تر برای کارهایی شخصی استفاده کنم. به همین خاطر رفتم سراغ taskwarrior که بسیار هم خوب و ساده است. اما بزرگترین مشکل این هم نبود امکان سینک رو دستگاه های مختلفه. اما نتیجه این مدت کار باهاش رضایت بخش بوده.

فعلا همین. تا سر فرصت بهتر بیشتر بنویسم.

پ. ن.  این متن رو با کلاینت آندروید وردپرس نوشتم.