داستان نداشتن قدرت حل مسئله :(

برنامه نویس شدن …. :)لطفا

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

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

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

میگن میتونی قدرت حل مسئله خودت رو بالا ببری … میخوام بدونم چجوری میشه این کارو کرد این قضیه واقعا داره آزارم میده … توی سایته https://edabit.com که توش چالش های کد نویسی گذاشته میشه توی چند روز تونستم ۸۸۵ امتیاز بگیرم ک میشه ۱۷۷ تا مسئله … اما باز مسئله هایی هستند که واقعا نمیتونم حل کنم

اینم بگم مسئله هایی که حل کردم همه تو سطح hard , very hard بودنا

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

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

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

جواب چالش های قسمت دوم – ۱۲ تا ۱۹

به نام خدا.

سلام.

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

باز هم میگم که:

اینها کپی از همون کتابیه که تو قسمت معرفی گفتم. نیاز نیست کُد شما ۱۰۰ درصد شبیه این باشه. فقط بهشان نگاه کنید برای یادگیری.

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

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

اینم جواب چالش های قسمت دوم:

یا علی.

نوشته جواب چالش های قسمت دوم – ۱۲ تا ۱۹ اولین بار در ویرگول پدیدار شد.

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

خداحافظی از برنامه نویسی و استارتاپ خودم بخاطر نداشتن لپ تاپ

سلام

خوب از کجا شروع کنم…

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

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

و در عوضش هر پروژه برنامه نویسی پایتونی داشت حاضرم انجامش بدم

البته اگه در سطح بنده باشه

ایمیل من

Anonymous15m15m@gmail.com


نوشته خداحافظی از برنامه نویسی و استارتاپ خودم بخاطر نداشتن لپ تاپ اولین بار در ویرگول پدیدار شد.

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

چی شد که برنامه نویسی رو گذاشتم کنار…!

راستش من خیلی عاشق برنامه نویسی بودم
در حدی که روزی 12 ساعت و یا حتی بیشتر براش وقت میزاشتم دیگه زندگی من شده بود همون جمله معروف که میگن:
Eat, sleep, Code, repeat

حتی یه برنامه ریزی هم کرده بودم تا چیزهایی که یاد میگیرم رو همینجا برای کسایی که دوست دارن برنامه نویسی رو یاد بگیرن share کنم

تا اینکه توسط یکی از دوستام با بازارهای سرمایه گذاری آشنا شدم!
تو ایران که تنها بازار سرمایه قانونی بازار بورس تهران هست اما به علت محدودیت های فراوانی که داره زیاد ازش خوشم نیومد مثلا فقط شنبه تا پنجشنبه فقط باز هست اون هم 8 صبح یا 9 فک کنم تا 12 ظهر!
تعطیلات رسمی هم که تعطیله,خدارو شکر تا دلتون بخاد کم نداریم از این تعطیلی ها تو ایران…
در همین حال بود که فهمیدم یه سری بازار جهانی هست که بازار بورس ایران در مقابلش تقریبا هیچ هستش(البته بر نخوره به کسایی که تو این بازار فعالیت میکنند:ِ) منظورم از لحاظ نقدینگی و میزان پولی هست که در طول روز توی این بازارها رد و بدل میشه که در ادامه روشنتون میکنم 🙂

خب بریم که معرفیشون کنم بهتون…

اگه بخام 2 تا از بزرگترین هاشون رو بهتون معرفی کنم یکی بازار فارکس هست و دیگری بازار سهام نیویورک که متاسفانه هر دوی این ها در ایران غیر قانونی هستند دلیل غیر قانونی بودنشون هم اینه که افرادی که تازه با این بازارها آشنا شدن بدون اینکه علم این بازار رو یاد بگیرن بدون اینکه وقت بزارن و زیر و بم این بازار رو متوجه بشن ورداشتن پولی که با هزار سختی و بدبختی به دست آوردن رو وارد این بازار کردن و متاسفانه توی یک شب به امید رفتن ره صد ساله به باد دادن…

حالا چیه این بازار من رو ترغیب به فعالیت توی خودش کرد؟
1- 24 ساعته باز هست به غیر از شنبه و یکشنبه…
2- با 100$ میشه معامله ای رو باز کرد که مثلا 500$ سود کرد(به همین آسونی هم نیستا)
3- دقیقا اون جمله “رفتن ره صد ساله تو یک شب” تقریبا اینجا صدق میکنه با این تفاوت که شما حداقل 6 ماه تا 1 سال باید وقت بزارید برای درست آموزش دیدن تاکید میکنم “درست” آموزش دیدن چون کلی آموزش های اشتباه هست که حتی اگه 1 سال وقت رو هم بزارید باز هم به نتیجه ای جز از دست دادن سرمایه نخواهید رسید
بعد از اون میتونید به یه درآمد قابل قبول دلاری برسید

حالا تا اینجا معرفیش بود کلی ویژگی مثبت هم داره اما این رو هم در نظر بگیرید که ریسک این بازار به شدت بالاس و اگر یک سری بحث های روانشناسی و مدیریت سرمایه رو رعایت نکنید محکوم به حذف شدن از این بازار هستید!!!

الان خودم 6 ماهی هست که دارم آموزش میبینم و به یه لول قابل قبولی رسیدم و خدا رو هم شکر میکنم که با این بازار آشنا شدم چون مسیر زندگیم تغییر کرد…

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

بازم از تجربیاتم اینجا براتون مینویسم امیدوارم به دردتون بخوره
یا حق…

نوشته چی شد که برنامه نویسی رو گذاشتم کنار…! اولین بار در ویرگول پدیدار شد.

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

پیاده سازی اینترفیس های life cycle انگولار

سلام دوستان

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

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

حالا این حالت چرا و چگونه بوجود میاد … تایپ اسکریپت مثل زبان های مثل جاوا و سی شارپ و غیره حالت برای تغییر شکل در زمان اجرا ندارد یعنی override , overload نمیتونه معنی داشته باشه.

خروجی جاوا اسکریپت در شکل بالا مشخص هست

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

خروجی جاوا اسکریپت در شکل بالا مشخص هست

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

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

مرسی

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

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

معرفی ویدجت Text در Flutter

اگر با Flutter آشنا باشید ، این موضوع را به خوبی می دانید که فلاتر برای طراحی ظاهر اپلیکیشن از Widget ها استفاده می کند . Widget ها در واقع ابزارک هایی هستند که به ما کمک می کنند که سریع تر به رابط کاربری مورد نظر خودمان برسیم .

همچنین می توانید برای یادگیری Flutter ، از دوره آموزشی برنامه نویسی موبایل با فلاتر استفاده کنید .

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

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

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

Text()

این ویدجت ویژگی های زیادی را دارد که میخواهیم برخی از این ویژگی ها را با هم دیگر بررسی کنیم.

ویژگی textAlign به ما کمک می کند که نحوه قرار گیری متن خود را مشخص کنیم . مثلا متن ما راست چین باشد یا چپ چین ، وسط چین باشد یا به شکل justify :

در دو تصویر زیر می توانید حالت های Center و Justify شده ی یک متن را مشاهده کنید :

مورد بعدی که وجود دارد ، maxLines و overflow هستند . maxLines که مشخص هست یعنی متن ما را در تعدادی خط محدود می کند و overflow هم اگر فضای کافی نداشته باشیم متن را در انتهای متن به شکل سه نقطه ، بریده شده و یا fade نشان می دهد .

همچنین در تصویر می توانید نتیجه متن را در ۲ خط ببینید :

و اما مهم ترین بخش ویدجت Text بخش Style آن است که می توانید مواردی چون : سایز متن ، رنگ متن ، بک گراند ، فونت و … مشخص کنید .

fontSize : با استفاده از این ویژگی می توانید سایز فونت متن خود را مشخص کنید

color : می توانید رنگ متن خود را مشخص کنید

decoration : با استفاده از این ویژگی می توانید با استفاده از کلاس TextDecoration به متن خود یک زیر خط (underline) ، روی خط (overline) و یا به شکل خط خطی (lineThrough) اضافه کنید

decorationStyle : این ویژگی وابسته به decoration هست و شما می توانید به خط خود style بدید.

backgroundColor : با استفاده از این ویژگی هم می توانید به زمینه ، متن رنگی را اضافه کنید

fontWeight : می توانید با این ویژگی متن خود را Bold کنید

letterSpacing : فاصله های بین کاراکتر ها را می توانید مشخص کنید

wordSpacing : فاصله های بین کلمات را می توانید مشخص کنید

height : فاصله ی بین خط ها را می توانید کنترل کنید

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

در تصویر زیر نتیجه کد های بالا را مشاهده می کنید :

در ادامه باید این نکته را بگویم که همین ویدجت Text به ظاهر ساده ، ویژگی های دیگری هم دارد که ما مهمترین های آن ها را بررسی کردیم .

منبع : وب سایت سه گوش

نوشته معرفی ویدجت Text در Flutter اولین بار در ویرگول پدیدار شد.

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

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

با عرض سلام خدمت دوستان عزیز ;

میخوایم کارو با یک سوال شروع کنیم ; اگر بخواهیم یک عدد صحیح را درون یک متغیر ذخیره کنیم از …,int استفاده می کنیم ; اگر بخواهیم یک عدد اعشاری را درون یک متغیر ذخیره کنیم از float و double استفاده می کنیم و …

حالا اگر بخواهیم آدرس یک خونه از حافظه را در یک متغیر ذخیره کنیم از چه نوع متغیری باید استفاده کرد؟

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

طبق تعریف اشاره گر متغیری است که حاوی یک آدرس باشد ; نتیجه می گیریم اشاره گر نیز چون یک متغیر است دارای 4 ویزگی نام , جنس , مقدار و آدرس می باشد .

C++

عملگر ارجاع (Reference Operator)

برای آشنایی با نحوه تعریف اشاره گر در ++C نیاز به آشنایی با عملگر ارجاع داریم ; عملگر ارجاع را با کاراکتر & نشان می دهیم که کار آن دریافت آدرس یک خانه در حافظه می باشد .

نحوه استفاده از عملگر ارجاع

تعریف و مقدار یابی اشاره گر در ++C

در کد فوق اشاره گری به اسم pn تعریف کردیم که به متغیر n اشاره می کند و درون آن آدرس خانه n را ذخیره کرده ایم ; در زبان ++C نوع متغیر قبل از اشاره گر نشان دهنده نوع متغیری است که اشاره گر به آن اشاره دارد ; برای مثال در اینجا int نشان دهنده نوع متغیر n می باشد. ( * ) علامت اشاره است.

اگر دقت کنید مشاهده می کنید که مقدار خروجی برای pn* با مقدار n برابر می باشد به این نوع استفاده از اشاره گر که بدون استفاده از نام متغیر مقدار متغیر را به ما می دهد مقدار یابی اشاره گر گفته می شود.

اشاره گر به اشاره گر

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

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

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

خلاصه مختصر مفید GoLang (پارت سوم)

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

پارت سوم آموزش مختصر مفید GoLang

توی این سری آموزش (خلاصه مختصر مفید GoLang) قرار نبود و نیست که کاملاً وارد جزئیات بشیم به همین خاطر از نحوه نصب و راه اندازی و یسری نکات دیگه سریع رد شدم و سعی کردم و میکنم فقط با مفاهیم مهم بصورت خلاصه آشنا بشیم.

توی پارت اول با مفاهیم کاملا پایه ای (مثل تعریف متغیر و توابع و …) آشنا شدیم و توی پارت دوم اشاره گر رو خوندیم و یکم بیشتر با تعریف توابع و استفاده ازشون آشنا شدیم.

توی این پارت میخوایم برسیم به دو تا مبحثی که میشه یجورایی گفت اصلی ترین ویژگی های GoLang هستن. گو روتین ها و کانال ها

گو روتین ها

برای اینکه مفهوم گو روتین ها رو درک کنیم باید با نخ و چند نخی آشنا باشیم. دوستانی که با مفهوم thread و و multi thread آشنا نیستن، ما بعضی وقتا نیاز داریم تسک هامون بصورت Concurrency یا همزمان انجام بشن. در حقیقت وقتی یه پروسس رو اجرا میکنیم، میتونه چندین thread یا نخ داشته باشه. توی حالت عادی برنامه فقط یه thread داره و ما میتونیم برناممون رو با چند thread اجرا کنیم. و مفهومش اینه که یسری تسک ها رو موازی با همدیگه پیش ببریم. جدای از اینکه سخت افزاری که کد قراره روش اجرا بشه باید این قضیه رو ساپورت کنه (که اکثراً همیشه میکنن سخت افزارای امروزی) باید زبونی که باهاش کد میزنیم هم این روند رو ساپورت کنه (که بازم اکثر زبونایی که سری تو سرا در اوردن به شکل خیلی خوبی پشتیبانی میکنن).

گو هم به خوبی از پس این داستان بر میاد. برای این بتونیم بعضی تسک ها رو موازی با بقیه تکسها اجرا کنیم، به راحتی بصورت زیر میتونیم این کار رو بکنیم:

اوپس.. همین؟! بله! به همین راحتی

تنها کاری که لازم داریم بکنیم اینه که زمان صدا زدن یه تابع، کلمه ی کلیدی go رو قبلش بنویسیم. با این کار GoLang یه به اصطلاح routine ایجاد کرده و تابعمون رو جداگانه و موازی با روند عادی برنامه، توی اون روتین اجرا میکنه. هر برنامه ی گو یه main routine داره و میتونه یعالمه اصطلاحا child routine هم داشته باشه که همه بصورت همزمان و موازی باهم تسک هایی رو انجام بدن که با اتمام کار main routine بقیه child routine ها هم میرن تو دیوار:

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

حالا زبون گو ویژگی ای داره که این مسائل رو هم حل کرده، اگه گفتین چی؟ کانالها!

کانال ها

کانال ها ویژگی های باحالی دارن، مثل اینکه میتونیم به کمکشون منتظر بمونیم تا یه روتین یا چند تا روتین کارشون رو بکنن و به ما جواب بدن، یا باحالتر از اون اینه که کانالها میتونن پیام هایی با type دلخواه رو بین روتین ها جابجا کنن.

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

package main
import "fmt"

func main() {
    c := make(chan string)
    go func() {
        c <- &quotHello&quot
    }()
    fmt.Println(<-c)
}

توی کد بالا دستور

c := make(chan string)

به زبون گو میگیم که یه chan یا همون کانال از نوع string و به اسم c ایجاد کن (یعنی کانالی ایجاد کن که بین روتین ها بتونه string جابجا کنه).

func() {
    c <- &quotHello&quot
}()

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

fmt.Println(<-c)

وقتی به c-> میرسه اگه پیغامی روی کانال c باشه برمیداره، اگه نباشه منتظر میمونه تا پیغامی روی c گذاشته بشه، و اون رو پاس میده به تابع fmt.Println برای نمایش به کاربر.

خب پس بصورت خلاصه یه کانال ایجاد کردیم، با ایجاد یه روتین جدید تابعی رو روی اون روتین ران کردیم و توی main routine برناممون اون رو گرفتیم و نشون دادیم.

میخوایم یه مثال دیگه ببینیم که به کمک اون بتونیم ببینیم که یسری لینک (مثلا چندتا سایت) رو میتونیم ببینیم یا نه (میخوایم یه درخواست http get بدیم ببینیم میتونیم جواب بگیریم یا نه)

links := []string{
    "http://google.com",
    "https://virgool.io",
    "https://www.youtube.com",
}

خب، اول از همه باید چیکار کنیم؟ یه کانال میسازیم:

c := make(chan string)

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

func checkLink(link string, c chan string) {
    _, err := http.Get(link)
    if err == nil {
        fmt.Println(link, " founded")
        c <- link
    } else {
        fmt.Println(link, &quot not found!&quot)
        c <- link
    }
}

برای استفاده از http.Get باید “net/http” رو به پروژه import کنیم که اگه از ویژوال استودیو کد (VSCode) استفاده کنید خودش اتومات با سیو کردن کدتون، import های لازمه رو انجام میده. با http.Get یه درخواست Get به لینکی که میخوایم میزنیم، و قسمت زیر:

 _, err

برای اینه که این تابع دو تا چیز بر میگردونه، اولی جوابیه که از Get گرفته و دومی یه ارور. برای ما جوابی که میاد مهم نیست پس اولی رو _ گذاشتیم، برای ما فقط این مهم که ببینیم خطایی توی این درخواست رخ داده یا نه، اگه err برابر nil باشه یعنی تونستیم جواب بگیریم در غیر این صورت خطایی رخ داده و معنیش عدم دریافت جوابیه که ما میخواستیم.

و به کمک خط زیر تک تک لینک ها رو با go میفرستیم به این تابع:

for _, link := range links {
    go checkLink(link, c)
}

و خیلی راحت با اجرا کردن این برنامه، متوجه میشیم که هیچ اتفاقی نمیفته!! یعنی چی؟ مفهومش اینه که ما به ازای هر لینک یه روتین ایجاد کردیم و اون روتین ها میخوان جوابی روی کانال بذارن، اما قبل از اینکه کار به گذاشتن پیامِ اونا برسه کار main routine تموم شده و اون child routine ها هم تمومه کارشون.

برای اینکه هم منتظر جواب روتین ها بمونیم، هم برنامه ای نوشته باشیم که همینجوری هی ارتباط رو تا بینهایت تست کنه، کد زیر رو اضافه میکنیم:

for l := range c {
    go func() {
        time.Sleep(5 * time.Second)
        checkLink(l, c)
    }()
}

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

یکی دیگه اینکه توی بعضی نرم افزارا بصورت زیر

یه خطی چیزی یه خطایی رو مشخص میکنه که مثلا توی VSCode خطای زیر رو میگه بهمون:

خودمونیش اینکه داری اشتبا میزنی، بذارین اینجوری کدمون رو تصحیح کنیم:

for l := range c {
    go func(link string) {
        time.Sleep(5 * time.Second)
        checkLink(link, c)
    }(l)
}

که خروجی میشه این:

این شد چیزی که ما میخوایم. حالا دلیلش چیه؟ اینکه توی حالت اول، وقتی از توی for l := range c مستقیم l رو پاس میدیم به تابع checkLink، عملا زبون گو زمانی که داره روی c حلقه for رو اعمال میکنه، هر کدوم رو میزیه توی یه خونه از حافظه، و وقتی l رو پاس دادیم توی تابعه از یجایی به بعد تکراری اون خونه از حافظرو ارسال میکنه. اما وقتی که حالت دوم رو پیاده کردیم، داریم به ازای هر بار فراخوانی تابعمون، مقدار خودش رو دوباره پاس میدیم بهش. اگه یکم پیچیدس حق دارین گیج بشین ولی یکم با تمرین و کدزنی متوجه میشین قضیه چیه. کد کامل این مثال اینجوری میشه:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    links := []string{
    "http://google.com",
    "https://virgool.io",
    "https://www.youtube.com",
    }
    
    c := make(chan string)
    
    for _, link := range links {
        go checkLink(link, c)
    }
    
    for l := range c {
        go func(link string) {
            time.Sleep(5 * time.Second)
            checkLink(link, c)
        }(l)
    }
}

func checkLink(link string, c chan string) {
    _, err := http.Get(link)
    if err == nil {
        fmt.Println(link, " founded")
        c <- link
    } else {
        fmt.Println(link, &quot not found!&quot)
        c <- link
    }
}

به کمک دستور select هم میتونین چندتا کانال ایجاد کنید و منتظر بمونیدتا خروجی هاشون رو دریافت کنین و … چیز به درد بخوریه و ساختار پیاده سازیش شبیه switchه. در موردش بخونید حتما


منتشر شده در ویرگول توسط محمد قدسیان https://virgool.io/@mohammad.ghodsian

https://virgool.io/@mohammad.ghodsian/%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D9%85%D9%81%DB%8C%D8%AF-golang-%D9%BE%D8%A7%D8%B1%D8%AA-%D8%B3%D9%88%D9%85-lqwhva3jm3qh

نوشته خلاصه مختصر مفید GoLang (پارت سوم) اولین بار در ویرگول پدیدار شد.

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

۵ ابزار برنامه نویسی وب که زندگی تون رو راحت تر میکنه!

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

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

۱. سرویس Can I Use

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

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

اما خبر خوب اینه که سرویس آنلاین Can I Use این کار رو برامون انجام میده. فقط کافیه وارد سایتش بشید،‌تکنولوژی مورد نظرتون رو سرچ کنید و مرورگرهایی که اون رو پشتیبانی میکنن ببینید!

۲. سرویس Unminify

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

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

۳. سرویس Compressor

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

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

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

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

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

۴. سرویس Repl.it

محیط های توسعه نرم افزار (IDE) و ادیتور های زیادی وجود داره که میتونید ازشون استفاده کنید و حتی یه سری از برنامه نویس ها روی ادیتور و IDE مورد استفاده شون حسابی تعصب دارن! 🙂

اما میشه قضیه رو خیلی ساده تر گرفت و ابزار برنامه نویسی Repl.it برای همین اینجاست. این سرویس، یه IDE آنلاین رو در اختیارتون قرار میده که امکان برنامه نویسی با خیلی از زبان های مطرح مثل جاوا اسکریپت،‌ پایتون، کاتلین، روبی و… در اون وجود داره و حتی میتونید پکیج ها و کتابخونه های مختلف رو هم بهش اضافه کنید. خبر بهتر اینه که Dark Theme هم داره!

۵. سرویس Web Code

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

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

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

نوشته ۵ ابزار برنامه نویسی وب که زندگی تون رو راحت تر میکنه! اولین بار در ویرگول پدیدار شد.

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

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

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

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

۱ – بومی (Native)

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

۲ – وب ویو (Hybrid)

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

۳ – چند سکویی (crossPlatform)

این روش که خیلی روش مناسبی است و در ایران هم جا افتاده است ، استفاده از فریم ورک های معروف Flutter و ReactNative است . در این دو فریم ورک از کامپوننت ها و ویدجت ها استفاده می شود که در نهایت به شکل نیتیو رندر می شوند . در ریکت نیتیو از بستر جاوا اسکریپت برای تبدیل شدن به نیتیو استفاده می شود اما در فلاتر تماما سعی شده که به شکل مستقیم به نیتیو تبدیل شود و این امر باعث شده که Flutter سرعت و عملکرد بهتری داشته باشد .

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

۴ – پیش رونده ها (pwa)

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

منبع : وب سایت آموزشی سه گوش

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

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