گنجه

# tail -f /var/log/experience

دبیَن0 سامانهٔ عامل1 محبوب من هست.

موج زدن روح آزادی نرم‌افزار رو توی دبین حس می‌کنم.

بخش عظیمی از همهٔ نرم‌افزارهای آزاد دنیا رو می‌شه توی مخزن2های دبین، آمادهٔ نصب پیدا کرد؛ الان حدود ۲۰۰۰۰ تا بسته3 در مخازن رسمی4 هست.

سامانهٔ مدیریت بسته‌هاش5، به نام APT (مخفف «ابزار بسته‌بندی پیش‌رفته»6)، بسیار تمیز و خوش‌دست هست.

اگر سامانه‌ای حقیقتاً پایدار7 بخوام، دبین stable رو نصب می‌کنم. اگر پایداری برام کم‌تر از به‌روز8 بودن نرم‌افزارها مهم باشه (مثلاً برای رایانهٔ منزل)، دبین unstable + experimental رو نصب می‌کنم. اگر روی سامانهٔ پایدارم آخرین نسخهٔ بسته‌های خاصی رو بخوام هم به سادگی می‌تونم بسته‌های deb رو جدا بگیرم و نصب کنم، یا با تنظیم ‎/etc/apt/preferences کار رو به دست استاد APT بسپارم (به man apt_preferences مراجعه کنید).

قبل از این که خبر انتشار KDE 4.2 توی پایگاه رسمی KDE اعلام بشه، بسته‌های KDE 4.2 توی مخزن دبین experimental بود و داشتم نصبش می‌کردم!

نرم‌افزارهای دوست‌داشتنی‌ای مثل VirtualBox رو که هم ویرایش آزاد دارند، و هم ویرایش غیرآزاد، و البته گاهی در پایگاه9 رسمیشون ایران عزیز رو تحریم کرده‌اند، از مخازن دبین به راحتی نصب می‌کنم بدون این که نگران تحریم و یا آلوده شدن رایانه‌ام به نسخهٔ غیرآزادشون باشم. همهٔ نرم‌افزارهای بخش10 main، آزاد هستند و به هیچ نرم‌افزار غیرآزادی وابستگی11 ندارند.

بعضی نرم‌افزارهای غیرآزاد مثل افزونهٔ12 Flash، که ناچار از استفاده‌شون هستم رو می‌تونم بدون به هم زدن یک‌پارچگی سامانه‌ام نصب کنم. بخش‌های contrib و non-free حاوی بعضی از نرم‌افزارهای غیرآزاد پراستفاده هستند.

یادم نره بگم که دبین برای تعداد زیادی معماری13 مختلف رایانه وجود داره. از x86 و AMD64 بگیر تا MIPS و ARM و PowerPC و SPARC و Alpha و … (برای فهرست کاملش http://www.debian.org/ports/‎ رو ببینید)

با دبین به هستهٔ لینوکس14 محدود نیستم؛ می‌شه دبین رو با هستهٔ15 FreeBSD16 یا NetBSD17 یا Hurd18 یا OpenSolaris19 یا حتی20 Darwin/XNU (هستهٔ Mac OS X) استفاده کرد! شما رو نمی‌دونم، ولی این برای من خیلی مهم و هم‌چنین خیلی هیجان‌انگیزه! مثلاً به این فکر کنید که می‌تونید توی محیط آشنا و دوست‌داشتنی دبین، به کامل‌ترین پیاده‌سازی سامانهٔ پروندهٔ21 قدرت‌مند ZFS که توی OpenSolaris هست دست‌رسی داشته باشید.

راستی یادمون نره که اوبونتو22 بچهٔ دبین هست.

این‌جوری‌هاست که بهش می‌گم حضرت دبین!

  1. Debian []
  2. Operating System []
  3. Repository []
  4. Package []
  5. Official []
  6. Package Management []
  7. Advanced Packaging Tool []
  8. Stable []
  9. Up-to-date []
  10. Site []
  11. Section []
  12. Dependency []
  13. Plugin []
  14. Architecture []
  15. Linux []
  16. Kernel []
  17. Debian GNU/kFreeBSD []
  18. Debian GNU/NetBSD []
  19. Debian GNU/Hurd []
  20. Nexenta []
  21. GNU-Darwin []
  22. File System []
  23. Ubuntu []

از وقتی با Greasemonkey آشنا شده‌ام توقعم از تار1 خیلی بالا رفته.

با این افزونهٔ Firefox می‌شه در طرف مخدوم2، به هر صفحه‌ای کدهای JavaScript دل‌خواه رو اضافه کرد. علاوه بر کلی دست‌نوشتهٔ3 آماده که توی http://userscripts.org براش وجود داره، خودمون هم می‌تونیم به راحتی براش دست‌نوشته بنویسیم. حالا اگر قدرت JavaScript رو بیاری تو ذهنت می‌بینی که چه کارها می‌شه به کمک این میمون چرب (!) کرد.

برای شروع ماجراجویی، کمی از http://diveintogreasemonkey.org رو خوندم. نقطهٔ شروع بسیار خوبی بود.

یک دست‌نوشته به نام فارسنده یا Persianizer که به شیوهٔ بِکَن-بچسبون4 ساخته‌ام، همهٔ رقم‌های انگلیسی و «ي» و «ك»های عربی توی صفحهٔ بارگذاری شده رو به معادل فارسیشون تبدیل می‌کنه. بس که اون صفحه‌های فارسی پر از «ي» حالم رو بد می‌کنه! فقط موقع استفاده حواست باشه پایگاه‌هایی که قراره فارسنده روشون کار بکنه رو خوب انتخاب کنی؛ پیش‌فرض‌هاش خوب نیستند.

البته یکی از شرایط من (و خیلی‌های دیگر) برای استفاده از یک فن‌آوری، انحصاری نبودنش هست که خوش‌بختانه افزونه‌هایی سازگار با Greasemonkey برای مرورگرهای مهم دیگه (از جمله Konqueror) هم وجود داره.

نکتهٔ پایانی این که اگر کاربر Greasemonkey باشی، افزونهٔ Greasefire هم احتمالاً برات جالب هست.

این هم فهرست دست‌نوشته‌های محبوب من:
http://userscripts.org/users/73214/favorites

  1. Web []
  2. Client Side []
  3. Script []
  4. Copy-Paste []

اگر برنامه‌نویس C++‎ باشی، حتماً تا حالا مورد آزار و اذیت پیغام‌های خطای سرسام‌آور هم‌گردان0 در مورد STL قرار گرفته‌ای. مثلاً این:

testmm2.cpp:31: error: no matching function for call to ‘std::multimap<int*, int, std::less<int*>, std::allocator<std::pair<int* const, int> > >::insert(int)’
/usr/include/c++/4.3/bits/stl_multimap.h:407: note: candidates are: typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const_Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator std::multimap<_Key, _Tp, _Compare, _Alloc>::insert(const std::pair<const _Key, _Tp>&) [with _Key = int*, _Tp = int, _Compare = std::less<int*>, _Alloc = std::allocator<std::pair<int* const, int> >]
/usr/include/c++/4.3/bits/stl_multimap.h:431: note:                 typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator std::multimap<_Key, _Tp, _Compare, _Alloc>::insert(typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator, const std::pair<const _Key, _Tp>&) [with _Key = int*, _Tp = int, _Compare = std::less<int*>, _Alloc = std::allocator<std::pair<int* const, int> >]


حالا این یکی بود. وقتی ده-پونزده تا از این‌ها یک‌جا رخ می‌ده، خیلی افتضاح می‌شه.

مدت‌ها با این مشکل کنار اومده بودم و دردش رو تحمل می‌کردم. اما اخیراً یک راه نجات یافتم: ابزاری به نام STLFilt. یک نرم‌افزار آزاد هست که خروجی هم‌گردان C++‎ رو می‌گیره و اون پیغام‌های وحشت‌ناک رو مهربون می‌کنه. مثلاً پیغام بالا رو تبدیل می‌کنه به این:

testmm2.cpp:31: error: No match for ‘multimap<int *, int>::insert(int)’
stl_multimap.h:407: candidates are: map<int *, int>::iter multimap<int *, int>
    ::insert(const pair<const int *, int> &)
stl_multimap.h:431: map<
        int *, int
    >::iter multimap<
        int *, int
    >::insert(map<int *, int>::iter, const pair<const int *, int> &)

آخش! حالا می‌شه خوندش!

برای استفاده از STLFilt اول باید بستهٔ مربوط به هم‌گردانت رو بگیری. مثلاً gstlfilt.zip برای G++‎. توش کلی پرونده هست که همه رو بی‌خیال می‌شی به جز gSTLFilt.pl که اصل کار رو انجام می‌ده. از stdin می‌خونه و توی stdout می‌نویسه. کاری که من کردم این بود1:

sudo su
F=/usr/local/bin/stlfilt.pl
echo '#!/usr/bin/perl' >$F
cat gSTLFilt.pl >>$F
chmod +x $F

و برای استفاده:

make 2>&1 | stlfilt.pl

برای این که هر بار نخوام stderr دستور ساخت2 (مثلاً make) رو به stdoutش redirect3 کنم، دست‌نوشتهٔ4 /usr/local/bin/stlfilt رو با این محتوا ساختم:

#!/bin/sh
"$@" 2>&1 | stlfilt.pl

و chmod +x هم یادم نره. ;)
حالا این‌جوری استفاده می‌شه:

stlfilt make

با دست‌نوشته‌ها زندگی زیباتره! :)

ویرایش: امید آن می‌رود که با معرفی «مفهوم»5ها در C++0x (به زودی!) کل مشکل از بیخ حل بشه و دیگه نیازی به ابزار اضافی نباشه.

  1. Compiler []
  2. مثل همیشه نقل به مضمون و آزمایش‌نشده []
  3. Build []
  4. معادل خوبی براش داری بگو []
  5. Script []
  6. Concept []


بسم الله الرحمن الرحیم

راه‌رو گر صد هنر دارد توکل بایدش

برگه‌ها

رایانه‌ای‌ها

آمار

در کل 30 بیننده برای این صفحه
امروز 4 بیننده
در کل 2035 بیننده
از 2009/09/11