انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: قدرت پایتون و کارایی های بسیار مفید آن(جنگو، پایکیوت،کیوی،twisted،و ...)  (دفعات بازدید: 35010 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
ممنون،امتحانش نسبتا آسونه،بله داشتن این مدرک برای کار چه در ایران و چه در خارج از کشور بسیار اهمیت داره.
توجه کنید که دارید از دانشگاه رایس میگیرین مدرکو!و رایگان هست ولی برای دریافت اصل مدرک که کاغذی هست باید نزدیک به ۵۰ دلار خرج کنید.
یه جا رو مثال بزن که برای مدرکهای coursera ارزش گذاری کرده باشه؟
هر جا را بری (چه با این مدرک چه بدون مدرک) باید بتونی الگوریتم بریزی و کد بزنی، بعد استخدام میشی
من با coursera کاملاً موافقم. حتی اگه مدرک هم نده، برای یادگیری خودمون خیلی عالیه.
من که دانشگاه رو نصفه ول کردم چون خوشم نمیاد از آموزش آکادمیک مخصوصاً توی ایران.
ولی coursera واقعاً خیلی عالیه. چون هم مجازی هست هم توسط بهترین دانشگاه‌ها مثل پرینستون و استنفورد تدارک دیده شده و هم می‌تونید درس‌ها بدون محدودیت پیش‌نیاز و پس‌نیاز بردارید. فقط درس‌هایی که احساس می‌کنید توی کارتون به دردتون می‌خوره. حتی در حین اینکه دارید برای یه شرکت کار می‌کنید.

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
ممنون،امتحانش نسبتا آسونه،بله داشتن این مدرک برای کار چه در ایران و چه در خارج از کشور بسیار اهمیت داره.
توجه کنید که دارید از دانشگاه رایس میگیرین مدرکو!و رایگان هست ولی برای دریافت اصل مدرک که کاغذی هست باید نزدیک به ۵۰ دلار خرج کنید.
یه جا رو مثال بزن که برای مدرکهای coursera ارزش گذاری کرده باشه؟
هر جا را بری (چه با این مدرک چه بدون مدرک) باید بتونی الگوریتم بریزی و کد بزنی، بعد استخدام میشی

می گم باید یک ویکی بزنیم حالا سایتش مهم نیست (سایت رسمی پایتون بخش  فارسی نداره )
www.pythoni.ca
http://forum.ubuntu.ir/index.php?topic=71062.0
درود
برای مثال شرکتی که من توش کار میکنم،اصلا از همکارم تست و امتحان هم نگرفت وقتی دیدن این مدرکو داره.
نکته دوم اینه که آیا وقتی شما مدرک از اون دانشگاه داری یعنی نمیتونی کد بزنی یا الگوریتم پیاده سازی کنی؟؟؟ ???

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
با عرض سلام.من در  حال یادگیری سی پلاس پلاس هستم و البته فرم ورک کیوتی
میخواستم بدونم که دلیلی وجود داره که بیام پایتون یاد بگیرم؟چون پرفمنس و قدرت پایتون از سی پلاس پلاس یه خورده کمتره
با احترام
بله دلیلهای زیادی هست.
بعد واقعا سی پلاس پلاس خیلی کدها شلوغ و طولانی میشه!بعد شما تو سی پلاس پلاس دیگه کتابخونه های پایتون رو نداری!میدونی چقد بیچاره کننده هست وقتی بخوای تو کیوتی event-driven بنویسی، وقتی کتابخونه مثله twisted رو نداشته باشی؟
من نمی دونم داره event-driven سی پلاس پلاس یا نه!ولی ذهنم میگه زبان سی پلاس پلاس یه زبان پدر مادر داره،حتما میشه باهاش event-driven هم زد.ولی واقعا سخته با C++میتونی امتحان کنی، اگه کتابخونشو نداشته باشه،خودت باید پیاده سازیش کنی!
اینو یادت باشه تو پایکیوت به همه کتابخونه های پایتون دسترسی داری!
درضمن من توصیه ام به همه افراد اینه که یک زبان رو انتخاب کنید و تا تهش برید!حالا میخواد پایتون باشه میخواد c++ باشه.
سعی کنید دریاچه کم عمق از دانش نباشید.
جفت زبانها خیلی بزرگ و وسیعه! :o
« آخرین ویرایش: 03 دی 1392، 10:40 ق‌ظ توسط علی حلاجی »

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران

همونطور که دوست عزیزمون فرمودن میشه PyQt کار کرد و ابزارش هم QT Designer هست،تازه از ویژوال استدیو هم آسونتره.حتی میتونی سیگنال دکمها رو هم بدون کد زدن تعریف کنی!حتی میتونی css یا جاوا اسکریپت و canvas و opengl کار کنی.
در کنار اون کیوی(kivy) هم خودش یه رابط بجز پایتون داده تقریبا مثه css میمونه.
و IDE Boa هم همینکارو میکنه.یا IDE WxPython هم همینکارو میکنه.
ولی از من به همه نصیحت سعی کنید خودتونو از ابزارها جدا کنید و خودکفا شید.

ولی اگه پایتون کار باشی رو هر ادیتوری و هر سروری پایتون کاری.حتی رو ویندوز و حتی تو اندروید هم میتونی کد بزنی.
ولی بازم میگم اگه از اون دسته آدمها هستید که باید یه ابزاری باشه،شک نکنید که پایتون بی نهایت IDE راحت داره.
Eclipse هم عالیه.میتونی توش حتی QT رو هم بیاری.
درکل اگه شکیبا باشید من یک جلسه کامل درباره IDE ها می نویسم.
من برای پروژه های بزرگ از IDE استفاده میکنم.
در جلسات آینده حتما IDE ها رو معرفی میکنم.

ممنون از دوستان عزیز

هم تو اوبونتو تازه کارم هم تو پایتون    و  نسخه۳۲  بیتی اوبونتو دارم  . پایتونی هم که پیش فرض نصبه : +Python 2.7.2

 این از این , حالا‌:
 
 چه چیزی برای من مناسبه ؟

 آیا باید پایتون فعلی را پاک کنم و نسخه بالاتری نصب کنم؟

کلا برای نصب چه چیزهایی باید دانلود کنم تا بتونم یک برنامه گرافیکی بنویسم مثل ماشین حساب اوبونتو و ... . ؟ میشه لینک مستقیم بدید

کی در مورد IDE ها مطلب مینویسید و کجا؟

سلام
اول اینکه نه نیازی نیست پایتون رو پاک کنی!یا ارتقا بدی
فعلا پایتون 2.7 برای شما خیلی مناسبه.
دوم اینکه شما برای برنامه های GUI خیلی کارها میتونی بکنی.ولی چون اول راهی من بهت توصیه میکنم QT Designer رو نصب کنی.بعد با برنامه pyuic4 تبدیلش کنی به کد پایتون بعد برای خودت هرچی خواستی اضافه کنی.
درضمن من برای اولش به شما توصیه میکنم با Qt Designer کد بزنی،ولی بعدش سعی کن که اونو حتما من بذاری کنار و از صفر خودت کد بزنی!
درمورد IDE ها هم تو همین هفته تو همین تاپیک مینویسم.
سوالی بود بپرسید.

آفلاین HSN6

  • Hero Member
  • *
  • ارسال: 866
  • جنسیت : پسر
  • یک راَکتیست اسپرانتیست پایتونیست گودوئیست!
    • بلاگ شخصی
چون کارت‌گرافیکم  از OpenGL ES2.0 پشتیبانی نمی‌کنه ، من توی گوشی اندروییدیم با Qpython از Kivy استفاده می‌کنم.
برای غیر Kivy قبلنا از Kate و الآن از Geany استفاده می‌کنم. Vim به سلیقه‌ی ما تنبل‌ها نمی‌خوره و Eclipse اینا هم که برای کامپیوتر عهد دقیانوس ما سنگینن!

آفلاین POo

  • Full Member
  • *
  • ارسال: 180
  • جنسیت : پسر
  • 12.04, debian testing
سلام، آقای حلاجی خیلی ممنوم از اینکه اطلاعاتتون رو به اشتراک میذارین، من به عنوان یک فرد مبتدی علاقه مند به برنامه نویسی با ++C خیلی حال میکنم و اگر کاری داشته باشم با اون انجام میدم ولی شما منو ترغیب کردین که نگاهی به پایتون بندازم.  :)

دوستان سایتی سراغ ندارین که این فیلم های آموزشی coursera رو  گذاشته باشه؟ این آموزش پایتون مکتبخونه برای courseraاست؟
دسترسی به سایت coursera برام سخته.  ](*,)
پدرم روضه رضوان به دو گندم بفروخت     ناخلف باشم اگر من به جوی نفروشم

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
سلام، آقای حلاجی خیلی ممنوم از اینکه اطلاعاتتون رو به اشتراک میذارین، من به عنوان یک فرد مبتدی علاقه مند به برنامه نویسی با ++C خیلی حال میکنم و اگر کاری داشته باشم با اون انجام میدم ولی شما منو ترغیب کردین که نگاهی به پایتون بندازم.  :)

دوستان سایتی سراغ ندارین که این فیلم های آموزشی coursera رو  گذاشته باشه؟ این آموزش پایتون مکتبخونه برای courseraاست؟
دسترسی به سایت coursera برام سخته.  ](*,)

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

آفلاین DebianGod

  • Sr. Member
  • *
  • ارسال: 461
  • جنسیت : پسر
  • Ruby
دوستان من میدونم که با سی پلاس و پایتون میشه یه برنامه حرفه ای یا بازی حرفه ای در حد وارکرفت ساخت اما وقتی توی اینترنت دنبال اموزش پایتون یا سی پلاس میگردم فقط اموزش هایی میاد که بدرد ریاضیات و محاسبه میخوره و حتی رنگ و بوی گرافیک هم نداره

کسی اموزشی داره که بشه توی پایتون یه نرم افزار گرافیکی و ویژال ساخت مثل صفحه لاگین بازی ورد اف وارکرفت اگه میشه که مطمئنا میدونم امکانپذیره لطفا اموزشش رو بدید من پایتون رو بلدم ولی نمیتونم هیچ نرم افزار مفیدی بسازم

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

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
دوستان من میدونم که با سی پلاس و پایتون میشه یه برنامه حرفه ای یا بازی حرفه ای در حد وارکرفت ساخت اما وقتی توی اینترنت دنبال اموزش پایتون یا سی پلاس میگردم فقط اموزش هایی میاد که بدرد ریاضیات و محاسبه میخوره و حتی رنگ و بوی گرافیک هم نداره

کسی اموزشی داره که بشه توی پایتون یه نرم افزار گرافیکی و ویژال ساخت مثل صفحه لاگین بازی ورد اف وارکرفت اگه میشه که مطمئنا میدونم امکانپذیره لطفا اموزشش رو بدید من پایتون رو بلدم ولی نمیتونم هیچ نرم افزار مفیدی بسازم

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

دوست عزیز چرا هست،خیلی هم هست توی اینترنت مطالب.
ببین نکته بدی که پایتون داره گسترده بودنشه!خیلی پهناور و وسیعه.همین امر هم خیلی ها رو اول کار گنگ میکنه تو پایتون.
شما میخوای گیم بنویسی،پس در مرحله اول باید بری سراغ ماژولهای گیم پایتون یا اون زبان.مثلا یکی از کتابخونه های قدرمتند پایتون برای گیم pygame هست که خود من کتابش رو هم دارم.
این سایت pygame هست: http://www.pygame.org/news.html
من فکر میکنم برا پایتون قشنگ سرچ نکردید.چون با همین pygame برای اندروید هم میشه به راحتی گیم نوشت که kivy هم داره از این استفاده میکنه!
این هم یه لینک که راهنمای خیلی خوبی هست برای آموزش pygame : http://inventwithpython.com/blog/2010/09/01/the-top-10-pygame-tutorials/
این هم لینک که بازی های حرفه اییه نوشته با pygame رو براتون لیست کرده: http://inventwithpython.com/blog/2013/02/19/what-professional-games-use-pygame/
واقعا ارزش کار کردن داره pygame چون هم سادس و هم جذابه کد زدن باهاش و خیلی قویه!

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
بعد واقعا سی پلاس پلاس خیلی کدها شلوغ و طولانی میشه!بعد شما تو سی پلاس پلاس دیگه کتابخونه های پایتون رو نداری!میدونی چقد بیچاره کننده هست وقتی بخوای تو کیوتی event-driven بنویسی، وقتی کتابخونه مثله twisted رو نداشته باشی؟
من نمی دونم داره event-driven سی پلاس پلاس یا نه!ولی ذهنم میگه زبان سی پلاس پلاس یه زبان پدر مادر داره،حتما میشه باهاش event-driven هم زد.ولی واقعا سخته با C++میتونی امتحان کنی، اگه کتابخونشو نداشته باشه،خودت باید پیاده سازیش کنی!
اینو یادت باشه تو پایکیوت به همه کتابخونه های پایتون دسترسی داری!

میشه گفت مفهوم event driven یکی از پایه های اصلی فریمورک کیوت هست که در کیوت با مکانیزم signal/slot پیاده شده: http://qt-project.org/doc/qt-5/signalsandslots.html. البته در سی پلاس پلاس چندین پیاده سازی دیگه هم برای این مفهوم وجود داره مثلا boost::signal2. در اکثر زبانها میشه به نوعی از مفهوم event driven استفاده کرد مثلا http://libevent.org رو ببینین یک کتابخونه به زبان C هست که این مفهوم رو ساپورت میکنه. از طرفی میشه گفت کتابخونه هایی که برای ++c وجود داره اگه بیشتر از پایتون نباشه کمتر هم نیست مثلا همین pyqt در واقع یک binding برای کیوت هست که با ++c نوشته شده.شاید بشه گفت 80 درصد کتابخونه های پایتون bindingهایی برای کتابخونه های ++c/c هستن مثلا برای ارتباط با mysql ممکنه شما چندین کتابخونه پایتون ببینین که یکی با استفاده از libmysql که به زبان C هست نوشته و دیگری به اصطلاح pure python هست که کاملا با استفاده از پایتون نوشته شده که هر کدوم از اینا مزایا و معایب خودشون رو دارن.
به هر حال چیزی که مشخصه اینه که برنامه نویسی با ++c به مراتب سخت تر از پایتونه ولی در مقابلش چیزی که بدست میاد سرعت اجرای برنامه هست مثلا در همین تاپیک از kivy نام برده شده که میشه با اون با استفاده از پایتون برنامه هایی برای اجرا بر روی موبایل نوشت و از طرفی امکان نوشتن برنامه با استفاده از کیوت هم وجود داره حالا چه فرقی بین این دو تا هست؟ فرقش اینه که کد نهایی که با کیوت تولید میشه native هست و فوق العاده سریع اجرا میشه ولی برنامه نوشته شده با kivy به مراتب کندتره، از طرفی اگه اشتباه نکنم kivy هنوز برای اجرای برنامه هاش به لانچر نیاز داره ولی کیوت این مشکل رو هم نداره. به نظر من پایتون در سمت سرور خیلی بهتر میتونه به کار بره تا در سمت کلاینت مثلا من خودم تا الان بیشتر با ++c برنامه نوشتم ولی همین امروز بدون اینکه خیلی در پایتون حرفه ای باشم با استفاده از flask که اونم اولین بار بود که ازش استفاده می کردم یه سرور نوشتم که در کمال تعجب در اولین تلاشها داشت درست کار می کرد! چیزی که اگه میخواست با ++c پیاده بشه احتمالا 10 برابر زمان بیشتری جهت نوشتن،تست و دیباگش نیاز بود!

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
بعد واقعا سی پلاس پلاس خیلی کدها شلوغ و طولانی میشه!بعد شما تو سی پلاس پلاس دیگه کتابخونه های پایتون رو نداری!میدونی چقد بیچاره کننده هست وقتی بخوای تو کیوتی event-driven بنویسی، وقتی کتابخونه مثله twisted رو نداشته باشی؟
من نمی دونم داره event-driven سی پلاس پلاس یا نه!ولی ذهنم میگه زبان سی پلاس پلاس یه زبان پدر مادر داره،حتما میشه باهاش event-driven هم زد.ولی واقعا سخته با C++میتونی امتحان کنی، اگه کتابخونشو نداشته باشه،خودت باید پیاده سازیش کنی!
اینو یادت باشه تو پایکیوت به همه کتابخونه های پایتون دسترسی داری!

میشه گفت مفهوم event driven یکی از پایه های اصلی فریمورک کیوت هست که در کیوت با مکانیزم signal/slot پیاده شده: http://qt-project.org/doc/qt-5/signalsandslots.html. البته در سی پلاس پلاس چندین پیاده سازی دیگه هم برای این مفهوم وجود داره مثلا boost::signal2. در اکثر زبانها میشه به نوعی از مفهوم event driven استفاده کرد مثلا http://libevent.org رو ببینین یک کتابخونه به زبان C هست که این مفهوم رو ساپورت میکنه. از طرفی میشه گفت کتابخونه هایی که برای ++c وجود داره اگه بیشتر از پایتون نباشه کمتر هم نیست مثلا همین pyqt در واقع یک binding برای کیوت هست که با ++c نوشته شده.شاید بشه گفت 80 درصد کتابخونه های پایتون bindingهایی برای کتابخونه های ++c/c هستن مثلا برای ارتباط با mysql ممکنه شما چندین کتابخونه پایتون ببینین که یکی با استفاده از libmysql که به زبان C هست نوشته و دیگری به اصطلاح pure python هست که کاملا با استفاده از پایتون نوشته شده که هر کدوم از اینا مزایا و معایب خودشون رو دارن.
به هر حال چیزی که مشخصه اینه که برنامه نویسی با ++c به مراتب سخت تر از پایتونه ولی در مقابلش چیزی که بدست میاد سرعت اجرای برنامه هست مثلا در همین تاپیک از kivy نام برده شده که میشه با اون با استفاده از پایتون برنامه هایی برای اجرا بر روی موبایل نوشت و از طرفی امکان نوشتن برنامه با استفاده از کیوت هم وجود داره حالا چه فرقی بین این دو تا هست؟ فرقش اینه که کد نهایی که با کیوت تولید میشه native هست و فوق العاده سریع اجرا میشه ولی برنامه نوشته شده با kivy به مراتب کندتره، از طرفی اگه اشتباه نکنم kivy هنوز برای اجرای برنامه هاش به لانچر نیاز داره ولی کیوت این مشکل رو هم نداره. به نظر من پایتون در سمت سرور خیلی بهتر میتونه به کار بره تا در سمت کلاینت مثلا من خودم تا الان بیشتر با ++c برنامه نوشتم ولی همین امروز بدون اینکه خیلی در پایتون حرفه ای باشم با استفاده از flask که اونم اولین بار بود که ازش استفاده می کردم یه سرور نوشتم که در کمال تعجب در اولین تلاشها داشت درست کار می کرد! چیزی که اگه میخواست با ++c پیاده بشه احتمالا 10 برابر زمان بیشتری جهت نوشتن،تست و دیباگش نیاز بود!

با حرفایی که در قسمت اول فرمودین مخالفم.یجورایی برعکسه.
نکته اول اینه که با اینکه من خودم عاشق پایکیوت هستم ولی ضعفش در مقابل kivy رو کاملا احساس میکنم و شما برای اجرای qt بر روی اندروید نیاز به لانچر Ministro دارید،که اون هم بعد از نصب برنامه از سایت QT میاد کتابخونه های QT رو دانلود میکنه که نسبتا هم سنگینه.ولی آره میشه یجوری پکیج کرد که کتابخونه هاشم توش باشه،اما خیلی سخته و خیلی حجم برنامه میره بالا!حداقل 16 مگ.ولی kivy اینطور نیست،وقتی شما پکیج کنی نصبش کنی تمامه!و خیلی هم سریعتر از پایکیوته یا QT خالیه(البته روی اندروید)!.من خودم خیلی روی آندروید کار کردم،هم با QT و هم با KIVY
دوم اینکه اگه منظورتون از event-driven همون signal/slot هست باید بگم که در اشتباه هستید.چون هر برنامه GUI چه دات نت چه QT و هر چی خودش یه لوپ داره که eventهای خودشو هندل میکنه.و اون لوپ جدا از مبحثه event-driven هست.
منظور از event-driven چیزه دیگه اییه و ترکیب event های مختلف و تسکهای مختلف برنامه است که طرز هندلش خودش یخورده بحث داره و بصورت thread نیست،در صورتی که لوپ برنامه های GUI بر اساس threadهست و sync آن با event-driven یه نمه خلاقیت میخواد باتوجه به ماژول مربوط به آن!

بعد یه چیز جالب فرمودین.واقعا ۸۰٪ کتابخونه های پایتون بایندینگی برای c++/c هست؟من هیچوقت منکر قدرت c و c++ نیستم و در اون حد و اندازم نیستم.من فقط میخوام دید بدم به کاربران ایرانی.پس برای همین هیچوقت اینجوری حرف نمیزنم.
آخه این آمار رو از کجا آوردید؟
« آخرین ویرایش: 04 دی 1392، 03:25 ب‌ظ توسط علی حلاجی »

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
لانچر ministro از ورژن 5.1 کیوت به بعد دیگه به صورت پیش فرض استفاده نمیشه و کتابخونه ها به برنامه اصلی لینک میشن.همین الان روی کیوت 5.2 بازی maroon که جزو مثالهای خود sdk هست رو کامپایل و روی اندروید تست کردم.فقط پروژه رو باز کردم build کردم و اجرا کردم هیچ کار اضافه ای نیاز نداشت.حجم apk نهایی هم 8.5 مگ شد.
event driven یک مفهوم کلی هست و خیلی جاها استفاده میشه و با روشهای مختلفی پیاده سازی میشه و در کیوت در قالب همون signal/slot پیاده شده.شاید یک مقایسه با twisted قضیه رو مشخص تر کنه.اولین کد مربوط به twisted هست که از صفحه اول سایتش برداشتم و دومی کد کوتاه شده ی برنامه fortune server از یکی از مثالهای فریمورک کیوت:
from twisted.internet import protocol, reactor

class Echo(protocol.Protocol):
    def dataReceived(self, data):
        self.transport.write(data)

class EchoFactory(protocol.Factory):
    def buildProtocol(self, addr):
        return Echo()

reactor.listenTCP(1234, EchoFactory())
reactor.run()

#include <QApplication>
#include <QtCore>

#include <stdlib.h>

#include "server.h"

Server::Server(QWidget *parent)
:   QDialog(parent), tcpServer(0), networkSession(0)
{
//... deleted section

        connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));

//... deleted section
}

void Server::sessionOpened()
{
//... deleted section

    tcpServer = new QTcpServer(this);
    if (!tcpServer->listen()) {
        QMessageBox::critical(this, tr("Fortune Server"),
                              tr("Unable to start the server: %1.")
                              .arg(tcpServer->errorString()));
        close();
        return;
    }
   
//... deleted section
}

void Server::sendFortune()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out << (quint16)0;
    out << fortunes.at(qrand() % fortunes.size());
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));

    clientConnection->write(block);
    clientConnection->disconnectFromHost();
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Server server;
    server.show();
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    return app.exec();
}

در twisted خط آخر ()reactor.run رو داریم و در کیوت ;()return app.exec رو. اینجا جایی که event loop فعال میشه. در twisted در ازای برقراری کانکشن که یک event هست یک نمونه از کلاس Echo ساخته میشه و با رسیدن event بعدی یعنی رسیدن اطلاعات روی سوکت تابع dataReceived صدا زده میشه.
در کیوت شما این خط رو دارید:connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));اینجا جایی که شما event برقراری کانکشن رو به sendFortune متصل می کنین و در این تابع هم event دیسکانکت شدن کلاینت به deleteLater متصل شده که سوکت ایجاد شده رو بعد از دیسکانکت پاک می کنه.
از این مقایسه مشخصه که در کیوت هم بدون استفاده از thread مشابه همون روالی که در twisted طی میشه صورت می گیره.
در مورد عدد 80 هم حق با شماست و بهتر بود این عدد رو ذکر نمی کردم و فقط میگفتم تعداد زیادی از کتابخونه های پایتون bindingی برای کتابخونه های ++c/c هستن.البته من هدفم مطرح کردن چیز دیگه ای بود که شاید بهتر باشه باز برای اون مثال بزنم تا واضح تر بشه که البته خلاصه اش این میشه که پایتون(حداقل پیاده سازی فعلی اون) بدون ماژولهایی که با ++c/c برای اون نوشته شدن یک زبان غیر کاربردی خواهد بود به دلیل کند بودن! مثلا اینجا رو ببینین : http://python.org/download/releases/3.3.3 که این خط مد نظر منه:

A C implementation of the "decimal" module, with up to 120x speedup for decimal-heavy applications

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

در ضمن یک خبر خوب هم اینه که در پایتون 3.4 ماژول asyncio به پایتون اضافه میشه(http://docs.python.org/3.4/library/asyncio.html) که فکر کنم می تونه به عنوان جایگزینی برای twisted استفاده بشه.

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
لانچر ministro از ورژن 5.1 کیوت به بعد دیگه به صورت پیش فرض استفاده نمیشه و کتابخونه ها به برنامه اصلی لینک میشن.همین الان روی کیوت 5.2 بازی maroon که جزو مثالهای خود sdk هست رو کامپایل و روی اندروید تست کردم.فقط پروژه رو باز کردم build کردم و اجرا کردم هیچ کار اضافه ای نیاز نداشت.حجم apk نهایی هم 8.5 مگ شد.
event driven یک مفهوم کلی هست و خیلی جاها استفاده میشه و با روشهای مختلفی پیاده سازی میشه و در کیوت در قالب همون signal/slot پیاده شده.شاید یک مقایسه با twisted قضیه رو مشخص تر کنه.اولین کد مربوط به twisted هست که از صفحه اول سایتش برداشتم و دومی کد کوتاه شده ی برنامه fortune server از یکی از مثالهای فریمورک کیوت:
from twisted.internet import protocol, reactor

class Echo(protocol.Protocol):
    def dataReceived(self, data):
        self.transport.write(data)

class EchoFactory(protocol.Factory):
    def buildProtocol(self, addr):
        return Echo()

reactor.listenTCP(1234, EchoFactory())
reactor.run()

#include <QApplication>
#include <QtCore>

#include <stdlib.h>

#include "server.h"

Server::Server(QWidget *parent)
:   QDialog(parent), tcpServer(0), networkSession(0)
{
//... deleted section

        connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));

//... deleted section
}

void Server::sessionOpened()
{
//... deleted section

    tcpServer = new QTcpServer(this);
    if (!tcpServer->listen()) {
        QMessageBox::critical(this, tr("Fortune Server"),
                              tr("Unable to start the server: %1.")
                              .arg(tcpServer->errorString()));
        close();
        return;
    }
   
//... deleted section
}

void Server::sendFortune()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out << (quint16)0;
    out << fortunes.at(qrand() % fortunes.size());
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));

    clientConnection->write(block);
    clientConnection->disconnectFromHost();
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Server server;
    server.show();
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    return app.exec();
}

در twisted خط آخر ()reactor.run رو داریم و در کیوت ;()return app.exec رو. اینجا جایی که event loop فعال میشه. در twisted در ازای برقراری کانکشن که یک event هست یک نمونه از کلاس Echo ساخته میشه و با رسیدن event بعدی یعنی رسیدن اطلاعات روی سوکت تابع dataReceived صدا زده میشه.
در کیوت شما این خط رو دارید:connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));اینجا جایی که شما event برقراری کانکشن رو به sendFortune متصل می کنین و در این تابع هم event دیسکانکت شدن کلاینت به deleteLater متصل شده که سوکت ایجاد شده رو بعد از دیسکانکت پاک می کنه.
از این مقایسه مشخصه که در کیوت هم بدون استفاده از thread مشابه همون روالی که در twisted طی میشه صورت می گیره.
در مورد عدد 80 هم حق با شماست و بهتر بود این عدد رو ذکر نمی کردم و فقط میگفتم تعداد زیادی از کتابخونه های پایتون bindingی برای کتابخونه های ++c/c هستن.البته من هدفم مطرح کردن چیز دیگه ای بود که شاید بهتر باشه باز برای اون مثال بزنم تا واضح تر بشه که البته خلاصه اش این میشه که پایتون(حداقل پیاده سازی فعلی اون) بدون ماژولهایی که با ++c/c برای اون نوشته شدن یک زبان غیر کاربردی خواهد بود به دلیل کند بودن! مثلا اینجا رو ببینین : http://python.org/download/releases/3.3.3 که این خط مد نظر منه:

A C implementation of the "decimal" module, with up to 120x speedup for decimal-heavy applications

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

در ضمن یک خبر خوب هم اینه که در پایتون 3.4 ماژول asyncio به پایتون اضافه میشه(http://docs.python.org/3.4/library/asyncio.html) که فکر کنم می تونه به عنوان جایگزینی برای twisted استفاده بشه.

خیلی خوبه که وقت میذارین.
من الان از شما میخوام که یک event لوپ دیگه به برنامه اضافه کنی.چه اتفاقی میوفته به نظرت؟
میگم بازم میگم اون لوپ کیوت مخصوصه خود GUI هست وگرنه همون pyqt و kivy هم از این event لوپها دارن.دیگه دلیلی نبود که چیزی مثه twisted یا تورنادو یا دیزل یا همین ماژول خوب asyncio بسازن!باور کن ساختن یه برنامه مثلا چت پیاده سازیش با این به مراتب سختره.البته اگه برنامه تون خاصیت لایو نداره مثه اکثر برنامه های ویندوزی از همون لوپ GUI استفاده کنید(یعنی kivy و pyqt).ولی برای مثلا ریلتایم کردن جدولها،مانیتور زنده تماسهای یک سازمان،لیست وضعیت حضور افراد در چت یا کار با سوکت و ... از twisted و امثال اونها استفاده کنید.
اینکه برنامه ایونتی بشه و موقعه ایی که ایونت رخ بده و کاری انجام بشه بهتره یا اینکه برنامه شما یه تابع رو هر دفعه تو لوپ GUI کال کنه تا یه تغییری افتاد رو بفهمه؟
بعد این حرفتون " پایتون(حداقل پیاده سازی فعلی اون) بدون ماژولهایی که با ++c/c برای اون نوشته شدن یک زبان غیر کاربردی خواهد بود  " که از قبلی سنگینتره!
ببین بعضی از ماژولها واقعا سرعت c اونها بیشتره!مثلا خودم یکیشو میگم مثه cpickle!
ولی مگه چقدرن؟خداییش مثلا همین پایکیوت رو باز کن ببین از کدوم ماژول سی استفاده کرده جز خود QT.اونم تازه خاصیت چسب پایتونه که تونسته زبان برنامه دیگه رو تو خودش ایمپورت کنه.یا مثلا جنگو،برو تحقیق کن ببین،اصلا از ماژولهای سی استفاده کرده؟
بر طبق استاندارد PEP یکی از شروط ماژول نویسی پایتون اینه که تا اونجا که میشه سورس برنامه خلاص  پایتون باشه.
بعد درضمن بعضیهاشون سرعتش بالاتره نه همه.
به هر حال به دید تخریب نباید به قضیه نیگاه کرد،وگرنه تهش این میشه که بگیم پایتون بدون بایندهای c, c++ بدردنخوره!این خیلی حرف شدیدیه!
از شمام بابت معرفی asyncio ممنونم.
« آخرین ویرایش: 05 دی 1392، 10:24 ق‌ظ توسط علی حلاجی »

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
به نظر میرسه شما کیوت رو مشابه کتابخونه هایی مثل gtk یا wxwidget در نظر گرفتین که برای gui استفاده میشن ولی کیوت کتابخونه نیست بلکه یک فریمورکه و این یعنی اینکه شما اگه بخواید از همه تواناییهای اون استفاده کنین باید روش کارش رو بپذیرین و همونطور که قبلا گفتم signal/slot یکی از موارد پایه ای در این فریمورکه که کل فریمورک رو رویدادگرا کرده و در همه بخشهای اون استفاده شده که یکی از اونها gui هست. کدی که در پایین اومده برنامه echo server در کیوت هست که اون رو برای مقایسه با مثال twisted نوشتم:
client.h
#ifndef CLIENT_H
#define CLIENT_H

#include <QtNetwork>

class Client : public QTcpSocket
{
    Q_OBJECT
public:
    explicit Client(QTcpSocket *parent = 0);

public slots:
    void onReceive();

private:
    QTcpSocket* m_socket;
};

#endif // CLIENT_H
client.cpp
#include "client.h"

Client::Client(QTcpSocket *parent) :
     m_socket(parent)
{

}

void Client::onReceive()
{
    QByteArray block;
    block = m_socket->readAll();
    m_socket->write(block);
}
server.h
#ifndef SERVER_H
#define SERVER_H

#include <QObject>
#include <QtNetwork>

class Server : public QObject
{
    Q_OBJECT
public:
    explicit Server(QObject *parent = 0);

private slots:
    void onConnect();

private:
    QTcpServer *tcpServer;
};

#endif // SERVER_H
server.cpp
#include "server.h"
#include "client.h"

Server::Server(QObject *parent) :
    QObject(parent)
{
    tcpServer = new QTcpServer;
    tcpServer->listen(QHostAddress::LocalHost, 10000);
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(onConnect()));
}

void Server::onConnect()
{
    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    Client* client = new Client(clientConnection);
    connect(clientConnection, SIGNAL(readyRead()), client, SLOT(onReceive()));
}

main.cpp
#include <QCoreApplication>
#include "server.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Server server;

    return a.exec();
}
server.pro
QT       += network core

QT       -= gui

TARGET = tcpserver-test-1
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    server.cpp \
    client.cpp

HEADERS += \
    server.h \
    client.h

نکته اول در این برنامه اینه که اصلا از کتابخونه gui کیوت استفاده نشده که بخوایم بگیم event loop کیوت مختص gui هست.نکته دوم اینه که با اینکه برنامه فقط یک thread اصلی داره شما می تونین چندین هزار کانکشن با telnet یا هر روش دیگه ای به این سرور بزنین و جواب بگیرین.در هیج جایی از برنامه هم شما کدی رو نمی بینین که تغییرات رو به صورت مداوم چک کنه تا در مقابل اونها عکس العمل نشون بده. اگه این برنامه رویدادگرا محسوب نشه پس چه عنوان دیگه ای میشه بهش داد؟!
درسته پایکیوت مثال خوبی هست البته برای همون حرف سنگینی که گفتم! در پایکیوت برای اینکه پایتون بتونه از کیوت استفاده کنه از sip استفاده شده :‌http://www.riverbankcomputing.com/software/sip/intro که کدهایی به زبان ++c/c تولید می کنه که بعد از کامپایل با استفاده از یک ماژول پایتونی می تونه بین پایتون و کیوت ارتباط برقرار کنه.
اگه هدف ایجاد یک سایت معمولی باشه فریمورکهایی مثل جنگو کفایت می کنه ولی اگه مثلا شما بخواین سایتی مثل یوتیوب یا حتی آپارات راه بندازین دیگه استفاده صرف از پایتون نمی تونه شما رو به هدفتون برسونه چون عملیات decode و encode فیلمها اینقدر سنگینه که به هیج وجه انجام اونها با پایتون اگه حتی امکان پذیر باشه به صرفه نیست.برای این موارد می تونین از bindingهایی که وجود داره استفاده کنین و به سرعت مورد نظر برسین.خیلی موارد دیگه هستن که پیاده سازیهای ++c/cی ماژولهای پایتون غیر قابل اجتناب هست مثل انواع parser, convertor و محاسبات ریاضی.
هدف من تخریب پایتون نیست و اگه خودم بخوام در سمت سرور کدی بزنم انتخاب اولم پایتون خواهد بود مگر اینکه جوابگوی کار مورد نظر نباشه یا رییسم دستور اکید برای استفاده از چیز دیگه ای رو بده!

آفلاین علی حلاجی

  • Jr. Member
  • *
  • ارسال: 88
  • جنسیت : پسر
  • عاشق پایتون و اوبونتو
    • جامعه پایتونی ها - اجتماع پایتون کاران
به نظر میرسه شما کیوت رو مشابه کتابخونه هایی مثل gtk یا wxwidget در نظر گرفتین که برای gui استفاده میشن ولی کیوت کتابخونه نیست بلکه یک فریمورکه و این یعنی اینکه شما اگه بخواید از همه تواناییهای اون استفاده کنین باید روش کارش رو بپذیرین و همونطور که قبلا گفتم signal/slot یکی از موارد پایه ای در این فریمورکه که کل فریمورک رو رویدادگرا کرده و در همه بخشهای اون استفاده شده که یکی از اونها gui هست. کدی که در پایین اومده برنامه echo server در کیوت هست که اون رو برای مقایسه با مثال twisted نوشتم:
client.h
#ifndef CLIENT_H
#define CLIENT_H

#include <QtNetwork>

class Client : public QTcpSocket
{
    Q_OBJECT
public:
    explicit Client(QTcpSocket *parent = 0);

public slots:
    void onReceive();

private:
    QTcpSocket* m_socket;
};

#endif // CLIENT_H
client.cpp
#include "client.h"

Client::Client(QTcpSocket *parent) :
     m_socket(parent)
{

}

void Client::onReceive()
{
    QByteArray block;
    block = m_socket->readAll();
    m_socket->write(block);
}
server.h
#ifndef SERVER_H
#define SERVER_H

#include <QObject>
#include <QtNetwork>

class Server : public QObject
{
    Q_OBJECT
public:
    explicit Server(QObject *parent = 0);

private slots:
    void onConnect();

private:
    QTcpServer *tcpServer;
};

#endif // SERVER_H
server.cpp
#include "server.h"
#include "client.h"

Server::Server(QObject *parent) :
    QObject(parent)
{
    tcpServer = new QTcpServer;
    tcpServer->listen(QHostAddress::LocalHost, 10000);
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(onConnect()));
}

void Server::onConnect()
{
    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    Client* client = new Client(clientConnection);
    connect(clientConnection, SIGNAL(readyRead()), client, SLOT(onReceive()));
}

main.cpp
#include <QCoreApplication>
#include "server.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Server server;

    return a.exec();
}
server.pro
QT       += network core

QT       -= gui

TARGET = tcpserver-test-1
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    server.cpp \
    client.cpp

HEADERS += \
    server.h \
    client.h

نکته اول در این برنامه اینه که اصلا از کتابخونه gui کیوت استفاده نشده که بخوایم بگیم event loop کیوت مختص gui هست.نکته دوم اینه که با اینکه برنامه فقط یک thread اصلی داره شما می تونین چندین هزار کانکشن با telnet یا هر روش دیگه ای به این سرور بزنین و جواب بگیرین.در هیج جایی از برنامه هم شما کدی رو نمی بینین که تغییرات رو به صورت مداوم چک کنه تا در مقابل اونها عکس العمل نشون بده. اگه این برنامه رویدادگرا محسوب نشه پس چه عنوان دیگه ای میشه بهش داد؟!
درسته پایکیوت مثال خوبی هست البته برای همون حرف سنگینی که گفتم! در پایکیوت برای اینکه پایتون بتونه از کیوت استفاده کنه از sip استفاده شده :‌http://www.riverbankcomputing.com/software/sip/intro که کدهایی به زبان ++c/c تولید می کنه که بعد از کامپایل با استفاده از یک ماژول پایتونی می تونه بین پایتون و کیوت ارتباط برقرار کنه.
اگه هدف ایجاد یک سایت معمولی باشه فریمورکهایی مثل جنگو کفایت می کنه ولی اگه مثلا شما بخواین سایتی مثل یوتیوب یا حتی آپارات راه بندازین دیگه استفاده صرف از پایتون نمی تونه شما رو به هدفتون برسونه چون عملیات decode و encode فیلمها اینقدر سنگینه که به هیج وجه انجام اونها با پایتون اگه حتی امکان پذیر باشه به صرفه نیست.برای این موارد می تونین از bindingهایی که وجود داره استفاده کنین و به سرعت مورد نظر برسین.خیلی موارد دیگه هستن که پیاده سازیهای ++c/cی ماژولهای پایتون غیر قابل اجتناب هست مثل انواع parser, convertor و محاسبات ریاضی.
هدف من تخریب پایتون نیست و اگه خودم بخوام در سمت سرور کدی بزنم انتخاب اولم پایتون خواهد بود مگر اینکه جوابگوی کار مورد نظر نباشه یا رییسم دستور اکید برای استفاده از چیز دیگه ای رو بده!
با سلام
دوست عزیز گوگل یاهو و یوتیوب اصل کارشون رو پایتونه!حالا شما میگی پایتون(جنگو) برای سایتهای معمولیه؟
کلا بحث خوبه ولی در حد منطقیش.
وقتی شما از جانب خودتون میگید پایتون ۸۰٪ بایندینگی از c/c++ یا اینکه پایتون بدون ماژولهای سی کاربرد نداره،این نشون دهنده  این هست که کلا جهان رو از منظر خودتون میبینید.و از بیرون به مسائل نگاه ندارید.و شما چقد مگه پایتون کار کردید؟شاید یه برنامه نویس c++/c باشید،ولی پایتون چی؟
من c++ خیلی کم کار کردم،ولی هیچوقت نمیگم c و c++ در مقابل پایتون هیچه!چون اکثر برنامه ها داره میاد به سمت پایتون.
اگه اینجوری حرف بزنم نشانه بی احترامی من به جامعه c/c++ کاراست،یا کلا خودمو خراب کردم.c/c++ واقعا قویه.ولی من دوست دارم یه تجربه جدید به بچه های برنامه نویس بدم که با پایتون آشنا بشند و خودشون قضاوت بکنند.خداییش تا تجربه نباشه حرف زیاده.
ولی بازم میگم اصلا قبول ندارم حرفتونو که میگید پایتون بیشتر بایندینگش c++ هست،و فریم ورک django,flask میشه گفت جز برترین فریم ورکهای اوله جهانه،و واقعا قدرت و سرعت و امنیت و امکانات رو با هم یکجا تقدیم شما میکنه.و سایتهای غولی رو باهاش اجرا میکنند.بعد من فکر نکنم الان کسی Python,php,.net,ruby,perl اینارو ول بکنه و بیاد با c , c++ برای سمت وب کد بزنه!آخه من که تاحالا نشنیدم کسی با c یا c++ بیاد کد بزنه واسه سمت وب.
بعد پایتون انعطاف پذیرترین زبانه،شما کتابخونه های c , c++، جاوا و دات نت رو میتونی بیاری توش و از اونا استفاده کنی.اسم این ضعف نیست دوست عزیز،خاصیت برجسته پایتون هست.

فقط اینو بدون که اگه پایتون سرعتش ضعیف بود الان اکثر یونیکس بیسها روی سیستم عاملشون پایتون بصورت پیش فرض نصب نبود،حتی سیستم عامل مک،کنسولشونو(ترمینال) بزنی و توش بنویسی پایتون برات مفسر پایتون رو میاره!الان اکثر سرورهای جهان روشون پایتونه!الان نمیدونم با چه سیستم عاملی کار میکنید،فقط اینو میدونم که اگر کاربر لینوکسی هستی،بدون اگه پایتون روی لینوکستونو پاک کنی تقریبا فلج میشی،چون اکثر برنامه حتما به پایتون نیاز دارند.
درکل ممنون از نظرتون.شما کلا c , c++ کار میکنید؟
« آخرین ویرایش: 05 دی 1392، 08:48 ب‌ظ توسط علی حلاجی »