خوندن و نوشتن ایمیل با Geary

درباره ایمیل کلاینت Mutt (یه ایمیل کلاینت متنی) گفته شده:

‪All mail clients suck. This one just sucks less.‬

واقعیت اینه که کار با ایمیل کلاینت‌های مرسوم چندان لذت‌بخش نیست:

  • اکثر ایمیل کلاینت‌ها خیلی سنگینن.
  • برای نوشتن یه ایمیل باید دو ساعت شنیدن صدای خرت خرت هارد رو تحمل کنی تا بالا بیاد.
  • اینترفیسشون یک عالمه چیزای اضافه داره که نمی‌خوای.
  • تنظیمشون سخته.

از طرفی برای کار با ایمیل‌های مخصوصا گوگل (که به لطف فیلترنت مقاومتیمون یکی در میون کار می‌کنه) به یه ایمیل کلاینت خوب احتیاجه. واسه همین چند وقتیه با یه ایمیل کلاینت ساده و سرراست کار می‌کنم: Geary
Geary Screenshot
خیلی خیلی سبکه. سریع بالا میاد. برای تنظیمش هم فقط کافیه که یوزر/پس جیمیل رو وارد کنیم. رابط کاربریش هم خیلی خوب و سرراست طراحی شده.

امیدوارم لذت ببرید.

یه makefile کلی برای پروژه‌های ‪C++

اگه makefile پروژه‌های ‪C++‬ رو با روش‌های معمول بنویسیم، مجبوریم که مرتب با هر بار اضافه کردن یه فایل به پروژه makefile رو هم به روز رسانی کنیم. هر بار هم که وابستگی اون فایل تغییر می‌کنه ناچاریم این کار رو دوباره انجام بدیم. دنبال راه حل این مساله بودم که با سوییچ‌های خانواده M کامپایلر گنو آشنا شدم. این سوییچ‌ها به کامپایلر می‌گن که وابستگی یه برنامه رو به فرمت makefile بیرون بکشه. اگه این وابستگی‌ها رو تو یه فایل ذخیره کنیم می‌تونیم بعدا با دستور include از اون‌ها برای معرفی وابستگی‌ها استفاده کنیم.

  • سوییچ M این وابستگی‌ها رو بیرون می‌کشه
  • سوییچ MM مثل M اما فایل‌هایی که تو دایرکتوری‌های سیستم هستن رو به عنوان وابستگی معرفی نمی‌کنه.
  • سوییچ MF خروجی رو تو یه فایل می‌ریزه
  • سوییچ MT هم target مربوط به rule رو عوض می‌کنه. به طور پیش‌فرض قاعده تولید شده به اسم فایل ورودی منهای اسم و دایرکتوری و پسونده. در حالتی که بخوایم قاعدمون اسم دیگه‌ای داشته باشه از این سوییچ استفاده می‌کنیم. مثلا اینجا اسم قاعدمون رو به اسم آبجکت فایل با دایرکتوریش تغییر دادم.

دیگه؟ با اون ‪.PHONY‬ هم به make می‌گم که قاعده‌هایی که بعدش اومده اسم فایل نیست.
این هم makefile ما:

tor روی شبکه محلی

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

اشتراک تور بین همه دستگاه‌ها
تو آدرس ‪/etc/tor‬ فایلی به اسم torrc قرار داره که تنظیمای tor رو نیگه می‌داره. کافیه به ایشون بگیم که کانکشن‌های دستگاه‌های روی شبکه محلی رو قبول کنه. بازش می‌کنیم:
[shell]
sudo vi /etc/tor/torrc
[/shell]
و با این فرض که آی‌پی دستگاه شما ۱۹۲.۱۶۸.۱.۲۰۰باشه، این دو خط رو بهش اضافه می‌کنیم:
[shell]
SocksPort 192.168.1.200:9050
SocksPolicy accept *
[/shell]
خط اول می‌گه که سرویس Socks رو روی اون آدرس هم ارائه بده و خط دوم هم می‌گه که کانکشن‌های وارده از همه کامپیوترهای شبکه رو قبول کن. حالا کافیه تور رو ریستارت کنیم:
[shell]
sudo service tor restart
[/shell]
حالا با تنظیم کردن کامپیوترهای شبکه برای استفاده از پروکسی Socks 5 روی پورت ۹۰۵۰ از ۱۹۲.۱۶۸.۱.۲۰۰ می‌شه از تور این دستگاه استفاده کرد.

مرجع

فایل تنظیم اتوماتیک
اگه دیوایس‌هایی داشته باشیم که نشه برای استفاده از Socks کانفیگشون کرد چی؟ مثلا دیوایس‌های اپل به طرز احمقانه‌ای این قابلیت رو ندارن. راه حل: استفاده از فایل تنظیمات اتوماتیک.

مرحله اول: نصب یه سرور HTTP
اگرچه با SimpleHTTPServer پایتون هم می‌شه این کار رو انجام داد، ولی من webfs رو پیشنهاد می‌کنم که سبک و سادست.
نصبش می‌کنیم:
[bash]
sudo apt-get install webfs
[/bash]
و بعد فایل تنظیماتش رو ویرایش می‌کنیم:
[bash]
sudo vi /etc/webfsd.conf
[/bash]
توی فایل تنظیمات این دو خط رو تغییر می‌دیم:
[bash]
web_root=”/var/www”
web_port=”80″
[/bash]
و البته یادمون نمی‌ره که مطمئن بشیم اون دایرکتوری اونجاست:
[bash]
sudo mkdir -p /var/www
[/bash]
و سرویس محترم رو ری استارت می‌کنیم:
[bash]
sudo service webfs restart
[/bash]

مرجع

مرحله دوم: فایل کانفیگ
توی دایرکتوری ‪/var/www‬ یه فایل به اسم tor.pac با این محتویات می‌سازیم:
[javascript]
function FindProxyForURL(url, host)
{
return “SOCKS 192.168.1.200:9050”;
}
[/javascript]
حالا تو دیوایس‌ها مون میتونیم بگیم که پروکسی اتوماتیکه و فایل کانفیگش هم تو آدرس http://192.168.1.200/tor.pac قرار داره. دقت کنید که اون تیکه http حتما باید باشه.

مرجع

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

mdwiki

گیت‌هاب پر از ایده‌های ناب و عالیه. ایده‌هایی با یک عالمه خلاقیت. یکی از این ایده‌های عالی ایده mdwiki اه. خلاصه ایده اینه: می‌خوایم یه سایت داشته باشیم که صفحاتش فایلهای markdown باشن. قبلن در مورد markdown نوشتم. به طور خلاصه یه فرمت ساده و تمیزه که باهاش خیلی سریع می‌شه متن‌های ساده تهیه کرد.

خوب. با mdwiki کافیه شما فایل‌های markdown تون رو تهیه کنید و با یه فایل index.html پروژه mdwiki با هم تو یه دایرکتوری بذارید. والسلام. موقع باز شدن سایت این اتفاقا می‌افته:

  • index.html تو مرورگر کلاینت لود میشه،
  • حضرت index.html فایل md مربوطه رو می‌گیره،
  • همونجا رو کلاینت پارز می‌کنه،
  • و با تم‌های زیبایی که داره نمایش می‌ده.
  • بدون حتی یه خط کد نویسی. بدون دردسر نصب هزار تا خنزر پنزر و تنظیم چیزای ریز و درشت.

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

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

    خوب آی پی شبکه رو میشه از روی صفحه روتر دید. این آدرس اون صفحست: ۱۹۲.۱۶۸.۱.۲۵۴/status/status_deviceinfo.htm و برای رفتن به اون صفحه هم یوزر (admin) پسورد (۱۲۳۴) می‌خواد. حالا باید یه جوری به خط فرمان بگم که این صفحه رو بخونه. برای این کار از دستور curl استفاده می‌کنم:
    [bash]
    curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm
    [/bash]
    سوییچ s می‌گه مرراحل دریافت نشون داده نشه. خروجی این دستور یه سری کد html اه. بعد باید تو خروجی دنبال IP Address بگردم. چون خود آی پی تو خط بعد از خطی که کلمه IP Address توشه، با سوییچ A1 می‌م هر جا این بود، خط بعدیش رو هم نمایش بده. تا حالا دستورمون این شده:
    [bash]
    curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
    [/bash]
    توی خروجی، آی پی تو خط آخره، پس باید خط آخر رو بکشم بیرون:
    [bash]
    curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
    | tail -n1
    [/bash]
    حالا یه خط دارم که آی پی توشه، کد html هم توشه. کد html از کاراکتر > شروع می‌شه. با دستور کات می‌گم رشته ورودی رو با اون کاراکتر بشکون و فیلد اول رو برگردون:
    [bash]
    curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
    | tail -n1 | cut -d’<' -f1 [/bash] والسلام. آی پیم رو دارم. با این که از قبل کلا می‌دونستم این دستورا هستن، بازم اونا رو با سرچ و سعی و خطا کنار هم چیدم. ولی کل فرایند ۱۰ دقیقه بیشتر ازم وقت نگرفت.