چه کارهای جالبی با گنو/لینوکس انجام می‌دهم : جایگزین کننده خودکار 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 اوبونتو !
آیلین، بیس طراحی وب سایت

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

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

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

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

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

ffmpeg -f alsa -itsoffset 00:00:02.000 -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 10 -i :0.0 -sameq -f mp4 -s wvga -y intro
با اجرای کد بالا در ترمینال لینوکستون ، از اونلحظه  محیط کاری لینوکس و تمام صداها ضبط میشن و هر وقت تصمیم به اتمام این کار گرفتین کافیه q رو بزنید و فایلی به عنوان intro.mp4 تحویل بگیرید یک بار دیگه از قدرت خط فرمان لینوکس لذت ببرید.
پ . ن : بعضی وقتا از بودن تو شبکه های عمومی مثل identi.ca خیلی حال میکنم ، مثلا در لحظه اشنایی من با این کد
پ . ن . ۲ : تفعلی زدیمو امد :
صبحدم مرغ چمن با گل نوخاسته گفت
ناز کم کن که در اين باغ بسی چون تو شکفت
گل بخنديد که از راست نرنجيم ولی هيچ عاشق سخن سخت به معشوق نگفت

نصب فونت های اضافی در لینوکس

خوب امروز هم با خوبی خوشی جلسه دوم زنجان لاگ برگزار شد و دوستان جدیدی پیدا کردم انشاالله در روزهای بعد حتما یه گزارش ازش مینویسم .
و اما یکی از دوستان فکر کنم اسمشون محمد بود که بنده به خاطر وبلاگ چالیست صداشون میکنم چالیست!از من یه سوال پرسیدن که برای اضافه کردن فونت مثلا تاهوما در لینوکس چه کنیم که قول دادم حتما راجع بهش بنویسم البته خدا خواستو بعد از جلسه با اقای اطهری رفتیم شرکت ما و واقعا از علمشون لذت بردم و یکی از چیزهایی که از ایشون اموختم این بود که چه کاری برای اضافه کردن فونت ها انجام بدیم!
اونم اینه که بیاییم در دایرکتوری home یه پوشه fonts .   بسازیم . دوستان توجه داشته باشن که
.
باعث میشه در لینوکس وقتی اول فایل ها و فولدر ها باشه اون نا پیدا یا هیدن شه!
خوب بعد از ساخت باید یه جوری این داکتوری مخفی تونو ببینید و برید توش مثلا من که از کوبونتو استفاده میکنم از منوی
view
گزینه
show hidden files
رو زدم و بعد رفتم داخل پوشه فونت ها و فونتهای تاهوما و ایران نستعلیغو در اون کپی کردم و بعد خیلی راحت تونستم از این فونت ها در برنامه
open office
استفاده کنم.امیدوارم موفید بوده باشه

جنگ من برای ماندگاری در لینوکس

چند سالی هست که درباره لینوکس مطالعه میکنم و چند باری هم با انواع توزیع ها بهش ناخنک زدم!!!
این سه چها روز عیدم با اومدن خط ADSL پر سرعت با توجه به یه قانونی که خودم کشف کردم سعی کردم مهاجرت کنم رو لینوکس
اون قانون میگه در صورتی از لینوکس لذت میبری که یه خط اینترنته خوبم داشته باشی!!!
خلاصه اوبونتو ۸ رو پس از برسی رو توزیع های محبوبم که پارسیکسو سوسه هم جزوشونن انتخاب کردمو پس از نصب ٍ اونو برا زبان فارسی بهینش کردم!!!
همینجا از دوستانی که http://wiki.ubuntu-ir.org/ رو ساختن متشکرم چون خیلی کمکم کرد!

بعدشم xampp مخصوص لینوکسو دانلود کردم و راه اندازیش کردم!!!

حالا یه محیط خوب برا اکثر کارهای غیر حرفه ایم دارم! میتونم وب گردی کنم و چت کنم و وبلاگمو مثل همین الان اپدیت کنم یا به تحقیقاتم برسم بدون اینکه مشکلی با فارسی داشته باشم

البته که مشکلاتی هم داشتم مثل خطای ۱۷ در grub یا کم بودن جام بخاطر یه اشتباه و تغییر ناپذیری سایز این پارتیشنم بخاطر خطاهایی که اصلا نمیدونم چرا patition magic یا gparted بهم میدن!

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

ولی یه چیز خیلی مهم هست که هنوز بهش دست نیافتم و اونم اینه که باید بتونی نونی که با ویندوز میخوری رو با لینوکسم بخوری!!! برا من که طراحی وب با php میکنم خیلی راحت با راه اندازی زمپ زمینه اماده شد ولی مس‍‍له یه ide خوبه

بهترین گزینه که پیدا کردم aptana هست

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

an SWT error has eccorred

با اینکه جدیدترین بسته های جاوا رو نصب کردم بازم فایده نکرد و در مجموع فعلا نمیتونم رو لینوکس کارهای طراحی وبمو بکنم!

البته تونستم یه ادیتور کار راه بنداز خوب!! به نام ماهی ابی پیدا کنم:

http://bluefish.openoffice.nl/index.html

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

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

در اخر یه اسکرین شات از دسکتاپ لینوکسیم میزارم:

screenshot

و در کل حداقلش اینه که لا اقل به کسی مدیون نمیشم که از نرم افزارش به صورتی دزدی استفاده میکنییم! یه دوبیتی از دبیرستان یادم اومد که هر چند بی ربط ولی اینجا مینویسمش ! فکر کنم از باباطاهر بود:

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