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

دو سه روز قبل مسابقه ای داشتیم برای حدس سورپرایز اوبونتو و بعدش هم کسانی که جواب تا حدی درست داده بودن و قرار بود در قرعه کشی حضور داشته باشن، اعلام شدن. حالا لحظه قرعه کشی فرا رسیده! برنامه قرعه کشی رو علیرضا داوطلبانه نوشت و من هم همون رو استفاده می‌کنم. برنامه نسبتا عجیبی است که این فایل رو می‌گیره:

 3 AliBehjati
 3 Mohammad
 3 Hesam
 1 Ehsan
 1 Amir1207
 1 Ali1217
 6 Ali0202
 1 Voltan
 2 Amir0119
 1 Saeed
 2 Jamshid
 2 Matin
 3 Narcissus
 2 MassoudM

و بعد از ساخت یک فایل جدید که توش هر اسم به تعداد شانسش تکرار شده و صدا زدن پایتون برای عدد رندم، یک خط اتفاقی رو نشون می ده. برنامه درسته و ما هم از همین استفاده می کنیم. البته من خروجی رو با cowsay ایجاد کردم که هیجان انگیزتر بشه (اگر این دستور رو بلد نیستین همین الان یاد بگیرین و لذتش رو ببرین!). سورس برنامه در نهایت اینه:

[jadi@jedora ghore.sh]$ cat ghore_keshi.sh 
#! /bin/bash

if [ ! -f "gklist" ]; then
    echo "Write names and scores to 'gklist' file and execute this script at the same directory"
    exit 1
fi

if [ ! -d /tmp/gk ]; then
    mkdir /tmp/gk
else
    rm /tmp/gk/*
fi
cp "gklist" /tmp/gk
cd /tmp/gk

for ((i=0; i<`cat "gklist" | wc -l`; i++)); do
    S="`cat "gklist" | head -$[i+1] | tail -1`"
    NUM="`echo "$S" | awk '{ print $1 }'`"
    NAME="$(cat "gklist" | head -$[i+1] | tail -1 | cut -d\" -f2)"
    for ((j=0; j<$NUM; j++)); do
	echo $NAME >> result
    done
done

LL="`cat "result" | wc -l`"
RANDNUM="`python -c "import random;print(random.randint(1, $LL))"`"
barande=`cat "result" | head -$RANDNUM | tail -1 | cut -d" " -f2 `
cowsay Winner of $1 $barande

نکته بسیار مهم اینه که در یک رای گیری / قرعه کشی و … تا وقتی از نرم افزار آزاد و پروسه‌های شفاف استفاده نشده یعنی یک جای کار می لنگه (منظور فقط تقلب و خباثت نیست. این لنگش(!) ممکنه سواد یا شعور یا دسترسی فنی برگزار کننده باشه).

حالا که همه پروسه‌ها شفافن و هر کسی هم به سورس برنامه انتخاباتی دسترسی داره، می ریم سراغ قرعه کشی. اگر یک سیستم درست داشتیم این بخش هم باید به شکل مستقیم در اینترنت پخش می شد ولی من به خاطر لنگیدن اینترنت درست، ضبطش کردم و آفلاین گذاشتمش روی اینترنت که شبهات به حداقل برسه. با یک خط دستور دوبار برنامه رو اجرا می کنیم برای دو جایزه: اولی تی شرت و دومی ماگ. دعا هم کنیم که برنده تکراری در نیاد! ویدئوی برگزاری رو ببینین؛ با تشکر از شرکت معظم www.aivivid.com که اسپانسری تی شرت مجری رو بر عهده داشتن



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

  • برنده اول مسعود.ام تنها شرکت کننده ما از گوگل پلاس با شانس ۲ که برنده این تی شرت میشه:
  • و برنده دوم متین – اونهم با شانس دو – که این ماگ رو از اسپانسر مسابقه یعنی سیتو دریافت می کنه

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

پ.ن. ویدئو رو با این دستور گنو/لینوکسی کوچیک کردم

 $ffmpeg -i DSCN3085.AVI -ab 56k -ar 22050 -b 300k -r 15 -s 480x360 DSCN3085.flv                             

قدم های بعد از نصب فدورا

توجه: این مطلب تا حدی یادداشت شخصی است برای رجوع های آینده (: ولی خب شاید به درد کس دیگه هم بخوره (:

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

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

برای آپدیت توی فدورا:

yum update

و بعد از کلی انتظار با اینترنت اسلامی عزیزمون، بالاخره سیستم آپدیت میشه… برای من تقریبا شش ساعت!

قدم بعدی نصب آر پی ام فیوژن است که کلی بسته اضافی توش داره. به سادگی:


su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm'

کار بعدی نصب بسته‌های عمومی که همیشه استفاده می کنم است:


yum install axel  feh  pidgin parcellite   Zim tor privoxy   audacity goldendict  vidalia \ 
    wget  kernel-devel  gcc make ImageMagick polipo gimp libreoffice vlc task \
    lftp goldendict parcellite tilda @lxde gnome-tweak-tool thunderbird apache2\
     mysql-server php5 kupfer

بعدش می ریم سراغ نرم افزارهای خاص:

اول جاوا


#yum install java-1.6.0-openjdk-plugin

بعدش فلش


#yum --nogpgcheck install http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
#yum install --exclude=AdobeReader* flash-plugin nspluginwrapper.{i686,x86_64} \
     pulseaudio-libs.i686 alsa-plugins-pulseaudio.i686 libcurl.i686
#mozilla-plugin-config -i -g -v

و برای دراپ باکس رفتن به این صفحه و پیگیری قدم ها

برای فیلم و صدا و غیره:


yum install  gstreamer-plugins-good gstreamer-plugins-ugly gstreamer-plugins-bad libdvdread \
    libdvdcss libdvdnav  audacious-plugins-freeworld-mp3 

و یک فدورای شاد داریم برای استفاده های روزمره (:

پ.ن. دو نکته رو ساسان در کامنت اضافه کرده. اولی نصب sudo که مجبور نباشیم هی سو کنیم و دومی خاموش کردن اس ای لینوکس با ادیت کردن /etc/selinux/config

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

یکی از دوستان بهم ایمیل زده و خواسته کمکش کنم در یک اسکریپ که ثانیه شماری رو توی صفحه وب نشون بده. من برنامه نویس جاوا اسکریپت نیستم ولی راه حل چیزی است که باید بهش بگیم Lego Programming.

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

دقت کنین! این قطعات رو باید بفهمیم! یک آفت بزرگ که من دارم همه می بینم (بخصوص توی فروم های لینوکسی) کپی پیست است. چیزی که نمی فهمین رو کپی پیست نکنین. چیزها رو پیدا کنین، بفهمین، یاد بگیرین و کپی پیست کنین و تغییر بدین. مثلا من برای کد بالا یک سرچ ساده کردم به دنبال java script to count secconds و روی اولین گزینه کردم و رسیدم به این کد قشنگ:

<table border="0">
<tr>
<td align="center"><font face="Arial"><strong>You
have
visited my page for:</strong></font></td>
<td align="center"><form name="d">
<p><input type="text" size="8"
name="d2"></p>
</form>
</td>
<td align="center"><font
face="Arial"><strong>seconds!</strong></font></td>
</tr>
</table>

<script>
<!–
/*By George Chiang. (JK’s ultimate JavaScript tutorial and free JavaScripts site!)
http://www.javascriptkit.com
Credit MUST stay intact for use*/
var milisec=0
var seconds=0
document.d.d2.value=’0′
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else
milisec+=1
document.d.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()
//–>
</script>

دقیقا چیزی که من می خوام نیست.. پس کد رو می خونم. دو تا متغیر داره milisec و seconds. کافیه ثانیه رو تنظیم کنم رو چیزی که می خوام مثلا کد رو عوض کنم به seconds=1000 و توی خروجی هم کلا هزارم ثانیه رو نمایش ندم یعنی: document.d.d2.value=seconds و خلاص (: به همین سادگی. لگو بازی تموم شد می ریم خونه هامون (:

You have visited my page for (starting from 1000 for fun):

seconds!

نکته ۱. این کد کپی رایت داره! نگاهش کنین و ازش یاد بگیرین و خودتون بدون قسمت های اضافی (مثلا دهم ثانیه شمار) دوباره بنویسینش تا بشه مال خودتون و ترجیحا آزاد (با لیسانس جی پی ال ۲ یا ۳) منتشرش کنین (:
نکته ۲. از لگو پروگرمینگ که حرف زدیم جا داره یاد بکنیم از لغت مشابهش زبون برنامه نویسی لوگو (َLogo) که ماروین مینسکی بزرگ از بنیانگذارانش بود و برای آموزش برنامه نویسی به بچه ها طراحی شده بود و همسن های من برنامه نویسی رو باهاش یاد گرفتن (:

چرا گنو/لینوکس رو دوست دارم: شیوه گوش کردن من به پادکست

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

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

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

هاها.. دیدین چه عالیه؟! اون ابر همیشه نشون دهنده اینترنت است و اینحا نشون دهنده یک کامپیوتر متصل به اینترنت (هاست).

قدم اول) دریافت پادکست ها

من برای پادکست هام همیشه از gpodder استفاده می کردم. یک برنامه عالی برای مدیریت پادکست. اگر در یک کشور درست زندگی می کردم همون رو روی گوشی هم نصب می کردم و فهرست رو بهش می دادم و روزی یکبار خودش رو آپدیت می کرد. اما اینجا باید هم بهش بگم از فیلتر بگذره و هم دردسر اینو داشته باشم که سرعتش خیلی کمه و هی توی دانلود پادکست ها (که بین ده تا پنجاه مگ هستن و گاهی صد مگ) قطع می شد و … کاری که من کردم اینه که نسخه کامندلاین همون برنامه رو روی سرورم نصب کردم. مثلا برای مشترک شدن توی رادیو گیک می تونم بهش بگم:

$gpo subscribe http://feeds.feedburner.com/radiojadi

اگر فکر می کنید کامند لاین سخته به این فکر کنین که باید یک برنامه گرافیکی رو اجرا می کردم، بعد دستم رو از کیبورد بر می داشتم می ذاشتم روی ماوس بعد می رفتم روی منوی پادکست ها بعد اضافه کردن رو می زدم بعد در جایی که ظاهر می شد کلیک می کردم و دستم رو از روی ماوس می آوردم روی کیبورد و این رو می زدم و بعد دوباره می رفتم روی ماوس و اوکی رو فشار می دادم – اگر مایکروسافت برنامه رو نوشته بود احتمالا یک پنجره هم ظاهر می شد که می گفت «پادکست اضافه شد» و باید دوباره اوکی رو می زدم ((:

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

$gpo update
$gpo upgrade

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

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

قدم دوم) انتقال به پی سی

برای انتقال پادکست ها از سرور به پی سی راه های مختلفی هست. مثلا می شد من هر روز یک rsync اجرا کنم که این دو دایرکتوری با هم سینک بشن یا کپی کنم یا اف تی پی یا هر چی… ولی من در نهایت استفاده از dropbox رو ترجیح دادم. الان یک دراپ باکس روی سرور در حال اجرا است و یک دراپ باکس روی کامپیوترم و این دو اکانت فقط یک فولدر رو با هم سینک نگه می‌دارن. برای گفتن به دراپ باکس که فلان دایرکتوری که پادکست های هر دو طرف قراره توش باشن رو سینک کنه، به سادگی یک سافت لینک ساختم از فولدر پادکست ها توی فولدر مشترک دو تا دراپ باکس.

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

مشخصه که سانسورچی دراپ باکس رو هم کامل ببنده، می شه رفت سراغ یک سیستم دیگه و قدم دوم رو اجرا کرد و حینش هم فاتحه ای خوند برای پدر و مادر طرف – فاتحه حتما مال مرده نیست. خیلی از زنده ها و به ظاهر زنده ها هم بهش احتیاج دارن (:

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

قلق کنکوری: من پروکسی محل کارم رو دادم به دراپ باکس در نتیجه دراپ باکس فقط توی محل کار می تونه کار کنه (: نتیجه اش اینه که پهنای باند محدود خونه ام مصرف نمی شه و پادکست هام فقط توی شرکت آپدیت می شن.

قدم سوم) انتقال به تبلت

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

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


jadi@jabayon ~ $ podcast.sync.media.sh

بله بله!‌ داخلش مهمه.. اینجاست:


jadi@jabayon ~ $ cat ~/bin/podcast.sync.media.sh 
#!/bin/sh

rsync -vr ~/folan/bahman/gpodder-downloads/ /media/3E61-0413/Music/podcasts/
echo press enter to delete all podcast files from the dropbox
read
find /home/jadi/Dropbox/jadis/gpodder-downloads/  -type f -exec rm "{}" \;
echo press enter to unmount the tablet
read
umount /media/3E61-0413

اول دایرکتوری ای که فایل های جدید توش هستن رو با دایرکتوری موزیک روی تبلت سینک می کنه. بعد من یک انتر می زنم تا دنبال همه فایل های توی دایرکتوری سینک شده دراپ باکس بگرده و همه فایلهاش رو پاک کنه (چون دراپ باکس است از رو سرور و کامپیوتر خونه هم پاک می شن)‌ و بعد که من یک دگمه دیگه زدم تبلت رو آنماونت می کنه. همین!

بله می دونم این قدم پرفکت نیست. می شد وایرلس باشه،‌ می شد خودش وصل شدن رو تشخیص بده و اگر این دستگاه خاص وصل شد شروع به کار کنه و … ولی برای من فعلا بسه و به اندازه کافی بانمک (:

چرا اینقدر سخت؟

از این راحت تر تصور می کنید؟ من هیچ کاری نمی کنم… هر وقت اینترنت بود بدون دغدغه سرعت و سانسور و قطع و وصل شدن و … پادکست ها روی همه دستگاه های مختلفم کپی می شن و هر وقت خواستم ببرم روی تبلت، با سیم وصلش می کنم و یک دستور اینکار رو می کنه. روش های «ساده»تر به معنی «قابل فهم تر» داریم ولی روش ساده تر از این به معنی «کاربردی تر و سریع تر» از نظر من کمه و خوشحال می شم بشنوم (نگین اول فلان برنامه رو باز کنم بعد روی فلان جاش کلیک کنم بعد دگمه آپدت رو بزنم بعد دستگاه رو وصل کنم بعد رایت کلیک کنم بگم سینک بعد روی safe remove کلیک کنم – این روش سینک کردم در کمتر از یک ثانیه شروع می شه (: ).

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

من الان با این روشم راحتم چون یک دایرکتوری جادویی دارم که هر وقت نگاهش می کنم یکسری فایل جذاب برای شنیدن توش هست (:

و چجوری گوش می دم؟

معمولا روی اندرویدم با برنامه Astro Player. یادش نگه می داره هر فایل تا کجاش گوش شده و راحته. توی ماشین بلوتوث رو روشن می کنم و پادکست ها رو پخش می کنم و توی خونه پخش معمولی و توی پیاده روی با هدفون. صبح ها موقع صبحانه تصویری ها رو نگاه می کنم (TED) و اونهایی که خیلی کشدار هستن رو توی حموم که بخش بزرگی اش رو نمی شنوم و رد می شه می ره (:

حالا همه چیز رو می دونین (: سوالی نبود؟ بذارین حداقل یک بار دیگه این عکس قشنگ رو بذارم (:

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

جادی می شه یک لینک توی سایتت درست کنی که همیشه به آخرین فایل پادکست رادیو گیک اشاره کنه؟

کار که نشد نداره. خب از نظر من RSSها درست شدن برای این ولی شاید یکی بخواد یک شورتکات داشته باشه روی گوشی اش که هر وقت فشار داد مشغول دانلود / پخش رادیوگیک آخر بشه. برای ما هم یک لینوکس-بازی جذابه. خب اول پیش فرض ها!

۱- من همه فایل ها رو توی مسیر public_html/audio آپلود می کنم
۲- اسم فایل همیشه اینطوری است: jadi-net_radio-geek_014_nofooze_ettelaat.mp3 که تیکه اولش ثابته

پس کافیه همه فایل های اون مسیر رو بگیرم:

 find /home/jadi/public_html/audio/ -type f -name "jadi-net*mp3"

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

 find /home/jadi/public_html/audio/ -type f -name "jadi-net*mp3" | sort

و در نهایت خط آخرش رو جدا کنم:

 find /home/jadi/public_html/audio/ -type f -name "jadi-net*mp3" | sort | tail -1

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

 ln -s `find /home/jadi/public_html/audio/ -type f -name "jadi-net*mp3" | \
        sort | tail -1` /home/jadi/public_html/radiogeek.mp3

و کافیه این رو بذارم توی یک کرون تب تا هر روز ساعت ۲ ظهر یکبار اجرا بشه. با اینکار آخرین شماره پادکست همیشه از این آدرس در دسترس خواهد بود: http://jadi.net/radiogeek.mp3 (:

معکوس کردن جملات یک متن

؟نینک سوکعم ور هلمج کی میشاب هتشاد مزال هدموا شیپ الاح ات

یا در اصل

تا حالا پیش اومده لازم داشته باشیم یک جمله رو معکوس کنین؟

یکی از دوستان چنین نیازی داشت، ازم کمک خواست و من این صفحه رو براش درست کردم:

http://jadi.net/makoos

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

نکته ۱: دستور tac که برعکس cat است اینجا کاربرد مناسب نداره چون جای خطوط رو هم جابجا می کنه. البته شاید سوییچی برای حل اون مشکل باشه. من چک نکردم.

نکته ۲: Reith به دستور rev اشاره کرد. دقیقا همینکار رو میکنه (: می شد به جای چند خط پی اچ پی فقط خروجی رو بدم به rev و برگردونم و جو «چرا لینوکس رو دوست دارم» به جریان بدم‌ (: البته به شرطی که بچه ها قول می دادن چیز خاصی توش تزریق نکنن (((:

برای پادکسترها: ضبط صدای خوب با حداقل هزینه

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

۱- استفاده از یک کارت صوتی اکسترنال

وقتی لپ تاپ دارین و باهاش صدا ضبط می کنین، لازمه که از یک میکروفون استفاده کنین. میکروفون استاندارد روی لپ تاپ معمولا کیفیت خوبی نداره و در حد چت صوتی طراحی شده و تقریبا همه اولین کاری که می کنیم خریدن یک میکروفون است. اما چیزی که معمولا بهش توجه نمی کنیم کارت صوتیه. کارت صوتی توی لپ تاپ کیفیت حرفه ای نداره، ما هم کارت صوتی حرفه ای لازم نداریم اما چیزی که لازم داریم یک کارت است که «خارج» از لپ تاپ باشه. با اینکار بخش زیادی از نویزهای روی مادربرد حذف می شه و کیفیت صدا حتی با یک کارت صوتی ده هزار تومنی هم به شکل قابل ملاحظه‌ای بهبود پیدا می کنه. معلومه که اگر بخواین صدا رو یک کم دیگه بهتر کنین می تونین چند صد هزار تومن خرج میکروفون و کارت صدا کنین که از نظر من هیچ لزومی نداره.

۲- کم کردن نویز دستگاه

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

۳- هاه گیر

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

توضیح از مه رود: تو انگلیسی به “هاه گیر” pop filter یا pop shield میگن. تو فارسی هم من پت گیر شنیدم، شاید چون هم “پ” و هم “ت” همین مشکل رو ایجاد میکنن. جلوی تف رو هم میگیره.

امیرحسین: من پدرم استودیو ضبط فیلم داره واسه همین با این ” هاه گیر ” که گفتی آشنام!
بهش میگن ” بادگیر ” !

۴- نویز گیری

نویز گیری دو بخش جدا است: پیدا کردن نویز و گرفتنش! اما بذاریم همراه این قلق یک قلق دیگه رو بگم: برنامه ضبط صدا رو که باز کردین، قارتی شروع به ضبط نکنین. همیشه قبل و بعد از متن اصلی، ده ثانیه خالی ضبط کنین. یعنی دگمه شروع ضبط رو بزنین و بدون اینکه حرف بزنین اجازه بدین برنامه چیز ضبط کنه. ده ثانیه ای صبر کنین. اولا می بینین که چقدر نویز در حال ضبط است (اگر در حینی که حرف نمی زنین نوار کلفت است یعنی ولوم میکروفون رو باید کم کنین چون عملا دارین نویز قوی ضبط می کنین) و ثانیا معیاری دارین برای حذف نویز. حذف نویز در برنامه ای که من استفاده می کنم (Audacity) یک عمل دو مرحله ای است. در مرحله اول باید اون ده ثانیه که بدون حرف زدن ضبط شده رو انتخاب کنید و از بخش Noise Removal گزینه Get Noise Profile رو انتخاب کنید:

حالا برنامه آوداسیتی پروفایل نویز سیستم شما رو داره. اینبار باید همه صدا رو انتخاب کنید (ctrl+a) یا اصولا انتخاب نکردن هیچ چیز و دوباره به بخش Noise Removal برین و اینبار نویز رو حذف کنین. دقت کنید که در تصویر بالا من صدای میکروفون رو زیادی بلند کردم و حتی وقتی حرف نمی زنم و هم مقدار زیادی نویز توی سیستم هست.

۵- محتوای خوب تولید کنید

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

نکته جایزه

این تجربه شخصی ام است: من هی ضبط رو قطع و وصل نمی کنم. یک ضرب ضبط می کنم و بعدا توی ادیت بخش هایی که نمی خوام یا دوباره خوندم رو حذف می کنم. روش راحت کردن کارم هم اینه که هر جا فکر کردم خراب شده و باید از چند جمله قبل بخونم، محکم توی میکروفون فوت می کنم، چند لحظه صبر می کنم و از سر پاراگراف یا جمله ای که خراب شده ادامه می دم. فوت؟ فوت مال اینه که بعدا موقع ادیت راحت اونجای صدا دیده می شه و می دونم که باید اونجا رو ادیت کنم (: می شه بهش گفت فوت کوزه گری من‌ (:

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

چرا گنو/لینوکس را دوست دارم: بررسی سال های تولد در اطلاعات افشا شده ۳۰۰۰۰۰۰ کارت بانکی

در بخش کامنت های مطلب نقدی بر برنامه بی بی سی در مورد جریان انتشار سه میلیون کارت اعتباری ، همایون گفته بود که:

درود. کارهای آماری جالبی میشه با داده‌ها انجام داد. به عنوان مثال احتمال این که آدمها تاریخ تولدشون رو به عنوان رمز انتخاب کنن بالاست. به دنبال ۱۳۶ بگردبن در فهرست رمزها و مقایسه‌اش کنین با هر عدد ۳ رقمی دیگه‌ای. (۱۳۷ و ۱۳۵ و ۱۳۴ هم تعدادشون بالاست). من اگه دنبال دزدی بودم از اینجا شروع میکردم.

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

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

اگر هنوز با من هستین بگم که اینکارها دقیقا به همین ترتیب انجام شدن و مطمئنا روش های بهتری دارن…. در اصل شما دارین چرک نویس رو می خونین تا ببینین قدم ها چطوری برداشته شدن.

در قدم اول همه صفحات بانک تجارت رو باز می کنم، با ctrl+A متنشون رو کپی می کنم و توی یک ادیتور متنی paste می کنم. من توی لینوکس برای اینکار از gedit استفاده کردم که ادیتور ساده و دم دستی گنوم است… مشخصه که اگر توی ویندوز بودم خود این یک ماجرا بود که کدوم ادیتور ممکنه بتونه این پیست رو قبول کنه و آخ نگه.

به خاطر کپی پیست من فقط متن های توی صفحه ها رو دارم… چیزهایی مثل این:

با یک دستور تمام خط هایی که توشون + هست رو جدا می کنیم. اینها خط های حاوی پسورد هستن:

grep "+" all_tejarat.txt > only_hesab_and_pass

اوه اوه! شد این:

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

رمز مخفي , شماره کارت + رمز مخفي , شماره کارت + رمز مخفي , شماره

پس من برای راحت کردن کارم، همه + ها رو تبدیل می کنم به سر خط:

jadi@jubung:~/Desktop$ sed -e "s/\s+[+]*\s*/\n/g" only_hesab_and_pass > har_password_yek_khat
jadi@jubung:~/Desktop$ head har_password_yek_khat 
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت 6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477 6273531000000145,14810051866743
6273531000000146,61558146155078
6273531000000150,14869351127492 6273531000000151,87078051710776
6273531000000201,17221491685028
6273531000000222,32833487680537 6273531000000232,06865382135692
6273531000000232,69595659033276

راستش درست نفهمیدم چی شد! درست کار نکرد ولی بد هم نبود… حالا یک قدم دیگه باید تیکه تیکه کنم این فایل رو. فاصله ها رو به سر خط تبدیل می کنم‌ (:

jadi@jubung:~/Desktop$ sed -e "s/ /\n/g"  har_password_yek_khat > har_password_yek_khat_2
jadi@jubung:~/Desktop$ head -20 har_password_yek_khat_2 
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477
6273531000000145,14810051866743
6273531000000146,61558146155078

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

jadi@jubung:~/Desktop$ grep  ".," har_password_yek_khat_2 | sed "s/^.*,//" > all_passwords
jadi@jubung:~/Desktop$ head all_passwords 
73251531609013
42984601252954
90683196772477
14810051866743
61558146155078
14869351127492
87078051710776
17221491685028
32833487680537
06865382135692

حله (: ببینیم چند تا پسورد داریم:

jadi@jubung:~/Desktop$ wc -l all_passwords 
118499 all_passwords

صد و هجده هزار عدد چهارده رقمی داریم که پسوردها توشونه. حالا می ریم سراغ بررسی نظریه اصلی:

مردم احتمالا سال تولدشون رو به عنوان پسورد می ذارن.

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

#!/usr/bin/perl

while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		print  substr $userinput, $i, 4;
		print "\n";
	}
}

این برنامه ورودی رو می خونه و قسمت های چهار رقمی رو ازش جدا می کنه:

jadi@jubung:~/Desktop$ echo "73251531609013" | ./find_numbers.pl 
7325
3251
2515
5153
1531
5316
3160
1609
6090
0901
9013

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

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9999 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		$thispass = substr $userinput, $i, 4;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9999 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

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

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_passwords_charts
jadi@jubung:~/Desktop$ head all_passwords_charts 
0,163
1,150
2,135
3,122
4,137
5,141
6,123
7,138
8,122
9,133

حالا که اینها رو داریم کافیه بریم سراغ برنامه LibreOffice برای کشیدن نمودارها. مثلا این نمودار اول است:

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

اوه! نظریه دوستمون تقویت شد: مردم از سال تولد برای پسوردها استفاده می کنن (: واضح بود ولی خب از این بازی لذت بردیم و تازه یک نظریه رو هم هرچند کم،‌ تقویت کردیم. همینطوره ترکیب های «خوش دست» روی کیبورد (:

نظرتون چیه برای اختتامیه یک آمار هم بگیریم از تعداد ارقام؟ مشخصه که یک تغییر کوچیک در برنامه است فقط:

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 13 ; $i++) {
		$thispass = substr $userinput, $i, 1;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

و نتیجه:

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_digits
jadi@jubung:~/Desktop$ cat all_digits 
0,157054
1,180318
2,169604
3,175258
4,166898
5,169252
6,162562
7,158727
8,160099
9,159214

هاه.. می بینین که احتمال استفاده از ۷ و ۹ پایینه (این رو قبلا هم شنیده بودم) و احتمالا استفاده از یک و سه بالا (: توجه داریم که در صورت درست بودن الگوریتم اعداد رندم استفاده شده برای «مخفی کردن» پسوردها، یک نویز سفید اون پایین داریم که احتمالا مساوی پخش شده.