چه کارهای جالبی با گنو/لینوکس انجام می‌دهم : گراف لحظه ای مصرف پهنای باند

آخرین مطلب من برای شرکت در مسابقه چرا گنو/لینوکس را دوست دارم؟  یه پروژه کوچیک بر مبنای HTML5 هست برای کشیدن گراف لحظه ای مصرف پهنای باند :)

داستان از اونجایی شروع شد که من و همکارم آقای مقدم تو شرکت داشتیم بحث میکردیم که چه کارهای جالبی رو میشه با HTML5 انجام داد که یهو تصمیم گرفتیم به جای حرف زدن یکیشونو عملی کنیم.

ایده این بود که یک نمایش دهنده لجظه ای میزان دانلود یا همون Realtime Bandwidth Grapher رو بسازیم و شروع کردیم جمع کردن مواد مورد نیاز!

برای کشیدن گراف این کتابخونه جاوااسکریپتیو پیدا کردیم که با کمک المان canvas موجود در HTML5 گراف مورد نظرو میکشه.

در حقیقت canvas طراحی شده تا با کمک یک زبان اسکریپتی مثل javascript در لحظه اشکال هندسی که شما میخواهیدو  نمایش بده.

برای قسمت ارتباط مداوم با سرور از تکنولوژی SSE ارايه شده در HTML5 بهره بردیم که در حقیقت به مرورگر وبمون این امکانو میده که طبق فواصل زمانی که سرور بهش میگه اطلاعات رو بدون رفرش کردن صفحه از سرور بگیره.

و برای سمت سرور هم از یه کد تلفیقی کوچیک php و bash به صورت زیر استفاده کردیم:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$interface = "ppp0";
$rec = system("ifconfig $interface | grep 'RX bytes' | sed -e 's,.*RX bytes:,,' -e 's, .*,,'");

echo "retry: 1000n";
echo "data:{$rec}nn";
flush();

در دو خط اول ما نوع و خاصیت اطلاعات ارسالی رو طبق مثال موجود در سایت w3schools مشخص میکنیم و بعد یه متغییر به نام interface رو تعریف میکنیم که قراره اسم اینترفیس ارتباطی با اینترنت رو نگه داره مثل eth0 یا wlan0 یا ppp0 و بعد از اون با کمک تابع system که به ما امکان اجرای برنامه های خارجی رو میده مقدار اطلاعات دریافتی در لحظه رو بدست میاریم.

در اخر هم با کمک retry میگیم که مرورگر ۱ ثانیه دیگه دوباره به ما سر بزنه و با کمک data اطلاعات بدست آمده رو به مرورگر میفرستیم، در ضمن به اون دو تا اینتر آخر ماجرا هم توجه کنید چون در حقیقت وجود اوناست که میگه آخر درخواست HTTP ماست.

خوب ما کارهای سمت سرور رو انجام دادیم، حالا نوبت ساختن صفحه سمت کاربر با کمک تکنولوژی هایی که پیدا کردیم :)

<!DOCTYPE html>
<html>
<header>
	<title>Bandwidth Realtime Graph</title>
	<script>
		//this varible set your shaper maxmimom KB
		var range=500;
	</script>
	<style>
		#container
		{
			margin:0px auto;
			width:960px;
			text-align:center;
			min-height:550px;
		}
		#footer
		{
			text-align:center;
		}
	</style>
</header>
<body>
<div id="container">
<h1>Bandwidth Realtime Graph</h1>
<div id="result" style="font-weight:bold; color:red;"></div>
<canvas id="rec_graph" height="200" width="930" style="font-size: 6pt;"></canvas>
</div>
<div id="footer">
	<a href="http://www.w3.org/html/logo/">
		<img src="HTML5_Logo_64.png" alt="HTML5" />
	</a>
</div>
<script type="text/javascript" src="graph.js"></script>
<script>
if(typeof(EventSource) !== "undefined") {
	var source = new EventSource("rec.php");
	var seconds = 1;
	source.onmessage = function(event)
	{
		var new_rec = event.data;
		if ( typeof(old_rec) != "undefined") {
			bytes = new_rec - old_rec;
			rate_rec = bytes * 8 / seconds / 1024;// kbps
			document.getElementById("result").innerHTML=
					 Math.round(rate_rec) + " Kbps";
		}
		old_rec = new_rec;
	};
} else {
	document.getElementById("result").innerHTML=
		"Sorry, your browser does not support server-sent events...";
}

window.onload = function() {
    g_graph = new Graph(
    {
        'id': "rec_graph",
        'strokeStyle': "#819C58",
        'fillStyle': "rgba(64,128,0,0.25)",
        'interval': 1000,
		'range': [0,range],
		'grid': [40,40],
		'showlabels': true,
        'call': function(){return (Math.round(rate_rec));}
    });
}
</script>

</body>
</html>

خوب کد های بالا بر طبق مستنداتی که قبلتر لینکاشونو در صفحه قرار دادیم نوشته شدن و فکر نمیکنم توضیح خط به خطش لازم باشه، فقط راجع به متغییر range یه توضیحی بدم اونم اینه که باید ماکسیموم کیلوبایت بر ثانیه که ممکنه از اینترفیس شما دانلود بشه توش نوشته بشه تا تمام نقاطی که کشیده میشن صحیح کشیده بشن، مثلا اگه سرعت اینترنتتون ۲۵۶ کیلوبایت بر ثانیه هست عدد ۳۰۰ معقول به نظر میرسه.

 

و در نهایت اینم از این پروژه، یه کار لذت بخش همراه با رفقایی که دوستشون داری :)

برای دانلود و یا تصحیح و تکمیل پروژه میتونید از لینک زیر استفاده کنید:

https://github.com/pesarkhobeee/Realtime-Bandwidth-Grapher

انتشار نسخه ۱ آیلین

سه چهار ماه پیش بود راجع به سیستم آیلین براتون نوشتم.
امروز پس از یه مدت تست و رفع باگ و اضافه کردن سیستم هایی که بنظر در اکثر سایت ها ضروری و لازمن رسما انتشار نسخه یک آیلین رو اینجا اعلام میکنم :)
بزودی برای آموزش نحوه توسعه آیلین یه سیستم کوچیک مینویسم و تمام مراحلشو مستند میکنم.
اما یه دیاگرام ساختم که همراه توضیحات پست قبلیم، فکر میکنم تکمیل کننده نمایش کلیت ماجرا باشه:

Aylin cms diagram

و یک شات از محیط مدیریتی :

همون طور که قبلا هم گفتم برای دریافت پروژه و یا مشارکت از https://github.com/pesarkhobeee/Aylin و برای پیوستن به اعضای این سیستم از [email protected] استفاده کنید.
موفق باشن :)

نرم افزار مدیریت پروژه های وب

من شخصی هستم شلخته که بعضی وقتا سعی میکنه با کمک نرم افزار ها این اوضاع رو درست تر کنه! مثلا رفتم رو i3 تا یه نمه محیط دسکتاپمو جمو جور کنم !

پروژهای کوچیک و بزرگ وب من هم زیاد شده و حوصله منو وقتی میزنم localhost سر میبره بنا بر این به فکر یه نرم افزار میدیت پروژه های وب افتادم و این کارو با کمک bach script و dialog انجام دادم.

کار این برنامه اینه که به شما امکان انتخاب پروژه وب مورد نظرتون و دیتابیسشو میده و اونارو فشرده کرده و آرشیو میکنه و اصلی ها رو پاک میکنه و هر وقت اراده کنید اونارو سر جاشون بر میگردونه! همین :D

مثل یه نرم افزطار که پروژه هاتونو میاره تو مدار عملیاتی و یا اونارو از این مدار خارج میکنه.

 

کد این برنامه رو میتونید از pastebin دریافت کنید:

http://pastebin.com/Mg8JPahD

و برای اجراش از هر روشی که دوست دارن میتونید اقدام کنید! من که امدم تو مسیر /usr/sbin یه فایل به اسم pm ساختم با محتویات زیر :

sudo  /home/pesarkhobeee/My Project/Active/bash/pm-cli

و بعد به هر دو فایل مجوز اجرایی دادم و کارمو راه انداختم!

راستی یادتون نره با sudo اینو اجرا کنید تا به مشکل بر نخوردی و البته حتما تنظیمات داخل فایلو هم انجام بدین قبلش ;)

پ . م :

از هر گونه کمک و پیشنهادی هم استقبال میکنم :P

راستی بازم مثل همیشه از راهنمایی های استادم آقای پژمان مقدم تشکر کینم.

نقل و نبات شماره سیزده (tips & tricks) برنامه Screen

یکی از زیباترین برنامه ها برای sysadmin ها و کسانی مثل ما که با vps سروکار دارن برنامه Screen هست .

خیلی شده که موقع کار با vps و انجام کارها هی دلهره دارم که با این اوضاع اینترنت نکنه وسط کارم ارتباطم قطع بشه و اون ور فضاحت و خرابکاری و کثیفکاری بشه.

چاره این مشکل استفاده از screen هست ! screen مثل همین ترمینالیه که توش کار میکنیم با این تفاوت که اگه وسط یک کار ارتباطمون با اون قطع شه ، کار مورد نظر ادامه پیدا میکنه و ما بعد از رفع مشکل اینترنتمون میتونیم دوباره به screen وصل شیم و بدونیم که سرانجام کارمون چی شد؟

البته امکانات این برنامه خیلی بیشتر و فوقالعاده تر از ایناس ! ولی فعلا به دستورات ساده اون برسیم:

بعد از زدن دستور screen انگار که اتفاقی نیوفتاده و ما هنوز تو ترمینالیم اما اشتباه میکنید ! کافیه کلید ctrl+A رو بگیرید و بعد ? رو بزنید تا help اسکرین ظاهر شه ، تعدادی از دستورات پر کاربرد اون:

Ctrl-A ?  =>  help
Ctrl-A c  =>  creat new windows
Ctrl-A n  => next windows
Ctrl-A p  => previous windows
Ctrl-A d => detach Screen
Ctrl-A k => exit
Ctrl-A H => creat running log

خوب فرض کنید بعد از کار با screen اونو detach کردین و یا از اون به هر دلیلی جدا شدین میتونید با دستورات زیر لیست screen های در حال اجرا رو ببینید و به اونها وصل شین:

screen -ls => screen list
screen -r screen name => reattach

دیده بودم که اقای مقدم بعضی وقتا موقع امتحان گرفتن به ترمینال بچه ها وصل میشد و نگاه میکرد که اینا چه میکنن! بعد ها فهمیدم اون screen و دنبال این بودم که با کدوم کلید اینکارو میکنه ؟ ( با x این کارو میکرد ) که به یه لینک از سایتشون رسیدم که کوتاه مختصر توضیح داده بودن :

http://www.pmoghadam.com/blog/categories/General/GNU%20screen.txt

داشتم بیشتر راجع به Screen میگشتم و رسیدم به یه لینک از سایت دوست عزیزم اقای فریدی که خیلی خوب اسکرینو شرح دادن :
http://www.mfaridi.com/fa/freebsd/25-freebsd/88-screen.html

عبارات منظم regular expression

به syntax های خاصی که الگوی متن موردنظر رو مشخص میکنه عبارات منظم یا regex یا regexp گفته میشود.

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

نکته : گرچه filename globbing و regular expression بسیار شبیه هم به نظر میرسند امابنیادن بسیار متفاوتند.

ادامه خواندن عبارات منظم regular expression

روبوتها در اینترنت یا چگونه موجودیت های خودکار در دنیای سایبر ایجاد کنیم؟

یادمه اوایل ورودم به اینترنت شنیده بودم یه سری روبوت هستن که برای موتورهای جستجوگر کار میکننو اطلاعاتو جمع میکنن! بعد ها  یه چیزایی راجع به  روبوت پاسخگوی یاهو تو مسنجر شنیدم و در پرده آخر تو کانال های irc به کسانی بر خوردم که روبوت بودن!خدا میدونه چه جاهای دیگه ای هم هستن که من ندیدم!

خلاصه یه روز فکر کردم اینا بر اساس چه مبنایی ساخته میشن و چگونه کار میکنن؟

این شد که آستینارو زدم بالا و یه پروژه کوچیک برا خودم تعریف کردم:

میخواستم دو راه دیگه برای دسترسی به آخرین مطالب سیاره زنجات لاگ درست کنم : اولیش این بود که هر پست جدیدی که اضافه میشه ، اون پست در شبکه آیدنتیکا اعلام بشه و دومیش اینکه یه اکانت تو مسنجر باشه که هر وقت خواستم باهاش بچتمو اطلاعات لازمو بگیرم!

ادامه خواندن روبوتها در اینترنت یا چگونه موجودیت های خودکار در دنیای سایبر ایجاد کنیم؟

ساخت یک اینترفیس تحت وب برای کارهای سیستمی با php و python

مدتها پیش مقاله ای نوشته بودم در باب اجرای دستورات خط فرمان درphp تو اون اشاره کرده بودم که در php توابعی وجود داره که میشه دستورات سیستمی مثل ls,pwd,.. رو اجرا کرد .
اما امروز بر اون شدم که با راهنمایی های استادم، اقای مقدم یه رابط کاربری تحت وب برای کارهای سیستمی بسازم!
اول رفتم سراغ php که مثلا بلدمش!و از اونجایی که حسو حال ساختن فرم ورود اطلاعات رو نداشتم از سایت http://www.phpform.org استفاده کردم و یه اینترفیس برای یه دیوار اتش ساده ساختم به شکل زیر:

و بعد از اون امدم خروجی فرم بالا رو گرفتم و تبدیل کردم به دستور موردنظر با کمک آرایه های انجمنی:

ادامه خواندن ساخت یک اینترفیس تحت وب برای کارهای سیستمی با php و python

مقاله آشنایی با فریم ورک CodeIgniter ارائه شده در همایش سراسری لمپ در ایران :: زنجان

خوب از آقای نبی زاده اجازه گرفتم قبل از اینکه رو سایت اصلی همایش  http://www.conference.phpdevelopers.ir مقاله ها آپلود بشن من مقاله خودمو رو وبلاگم منتشر کنم!

بهرحال یه پستم یه پسته!

خلاصه تو این همایش فرصتی شد تا در مورد قالب کاری فعلیم که همون code igniter هست مقاله بنویسم  ، و سعی کردم مقاله یه جوری باشه که بشه به عنوان مرجع اولیه و وسیله آشنایی استفاده کرد ازش!

خلاصه اینجا مقدمه و فهرستشو میارم و بعد فایلو برا دانلود میزارم:

فهرست

  • مقدمه
  • CodeIgniter چیست؟
  • CI برای چه کسانی هست؟
  • معرفی کوتاه MVC
  • روند اجرای برنامه (Application Flow Chart )
  • آدرس‌های اینترنتی در کد اگنایتر(Code Igniter URLS)

بخش‌های آدرس (URI Segment )

حذف فایل ایندکس از آدرس (Removing the index.Php file )

اضافه کردن پسوند به آدرس(Adding a URL Suffix )

Enabling Query String

  • کنتـرل کننده ­ها (controller)

پاس دادن مقادیر uri به توابع( Passing URI segment to your funition )

Remapping

توابع خصوصی (Private function )

مشخص کردن سازنده کلاس (Class constructors )

اسامی رزرو شده در توابع(Reserved Function Name)

  • Views
  • کتابخانه‌ها (Libraries )
  • کمک کننده ها (Helper Files )

توسعه کمک کننده ها (Extending Helper )

پیشوند خود را برای کمک کننده ها انتخاب کنید(Setting your own prefix )

Using code igniter library

  • Plugins

Loading a Plugin

  • فایل تنظیمات شخصی (Custom Config File )
  • Language File

ساختن فایل­های زبان

Loading a Language File

  • مباحث مرتبط به کار با پایگاه داده در CI

وصل شدن به دیتابیس

Automatically connection

Manually connection

Models

ساختار Model ها

Loading a model

وصل شدن به پایگاه داده در یک مدل

آشنایی با ابزار Scaffolding

انجام عملیات CRUD در CI

Active Record Class

SELECT

INSERT

UPDATE

DELETE

  • Web page caching

کش چگونه کار می کند؟

فعال سازی کش

Deleting Caches

  • اجرای یک مثال عملی در CI

دستورات نصب CI

ایجاد صفحه درج اطلاعات

ایجاد صفحه خواندن اطلاعات

ایجاد صفحه حذف مطالب

  • کد های مثال

مقدمه

سالهاست php در ایران یک زبان شناخته شده برای طراحی وب است اما متاسفانه قالب‌های کاری (framework ) آن در ایران شناخته شده نیستند و بعضا ما شاهد مقایسه‌های اشتباه بین ASP.NET که یه زبان طراحی وب بعلاوه یک قالب کاری هست، با زبان php بدون هیچ کدام از قالب‌های کاریش هستیم . این نشان دهنده تصور قالب در اکثر دانشگاهیان ما هست.

در این نوشته سعی دارم یکی از ساده‌ترین و سریعترین قالب‌های کاری php را معرفی کنم و آن چیزی نیس جز Code Igniter

این نوشته در قسمت اول به مفاهیم بنیادی میپردازد سپس سعی میکند اجزای اصلی این قالب را معرفی کرده و در آخر با آوردن یک مثال عملی ساده ، سعی بر اتمام هدف خود کند.

در جای جای این نوشته از مستندات خود Code Igniter به صورت ترجمه آزاد استفاده شده و در قسمت‌هایی از تجارب شخصیم استفاده کردم ،بدیهی است برای اطلاعات بیشتر و آشنایایی با دیگر مباحث این قالب توصیه می‌شود حتماً از مستندات رسمی آن استفاده شود :

http://codeigniter.com/user_guide/

به امید اینکه این مقاله گامی کوچک در فرهنگ سازی در مورد قالب‌های کاری آزاد باشد.

همچنین توجه به این نکته را لازم میدانم که فرض ما بر تسلط خواننده بر php و html و آشنایی کوچکی با مفاهیمی چون قالب کاری ، MVC و ORM است.


دانلود مقاله آشنایی با code igniter

معرفی Irssi

خوب بعد مدتها ، یه حسو حال و وقتی پیدا کردم بنویسم ! تا دوهفته پیش درگیر امتحانای دانشگاه بودم و بعد اونم کارای لینوکس اف ام و جشنو زنجان لاگ مسافرتم مجال خاصی برام نزاشت! البته به قول جادی اینا همش بهانس و اگه آدم بخواد یه کاری رو بکنه اون کارو میکنه حالا تو هر شرایطی!

امروز دوس دارم با یه نرم افزار لینوکسی که تو خط فرمان کار میکنه و کلاینت (سرویس گیرنده! ) IRC هست آشناتون کنم و طی این آشنایی با مباحث زیر روبرو میشیم:

  • irc چیست
  • دستورات irc
  • آشنایی با دستورات اولیه Irssi
  • نام های مستعار خود را بسازید
  • اجرای برنامه ها و چاپ خروجی آنها از داخل irssi
  • به کاربرانی که به شما msg/ میدهند بگویید نیستید
  • کارهای تکراری را در irssi خودکار کنید
  • چند ترفند برای مقابله با افراد/کانالهای شلوغ
  • تهیه گزارش از لاگهای irssi
  • برای irssi خود برنامه بنویسیم

irssi

ادامه خواندن معرفی Irssi

معرفی پروژه ی جدیدم: رقیبی کوچیک برای choqok دوست داشتنی (آیلین خانم!)

آقا شما نمیدونی من از روزی کهChoqok رو ریختم چقدر بهش وابسته شدم. واقعا دم مهرداد مومنی گرم.

قبل از اینکه من متنم رو شروع کنم نمیدونم چرا اینقدر عنوان و جمله اولم به نظرم اشنا میاد ;)

داستان از جایی شروع شد که من برای حل تمارین دانشگاهیم باید میرفتم ویندوز ولی دیدم من معتاد ادینتیکا و چغوک شدم! از اون ورم اینا رو ویندوز پورت نشدن و من یه طراح ساده وب بیش نیستم !

بنا بر این بقدر معرفت  آستینارو زدم بالا و با xul بخوانید زول که همان تکنولوژی ایست که باهاش فایر فاکسو تاندربیردو سانگ بیردو … را نوشتن یه کلاینت بسیار ساده ایتدایی نوشتم! و البته هسته اصلی اون بر پایه php هست! خوبیه فعلیشم اینه که این هسته اصلی رو سایت اصلی خودتون نصب میشه و راحت از هر جور ف / ی / ل / ت / ر / ی رد میشه و به توییتر و ایدنتیکا وصل میشه و این چیزی که با xul نوشتم یه رابط کاربری یا interface برا همونه! اسمشو گزاشتم آیلین که یه اسم ترکیه و به معنای فر وغ و درخشش . فکرای بدم نکنید اسم برادرزاده منه که هنوز یه سالشم نشده و چون ایشون بسیار کوچیکو نازن ماشالله ،  ما هم به همین قصد کوچیکو ناز بودن و اسم ترکی بودن اسم برناممونو آیلین گزاشتیم.

هدف از زدن این پست اینه که ببینم این برنامه شخصی برای شما چقدر جالبه و اگه یه هم چین چیز مینیمالی میخواستین چه امکاناتی ازش انتظار داشتین؟

در زیر عکسشو زمینه میکنم که در لینوکس به صورت stand alon هست و در ویندوز به صورت add-on فایرفوکس:

چند تا سوال من :

کلا نظرتون راجه به این ایده صد بار پیاده شده چیه؟

دوست دارین افزونه فایرفوکس باشه یا یه برنامه مستقل؟

چه امکاناتی از یه همچیمن چیزی انتظار دارین مثلا من یه چیزی که از چغوک میخوام هیستوری دنتامه که ندارتشون !

و در نهایت بهتر نیس اینو همون به صورت یه پروژه شخصی نگر دارم؟ آیا شما اصلا بهش احتیاج دارین؟

پ . ن : اون روز کل زمانم رفت رو این برنامه نتونستم برم ویندوز تمرینامو انجام بدم! دست آقای بهروز شعبانیم درد نکنه! دادا همیشه با راهنمایی هاش بمن خیلی کمک کرده.