بایگانی برچسب: s

شروع پروژه بستون؛ ویدئوهای تمام مراحل راه اندازی یک سیستم حساب کتاب شخصی با جنگو، لینوکس، گیت و هر چیزی که پیش بیاد

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

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

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

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

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

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

قسمت سوم: ساختن مدل خرج و ثبت اولین خرج

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

قسمت چهارم: ساختن مدل دخل و اضافه کردن اولین درآمد زمستان از طریق گویی ادمین جنگو

حالا بذارین سری به گویی بزنیم و بعد از درست کردن مدل خرج و مایگریت کردن دیتابیس به مدل جدید، ۱۲۲هزار تومنی که پولدارتر شدیم رو توی سیستم داخل کنیم.

در ادامه…

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

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

لینک ویدئوها روی آپارات:
قسمت اول از سری بستون روی آپارات
قسمت دوم از سری بستون روی آپارات
قسمت سوم از سری بستون روی آپارات
قسمت چهارم از سری بستون روی آپارات

جادی تی وی ۰۱۰ – بررسی مشکلات اختراع دوباره چرخ با کمک پایتون و اسکرپینگ و ردیس

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

لینک روی یوتیوب و هر کس هر جای دیگه آپلود کنه و لینک بده، باعث خوشحالی و دعای خیر پشت سانسوری‌هاست (:

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

جادی تی وی ۰۰۸ – وب اسکرپینگ با پایتون و پیدا کردن کتاب‌هایی از نویسنده‌های خاص

چالش کتابخوانی رو که یادتونه؟ در قدم نهم قراره کتابی بخونم که از نویسنده ای باشه که حرف اول اسم و فامیلش عین منه: J M. اما چطوری چنین کتابی پیدا کنیم؟ در این شماره از جادی.تی.وی، همراه با هم و قدم به قدم وب رو دنبال چنین نویسنده ای می‌گردیم و یاد می‌گیریم چطوری می‌شه بخش هایی از وب رو با تکنیک های برنامه نویسی شخم زد؛ که بهش میگن اسکرپ کردن وب.

لینک یوتوب

جادی تی وی ۰۰۷ – ipython notebook و vcfها

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

برنامه بزرگی که کار می کنه روزی برنامه ساده ای بوده که کار می کرده

و همچنین شناختن ipython و notebookهاش که یکی از پر کاربردترین ابزارهای دیتا ساینتیست‌ هایی هستن که با زبان پایتون کار می‌کنن.

عضویت شما در کانال یوتیوب جادی تی وی و کانال جادی تی وی در آپارات و تبلیغشون بهترین روحیه بخش من برای ادامه ویدئوها است.

مهملترین کاری که ممکنه این هفته با پایتون، پردازش تصویر، آر و آمار استنباطی انجام بدین: بررسی کبریت‌های توکلی

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

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

ایده خبیثانه جالبیه ولی چرا اصولا از اول کبریت های کمتری توی جعبه نذاریم؟ اصولا اگر می شه اینجوری پول درآورد مطمئنا کشور ما جای بسیار مناسبی براشه.

من به کبریت مشکوکم

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

بسته ده تایی کبریت

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

کبریت توکلی

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

تصویر اولیه کبریت ها

اینکار رو برای هر ده تا جعبه کبریت انجام می دیم و اتاق پر از کبریت رو به قصد نشستن پشت کامپیوتر ترک میکنیم.

جعبه های کبریت

اول نیازمند یک برنامه هستیم که بتونه در یک عکس کبریت ها رو بشمره. بعد با یک اسکریپت این برنامه رو برای همه عکس ها اجرا خواهیم کرد. من برای اینکار اول کتابخونه‌های cv2 رو امتحان کردم ولی با numpy نتیجه بهتر و قشنگ تری گرفتم. در قدم اول کافیه عکس رو بخونیم، اون ۱ به کتابخونه می گه عکس رو بعد از خوندن خاکستری کنه که کار ما رو راحتتر می کنه:

kebrit = scipy.misc.imread(fileName, 1) # gray-scale image

و خروجی چیز شبیه این است:

تصویر کبریت قبل از پردازش تصویر

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

kebrit_smooth = ndimage.gaussian_filter(kebrit, 6)

حالا متغیر kebrit_smooth یک تصویر نرم شده از تصویر اصلی است:

تصویر با فیلتر گاوسی پردازش تصویر

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

tresh = 120
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh)

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

tresh = 120
removeOnes = np.ones((3,3), dtype="bool8")
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh, structure=removeOnes)

دقت کنین که اون استراکچر در اصل می گه حداقل تصویر قابل تشخیص من باید این باشه:

array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

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

پردازش تصویر نهایی نوک کبریت ها

و خب چنین خروجی متنی ای:

10boxes/IMG_2608.JPG , 29

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

#!/bin/bash

for f in *JPG
do
    ../count.py $f
done

و به خروجی زیر برسیم:

$ ./doall.sh 
IMG_2606.JPG , 35
IMG_2607.JPG , 30
IMG_2608.JPG , 29
IMG_2609.JPG , 32
IMG_2610.JPG , 29
IMG_2611.JPG , 33
IMG_2612.JPG , 36
IMG_2613.JPG , 38
IMG_2614.JPG , 37
IMG_2615.JPG , 38

وقتشه سراغ زبون مورد علاقمون R بریم. یک زبان تخصصی برای کارهای آماری و وررفتن با اعداد و ماتریس ها و رفیق رفقاشون. فایل رو می خونیم و بخش مورد نظر رو جدا می کنیم:

> tavakoli <- read.csv(file="results.csv",head=FALSE,sep=",")
> matches <- tavakoli[2]$V2

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

> summary (matches)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  29.00   30.50   34.00   33.70   36.75   38.00 

بعله. می بینیم که میزان متوسط پایینتر از ۳۴ است. یعنی تعداد متوسط این ده قوطی کبریت ۶ تا کمتر از چیزی است که ادعا شده یا به بیان صحیح‌تر ۱۵٪ کمتر به ما جنس فروختن. جالبیش اینه حتی یک جعبه از این ده جعبه هم به چیزی که ادعا می شد میانگین است نرسیده. بذارین جلوتر بریم:

> hist(matches, xlim=c(28,42), ylim=c(0,4), main="هیستوگرام تعداد کبریت های توکلی در هر جعبه", sub="www.jadi.net", breaks=8)
> curve(dnorm(x, mean=mean(matches), sd=sd(matches))*10, add=TRUE, col="red", lwd=2) 

و روی این نمودار با کمی آمار احتمالات می تونیم احتمال اینکه در یک جعبه کبریت اتفاقی توکلی که خریده‌ایم و مدعی داشتن ۴۰ کبریت است، چهل یا بیشتر کبریت وجود داشته باشد را حساب کنیم:

> 1-pnorm(40, mean=mean(matches), sd=sd(matches)) #یک منهای سمت چپ نمودار نرمال در نقطه ۴۰ کبریت
[1] 0.03970968

بله. با اینکه کبریت توکلی مدعی است در هر جعبه اش تقریبا ۴۰ کبریت وجود داره، برنامه پردازش تصویر و نمودارهای نرمال ما نشون می دن که احتمال اینکه واقعا در یک جعبه کبریت توکلی چهل یا بیشتر کبریت باشه، سه صدم درصد بیشتر نیست

آمار شیرین است

نتیجه‌ها

۰- موسسه استاندارد و حقوق مصرف کننده خاصی نداریم یا هنوز این مساله رو ندیدن
۱- راکفلر باید بیاد پیش تولید کننده‌های ما لنگ بندازه
۲- آمار شیرین و فان است
۳- می تونیم با کارهای علمی بامزه هم تفریح کنیم هم چیز یاد بگیریم

مرتبط

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

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

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

poster_karaj

زمان کارگاه لینوکس: ۲۵ اردیبهشت ۱۳۹۳ ساعت ۱۰
زمان کارگاه پایتون: ۲۶ اردیبهشت ۱۳۹۳ ساعت ۱۰
مکان: کرج خیابان شهید بهشتی میدان حصارک دانشگاه خوارزمی

آپدیت: بر اساس قوانین دانشگاه ، برای حضور حتما باید ثبت نام کرده باشین… لطفا از این دو لینک پیش ثبت نام رو انجام بدین: http://events.karajlug.org/events/7 و http://events.karajlug.org/events/8

دعوت به کنفرانس پایتون. پنج سالی هست که عده ای از طرفداران پایتون دارن روی برگزاری یک کنفرانس کار می کنن. این کنفرانس اولین کنفرانس پایتون ایرانه و قراره در تاریخ ۱۰ آبان در فرهنگسرای مادر دانشگاه علم و صنعت توی تهران برگزار بشه. اگر علاقمند به شرکت هستین سری به سایت بزنین و اگر علاقمندتر هستین، تا اول‌ آبان مقاله‌تون رو بفرستین. منم با علاقه دوست دارم توش شرکت کنم و خوشبختانه جمعه هم هست. اکتبر 9, 2013 ، 5 پاسخ

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

سعید پرسیده:

سلام جادی جان.
یه سوال داشتم ازت.
من چند مدته دارم آموزش سی شارپ رو یاد میگیرم از طریق سایت webtarget.ir
و اینجوریه که هر از چند مدت یه آموزش میزاره و من دنبال میکنم. میخ,استم بدونم راهی هست که من بدون اینکه مراجعه کنم به سایت و هر دفعه فایل های پی دی اف رو دانلود کنم بتونم با یه اسکریپت یا یه کد توی ترمینال تمام آموزهای سی شارپ رو توی یه فولدر دانلود کنم؟
ضمنا اینم آدرس یکی از فایل های پی دی اف آموزش سی شارپ هست و جاهایی که هر دفعه تغییر میکنه رو توی لینک دوم با ستاره برات مشخص میکنم.
http://dl.webtarget.ir/027-cSharpTime/session-33/cSharpTimeSession-33.pdf
http://dl.webtarget.ir/027-cSharpTime/session-**/cSharpTimeSession-**.pdf

خب.. سوال های اینجوری مثل یک پازل یا جدول بامزه هستن که جلوی تلویزیون لم می دیم و حلشون می کنیم. البته از نظر عقلی این سایت باید حتما RSS داشته باشه که بشه به سادگی دنبالش کرد ولی خب… ایده شما چیه؟ ایده من اینه که کافیه یکی از این فایل ها توی یک دایرکتوری باشه و ما روزی یکبار از اون دایرکتوری ls بگیریم و در آخرین فایل دانلود شده (بالاترین عدد در اسم ها) نگاه کنیم و عدد فایل رو جدا کنیم و بهش یکی اضافه کنیم و دانلودش کنیم. اگر فایل جدیدی بود دانلود می شه و اگر نبود چیزی دانلود نمی شه. فردا هم روز از نو روزی از نو.

برنامه ساده می شه این:

#!/usr/bin/python

import os, re

# یک ال.اس. می گیرم از فایل های مشابه اون کتاب و سورت و خط آخر رو جدا می کنم
f = os.popen('ls -1  cSharp*pdf | sort | tail -1')
lastdl = f.read()
# متغیر حاوی بخشی از اسم فایل است که عدد سریال توش قرار داره + ۱
lastNum = str(int(re.search ('cSharpTimeSession-(\d+).pdf', lastdl).group(1))+1)

# یک کامند می سازم که با دبلیوگِت شماره بعدی رو دانلود می کنه	
dlCommand = "wget http://dl.webtarget.ir/027-cSharpTime/session-" \
			+ lastNum + "/cSharpTimeSession-" \
			+ lastNum + ".pdf"
# اجراش می کنم
f = os.popen(dlCommand)

و البته اگر بخوایم به حالت های خاص جواب بدیم و مثلا خودمون اگر هیچ فایلی نبود به اولین فایل یک عدد بدیم (ظاهرا در سایتشون اولین نسخه شماره ۰۴ است) یا اگر زیر ۹ بودیم یک صفر اولش اضافه کنیم و … برنامه می شه این:

#!/usr/bin/python

import os, re

try:
	f = os.popen('ls -1  cSharp*pdf | sort | tail -1')
	lastdl = f.read()
	lastNum = int(re.search ('cSharpTimeSession-(\d+).pdf', lastdl).group(1))
except:
	lastNum = 3 #first file there is 4. so we'll assume that the current one is 3
	
if lastNum < 9:
	lastNum = "0" + str(lastNum+1)
else:
	lastNum = str (lastNum + 1)
	
dlCommand = "wget http://dl.webtarget.ir/027-cSharpTime/session-" \
			+ lastNum + "/cSharpTimeSession-" \
			+ lastNum + ".pdf"
f = os.popen(dlCommand)

منطقا این رو باید در یک کرون بذاریم یا سری اول با تکنیک watch python ./autodlcSharpbook.py دانلودش کنم که همه شماره ها رو بگیره یا مثلا اگر خروجی دستور موفقیت آمیز بود یک ایمیل بزنیم به صاحب جریان که فایل بهش اتچ باشه یا چنین چیزهایی. اونش با شما و سلیقه‌های شخصی‌تون.

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

jadi_while_programming