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

آخرین مطلب من برای شرکت در مسابقه چرا گنو/لینوکس را دوست دارم؟  یه پروژه کوچیک بر مبنای 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

چه کارهای جالبی با گنو/لینوکس انجام می‌دهم : جایگزین کننده خودکار clipboard

بعد از نوشتن پست چرا گنو / لینوکس را دوست دارم ، وسوسه شدم پست چه کارهای جالبی با گنو/لینوکس انجام می‌دهم رو هم برای مسابقه بنویسم:


خوب معمولا این پست ها با طرح یه مشکل شروع میشن و بعد با یه حرکت ژانگولری لینوکسی تموم میشن پس اول میپردازیم به مشکل، داستان از اون جایی شروع شد که قصد کردم مستندات Django که یه فریم ورک نوشته شده با python هست رو مطاله کنیم و PDF مستندادشو گرفتم و هر از گاهی یه مقدارشو میخوندم.
مسئله از اینجا شروع شد که هر از گاهی به کدهایی بر میخوردم که باید کپی و پیست میکردم و مثال ها رو اجرا میکردم، کدهایی مثل کد زیر:

 

urlpatterns = patterns(’’,
(r’^articles/(d{4})/$’, ’news.views.year_archive’),
(r’^articles/(d{4})/(d{2})/$’, ’news.views.month_archive’),
(r’^articles/(d{4})/(d{2})/(d+)/$’, ’news.views.article_detail’),
)

 

مشکل اینجاست که به جای کاراکتر Typewriter single quotes یا همون کاراکتر ‘ که در برنامه نویسی هم بسیار مرسوم وقتی paste انجام میشه کاراکتر Single quotes (curly)  یا همون کاراکتر ‘ ’ پیست میشه و هر دفعه برای اجرای درست کد ها باید با سینگل کوت معمولی ( ‘ ) جایگزین بشن. اینجا میتونید راجع به علايم نقل قول اطلاعات کاملی بدست بیارید.

مثلا برای مثال بالا شکل درستش اینشکلیه:

urlpatterns = patterns('',
(r'^articles/(d{4})/$', 'news.views.year_archive'),
(r'^articles/(d{4})/(d{2})/$', 'news.views.month_archive'),
(r'^articles/(d{4})/(d{2})/(d+)/$', 'news.views.article_detail'),
)

 

و باور کنید بعد از دو بار انجام دادن جایگزینی، دیگه این کار حوصله سر بر میشه!!! و دنبال یه راه حل اتوماتیک برای این جور شرایط میوفتین .
وقتی دقت کردم دیدم من همین مشکلو حتی در برخورد با بعضی از کدهای قرار داده شده بر روی اینترنت هم دارم و مثلا به جای سینگل کت و یا دابل کت با این کاراکتر های ’ و ‘ و ” مواجه میشم که باید یک بار عمل replace رو روشون اعمال کنم تا درست اجرا شن.

خوب حالا که مشکل فهمیدیم باید دنبال یه راه حل باشیم:

بعد از یه مقداری گوگل دیدم ادیتور محبوب لینوکسی ها یعنی vim راه ساده ای برای این کار داره، کافیه تو فایل .vimrc دستور زیرو بنویسی:

autocmd BufWritePre * :%s/’/'/ge

کد بالا باعت میشه هر دفعه که در vim ما دستور :w رو برای ذخیره فایل زدیم، قبل از ذخیره عمل replace یا همون جای گزینی انجام بشه.

درسته که با همین کار کوچیک مشکلمون حل میشه اما راستش من تو کارهام بیشتر از ادیتورهای گرافیکی مثل geany و gedit استفاده میکنم! پس مشکل من هنوز کامل حل نشده.
پس باید یه فکر دیگه ای بکنم، هوووووم خوب من میدونم وقتی یه چیزی copy میشه در یک جایی به نام clipboard ذخیره میشه و اگه من بتونم مدام clipboard رو چک کنم میتونم اگر کاراکتر های ناخواستم توش پیدا شد همونجا عمل replace رو روشون انجام بدم تا وقتی چیزیو paste میکنم همه چیز درست و اونطوری که من میخوام باشه.
بنابراین بازم دست به یه سری سرچ میزنم و به کتابخونه Pyperclip میرسم که به زبان python برای کار با clipboard نوشته شده.
من python کار نیستم اما علاوه بر این که python کارا رو دوست دارم :دی میدونم وقتی یه زبان برنامه نویسی رو بلد باشی و ساختارهای کنترلیشو بشناسی سادس که با زبان های برنامه نویسی دیگه هم کار کنی.
بنا بر این گرچه خیلی ترو تمیز نیست ولی کد زیرو نوشتم ببینم کار میکنه یا نه!

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import pyperclip
import time

while 1:
	clipboard = pyperclip.paste()
	if '’' in clipboard or '‘' in clipboard:
		clipboard = clipboard.replace('’', ''')
		clipboard = clipboard.replace('‘', ''')
		pyperclip.copy(clipboard)
		time.sleep(1)

خوب خدا رو شکر کار میکنه و ما الان تو محیط گرافیکی تمام copy و paste هامون شامل قوانین replace کننده موردنظرمون میشه.
توضیح کد بالا به این صورته که یه حلقه بی نهایت ساختم که هر یک ثانیه یک بار اجرا میشه و با کمک کتابخونه Pyperclip محتویات clipboard رو میگیره و چک میکنه آیا کاراکترهای’ یا ‘ در اون هست یا نه و اگر هست عمل جایگزینی اونها رو با کاراکتر سینگل کوت موردنظر ما انجام میده و محتویات جدید رو جایگزین محتویات قبلی clipboard میکنه.

اما جریان اینجا تموم نشد! موقعی که این کد رو اجرا میکردم احساس میکردم صدای فن لپ تاپم زیاد میشه و وقتی با دستور top میزان مصرف منابع سیستممو چک کردن دیدم بله مصرف منابع کدی که نوشتم، خیلی بیشتر از هیکلشه!
خوب این یعنی حلقه بی نهایت جواب نمیده و باید خیلی دقیق تر بزنیم به هدف! مثلا این عمل جایگزینی فقط وقتی عمل کپی انجام میشه صورت بگیره! خوب سوال اینجاست از کجا بفهمیم کی یه عمل کپی کردن داره انجام میشه؟ شاید با DBUS بشه این کارو پیاده کرد ولی بابا آخه من همیشه دنبال آسون ترین راهم پس یه گوگلی میکنم تا ببینم تو نرم افزار های مدیریت clipboard کدوم به اونچیزی که من میخوام نزدیک تره که به glipper رسیدم.
در توضیحش امده:

It maintains a history of text copied to the clipboard from which you can choose. Glipper uses plugins to give the user all the extra functionality.

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

[email protected]:~$ cd /usr/share/glipper/
[email protected]:/usr/share/glipper$ ls
plugins plugins-window.ui preferences-window.ui

 

خوب تونستم جایی که plugin هاش نصب میشه رو پیدا کنم و توی پوشه plugins به مورد جالبی بر خوردم! پلاگین newline.py بسیار ساده نوشته شده و میتونه بیس پلاگین جایگزین کننده من باشه، پس بر اساس اون شروع میکنم به کد زدن و به کد زیر میرسم:

#This is a clippboard replacor
#-*- coding:utf-8 -*-

import glipper
from gettext import gettext as _

def on_new_item(arg):
	#if type(arg) != 'NoneType':
		if '’' in arg or '‘' in arg:
			last_set_item = arg
			last_set_item = last_set_item.replace('’', ''')
			last_set_item = last_set_item.replace('‘', ''')
			glipper.set_history_item(0, last_set_item)
			glipper.add_history_item(last_set_item)

def info():
	info = {"Name": _("replacer"),
	        "Description": _("replace some characters"),
	        "Preferences": False}
	return info

 

خوب این کد ها رو داخل فایلی به نام replacer.py در مسیر /usr/share/glipper/plugins ذخیره میکنم و مریم برای تستش:


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

 

چرا گنو/لینوکس را دوست دارم؟

خوب امروز  میخوام راجع به موضوع “چرا گنو/لینوکس را دوست دارم؟”  بنویسم!
مدتیه فروشگاه sito به مدیریت دوست خوبم بهنام توکلی مسابقه ای با همین موضوع راه انداخته و بعضی از دوستانم مطالب  فنی خیلی خوبی در این مورد نوشتن اما امروز من از دریچه دیگه ای به موضوع نگاه میکنم :)

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

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


آشنایی با همین ایده ها و دیدن طرفدارانشون بود که تو ذهنم ایجاد این جرقه رو کرد که ما هم باید تو شهرمون یه همچین جمعی داشته باشیم و مبلغ یه همچین ایده های انسانی ای باشیم و این شد که ۳ سال پیش یعنی دقیقا ۱۵ تیرماه سال ۱۳۸۸ با کمک دوستان، گروه کاربران لینوکس زنجان رو تاسیس کردم.
تو این مدت کارهای مختلفی انجام دادیم، از برگزاری همایش های آشنایی با لینوکس تو دانشگاه ها و آموزشگاه ها تا کلاس های دور همیِ یاد گرفتن یه چیز مربوط به لینوکس ، الان که بهشون نگاه میکنم میبینم حداقل باعث شد بچه های ثابت زنجان لاگ از جمله خودم از یه طرفدار به یه کاربر واقعی و حتی مبلغ قابل قبولی برای لینوکس تبدیل بشیم :)
حتی پس از مدتی با پروژه های Linuxfm و Zconf که خاستگاهشون برو بچه های زنجان لاگ بود و با حمایت بی دریغ بچه های بسیار خوب جامعه متن باز کشور مواجه شدن، کارهایی در سطح کشور برای تبلیغ و گسترش گنو / لینوکس انجام دادیم.
حالا که بهش فکر میکنم میبینم بهترین قسمت این چهار و پنج سال زندگی داشنجویی اخیر من، همین فعالیت ها و رفاقت هایی بوده که حول جامعه متن باز ایران شکل گرفته و امید دارم هر روز هم بیشتر بشه :)

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

دیلماج، مترجم فارسی تحت خط فرمان!!!
نرم افزار مدیریت پروژه های وب
Unity-Dilmaj مترجم تحت Dash اوبونتو !
آیلین، بیس طراحی وب سایت

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

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

Unity-Dilmaj مترجم تحت Dash اوبونتو !

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

اما بپردازیم به اصل ماجرا، Unity-Dilmaj در حقیقت یه    unity lense هست که من برای ترجمه چیزی که وارد میکنید به فارسی در محیط Dash طراحی کردم.  فکر میکنم اسکرین شات زیرو ببینین دقیقا متوجه میشن:

 

 

اما داستان از اونجایی شروع شد که یه دوست مکار! ( Mac user ) یا همون اپل زامبی خودمون :P امده بود شرکت و mac  خودشو نشون میداد، منم داشتم unity رو مقایسه میکردم ببینم چقدر شبیه هدفش شده!!! که دوستم برگشت گفت از اینا داره؟ دیدم تو اون محیط Dash مانندش وقتی کلمه ای رو میزنه به فارسی هم ترجمه میشه! گفتم نه و اون خندید.

منم تصمیم گرفتم تفاوت اصلی یه کاربر سیستم عامل لینوکس رو با کاربرای سیستم عامل های دیگه نشون بدم، اینکه استفاده کننده صرف نیستن :) و این شد که شد :D

 

برای نصب اون میتونید بسته deb اش رو از اینجا بگیرید و برای مشارکت در اون از این آدرس استفاده کنید.

امیدوارم بدردتون بخوره ;)

 

دیلماج، مترجم فارسی تحت خط فرمان!!!

خوب عید سال ۹۱ هم تموم شد و من تو عید علاوه بر کتاب خوندن یه پروژه شخصی کوچیکم نوشتم که میخوام باهاتون به اشتراک بزارم.

این پروژه یه دیکشنریه!

میدونم الان دارین میگین:  “اه باز یکی که فک میکنه برنامه نویسه یـــــــــــــــه دیکشنری نوشت،مرده شورشونو ببرم!  اینا چرا نمیرن یه موضوع جدید پیدا کنن؟”  =))

خوب حق با شماست اما این دیکشنری یه تفاوتاییم داره!

مثلا اینکه توی خط فرمان اجرا میشه و توی همه ترمینال ها بدون تنظیم خاصی برای نمایش فارسی ، معانی رو نشون میده.

شاید بپرسید چه طوری؟ خوب ایدش یهویی امد تو ذهنم که فکر کنم بر میگرده به استعدادم تو ماس مالی کردن مشکلات و دور زدن اونها =))

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

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

اسم این بچه جدیمم گذاشتم “دیلماج” که یه کلمه ترکیه به معنای مترجم که در موردش اینجا بیشتر میتونید بخونید.

پیش نیازهای اجرای این برنامه php5-cli  و php5-gd که بعد از نصب اونها میتونید اسکریپت INSTALL.sh   رو اجرا کنید و اونو نصب کنید .

نحوه کارشم سادس ، بعد نصب مینویسید :

dilmaj <word>

dilmaj <word> a

اولیه ، اولین معنی کلمه رو نشون میده و دومیه تقریبا همه معانی اون کلمه رو .

و همین!

دیلماجو میتونید از اینجا دریافت کنید

امیدوارم خوشتون بیاد و ازش لذت ببرین. مسلما برنامه هنوز ناقصه و خوشحال خواهم شد در تکمیلش کمکم کنید.

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

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

دیشب محمود جان  یکی از دوستان خوب فعال در جامعه متن باز ایران ،  رادیوی جدیدی رو برای جامعه طرفدار فلسفه آزاد / متن باز به نام آزاد باند معرفی کرد.

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

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

در اینکه لینوکس اف ام در کماست و شاید هم مرده شکی نیست اما به نظر من لینوکس اف ام یکی از میراث ارزشمنده جامعه متن باز ایران در چند سال اخیره.

فقط با رفتن به صفحه فعلی linuxfm.com میتونید آرشیو زحمات یک و نیم ساله قشری از جامعه متن باز ایرانو ببینید که با صرف وقت و انرژی و هزینه و با عشق تمام بدون هیچ چشم داشتی ۴۴ برنامه رادیویی رو ایجاد کردن.

لینوکس اف ام برای اولین بار تکنولوژی هایی مثل پادکست و پخش استریمو ارتباطات real time  رو وارد فضای تبلیغی جامعه متن باز ایران کردو این جزو افتخاراتش برای همیشه خواهد بود اما با مشکلات بسیار زیادی هم رو برو شد .

به خاطر نبود یک الگوی منطبق با فضای جامعه ما ۳ بار روش خودش رو عوض کرد به امید دست یافتن به یک الگوی پایدار که متاسفانه در آخر هم به اون نرسید.

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

و حالا من به عنوان اولین کسی که ایدشو مطرح کرد و آخرین کسی که اونو ترک کرد برای خودم هیچ حقی قائل نیستم جز یک احساس پدرانه برای لینوکس اف ام و بر طبق همین احساس میگم که به نظرم جامعه متن باز باید قدر انرژی که صرف ایجاد برندLinuxFM شده رو بدونه و اون برای حفظ اون تلاش کنه.

در اینجا چند شبه و پیشنهاد هست که دوست دارم بنویسم.

احساس میکنم در بعضی از مراحل زندگی اون رادیو، بعضی از دوستان احساس کردن یک مافیا یا یک گروه خاص اونو انحصاری کردن که تصور اشتباهی چون بار ها اعلام کردم هر کسی که بخواد هر گوشه ایشو به دست بگیره با کمال میل پذیرفته خواهد شد کما اینکه مدتی لینوکس اف ام دست بچه های گیلان لاگ بود.

پیشنهاد  یک :

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

دوست دارم در مورد یک مسئله دیگه هم اینجا بنویسم و اون امکان وجود و سالم زیسن چند پروژه همگون در یک جامعس .

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

شاید اشتباه کنم اما در زمینه ی مورد بحثمون این پتانسیلو نمیبینم.

پیشنهاد دوم :

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

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

 

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

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

از اینکه حوصله کردید و تا آخرش خوندین ممنونم :)

 

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

من شخصی هستم شلخته که بعضی وقتا سعی میکنه با کمک نرم افزار ها این اوضاع رو درست تر کنه! مثلا رفتم رو 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

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

استفاده از فایرفاکس به جای یک window manager

بعضی وقتا یه فکرایی میزنه به سرم!

فل مثال اونروز داشتم با فایرفوکس مثل همیشه کار میکردم یهو از خودم پرسیدم :‌” فایرفوکس با این همه امکانات رو نمیشه رو x، به تنهایی بالا اورد و به جای یه window manager ازش استفاده کرد؟ ”

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

Firefly

یک file manager که تحت یه افزونه برای فایرفوکس نوشته شده ولی اشکالات کوچیکی هم داره البته!

 

FireSSH

و با firessh میتونیم به ترمینال خودمون یا یه کارمپیوتر دیگه وصل شیم، گرچه من تو تستم نتونستم وصل شم :D

 

بهرحال من به این رسیدم این ایده شدنیه اما خوب هنوز نمیدونم با این همه window manager که برای لینوکس هست چرا باید این کارو کرد؟

شاید یه سرگرمی گیکی ;)

 

نقل و نبات شماره چهارده (tips & tricks) نصب Zend Optimyzer بر روی VPS

یکی از سایتهای زیر مجموعه من کد هاشو با ZendGuard اینکد کرده بود و برای اجرا شدن کدهاش باید روی سرور Zend Optimizer نصب میشد ! تهران میگفت روی vps نصب شده اما کدها اجرا نمیشدن !

برای تست نصب بودن از این کد استفاده کردم .

دیدم نصب نیستو تهران چرتو پرت میگفته ! بنا بر این دنبال راه حل نصبش گشتم ، اینو پیدا کردم :

Login as root using SSH and run this command and it will install the zend optimizer.

/scripts/installzendopt

Then restart the apache

service httpd restart

To check whether zend optimizer is running..use this command

php -v

It would show ioncube or zend optimizer version

 

اتفاقا راه حل درستیه ولی بازم کار نکرد ! وقتی بیشتر سرچ زدم دیدم zend optimizer‌ برای php  ۵٫۳ نیومده و برای ۵٫۲ به پایینه ! بنا بر این php رو دانگرید کردم و بدون مشکل نصب شد !

پ . ن : گرچه تا حالا اصلا نخواستم کدهامو اینکد کنم یا ببندم ولی جالبه در مورد ioncube و ZendGuard یه تحقیقی بزنم شاید یه روز  خواستم استفاده کنم.

نقل و نبات شماره سیزده (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