چرا از Visual Studio Code استفاده می‌کنیم؟!

ما برنامه نویس‌ها بیشتر وقتمون رو در طول روز توی نرم افزاری میگذرونیم که باهاش کدمون رو توسعه میدیم و در واقع میشه گفت یجورایی توی اون نرم افزار زندگی میکنیم، حالا ماجرا اینه که نرم افزارهای مختلفی برای این کار وجود دارن، ایده این پست از اونجایی به ذهنم رسید که دو تا از دوستای خوبم توی توییتر داشتن سر وب استورم و وی اس کد بحث میکردن (دوستانه طور😬❤️)

Photo by Blake Connally on Unsplash
Photo by Blake Connally on Unsplash

توی این پست نمیخوام راجع به این بگم که چرا وب استورم و ادیتورهای دیگه بد هستن هر کسی با هر ابزاری که راحته میتونه کار کنه و این موضوع خیلی به سلیقه شما بستگی داره درست مثل مدل ماشین، موبایل و چیزای دیگه، من با وی اس کد راحتم و اینجا میخوام دلایل و تجربه ام رو بگم شاید خوشتون بیاد و یه شانس بهش بدین پس با ما باشین 😎

راحتی نصب و استفاده

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

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

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

code .

سوم اینکه میتونید توی توسعه اش کمک کنید اگه مشکلی باگی چیزی پیدا کردین توی گیتهابشون ایشو کنید و حتما رسیدگی میکنن، مثل باگی که اینجا من ریپورت کردم https://github.com/Microsoft/vscode/issues/25871 که مربوط به یه مشکلی با کیبورد فارسی بود و حل شد 😌😝

از خوبی‌های نرم افزار آزاد که نگم براتون دیگه خودتون استادین 😬

پشتیبانی از گیت

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

توی وی اس کد تقریبا اکثر کارهای مربوط به گیت رو میتونید از منوی گیت انجام بدید کارهای از قبیل استیج کردن، کامیت کردن، استش کردن، دیدن تغیراتی که روی کد به وجود آوردین (دیف) و کلی چیزای دیگه

git in vscode

اکستنش‌ (افزونه‌) ها

خیلی از برنامه نویس‌ها اعتقاد دارن که برای اینکه کدشون رو ویرایش کنن نباید خیلی درگیر این بشن که بعد از اینکه خود نرم افزار رو نصب کردن وقت بزارن ببینن افزونه چی باید نصب کنن و خوب این قضیه رو یه نکته منفی برای وی اس کد میدونن آمّا از دید من این ویژگی خیلیم خوبه، چرا؟

چونکه میتونم مثل یه سامورایی واقعی هر افزونه ای که میخوام رو روش نصب کنم و کاملا برای خودم شخصی سازیش کنم و در نهایت افزونه settings sync رو نصب کنم که میاد از کل تنظیمات و افزونه هایی که نصب کردم یه فایل جیسون درست میکنه و روی github gist میزاره و حدس بزنید چی؟ روی هر سیستم جدیدی بخوام وی اس کد رو نصب کنم کافیه افزونه ای که گفتم رو نصب کنم و آیدی گیستی که قبلا برام ساخته رو بهش بدم و تاداااا! 🎉 ادیتوری که تازه نصب کردم دقیقا مثل اونی میشه که روی لپ تاپم دارم (شرایطی که مثلا یه کمپانی جدید رفتین و باید با سیستم‌های خودشون کار کنید)

یا مثلا یه تجربه ای که اخیرا داشتم اینکه شروع کردم گولنگ کار کردن و فقط با یه سرچ ساده توی منوی اکستنش ها، go رو نصب کردم و پشتیبانی کامل از گو به وی اس کدم اضافه شد😍 و خوب این مسئله برای خیلی از زبون‌ها و تکنولوژی های دیگه ام وجود داره، مثل docker, php, python, java, ruby, c و…

Golang Extension for VsCode

کراس پلتفرم

وی اس کد با کمک الکترون نوشته شده، الکترون یه فریم ورکه که با کمک کرومیوم و نود جی اس ساخته شده که میشه با استفاده ازش با html css و javascript برای دسکتاپ اپلیکیشن ساخت پس در نتیجه وی اس کد در هر سه سیستم عامل مک، لینوکس و ویندوز قابل استفادست، با این ویژگی دیگه دغدغه این رو ندارم که کامپیوتر بعدی ای که قراره باهاش کار کنم از چه سیستم عاملی استفاده میکنه و خیالم راحته نرم افزاری که باهاش راحتم رو همه جا دارم 😌


به طور خلاصه وی اس کد کلی ویژگی های فوق العاده دیگه مثل از قبیل Internal debugger, Markdown Preview, Command Palette, Internal Terminal و خیلی چیزای دیگه داره که اگه بخوام راجب تک تکشون بنویسم این پست خیلی طولانی تر از این حرفا میشه، و یه مسئله دیگه ام بگم که توی نظر سنجی سالانه سایت استک آور فلو عنوان محبوب ترین محیط توسعه رو به دست آورده

https://insights.stackoverflow.com/survey/2018/#technology-most-popular-development-environments


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

https://code.visualstudio.com

و دفعه بعدی که کسی گفت وی اس کد بده، اَخه، داغونه و این حرفا این پست رو نشون بدین و بگین:

نخیر !

نوشته چرا از Visual Studio Code استفاده می‌کنیم؟! اولین بار در ویرگول پدیدار شد.

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

۱- همه چیز درباره گردل: معرفی ساختار

اندروید استدیو برای بیلد پروژه‌ها از ابزاری به نام gradle استفاده می‌کند. زبان این ابزار groovy نام داره و یکی از قدرتمند ترین ابزارهای بیلد پروژه‌هاست. فرایند بیلد پروژه در gradle به این صورت ذیل می باشد.

همان گونه که در تصویر فوق مشخص است داده‌های برنامه به همراه کتابخانه‌هایی که در آن استفاده شده کامپایل شده و فایل dex تولید می‌شود، سپس با کلید مورد نظر sign می‌شود و فایل قابل نصب بدست می‌آید.

بیلد یک پروژه جنبه‌های مختلفی دارد:

یک: Build Types

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

دو: Product Flavors

با اضافه کردن به flavor های پروژه شما می‌توانید نسخه‌های تفکیک شده‌ای از محصول خود داشته باشید. برای مثال از یک سورس کد نسخه دمو و اصلی برنامه را خروجی بگیرید. توجه داشته باشید از نام‌هایی رجیستر شده برای flavor مانند test، debug، main و… استفاده نکنید.

سه: Build Variants

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

چهار: Manifest Entries

این مفهوم به شما کمک می‌کند تا از چندین فایل منیفست بهرمند شوید. با استفاده از این قابلیت می‌توانید یک فایل منیفست را برای هر کدام از flavor ها به صورت مجزا پیکربندی کنید.

پنج: Dependencies

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

شش: Signing

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

هفت: ProGuard

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

هشت: Multiple APK Support

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

ساختار فایل های پیکربندی:

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

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

معرفی فایل های پیکربندی پروژه:

یک: settings.gradle

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

include ‘:app’

در صورتی که شما هر ماژولی به برنامه خود اضافه کنید باید نام آن را در ادامه این فایل بنویسید.

دو: build.gradle سطح پروژه

این یک فایل سطح بالا است، همانگونه که در تصویر می‌بینید این فایل در ریشه پروژه قرار دارد. این فایل پیکربندی بر روی تمام ماژول‌ها اعمال می شود و همه ماژول‌ها به آن دسترسی دارند. در بلاک buildscript شما می توانید تمام مخازن و وابستگی‌های کل ماژول‌های خودتان را تعریف کنید. در بلاک allprojects شما می توانید تمام مخازنی که کل ماژول‌های پروژه به آنها نیاز دارند را تعریف کنید، برای مثال third-party ها، کتابخانه‌ها و…. یکی دیگر از قابلیت های جذاب این فایل پیکربندی بلاک ext‌ هست، که به شما اجازه می‌دهد پیکربندی خود را توسعه دهید. برای این کار شما در این بلاک متغییر هایی که نیاز دارید را تعریف می‌کنید و در دیگر قسمت‌های فایل‌های پیکربندی از این متغییرها استفاده می کنید.

  compileSdkVersion rootProject.ext.compileSdkVersion

سه: build.gradle سطح ماژول

این فایل پیکربندی در سطح ماژول است و در آدرس project/{module}/build.gradle قرار دارد. تنظیمات این فایل بر روی ماژول جاری اعمال می‌شود. این تنظیمات به شما اجازه می‌دهد تا ماژول سفارشی تولید کنید. برای مثال تنظیمات مربوط به flavor ها در این فایل نوشته می شود. در خط اول این فایل با دستور زیر به gradle معرفی می‌کنیم که این پیکربندی برای پلاگینی اندرویدی است. بلاک android که فقط خاص پروژه های اندروید است قابل شناسایی می‌شود. در این بلاک، پیکربندی ساخت ماژول را مشخص می کنیم.

apply plugin: ‘com.android.application’

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

معرفی فایل‌های پیکربندی gradle:

یک: gradle.properties

این فایل برای پیکربندی gradle استفاده می‌شود. برای مثال داده‌های پراکسی، سایز رم مورد نیاز برای بیلد پروژه و… را در این فایل می توانید تنظیم کنید.

دو: local.properties

این فایل برای پیکربندی محیط بیلد پروژه است. برای مثال آدرس SDK و NDK در این فایل نوشته شده است.

همگام سازی پروژه:

در زمانی که شما تغییری در هر کدام از فایل های پیکربندی ایجاد کنید باید gradle را همگام سازی کنید. در بیشتر مواقع در بالای فایل های پیکربندی در نواری زرد رنگ عبارت Sync Now نمایش داده می شود که فقط لازم است بر روی آن کلیک کنید.

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

منابع بیلد:

همانطور که قبلا گفتیم شما می توانید build type ها و product flavor ها متفاوتی داشته باشید. در صورتی که بخواهید منابع این دو نوع را از پروژه اصلی جدا کنید، باید به صورت زیر در ساختار پوشه‌های برنامه تغییر ایجاد کنید.

ساختار پیشفرض پروژه

src/main/

تغییر در منابع برای یک build type خاص

src/buildType/

تغییر در منابع برای یک flavor‌ خاص

src/productFlavor/

ترکیب یک build type و flavor

src/productFlavorBuildType/

ترکیب دو flavor

src/productFlavor1ProductFlavor2/

مثال:

src/main/
src/full/
src/debug/
src/fullDebug/

برای تغییر در build type و product flavor فعال اندروید استدیو میتونید از پنجره build variant‌ استفاده کنید.


منابع:

https://developer.android.com/studio/build/
https://developer.android.com/studio/build/shrink-code.html
http://www.gradle.org/
http://groovy-lang.org/

نوشته ۱- همه چیز درباره گردل: معرفی ساختار اولین بار در ویرگول پدیدار شد.

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

دور زدن تحریم‌ها و دسترسی به GitLab از داخل ایران

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

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

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

راه‌حل ۱: تنظیم سرور http واسط بر روی Git

نرم‌افزار Git بدون نیاز به هیچ ابزار جانبی، امکان استفاده از یک سرور http واسط را جهت عبور دادن اطلاعات و ارتباط با سرورهای اصلی دارد.

با وارد کردن کامند زیر در ترمینال می‌توان با تعیین آدرس آی‌پی و پورت سرور http واسط، از این قابلیت استفاده کرد.

git config --global http.proxy http://username:[email protected]:port

پیدا کردن سرور واسط جهت رد کردن ترافیک و دسترسی GitLab کار مشکلی نیست و سرویس‌های نظیر FOD به صورت رایگان این خدمات را ارائه می‌کنند.

البته در صورت تمایل می‌توان با استفاده از پروژه‌هایی مانند proxy-chain سرویس واسط اختصاصی جهت عبور دادن ترافیک Git راه‌اندازی کرد.

نقاط قوت

  • با بکارگیری این روش تنها ترافیک Git از سرور واسط عبور می‌کند.
  • با تعیین تنظیمات محلی بر روی هر پروژه Git می‌توان ترافیک پروژه‌های دلخواه را از این طریق به GitLab ارسال کرد.

نقاط ضعف

  • مخزن محلی باید با آدرس‌هایی از نوع http به مخزن اصلی متصل باشد؛ این روش راه‌حلی جهت تبادل اطلاعات با مخزن اصلی از طریق آدرس‌های ssh ارائه نمی‌کند.

راه‌حل ۲: استفاده از SSH Tunnel و تنظیم سرور http واسط بر روی Git

در صورتی که به یک سرور لینوکسی در خارج از ایران دسترسی SSH داشته باشید با استفاده از کامند زیر یک ارتباط امن بین سیستم شما و سرور برقرار خواهد شد:

ssh [email protected] -p server-port-number -D local-port-number
# ssh [email protected] -p 15222 -D 5555

در صورت تمایل می‌توان سویچ‌های C- برای فشرده‌سازی، q- برای عدم نمایش هشدارها و پیام‌ها، N- برای اعلام عدم نیاز به اجرای دستورات و کامند بر روی سرور و f- برای انتقال پروسه به بکگراند را به دستور بالا اضافه کنیم. در اینصورت دستور بالا به شکل زیر خواهد شد:

ssh [email protected] -p server-port-number -D local-port-number -C -q -N -f -g
# ssh [email protected] -p 15222 -D 5555 -C -q -N -f -g

این دستور، پورت ۵۵۵۵ را بر روی سیستم شما باز می‌کند و کافی‌ست که Git را با دستور زیر برای عبور دادن ترافیک از پورت مورد نظر مطلع سازید:

git config --global http.proxy 'socks5://127.0.0.1:5555'

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

نقاط قوت

  • با بکارگیری این روش تنها ترافیک Git از سرور واسط عبور می‌کند.
  • با تعیین تنظیمات محلی بر روی هر پروژه Git می‌توان ترافیک پروژه‌های دلخواه را از این طریق به GitLab ارسال کرد.

نقاط ضعف

  • دسترسی به سرور لینوکسی در خارج از کشور مورد نیاز است.
  • مخزن محلی باید با آدرس‌هایی از نوع http به مخزن اصلی متصل باشد؛ این روش راه‌حلی جهت تبادل اطلاعات با مخزن اصلی از طریق آدرس‌های ssh ارائه نمی‌کند.

راه‌حل ۳ (پیشنهاد من): استفاده از SSH Tunnel و دستور proxychains

برنامه proxychains امکان عبور دادن ترافیک سایر برنامه‌ها را از سرورهای واسط تعیین شده در فایل تنظیمات فراهم می‌کند.

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

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

sudo apt-get install proxychains

سپس به روش ذکر شده در «راه‌حل ۲» یک SSH Tunnel ایجاد کرده و با دستور زیر فایل تنظیمات proxychains را باز می‌کنیم:

vi /etc/proxychains.conf

در بخش [ProxyList] معمولا تعدادی تنظیم پیش‌فرض وجود دارد که بهتر است آن‌ها را حذف کنید. حال کافی‌ست با قرار دادن عبارت زیر، واسط مورد نظر را به proxychains معرفی کنید:

socks5 192.168.1.207 5555

فایل تنظیمات ذخیره کنید و از آن خارج شوید.

از این پس برای ایجاد ارتباط بین مخزن محلی و مخزن GitLab کافی‌ست که دستور proxychains را در ابتدای دستورات Git ذکر کنیم. به عنوان مثال:

proxychains git push origin master
proxychains git pull origin master

با قرار گرفتن دستور proxychains در ابتدای دستورات Git، مخازن محلی پروژه به راحتی به مخازن موجود بر روی GitLab متصل خواهند شد.

نقاط قوت

  • این روش برای همه نوع مخزن کار می‌کند و فرقی نمی‌کند که آدرس مخزن از نوع ssh یا http باشد.
  • تنها ترافیک دستوراتی از Git که قبل از آن عبارت proxychains قرار گرفته است، از سرور واسط عبور می‌کند.
  • نیازی به اعمال تنظیمات اضافی در Git وجود ندارد.

نقاط ضعف

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

جمع‌بندی

با توجه به نقاط قوت و نقاط ضعف مطرح شده و در صورت دسترسی به سرور مناسب، برای دسترسی به سرویس GitLab «راه‌حل ۳» را پیشنهاد می‌کنم.

آیا شما برای دسترسی به اینگونه سرویس‌ها، راه‌حل مناسب دیگری را سراغ دارید؟! لطفا آن را به اشتراک بگذارید تا جهت سهولت دسترسی سایرین، در ادامه مقاله ذکر شود.

از توجه شما ممنونم 🙂

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

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

چه زبان برنامه نویسی ای را برای یادگیری انتخاب کنم؟

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

برنامه نویسی به عنوان یک شغل و کسب درآمد

کسب درآمد از برنامه نویسی روش های زیادی داره من چندتا را که الان تویه ذهنم هست میگم:

  • استخدام در شرکت هایی که نیاز به برنامه نویس دارند
  • برنامه نویسی آزاد یا Freelancer
  • راه اندازی کسب و کار آنلاین و شخصی
  • دورکاری و برنامه نویسی به صورت Remote

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

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

جابینجا

ایران استخدام

ای-استخدام

استخدام

دیوار

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

مثلا خودم یه روز به سرم زد برم تهران آگهی های استخدامی را طی سه ماه گذشته بررسی کردم و به نتیجه زیر رسیدم. این آمار مربوط به سه ماه اول سال ۱۳۹۶ است.

در نهایت اینکه تهران نرفتم و تصمیمم عوض شد ولی طبق این نمودار فهمیدم بیشترین استخدامی ها برای C# و ASP.NET است. البته این آمار فقط تعداد استخدامی ها رو نمایش میده و میزان حقوق را با این نمودار نمیشه فهمید.

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

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

راهنمای برنامه نویسان ایرانی (دوستانی که علاقه مند هستند خوشحال میشم در تکمیل این راهنما کمک کنند)

برنامه نویسی برای تفریح و علاقه

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

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

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

آموزش زبان برنامه‌نویس Rust – قسمت۴: دستور شرطی if

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

اگر از ابتدا با این دوره‌ی آموزشی همراه نبوده‌اید, با کلیک روی این متن به جلسه‌ی اوّل بروید.

دستور شرطی if

دستور شرطی if تقریباً در تمام زبان‌های برنامه‌نویسی وجود دارد. به همین دلیل به احتمال خیلی زیاد با آن آشنایی دارید.

هر دستور if یک شرط دارد. اگر حاصل آن شرط درست بود, کدهای داخل بدنه‌ی if اجرا می‌شوند. در غیر این صورت, کدهای داخل بدنه‌ی دستور else اجرا می‌شوند.

مثال زیر را ببینید:

 

چون ۵ از ۱۰ کوچکتر است, پس کد درون بدنه‌ی if اجرا می‌شود:

حالا اگر مقدار متغیّر a را تغییر دهیم و آن را برابر با ۱۰ قرار دهیم چه اتّفاقی می‌افتد؟ همانطور که حدس می‌زنید کد درون بدنه‌ی else اجرا می‌شود(چون شرط if اشتباه می‌شود و دیگر برقرار نیست) و عبارت زیر در خروجی نوشته می‌شود:

هنگام کار با دستور if باید به چند نکته توجّه کنید:

۱- وجود دستور else الزامی نیست. اگر دستور else نباشد, وقتی که شرط if اشتباه شد برنامه کدهای درون آن را نادیده می‌گیرد و از بعد از آن ادامه پیدا می‌کند.

۲-در زبان Rust لزومی ندارد که شرط درون پرانتز باشد. امّا گاهی اوقات, مخصوصاً زمانی که داریم از شرط‌های ترکیبی استفاده می‌کنیم, مجبور می‌شویم که از پرانتزها استفاده کنیم.

۳-حاصل عبارت شرط باید یک مقدار بولی باشد. در زبان Rust تنها از مقادیر بولی می‌توان به عنوان شرط استفاده کرد. یعنی نمی‌توانید یک عدد یا استرینگ‌را به عنوان شرط قرار دهید.

مثال زیر را ببینید:

حالا وقتی که می‌خواهیم این برنامه‌را کامپایل کنیم, به ارور زیر برخورد می‌کنیم:

ما با دستور if می‌توانیم به راحتی برنامه‌را شاخه‌بندی کنیم و با توجّه به شرایط, تنها یک بخش از این شاخه‌هارا اجرا کنیم.

مدیریت شرط‌های چندگانه

فرض کنید ما باید چند شرط را بررسی کنیم و هرکدام که درست بود, یک مجموعه کد مجزا را اجرا کنیم.

برای این کار هم درست مانند قبل عمل می‌کنیم, با این تفاوت که برای شرط‌های دوم به بعد از دستور else if استفاده می‌کنیم.

برای اینکه بهتر متوجّه شوید به این مثال توجّه کنید:

برنامه‌ای داریم که در آن می‌خواهیم وضعیت کاربر را بررسی کنیم. اگر کاربر admin بود, به او بگوییم که می‌تواند تنظیمات‌را تغییر دهد. اگر کاربر ثبت نام کرده بود به او خوش‌آمد بگوییم. اگر هم کاربر ثبت نام نکرده بود از او بخواهیم که ثبت نام کند.

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

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

پیشنهاد: مقدار متغیّر user_type را با توجّه به شرط‌ها تغییر بدهید و خروجی‌های مختلف‌را مشاهده کنید.

مقدار دهی متغیّرها با استفاده از if

احتمالاً با عملگر سه‌تایی در بقیه‌ی زبان‌ها مثل c آشنا هستید. مثلاً اگر یک شرط برقرار بود متغیّر یک مقدار بگیرد, اگر برقرار نبود مقداری دیگر.

مثلاً در کد زیر به زبان c اگر شرط برقرار باشد مقدار متغیّر برابر ۰ خواهد بود. اگر نه عدد ۱ در آن ذخیره می‌شود:

خب ما در زبان Rust دقیقاً این عملگر را نداریم. امّا با استفاده از if می‌توانیم همچین کاری بکنیم. در‌واقع دستور if می‌تواند مقادیر را برگرداند و یک expression به‌حساب می‌آید(با expression در جلسات بعدی به صورت کامل آشنا می‌شویم).

فرض کنید می‌خواهیم دقیقاً همان کد بالا را به زبان Rust بنویسم. حاصل می‌شود این:

در این کد دو تا نکته هست که باید خیلی به آن‌ها توجّه کنید. اوّل اینکه خط آخر, هم در بدنه‌ی if و هم در بدنه‌ی else , که مقداری است که باید در متغیّر ذخیره شود, در پایان ; ندارد.

اگر آخر آن خطوط ; بگذارید دیگر کار نخواهد کرد.

دوم هم اینکه بعد از آکولاد else علامت ; قرار می‌گیرد. این کار باعث می‌شود که کامپایلر بفهمد مقداردهی به متغیّر کجا تمام می‌شود.

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

اگر جایی سؤالی داشتید یا چیزی برایتان گنگ بود در بخش نظرات بپرسید.

تا جلسه‌ی بعدی بدرود.

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

خواندن قسمت قبلی

نوشته آموزش زبان برنامه‌نویس Rust – قسمت۴: دستور شرطی if اولین بار در ویرگول پدیدار شد.

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

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

به سرم زده یه سایت ساده کوتاه کننده لینک با لاراول بسازم و نشونتون بدم چجوری میشه انجامش داد و اول کار بگم آموزش نیست و احتیاجه از قبل با لاراول آشنا باشین .به نظرم کوتاه کننده لینک ساده ترین وبسایتیه که میشه نوشت،یه جورایی HelloWorldحساب میاد!
میخوام فقط یه صفحه بسازم لینک بهش میدی و کوتاه شدش رو تحویلت میده و وقتی لینک کوتاه شده باز میشه میره توهمون صفحه ای که باید بره .
لاراول رو نصب میکنم و فایل .env روبرای دسترسی به دیتابیس اصلاح میکنم ومدل ومیگریشن وکنترلررو با آرتیسن میسازم.
php artisan make:model Link -m -c
پوشه Auth توی کنترلرها و مدلUser ودوتامیگریشن مربوط به کاربرها و ریست پسورد رو هم پاک میکنم چون بهشون احتیاجی ندارم.میگریشن لینکها رو این شکلی مینویسم.

Schema::create('links', function (Blueprint $table) {
 $table->bigIncrements('id');
 $table->string("slug")->index()->nullable(); // لینک کوتاه شده
 $table->text("url");// لینک اصلی
 });

و میگریت رو انجام میدم.

php artisan migrate

خب حالا وقتشه مدل رو آماده کنم.

class Link extends Model
{
 public $timestamps = false;
 protected $fillable = [
 'slug',
 'url'
 ];
}

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

public function show(Request $request)
 {
 return view('home');
 }

یه View جدید هم حاضر میکنم اسمش رو میذارم home.blade.php .
بعد توی web.php روت اصلی رو اصلاح میکنم.

Route::get('/', '[email protected]');

حالا میرم سراغ آماده کردن home.blade.php و فرم رو حاضر میکنم.





 
 
 
 کوتاه کننده لینک

 
 



 

کوتاه کننده لینک


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

protected function generateSlug($id)
 {
 $id-=1; // چون آی دی ها از یک شروع میشن و رشته ها از صفر یه دونه ازش کم میکنم
 $alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789-_";
 $alphaLen = strlen($alpha);
 $out = "";
 while($id > 0) { // تبدیل مبنا از عدد به مبنای من در آوردی
 $out.= $alpha[$id%$alphaLen]; // یه دونه از کاراکتر ها رو میگیرم
 $id = intval($id/$alphaLen); // آی دی رو تقسیم میکنم برای گرفتن المنت بعدی
 }
 return $out;
 }

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

public function requestLink(Request $request)
 {
 // اول ولیدیشن رو انجام میدم
 $this->validate($request, [ 
 'url' => 'required|url'
 ]);
 // اگه لینک از قبل وجود داشت میگیرم یا یه دونه جدیدش رو میسازم
 $link = Link::where('url', $request->input('url'))->firstOrCreate([
 'url' => $request->input('url')
 ]);
 // مقدار اسلاگ رو بر اساس آیدی تنظیم میکنم مهم نیست از قبل ساخته شده بوده یا نه چون نتیجه بر اساس آی دی هست همیشه همون مقداره
 $link->slug = $this->generateSlug($link->id);
 // سیو میکنم
 $link->save();
 return [ 
 'slug' => $link->slug
 ];
 }

و در نهایت به روت هام اضافه ش میکنم.

Route::post('/request-link', '[email protected]')->name("request_link");

حالا وقت نوشتن کد های jquery هست برای کوتاه کردن لینک.

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

public function openLink($slug)
 {
 return redirect()->to(Link::where('slug', $slug)->firstOrFail()->url);
 }

و به روت ها اضافه ش میکنم.

Route::get('/o/{slug}', '[email protected]')->name("open_link");

و در نهایت

requestLink

رو یه کم اصلاحش میکنم.

return [ 
 'slug' => route("open_link", ['slug' => $link->slug])
 ];

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

https://github.com/amir9480/laravel-url-shortener-sample

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

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