دوره پردازش ویدیو در لاراول توسط FFmpeg

سلام دوستان.

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

دوره پردازش ویدیو در لاراول توسط FFmpeg. 😍 یک دوره عالی که میشه گفت اولین کسی هستم که دارم درموردش دوره ویدیویی تهیه میکنم. 😎 پردازش ویدیو یکی از بحث های خیلی کاربردیه و یک برنامه نویس ارشد هم باید در مورد اون آگاهی داشته باشه. 👨‍💻

دوره رو میتونید از لینک زیر و به صورت کاملا رایگان مشاهده کنید! فقط یادتون نره که جهت “💖حمایت💖 ” حتما کانال رو دنبال کنید.👇👇👇

https://www.youtube.com/watch?v=aIZ-QobcgU4

لینک کانال و دوره های بیشتر :

کانال آموزش برنامه نویسی ویدیویی به زبان فارسی : رویال کودز

نوشته دوره پردازش ویدیو در لاراول توسط FFmpeg اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

معرفی مسابقه برنامه‌نویسی کدجام گوگل

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

مسابقه کدجام (Code Jam) اولین بار در سال 2003 توسط شرکت گوگل برگزار شد. محبوبیت این مسابقه در بین برنامه‌نویسان رفته رفته افزایش پیدا کرد تا اینکه در سال 2007 کدجام به یکی از بزرگترین مسابقه برنامه‌نویسی جهان معرفی شد.

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

مزایای شرکت در این مسابقه برای برنامه نویسان

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

1. مهارت برنامه‌نویسی خودتان را می‌توانید در سطح جهانی محک بزنید
2. افرادی که در این مسابقه رتبه خوبی کسب می‌کنند در شرکت گوگل استخدام می‌شوند.
3. مهارت خودتان را برای جایزه نقدی (15000 دلار) به چالش بکشید
4. با شرکت در این مسابقه و کسب رتبه قابل قبول امتیاز بسیار خوبی است برای رزومه شما
5. برای آن دسته از افرادی که قصد مهاجرت کاری و یا تحصیلی دارند این مسابقه می‌تواند برایشان سودمند باشد

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

برای کسب اطلاعات بیشتر درباره مسابقه و ثبت نام در آن به سایت اصلی کدجام مراجعه کنید.

اگر سوال و نظری دارید در بخش دیدگاه‌ها درخدمت هستم.

لینکدین من:

https://www.linkedin.com/in/abbas-khalaji/

اینستاگرام من:

https://www.instagram.com/abbaskhalaji1/

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

گردآوری توسط ایده طلایی

آموزش برنامه نویسی شی گرا در ++C(قسمت 2)

سلام به همگی , خب امروز می خوایم به ادامه ی شی گرایی در ++C ببردازیم.

وراثت (Inheritance) :

وراثت در شی گرایی به مفهوم ساخت کلاسی جدید(کلاس فرزند) از روی کلاسی موجود(کلاس والد) می باشد ; بدین صورت که کلاس فرزند صفات و متد های کلاس والد را داراست و در عین حال صفات و متد های مختص به خود را نیز دارد.

مزیت وراثت استفاده از کد های مشترک می باشد.

همان گونه که در قطعه کد فوق مشاهده می کنید کلاس فرزند بدون اینکه خود دارای متدی باشد مقدار x را برای ما چاب کرده است ; به نحوه ی تعریف کلاس فرزند دقت کنید کاراکتر ( : ) بدین معنی است که child_class از parent_class ارث بری دارد.

اعضای محافظت شده(Protected members) :

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

برای درک تفاوت عضو private و protected به قطعه کد زیر دقت کنید.

غلبه بر وراثت (Overriding) :

در بحث وراثت درست است که کلاس فرزند دارای متد های کلاس والد است ولی این بدین معنی نیست که دقیقا مانند کلاس والد عمل می کند.

به قطعه کد زیر دقت کنید :

همانگونه که مشاهده می کنید متد show_message برای هردو کلاس والد و فرزند است ولی برای هردو خروجی یکسان ندارد.

چند ریختی (Polymorphism) :

چند ریختی به معنای یک چیز بودن و چند شکل داشتن است ; با مشاهده به کد فوق معنای چند ریختی را نیز متوجه می شوید.

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

ممنونم که وقتتون رو در اختیار من گذاشتید و مطالعه کردید.

ممنون میشم نظراتتون رو برام کامنت کنید.

نوشته آموزش برنامه نویسی شی گرا در ++C(قسمت 2) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

سوالات امتحانی دی ماه 98 در ایران

ترم اول بودیم که با برنامه نویسی کامپیوتر آشنا شدیم. از روز اول هم این سوالمان بود که اینی که داریم یادمیگیریم آیا همان زبانی است که با آن می‌شود نرم افزار نوشت یا نه !

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

خوب تا اینجای کار منطقی بود!
اما ترم های بعد حتی همین الان که در آستانه ورود به ترم 8 به سر می‌بریم هنوز با واحدهایی مواجه ایم که خجالت می‌کشیم بگوییم در دانشگاه به ما “فلیپ فلاپ چیست “‌یاد می‌دهند. از 144 واحدی که باید یک مهندس کامپیوتر بگذراند شاید 10 واحدش نیاز روز باشد.

مثلا ترم 5 کتابی را میخواندیم که تالیفش به زمان ابداع کامپیوتر بر می‌گشت .

بگذرم

این روزها بیشتر از هر زمانی درگیر عیب های سیستم آموزشی شده ام.

ترم تحصیلی ما با بحث هایی راجع به انتخابات مجلس شروع شد.

دی ماه هم که زمان امتحان هاست، کشور و منطقه درگیر مسائلی شد که شاید 40 سال گذشته‌ به خود ندیده بود. اما دانشگاه ها همچنان برقرار و امتحان ها سر جای خود.

مگر این دانشجو نباید همان کسی باشد که فهم‌اش نسبت به تحولات کشور هدایت کننده جامعه است؟

همان که بیشتر می‌داند و جلو دار است؟

یا به قولی موذن جامعه است؟

چه می‌شود ما را که در گروه های درسی‌مان دانشجو فرمان بحث سیاسی ممنوع می‌دهد و به این نتیجه می‌رسیم که باید به درسمان بچسبیم و امتحانات را دریابیم.

دور بحث های سیاسی و کانال های خبرگزاری را هم یک خط قرمز بکشیم!
به نظر من به عنوان یک دانشجو امروز در این اوضاع باید سوال امتحانی من این باشد که چرا سفیر انگلیس در تظاهرات دانشجویان شرکت داشت؟

یا بپرسند که چرا باید آمریکا از منطقه برود؟

یا بپرسند آمریکا چطور باید از منطقه برود؟

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

یا بپرسند که به نظر تو چیشد که فلانی سیلی بدی خورد و جواب نداد‍؟

یا بپرسند مصداق مسئولیت پذیری در نظام چیست؟

یا بپرسند چرا سه روز سکوت خبری شد؟

و هزار یک سوالی چون این

این ها سوالات امتحانی دی ماه 98 باید باشد. در چارت دروس عمومی. شاید بگویید که آخر دانشجوی مهندسی را چه به بحث های سیاسی ؟

من می‌گویم این سیاست نیست این فرآیند رشد اتمسفری است که من قرار است دانش ام را به کارآیی برسانم. چارت درسی دانشجو باید مطابق نیاز روز باشد و منبع درسی او باید هر روز به روز رسانی شود.

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

شبکه های ماهواره ای به روز را بشناسم و حتی شبکه ای ایمن تر بسازم.

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

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

اما رویکردی که وجود دارد لغو نشدن امتحانات در دانشگاه های تهران،‌ لغو تجمعات و … .

و در نهایت شاید دانشجو از خبرگزاری snn لفت داد و با تمرکز سر درسش نشست.

البته که اتفاقات زمانه نباید باعث کند شدن فرآیند رشد دانشجو شود،‌ اما رشد تنها با آگاهی صورت می‌گیرد.

با شناختن دنیایی که در آن زیست داریم.

من حاضر هستم حتی چند واحدی را هم درجا بزنم اما بفهمم دارد چه اتفاقاتی اطرافم می‌افتد…

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

گردآوری توسط ایده طلایی

دوره آموزش رایگان برنامه نویسی پایتون برای همه

یه دوره ی آموزش رایگان برنامه نویسی با عنوان «پایتون برای همه» شروع کردیم و میخوایم با همدیگه از تقریبا صفر شروع کنیم و برنامه نویسی رو با مزه ی پایتون بچشیم:)

پایتون بنظرم یکی از راحت ترین زبان های برنامه نویسی برای یادگیریه که برای کسانی که تازه میخوان برنامه نویسی رو شروع کنن فوق العادست. چون دستور زبان روونی داره و به زبان طبیعی انسان نزدیکه (به نسبت زبان هایی مثل C و C++ . بنظرم اگه میخواین برنامه نویسی رو شروع کنین و بفهمین برنامه نویسی چه مزه ای داره حتما این دوره رو از دست ندین! رایگانه و پروژه محور!!

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

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

www.edrisranjbar.ir

نوشته دوره آموزش رایگان برنامه نویسی پایتون برای همه اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویسی شی گرا در زبان برنامه نویسی ++C

سلام به همگی , در این مقاله می خواهیم با شی گرایی در ++C آشنا شویم ولی به دلیل گسترگی مطالب و به منظور یادگیری بهتر در 3 مقاله این بحث را ارایه می کنیم .

کلاس (Class) :

در برنامه نویسی شی گرا هنگامی که از یک گروه صحبت می کنیم بحث کلاس (Class) مطرح می شود ;
مثلا هنگامی که می گوییم دانشجویان بحث کلاس مطرح است زیرا به یک شخص خاص اشاره ندارد و منظور تمامی دانشجوها می باشد.

شی (Object) :

اگر بخواهیم به یک شخص خاص از کلاس اشاره کنیم آنگاه بحث شی(Object) مطرح می شود ; مثلا وقتی می گوییم خانم احمدی داریم به یک شی از کلاس اشاره می کنیم.

صفت(Attribute/Property) :

هریک از اشیا کلاس دارای ویژگی های منحصر به فرد است که به آن ها صفت(Property) گفته می شود ; مثلا یک دانشجو دارای نام , نام خانوادگی , نام پدر , تاریخ تولد و … است که هریک از این ها صفت این شی (دانشجو) به شمار می آیند.

متد(Method) :

هریک از این اشیا قابلیت انجام کاری را دارند یا می توان بر روی آن عملی را انجام داد که به مجموعه این اعمال متد(Method) گفته می شود ; مثلا هر دانشجو می تواند انتخاب واحد کند , درسی را پاس می کند , درسی را می افتد , … این ها متد به حساب می آیند.

سطوح دسترسی عمومی(Public) و خصوصی(Private) :

هر یک از اعضا کلاس در دو سطح دسترسی عمومی (Public) و یا خصوصی (Private) تعریف می شوند. این سطوح دسترسی به امکان/عدم امکان دسترسی به این عناصر در خارج کلاس اشاره دارد. یک عضو عمومی در هر جایی از یک برنامه ++C قابل دسترسی است ; در حالی که یک عضو خصوصی تنها توسط اعضا کلاس قابل دسترسی است و امکان دسترسی به آن خارج از کلاس وجود ندارد.

در برنامه نویسی شی گرا , معمولا صفات (متغیرها) بصورت خصوصی (Private) و متدها (توابع) بصورت عمومی (Public) تعریف می شوند. اصطلاح کپسوله سازی (Encapsulation) نیز به همین منظور استفاده می شود ; به این معنی که داده های یک کلاس (صفات) باید از دید سایر بخش های برنامه (خارج کلاس) مخفی بمانند. در عوض چنانچه نیاز به دسترسی به آنها بود , این کار بصورت غیرمستقیم و از طریق توابع عضو کلاس (متدها) انجام می شود.

برای درک بهتر این مفهوم به قطعه کد زیر دقت کنید :

همان طور که در خط 20.21.22 مشاهده می کنید year.month.day دارای خطا هستند ; دلیل این خطا این است که این 3 صفت خصوصی هستند و اجازه نداریم خارج از کلاس از آن ها استفاده کنیم.

برای برطرف کردن این خطا دو روش داریم :

1.استفاده از یک متد دیگر ;

2.تابع سازنده(Constructor) .

روش 2 راه اصلی می باشد که در ادامه به توضیح آن می پردازیم.

قطعه کد مربوط به استفاده از یک متد دیگر(روش 1)

تابع سازنده(constructor) :

برای مقداردهی به صفات می توانیم از تابع سازنده (Constructor) استفاده کنیم که در بحث شی‌گرایی یک تابع کاملا شناخته شده می باشد.

تابع سازنده 3 ویژگی دارد :

1.تابع سازنده تابعی هم نام با اسم کلاس است ;

2.مقدار برگشتی ندارد یعنی حتی نیاز به void هم نداریم ;

3.به صورت اتوماتیک فراخوانی می شود یعنی هنگامی که می خواهیم یک شی از یک کلاس را تعریف کنیم تابع سازنده به صورت اتوماتیک فراخوانی می شود.

قطعه کد مربوط به تابع سازنده

تابع عضو خصوصی(Private member function) :

تابع عضو خصوصی تابعی می باشد که در قسمت Private یک کلاس تعریف می شود ; در واقع تابع عضو خصوصی تابعی است که ما نمی توانیم در برنامه اصلی آن را فراخوانی کنیم و فقط برای کمک به متد ها از آن استفاده می شود.

در اینجا بحث (Information hiding) که یکی از مزایای برنامه نویسی شی گرا است مطرح می شود یعنی ما کاری را انجام می دهیم بدون اشاره به آن.

اعضا ایستا(Static members) :

گاهی بدون اینکه هیچ شی ای از کلاس موجود باشد , می خواهیم به اعضا کلاس دسترسی داشته باشیم ; در این حالت آن عضو را بصورت عضو ایستا (Static) تعریف می کنیم. تاکنون دسترسی به اعضا کلاس (متدها) از طریق یک شی موجود انجام می شد.

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

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

در مقالات بعدی شی گرایی در ++C را کامل توضیح می دهیم.

امیدوارم که مطلب مفیدی بوده باشه , ممنون میشم نظراتتون رو برام کامنت کنید.

نوشته برنامه نویسی شی گرا در زبان برنامه نویسی ++C اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چرا من جاوااسکریپت را دوست دارم؟

javascript

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

جاوااسکریپت چیست؟

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

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

حالا چرا من این زبان را دوست دارم و از آن استفاده میکنم؟

یکی از اصلی‌ترین دلایل من برای استفاده از این زبان، سادگی آن است. برخلاف زبان‌های برنامه نویسی دیگر من برای یادگیری این زبان حدود دو ماه تمام وقت گذاشتم (سال 95 ). این برای من خیلی لذت بخش بود…

جاوااسکریپت این امکان را به ما می‌دهد که هم فرانت اند و هم بک اند را کدنویسی کنیم این خیلی عالیه!‌ و دیگر نیازی نیست برای بک اند سراغ یک زبان دیگر مثل PHP برویم. (برای برنامه نویسی بک اند در جاوااسکریپت می‌توان از Node.js استفاده کرد. Node.js یک فریم ورک جاوااسکریپتی بر پایه تکنولوژی node است. سعی میکنم توی پست های بعدی درباره مزایا و معایبش بنویسم!)

امروزه با جاوااسکریپت می‌توانید برای هرچیزی کد بزنید! از برنامه نویسی وب گرفته تا برنامه نویسی نرم‌افزارهای کامپیوتری، هوش مصنوعی،‌ نرم افزارهای اندروید و ios، توسعه بازی و هزاران کار دیگه… این یک مزیت بسیار بزرگ برای من بود که دوست داشتم برای هرچیزی برنامه نویسی کنم.

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

در پست های بعدی حتما سعی می‌کنم به طور تخصصی مزایا و معایب این زبان را بررسی کنم…

لینکدین من:

https://www.linkedin.com/in/abbas-khalaji/

اینستاگرام من:

https://www.instagram.com/abbaskhalaji1/

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

گردآوری توسط ایده طلایی

ویجت 15 (ToggleButtons در فلاتر)

خوب دوستان عزیز بریم سراغ یکی از ویجت های جذاااااب (تکه کلام دوستان به من ومن به همه عذر می خوام زیاد میگم عادت کردم بهش :))) فلاتر یعنی ToggleButtons

همین الان یکی از متون بالا با کلیک چپ انتخاب کنید چی می بینید یا متن های سایت های دیگه را اره یک یا چند گزینه بهت نمایش داده میشه مثلا Copy و Cut و Paste زیاد با این کلمات اشناییت داریم 🙂

خوب این کار را را چطور در فلاتر ایجاد کنیم از اون جایی که فلاتر برای هر کاری راه حل خودش را داره این ویجت می تونه راه حل خوبی باشه

بی وقفه بریم سراغ کد

List isSelected = [false, false, false];
ToggleButtons(
  children: [
    Icon(Icons.format_bold),
    Icon(Icons.format_italic),
    Icon(Icons.link),
  ],
  isSelected: isSelected,
  onPressed: (int index) {
    setState(() {
      isSelected[index] = !isSelected[index];
    });
  },
)

در داخل این ویجت 3 ایکون تعریف کردیم که گزینه های ما روی میزه و ارایه مورد نظر که در مرحله ی اول همه ی موارد False است را بهش می دهیم سپس کلیک برای گزینه هایمان تعریف میکنیم و با Index میشه تشخیص داد کدام کلیک شده است و در نهایت ان مورد مورد نظر را در ارایه اگر Flase بود به True و بالعکس تبدیل میکنیم

بریم سراغ توضیح پارامتر های دیگرش اماده ای ؟

https://media.giphy.com/media/nFjDu1LjEADh6/giphy.gif

پارامتر color

به وسیله ی ان می تونیم رنگ ایکون ها را تعیین کنیم

پارامتر selectedColor

که میتونیم رنگ ایکون انتخابی را مدیریت کنیم

پارامتر fillColor

که رنگ مستطیل انتخابی را تنظیم میکند

پارامتر highlightColor

رنگ هایلایت انتخابی را ایجاد می کند

پارامتر splashColor

رنگی که کارب وقتی روی ان کلیک می کنه پخش میشه

پارامتر borderColor

خط دور این ویجت را مدیریت می کنیم

پارامتر borderWidth

اندازه ی خط دور ویجت را تنظیم می کنیم

پارمتر borderRadius

مدیریت انحنای دور ویجت

پارامتر renderBorder

حذف خط دور ویجت

اینم کل کد استفاده از این پارامتر ها

import 'package:flutter/material.dart';

class DemoToggleButtons extends StatefulWidget {
  @override
  _DemoToggleButtonsState createState() => _DemoToggleButtonsState();
}

class _DemoToggleButtonsState extends State {
  List isSelected = [false, true, false];
  FocusNode focusNodeButton1 = FocusNode();
  FocusNode focusNodeButton2 = FocusNode();
  FocusNode focusNodeButton3 = FocusNode();
  List focusToggle;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    focusToggle = [focusNodeButton1, focusNodeButton2, focusNodeButton3];
  }

  @override
  void dispose() {
    // Clean up the focus node when the Form is disposed.
    focusNodeButton1.dispose();
    focusNodeButton2.dispose();
    focusNodeButton3.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      darkTheme: ThemeData.dark(),
      theme: ThemeData(brightness: Brightness.dark),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('ToggleButtons'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ToggleButtons(
                color: Colors.greenAccent,
                selectedColor: Colors.amberAccent,
                fillColor: Colors.purple,
                splashColor: Colors.lightBlue,
                highlightColor: Colors.lightBlue,
                borderColor: Colors.white,
                borderWidth: 5,
                selectedBorderColor: Colors.greenAccent,
                renderBorder: true,
                borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(25),
                    bottomRight: Radius.circular(25)),
                disabledColor: Colors.blueGrey,
                disabledBorderColor: Colors.blueGrey,
                focusColor: Colors.red,
                focusNodes: focusToggle,
                children: [
                  Icon(Icons.format_bold),
                  Icon(Icons.format_italic),
                  Icon(Icons.link),
                ],
                isSelected: isSelected,
                onPressed: (int index) {
                  setState(() {
                    isSelected[index] = !isSelected[index];
                  });
                },
              ),
              SizedBox(
                height: 50,
              ),
              Container(
                decoration: BoxDecoration(
                  color: Colors.black,
                ),
                child: Column(
                  children: [
                    Text('TV remote'),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        RaisedButton(
                          child: Text('Previous'),
                          onPressed: () {
                            FocusScope.of(context)
                                .requestFocus(focusNodeButton1);
                          },
                        ),
                        SizedBox(
                          width: 20,
                        ),
                        RaisedButton(
                          child: Text('Next'),
                          onPressed: () {
                            FocusScope.of(context)
                                .requestFocus(focusNodeButton2);
                          },
                        ),
                      ],
                    ),
                  ],
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

اما وقتی بخواهیم یکی از این موارد حداقل انتخاب شود چی ؟

onPressed: (int index) {
  setState(() {
 for (int indexBtn = 0;indexBtn < isSelected.length;indexBtn++) {
  if (indexBtn == index) {
        isSelected[indexBtn] = true;
      } else {
        isSelected[indexBtn] = false;
      }
    }
  });
}

حالا اگر بخواهیم انتخاب نشده هم جزو گزینه هامون باشه چی ؟

onPressed: (int index) {
  setState(() {
 for (int indexBtn = 0;indexBtn < isSelected.length;indexBtn++) {
 if (indexBtn == index) {
        isSelected[indexBtn] = !isSelected[indexBtn];
      } else {
        isSelected[indexBtn] = false;
      }
    }
  });
}

حالا اگر بخواهیم عمودی باشد چی ؟

RotatedBox(
 quarterTurns: 1,
  child: ToggleButtons(
    color: Colors.greenAccent,
    children: [
  RotatedBox(quarterTurns: 3, child: Icon(Icons.format_bold)),
  RotatedBox(quarterTurns: 3, child: Icon(Icons.format_italic)),
  RotatedBox(quarterTurns: 3, child: Icon(Icons.link)),
    ],
    isSelected: isSelected,
  ),
)

به همین سادگی به همین خوشمزگی.

اگر مطلب براتون مفید بوده لینک ان را برای دوستانتان در شبکه های اجتماعی بفرستید تا ان ها هم بتوانند استفاده کنند و به دوستداران فلاتر روز به روز افزوده شود😊

روز های زیبا و جذاااااااااااااااااابی داشته باشید قلب یادتون نره 🙂

نوشته شده توسط پژمان حاجی حیدری یک علاقه مند به برنامه نویسی

نوشته ویجت 15 (ToggleButtons در فلاتر) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

شگفت انگیز=پایتون=سرعت

کسانی که از پایتون متنفر هستند همیشه می‌گویند یکی از دلایلی که نمی‌خواهند از ان استفاده کنند کند بدون پایتون است.

برنامه‌ای که می نویسیم صرف نظر از زبان برنامه نویسی که استفاده کردیم بالا یا پایین بودن سرعت برنامه بستگی مهارت توسعه دهنده و مهارت های او دارد.

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

زمانبندی و پروفایل

قبل از بهینه سازی کد، ابتدا باید ببینیم که کدام قسمت از کد برنامه،برنامه را کند می کند.

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

نکته: این برنامه ای که استفاده می‌کنم بر گرفته شده در مستند های پایتون است که عددی را به توان X محاسبه می‌کند

# slow_program.py
from decimal import *
def exp(x):
getcontext().prec += 2
i, lasts, s, fact, num = 0, 0, 1, 1, 1
while s != lasts:
lasts = s
i += 1
fact *= i
num *= x
s += num / fact
getcontext().prec -= 2
return +s
exp(Decimal(150))
exp(Decimal(400))
exp(Decimal(3000))

تنبل ترین روش پروفایل

اول از همه و ساده ترین روش برای تنبل ها تایم یونیکس

~ $ time python3.8 slow_program.py
 real 0m11,058s
 user 0m11,050s
sys  0m0,008s

اگه برای کل برنامه بخواهید زمان بگذارید کافی نیست….

پروفایل دقیق تر

در روش دیگر cProfile قرار دارد که اطلاعات بیشتری بهتون می‌دهد

~ $ python3.8 -m cProfile -s time slow_program.py
         1297 function calls (1272 primitive calls) in 11.081 seconds
   Ordered by: internal time
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        3   11.079    3.693   11.079    3.693 slow_program.py:4(exp)
        1    0.000    0.000    0.002    0.002 {built-in method _imp.create_dynamic}
      4/1    0.000    0.000   11.081   11.081 {built-in method builtins.exec}
        6    0.000    0.000    0.000    0.000 {built-in method __new__ of type object at 0x9d12c0}
        6    0.000    0.000    0.000    0.000 abc.py:132(__new__)
       23    0.000    0.000    0.000    0.000 _weakrefset.py:36(__init__)
      245    0.000    0.000    0.000    0.000 {built-in method builtins.getattr}
        2    0.000    0.000    0.000    0.000 {built-in method marshal.loads}
       10    0.000    0.000    0.000    0.000 :1233(find_spec)
      8/4    0.000    0.000    0.000    0.000 abc.py:196(__subclasscheck__)
       15    0.000    0.000    0.000    0.000 {built-in method posix.stat}
        6    0.000    0.000    0.000    0.000 {built-in method builtins.__build_class__}
        1    0.000    0.000    0.000    0.000 __init__.py:357(namedtuple)
       48    0.000    0.000    0.000    0.000 :57(_path_join)
       48    0.000    0.000    0.000    0.000 :59()
        1    0.000    0.000   11.081   11.081 slow_program.py:1()

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

توابع زمانبندی خاص

حال که می‌دانیم توجه خود را کجا صرف کنیم، بدون در نظر گرفتن اندازه گیری بقیه کد، عملکرد کند زمان را اندازه بگیرم، برای اینکار از دستور decorator استفاده می‌کنیم:

def timeit_wrapper(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()  # Alternatively, you can use time.process_time()
        func_return_val = func(*args, **kwargs)
        end = time.perf_counter()
        print('{0:<10}.{1:<8} : {2:<8}'.format(func.__module__, func.__name__, end - start))
        return func_return_val
    return wrapper

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

@timeit_wrapper
def exp(x):
    ...
print('{0:<10} {1:<8} {2:^8}'.format('module', 'function', 'time'))
exp(Decimal(150))
exp(Decimal(400))
exp(Decimal(3000))

همچین خروجی می‌دهد:

~ $ python3.8 slow_program.py
module     function   time
__main__  .exp      : 0.003267502994276583
__main__  .exp      : 0.038535295985639095
__main__  .exp      : 11.728486061969306

نکته که باید در نظر بگیرم این که کدام زمان را می‌خواهیم اندازه گیری کنیم. بسته تایم این مقدار ها time.perf_counter ، time.process_time برمی‌گرداند.

فرق اش در این است که مقدارtime.perf_counter یک مقدار مطلق است که شامل زمان عدم اجرای روند در پایتون هم است. در طرف دیگر time.process_time که زمان کاربر است (به غیر زمان سیستم) که زمان همان پروسه است.

سریع تر کنیم

بیاید کاری کنیم که برنامه در پایتون سریع تر کار کند. اینجا قرار نیست ترفند خاصی گفته بشه که به طوری شگفت اوری برنامه را سریع تر کند، این بیشتر مربوط به استراتژیهای است که می‌تواند برنامه را تا حدود ۳۰ درصد بهبود بخشید.

از داده‌های داخلی استفاده کنید

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

ذخیره و یاداوری یا همان کش

برای مثال:

import functools
import time
# caching up to 12 different results
@functools.lru_cache(maxsize=12)
def slow_func(x):
    time.sleep(2)  # Simulate long computation
    return x
slow_func(1)  # ... waiting for 2 sec before getting result
slow_func(1)  # already cached - result returned instantaneously!
slow_func(3)  # ... waiting for 2 sec before getting result

عملکرد فوق با استفاده از محاسبات سنگین time.sleep را شبیه سازی می کند. وقتی برای اولین بار این تابع فراخوانی می شود ۲ ثانیه صبر می‌کند و بعد نتیجه را بازمی گرداند و وقتی دوباره فراخوانی می‌شود نتیجه ذخیره شده است. پس درنتیجه از روی محاسبات سنگین پرش می کند و نتیجه را نمایش می‌دهد.

متغییرهای محلی

این بیشتر مربوط به جستجو در متغییر هاست بین متغییر های محلی و سراسری متغییر محلی سرعت بیشتری دارد برای مثال self.name سرعت پایینی دارد و time.time که وارد شده است سرعت اهسته تری دارد.

با این روش با کمتر کردن دستورات می توانید به برنامه خود بهبود بخشید

#  Example #1
class FastClass:
    def do_stuff(self):
        temp = self.value  # this speeds up lookup in loop
        for i in range(10000):
            ...  # Do something with `temp` here
#  Example #2
import random
def fast_function():
    r = random.random
    for i in range(10000):
        print(r())  # calling `r()` here, is faster than global random.random()

توابع

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

def main():
    ...  # All your previously global code
main()

دسترسی به خاصیت ها

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

#  Slow:
import re
def slow_func():
    for i in range(10000):
        re.findall(regex, line)  # Slow!
#  Fast:
from re import findall
def fast_func():
    for i in range(10000):
        findall(regex, line)  # Faster!

رشته ها

یکی از دیگر موضوع ها استفاده از رشته ها می‌باشد به مثال زیر دقت کنید

f'{s} {t}'  # Fast!
s + '  ' + t
' '.join((s, t))
'%s %s' % (s, t)
'{} {}'.format(s, t)
Template('$s $t').substitute(s=s, t=t)  # Slow!

جمع بندی

امیدوارم مفید واقع شود و تا حد امکان این موارد را در نظر بگیرید.

مطالب از این لینک برگفته شده است.

نوشته شگفت انگیز=پایتون=سرعت اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

آموزش vue.js

سلام من شیما هستم دانشجوی رشته ی مهندسی نرم افزار و عاشق دنیای برنامه نویسی هستم .

چند ماه پیش بود ( فکر کنم اوایل تابستان سال ۱۳۹۸ بود ) که شرکت ما به من پیشنهاد داد که ویو جی اس را یاد بگیرم چون قراره یک پروژه ی ویو جی اس داشته باشیم .

این اجبار در ابتدا کمی سخت به نظر میرسید و من واقعیتش دوست نداشتم ویو جی اس را یاد بگیرم ولی خب چون در شرکتی که کار میکردم به تازگی استخدام شده بودم مجبور بودم بگم چشم تا بتونم به کارم ادامه بدم .

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

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

vue.js چیست ؟ و چه کاربردی دارد ؟

vue.js چیست ؟ و چه کاربردی دارد ؟

ویو جی اس که بصورت vue.js نوشته میشه و بصورت view تلفظ میشه یک فریمورک هست برای زبان برنامه نویسی جاوا اسکریپت .

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

سالهاست که برنامه نویسان وب از کتابخانه ها و فریمورک های زیادی استفاده میکردند . سالهای بسیار قبلتر همه جی کوئری را میشناختند مخصوصا آنهایی که قصد داشتند در سایت خود حرکت های ایجکسی بزنند .

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

علاوه بر جیکوئری کتابخانه های دیگری همچون ری اکت که توسط شرکت فیسبوک طراحی و ساخته شده است بخش فرانت اند وب سایت های مختلف را تصاحب کرد …

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

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

همین بحث کلیت است که فریمورک های جاوااسکریپت را از کتابخانه های جاوااسکریپتی جدا میکند .

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

خب امروز که دارم این رو مینویسم در ورودی سال 2020 میلادی هستیم و لیست زیر پراستفاده ترین کتابخانه ها و فریمورک ها برای جاوااسکریپت یا بهتره بگم پیاده سازی فرانت اند وب سایت ها است :‌

  • جی کوئری
  • ویو جی اس
  • ری اکت جی اس
  • انگولار
  • و …

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

سایت های فراوانی بخش فرانت اند خودشان را با vue.js پیاده سازی کردند من در ایران کافه بازار و زرین پال را دیدم که سوئیچ کردن به vue.js و بقیه رو نمیدونم 🙂

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

بذارید مزایای ویو جی اس را بصورت مرتب در بخش زیر بررسی کنیم .

مزایای فریمورک ویو جی اس

  • حجم کم ( حدود 33 کیلوبایت )
  • سرعت لود بسیار بالا
  • توانایی کنترل المان های صفحه ی وب توسط DOM مجازی ( لینک معرفی شده درباره ی DOM مجازی ری اکت صحبت میکند که درباره ی ویو جی اس هم همین مفاهیم است )
  • استفاده از کامپوننت های پیش ساخته
  • استفاده از اکوسیستم عالی برای کنترل رویدادهای روی صفحه ی وب


آموزش ویو جی اس آسان است .

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

https://avasam.ir/product/27

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

در این دوره ی آموزشی یک دفترچه ی تلفن مخاطبین آنلاین بصورت SPA تولید میشه که در ادامه در مورد SPA و ارتباط آن با ویو جی اس توضیح خواهم داد .

وب سایت های SPA چیست و چطور با ویو جی اس وب سایت SPA تولید میشود ؟

عبارت SPA مخفف Single Page Application است . به معنی اینکه شما یک وب سایت را بصورت تک صفحه ای بسازید و برای کارهای مختلف درون وب سایت دیگر مرورگر کاربر دچار ریفرش و لودینگ های قابل احساس نباشد .

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

قبلا وب سایت های SPA با react و انگولار طراحی میشد اما با ورود vue.js به بازار کار برنامه نویسی وب داستان فرق کرد و برنامه نویسان علاوه بر react و angular حالا با vue.js میتوانند سایت های spa تولید کنند .

دمو زیر از سایت آواسام تهیه شده است و مربوط به دوره ی ساخت دفترچه ی تلفن بصورت spa است که با لاراول و ویو جی اس اتفاق میوفتد همانطور که میبینید سایت بصورت تک صفحه ای یا spa است برای مثال

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

آموزش کامل ویو جی اس

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

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

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

آیا vue.js معماری سه لایه است

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

قبل از هر چیزی باید درباره ی مقاله ی بالا خدمتتون عرض کنم mvc اصلا معماری سه لایه نیست !‌

مفهوم معماری سه لایه و کلا معماری های چند لایه در بحث نرم افزار با یک پترن دیزاین ساده مثل mvc کلا تفاوت داره و حالا چطور معماری سه لایه و mvc و این وسط vue.js به هم ارتباط داده شده خدا میدونه !!!

چطور میشه یک نرم افزاری اصلا از پترن دیزاین mvc استفاده نکنه ولی ویو رو استفاده کنه ؟ به راحتی آب خوردن چون اصلا ویو جی اس به mvc بودن یا نبودن ارتباطی نداره ضمنا view هرگز یک لایه نیست !‌

بلکه view در بحث mvc فقط و فقط یک المان است منبع از ویکیپدیای انگلیسی mvc

Model–view–controller (usually known as MVC) is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements.

دوستان به هر مقاله و آموزشی در وب اعتماد نکنید سعی کنید از منابع معتبر و ثابت شده توسط دیگر برنامه نویس ها استفاده کنید همین مقاله ی بالا خودش باعث انحراف ذهنی شما در مسئله ی معماریی های چندلایه در نرم افزار و همچنین کاربرد عنصر view در پترن دیزاین mvc و همچنین ماهیت vue.js میشود .

نوشته آموزش vue.js اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی