۲۷ فروردین، ۱۴۰۰

٣ هفته پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم درخواست بررسی کد لیسپ به نام Vile درست کرد.

سلام دوستان عزیز! بنده یه گویش لیسپ به نام Vile نوشتم توی زبان گو و از کسانی که گو کار کردن درخواست دارم این گویش رو بررسی کنن و نظرشون رو بدن و اگرم میتونن به این پروژه کمک کنن. مخزن گیت هاب پروژه در اینجا تشکر

۲۹ اسفند، ۱۳۹۹

٢ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی عدم نصب پلاگین JetBrains IDE Support (live edit) برای مروگر google chrome جواب داد.

از shecandotir استفاده کنید، کار میکنه.

۳ اسفند، ۱۳۹۹

٢ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۷ نوشت.

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

توی بخش هفت میخوایم با مفهوم ownership آشنا بشیم و قوانین های این موضوع رو بررسی کنیم و مثال هایی رو کار کنیم.

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

این مفهوم چیست و چه قوانینی دارد

زبان راست مثل بعضی از زبان های دیگه دارای ویژگی ownership هست.

اما سوالی که پیش میاد اینه که ownership دقیقا توی راست چیه ؟

منظور از اسکوپ {} هست

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

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

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

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

حالا بریم چند تا مثال حل کنیم تا مسائل بهتر جا بیوفته.

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

fn main() {
    {
        let x = String::from("Hello World"); // از اینجا به بعد متغییر x در دسترس هست 
        println!("{}", x); // هرکاری که میخواید رو با متغیر x انجام میدید
    } // اینجا اسکوپی که ایجاد کرده بودیم تموم میشه و متغیر x از بین میره و دیگه در دسترس نیست
}

خروجی کد بالا

Hello World

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

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

به کد زیر توجه کنید

fn main() {
    {
        let x = String::from("Hello World");
    }
    println!("{}", x); // Error
}

خروجی کد بالا

error[E0425]: cannot find value `x` in this scope
println!("{}", x);
               ^ not found in this scop

دیدید که اثبات کردیم که قوانین ownership در راست به صورت اجباری اجرا میشن و یک ویژگی اختیاری نیست.

حالا بیاید یه مثال دیگه بزنیم، به مثال زیر توجه کنید

fn main() {
    let string1 = String::from("Hello World from sami2020pro");
    let string2 = string1;

    println!("{}", string2);
}

به خروجی کد بالا توجه باشید

Hello World from sami2020pro

اگه توجه کنید میبینید که string1 رو کپی کردیم توی string2 و اونو چاپ کردیم اما باید بگم که اشتباه فکر میکنید و حالا از خودتون میپرسید چرا ؟

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

شاید بگید این موضوع توی زبان پایتون وجود نداره ! بله درسته این موضوع توی پایتون وجود نداره ولی راست بسیار متفاوت از پایتون هست.

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

fn main() {
    let string1 = String::from("Hello World from sami2020pro");
    let string2 = string1;

    println!("{}", string2);
    println!("{}", string1); // Error
}

خروجی کد بالا

error[E0382]: borrow of moved value: `string1`
...

میبینید که ما string1 رو انتقال دادیم یا همون move کردیم و دیگه نیست.

البته این یه توضیح خیلی ساده هست و میتونید توضیحات بیشتری رو از مستندات اصلی پیدا کنید

مفهوم ownership و توابع

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

مفهوم ownership برای فانکشن ها هم صدق میکنه.

پاس دادن یه مقداری به یه فانکشن مثل move کردن میمونه که در بالاتر یادگرفتیم اما یه سری مسائل دیگه هم هست که باید یادبگیریم.

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

fn main() {
    let s = String::from("Hello World");  // متغییر اس وارد اسکوپ میشه و از اینجا به بعد در دسترس هست

    takes_ownership(s);             // متغییر اس انتقال داده شده به این فانکشن و دیگه در دسترس نیست

    let x = 5;                      // متغییر ایکس وارد اسکوپ میشه و از اینجا به بعد در دسترس هست

    makes_copy(x);                  // متغییر ایکس میبایست به این فانکشن انتقال داده میشد اما خوده تایپ `i32` کپی هست
                                    // و هنوز ایکس در دسترس هست
                                    // در ادامه کپی رو توضیح خواهیم داد

}  // در اینجا ایکس بیرون میره و بعد اس هم از اسکوپ بیرون میره ولی اس انتقال داده شده و اتفاقی نمیوفته

fn takes_ownership(some_string: String) { // اینجا متغییرمون وارد این اسکوپ شده
    println!("{}", some_string);
} // اینجا متغییرمون از اسکوپ خارج شده و `drop` صدا زده شده و از حافظه یا همون مموری متغییرمون رو حذف میکنه 

fn makes_copy(some_integer: i32) { // اینجا متغییرمون وارد این اسکوپ شده
    println!("{}", some_integer);
} // اینجا متغییرمون از اسکوپ خارج میشه ولی اتفاق خاصی نمیوفته

خروجی کد بالا

Hello World
5

اگر کامنت های کد بالا رو بخوونید متوجه میشید که متغییر s انتقال داده شده ولی متغییر x همچین اتفاقی براش نیوفتاده و اینجور موارد کپی در راست وجود داره و در واقع متغییر s که وجود داره ownership رو به یکی دیگه داده ولی x نه.

حالا بیاید اثبات کنیم که متغییر s انتقال داده شده، به مثال زیر توجه کنید

fn main() {
    let s = String::from("Hello World");
    take_ownership(s);

    println!("{}", s); // Error
}

fn take_ownership(some_string: String) {
    println!("{}", some_string);
}

خروجی کد بالا

error[E0382]: borrow of moved value: `s`
...

دیدید که در بالا اثبات کردیم متغییر s انتقال داده شده و دیگه در دسترس نیست.

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

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

fn main() {
    let s1 = gives_ownership(); // این فانکشن آنرشیپ رو به متغییرمون میده
    let s2 = String::from("hello"); // در اینجا مقداری رو به متغییری دادیم در واقع یه متغییر تعریف کردیم
    let s3 = takes_and_gives_back(s2); // اینجا آنرشیپ رو گرفتیم از متغییر `اس تو` و به متغییر `اس تری` دادیم
}

// این فانکشن آنرشیپی رو به کسی میده
fn gives_ownership() -> String {
    let some_string = String::from("hello");
    some_string
}

// این فانکشن آنرشیپ رو از کسی میگیره و به کسه دیگه ای میده
fn takes_and_gives_back(a_string: String) -> String {
    a_string
}

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

امیدوارم از این مقاله هم لذت برده باشید.

۳۰ بهمن، ۱۳۹۹

٣ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۵ و ۶ نوشت.

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

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

بخش پنج

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

در زیر خیلی ساده متود ها رو توضیح دادیم:

۱. متود ها فانکشن هایی هستن که با آبجکت ها کار میکنن\ ۲. متود ها دسترسی به داده های آبجکت ها رو دارن\ ۳. متود ها با کلیدواژه self به داده های آبجکت ها دسترسی پیدا میکنن\ ۴. متود ها با کلیدواژه impl پیاده سازی میشن

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

۱. استراکچر ها توی راست یه نوع دیتا تایپ هستن\ ۲. استراکچر ها داده هایی رو با تایپ یا نوع های مختلف رو توی خودشون نگه میدارن

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

  1. Tuple structures
  2. The classic C structures
  3. Unit structs

به کد زیر توجه کنید

/* A tuple struct */
struct Pair(i32, f32);

/* A struct with two fields */
struct Point {
    x: f32,
    y: f32,
}

/* A unit struct */
struct Unit;

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

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

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point: Point = Point { x: 10, y: 5 };
    println!("x: {:?} and y: {:?}", point.x, point.y);
}

خروجی کد بالا

x: 10 and y: 5

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

بعد به داده های متغیری که ساختیم دسترسی پیدا کردیم و اونا رو چاپ کردیم. اما توجه کنید که ما متودی برای استراکچرمون یا آبجکتمون نداریم!

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

struct Point {
    x: i32,
    y: i32,
}

impl Point {
    fn original() -> Point {
        Point { x: 1, y: 1 }
    }

    fn new(x: i32, y: i32) -> Point {
        Point { x: x, y: y }
    }
}

fn main() {
    let point_one: Point = Point::original();
    println!("x: {:?} and y: {:?}", point_one.x, point_one.y);

    let point_two: Point = Point::new(10, 5);
    println!("x: {:?} and y: {:?}", point_two.x, point_two.y);
}

خروجی کد بالا

x: 1 and y: 1
x: 10 and y: 5

در مثال بالا ما اومدیم برای استراکچری که داریم دو متود رو تعریف کردیم که اسمشون original و new هست.\ اگر توجه کنید دیگه ما برای استراکچر Point متود داریم و میتونیم از متودهامون استفاده کنیم.\ متود اول یعنی original برای ما یه پوینت رو میسازه و برمیگردونه با مقدار ایکس و ایگرگ یک.\ متود دوم یعنی new از ما دو مقدار رو میگیره و اونا رو با ایکس و ایگرگ ست میکنه و یه پوینت میسازه و برمیگردونه.

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

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

#[derive(Debug)]
struct Number {
    x: i32,
}

impl Number {
    fn print_min_y(&mut self, x: i32) -> i32 {
        self.x -= x;
        return self.x;
    }
}

fn main() {
    let number: &mut Number = &mut Number { x: 11 };
    println!("number.print_min_y: {:?}", number.print_min_y(1));
    number.print_min_y(1);

    println!("self.x: {:?}", number.x);
    println!("number: {:?}", number);
}

خروجی کد بالا

number.print_min_y: 10
self.x: 9
number: Number { x: 9 }

نکته: عبارت #[derive(Debug)] یک attribute هست.

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

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

بخش شیش

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

کلوژر ها مبحثی جالب توی برنامه نویسی هستن و توی راست کلوژر ها خیلی به روبی و اسمال تاک نزدیک هست.\ کلوژر های راست در واقع فانکشن های آنانیموس هستن یا همون anonymous functions اگر هم جاوا کار کرده باشید با مبحث فانکشن های آنانیموس آشنا هستید.

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

fn main() {
    fn function (i: i32) -> i32 { i + i }

    let closure_annotated = |i: i32| -> i32 { i + i };
    let closure_inferred  = |i     |          i + i  ;

    let i = 1;
    println!("function: {}", function(i));
    println!("closure_annotated: {}", closure_annotated(i));
    println!("closure_inferred: {}", closure_inferred(i));

    let one = || 1;
    println!("closure returning one: {}", one());
}

خروجی کد بالا

function: 2
closure_annotated: 2
closure_inferred: 2
closure returning one: 1

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

امیدوارم از این مقاله هم لذت کافی رو برده باشید.

۴ بهمن، ۱۳۹۹

٣ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۴ نوشت.

توی یکی دیگه از مقالات راست میخوایم با توابع یا function ها کار کنیم.

تابع یا Function

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

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

توی این مقاله قراره با چهار مسئله آشنا بشیم:

۱. تعریف تابع

۲. صدا کردن تابع

۳. برگردوندن مقدار از تابع

۴. ورودی دادن به تابع

این مفاهیم به زبان انگلیسی به صورت زیر هست:

  1. Defining a function

  2. Calling or invoking a Function

  3. Returning Functions

  4. Parameterized Function

تعریف تابع

به کد زیر توجه کنید

fn hello() {
   println!("hello");
}

در بالا یک تابع تعریف کردیم با استفاده از کلیدواژه fn و این تابع کلمه سلام رو چاپ میکنه.

صدا کردن تابع

fn main() {
    hello();
}

fn hello() {
    println!("hello");
}

برای صدای کردن تابع کافیه نام تابع رو صدا کنیم.

خروجی به صورت زیر هست

hello

برگردوندن مقدار از تابع

fn one() -> i32 {
    return 10;
}
fn one() -> i32 {
    10
}
fn one() {
    return 10;
}
fn one() {
    10
}

به چهار صورت در راست میتونیم در تابع های راست مقداری رو برگردونیم:

  • مشخص کردن خروجی و برگردوندن مقدار با استفاده از کلیدواژه return
  • مشخص کردن خروجی و برگردوندن مقدار بدون کلیدواژه return
  • مشخص نکردن خروجی و برگردوندن مقدار با استفاده از کلیدواژه return
  • مشخص نکردن خروجی و برگردوندن مقدار بدون کلیدواژه return

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

ورودی دادن به تابع

fn main(){
   let x: i32 = 5;

   print_zero(x);
   println!("The value of no is: {}", x);
}

fn print_zero(mut variable: i32) {
   variable = variable * 0;
   println!("param_no value is: {}", variable);
}

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

خروجی به صورت زیر هست

param_no value is: 0
The value of no is: 5

امیدوارم از این مقاله هم لذت کافی رو برده باشید :)

۲۶ دی، ۱۳۹۹

۴ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی ارور CORS policy جواب داد.

مشکلات زیادی هستن که به این اررور میرسن. یکی از دلایلش محدودیت هست که من با یوتیوب داشتم و این محدودیت ۵۰ تا بود که بعد از اون به این اررور میرسید اسم محدودیت ها هم کوتا بود که یوتیوب داشت. ممکنه این دلیل محدودیت باشه یا چیزای دیگه...

۲۵ دی، ۱۳۹۹

۴ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی انتخاب زبان برنامه نویسی در حوزه شبکه جواب داد.

@m-p سی و سی پلاس پلاس زبان برنامه نویسی هستند و پایتون زبان اسکریپت نویسی هست دقیق ترش این میشه (البته میدونم که میدونید)

۲۱ دی، ۱۳۹۹

۴ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی از چه سرویس v*p*n استفاده میکنین ؟ جواب داد.

من از اینجا استفاده میکنم.

۲۰ دی، ۱۳۹۹

۴ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۳ نوشت.

در مقاله ی بعدی راست میخواهیم مفاهیم جدیدتری رو با هم دیگه یادبگیریم.

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

مقاله سوم آموزش راست

تاپل یا Tuple

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

به کد زیر توجه کنید

fn main() {
        let x = (1i8, 1000i32, 0.2f64, true, 'A', 4u64);
        println!("one element of x: {}", x.4);
}

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

one element of x: A

حالا بیاید کد بالا رو با هم بررسی کنیم

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

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

شما خیلی کار های دیگه ای میتونید انجام بدید مثلا نوع متغیرتون که tuple هست رو مشخص میکردید یا مثلا توی تاپلتون یک تاپل دیگه میساختید همه ی این کار ها امکان پذیر هست.

آرایه یا Array

آرایه ها مجموعه ای از مقدار های مختلف با نوع های یکسان هستند. با استفاده از علامت ‍‍[] یا به عبارت دیگه کرلی برکت میتوونید آرایه درست کنید توی زبان راست.

به کد زیر توجه کنید

fn main() {
        let x: [i32; 5] = [1, 2, 3, 4, 5];
        let y = ['A', 'B', 'C', 'D'];

        println!("first element of x: {}", x[4]);
        println!("last element of y: {}", y[1]);
}

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

first element of x: 5
last element of y: B

حالا بیاید کد بالا رو با هم بررسی کنیم

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

در آخر هم اومدیم ایندکس آخر یا همون پنجمه متغیر x رو چاپ کردیم و ایندکس اول یا همون اوله متغیر y رو چاپ کردیم. اما شاید بپرسید چرا به جای 5 از 4 استفاده کردیم ؟ باید بگیم که کامپیوتر ها از 0 شروع میکنن به شمردن اگه به یاد داشته باشید اینجا هم باید از همین قانون پیروی کنیم اما توی ست کردن اندازه آرایه لازم نیست همچین تفکری داشته باشیم.

امیدوارم از این مقاله هم لذت کافی رو برده باشید :)

۳ دی، ۱۳۹۹

۴ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی مقاله ای در مورد تغییرات php 8 جواب داد.

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

۲۸ آذر، ۱۳۹۹

۵ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۲ نوشت.

در بخش بعدی مقاله راست میخواهیم با زبان راست بیشتر آشنا بشیم و با comments و variables و formatted print در زبان راست آشنا بشیم و تمرین هایی رو انجام بدیم.

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

نظر گذاری یا comment

برنامه نویس های مبتدی یک سوالی میپرسن مبنا بر اینکه چرا باید نظر گذاری یا به عبارت دیگه کامنت گذاری کنیم ؟ در جواب باید بگیم که میتوونیم براساس تجربیاتمون بگیم دو دلیل مهم داریم:

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

دو: بعضی از کد های ما ممکن هست بسیار پیچیده بشن کامنت گذاری باعث میشه که این مشکل برطرف بشه تا حدودی

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

به کد زیر توجه کنید

fn main() {
       // The first method

       /*
        * The second method
        */

       /* The third method */
       println!("Hello World")
}

حالا اگه کدمون رو کامپایل کنیم و اجرا کنیم نتیجه برنامه ما بدون اررور و وارنینگ خواهد بود به صورت زیر

Hello World

متغیر یا variable

متغیر ها بصورت کلی میتوونن مقداری رو توی خودشون نگه دارن و ما از متغیر ها به صورت گسترده ای استفاده می کنیم؛ هر متغیر در زبان های برنامه نویسی می تواند یک نوع یا چند نوع از داده رو توی خودشون ذخیره کنن.

در زبان راست برای درست کردن یک متغیر ساده از کلیدواژه let استفاده می کنیم مشابه استاندارد های ES.

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

fn main() {
        let my_age: i32  = 14;
        let my_birthday: i32 = 2007;

        println!("Age: {} | birthday: {}", my_age, my_birthday);
}

به خروجی کد هم توجه کنید

Age: 14 | birthday: 2007

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

هرگز از روش camelCase برای نام گذاری متغیر هاتون استفاده نکنید تا در زمان کامپایل کردن کد مشکلی نداشته باشید.

برای نام گذاری متغیر های چند کلمه ای و ... از روش snake_case استفاده کنید.

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

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

هرگز دو متغیر رو یا بیشتر که نوعشون متفاوته با هم دیگه format نکنید چون در زمان کامپایل به مشکل بر می خورید.

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

حالا میخوام یک نکته مهم رو بهتون بگم، در زبان راست شما باید از روش snake_case برای نام گذاری متغیر ها، تابع ها، متد ها، ماژول ها و ماکرو ها استفاده کنید که باز نکاتی دارند که در مقاله های بعدی و جلوتر به آن ها می پردازیم؛ میتونید خودتون هم این موضوع رو امتحان کنید.

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

تایپ سیستم استاتیک

fn main() {
    let _variable: i32 = 2007
}

تایپ سیستم اینفررد

fn main() {
    let _variable = 2007
}

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

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

Type inference

Type static

فرمتد پرینت یا formatted print

به کد زیر توجه کنید (در اینجا برای از بین بردن گیج شدن کاربر از نظر گذاری یا کامنت گذاری استفاده شده)

fn main() {
    // In general, the `{}` will be automatically replaced with any
    // arguments. These will be stringified.
    println!("{} days", 31);

    // Without a suffix, 31 becomes an i32. You can change what type 31 is
    // by providing a suffix. The number 31i64 for example has the type i64.

    // There are various optional patterns this works with. Positional
    // arguments can be used.
    println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");

    // As can named arguments.
    println!("{subject} {verb} {object}",
             object="the lazy dog",
             subject="the quick brown fox",
             verb="jumps over");

    // Special formatting can be specified after a `:`.
    println!("{} of {:b} people know binary, the other half doesn't", 1, 2);

    // You can right-align text with a specified width. This will output
    // "     1". 5 white spaces and a "1".
    println!("{number:>width$}", number=1, width=6);

    // You can pad numbers with extra zeroes. This will output "000001".
    println!("{number:>0width$}", number=1, width=6);
}

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

31 days
Alice, this is Bob. Bob, this is Alice
the quick brown fox jumps over the lazy dog
1 of 10 people know binary, the other half doesn't
     1
000001

حالا بیاید مو به مو کد بالا رو بررسی کنیم.

در کد اول عدد 31 با علامت {} فرمت شده و خروجی بالا رو تولید کرده.

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

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

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

در کد پنجم هم میتونیم به یک صورت دیگه بیان کنیم؛ width در زبان راست برای ما میاد عرضی رو میسازه و این عرض ما دارای عدد 6 هست و گفتیم شیش تا عرض بساز اما با هیچ چیزی این عرض رو پر نکن و بعد میاد برای ما عدد 1 رو چاپ میکنه و در نهایت پنج تا فاصله میفته با عدد یک.

در کد ششم هم مانند کد پنجم عمل کردیم با این تفاوت که گفتیم بیا عرض ایجاد شده رو با عدد 0 پر کن.

تمرین

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

fn main() {
        // create a variable with f64 type and use static type
        let variable: f64 = 3.14000000;

        /* format and print the variable */
        println!("variable: {}", variable);
}

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

variable: 3.14

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

۲۷ آذر، ۱۳۹۹

۵ ماه پیش ١۵۰۰+ امتیاز
نویسنده @samikaner یک مقاله تازه به اسم زبان Rust - بخش ۱ نوشت.

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

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

برای نصب زبان راست در سیستم های لینوکس و مک میتوانیم از package manager های مختلفی استفاده کنیم اما یک راه بهتر این هست که از curl و rustup استفاده کنیم برای این کار اول curl را نصب میکنیم در صورت نبود دستور curl در سیستم.

sudo apt-get install curl # Debian/Ubuntu
sudo yum install curl # CentOS/RHEL
sudo dnf install curl # Fedora
sudo pacman -S curl # Arch

brew install curl # MacOS

حالا که توانستیم curl را نصب کنیم می توانیم برای نصب rustup اقدام کنیم.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

بعد دانلود در زمان نصب از شما پرسیده می شود که چجوری میخواید نصب کنید و میتوانید با اعداد ۱ و۲ و ۳ پاسخ دهید مانند زیر

info: downloading installer

...

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>

اگر از نصب پشیمان شدید میتوانید عدد ۳ را وارد کنید اگه میخواید نصب خودتون رو تنظیم و کاستومایز کنید عدد ۲ را وارد کنید و اگه هم میخواید به صورت دیفالت نصب بشه عدد ۱ رو وارد میکنید. ما توی این مقاله به صورت دیفالت و استیبل نصب میکنیم برای اینکار عدد یک رو وارد میکنیم و بعد شروع به نصب میشه اگه راست رو یک بار نصب کرده باشید به شما هشدار میده و یک بار دیگه نصب میکنه.

الان هم cargo که ‍‍package manager هست برای راست و خوده ‍rustc نصب شده و فقط کافیه مسیر زیر رو به PATH خودمون اضافه کنیم؛ مسیر زیر رو اضافه کنید.

$HOME/.cargo/bin

برای اینکه ببینید ورژن زبان راستی که نصب شده چیه کافیه از دستور rustc --version استفاده کنید.

اما یک روش دیگر هم داریم که شما میتونید اینجوری نصب کنید و حالا به PATH تون در صورت نیاز اضافه کنید. ‍‍

‍‍‍‍ brew install rustup # install rustup rustup-init # setup cargo and rustc rustc --version

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

نصب زبان راست در ویندوز

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

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

سینتکس زبان راست شبیه به زبان C و ++C هست اگر با این زبان ها آشنا باشید کار شما راحت تر است اما اینو بگیم که راست بسیار متفاوت هست و مشکلات زبان C و ++C ندارد مانند مموری لیک و اورفلو.

یک فایل با پسوند rs. مسازیم با دستور touch main.rs و اونو با text editor یا IDE خودتون باز کنید. حالا کد زیر را مینویسیم:

fn main() {
        println!("Hello World")
}

در زبان راست مانند زبان C و ++C شما نیاز دارید که یک تابع اصلی با نام main بسازیم وگرنه کد ما و فایل کد ما اجرا نمیشه چون دارای تابع اصلی نیست. دستور !println و ‍!print هردو ‍‍macro یا ماکرو هستن که در مقاله های بعدی باهاش آشنا میشیم.

کد بالا را با دستور زیر کامپایل میکنیم و در لینوکس اجرا میکنیم.

rustc main.rs
./main

خروجی به صورت زیر خواهد بود.

Hello World

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

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

fn main() {
        println!("сьчцйка")
}

خروجی این کد ما حروف روسی خواهد بود به صورت زیر

сьчцйка

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

fn main() {
        println!("\u{f001}")
}

یونیکد uf001 کاراکتر موسیقی رو چاپ میکنه. توجه کنید که علامت {} در راست برای چاپ کردن چند کاربرد داره یکی برای چاپ یونیکد و از این موضوع ها هست و یکی برای فرمت کردن هست؛ خروجی رو نمیتونیم اینجا با fontawesome نشون بدیم اما خلاصه اینه که خروجی کاراکتر موسیقی هست.

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

کد زیر را مینویسیم.

fn main() {
        println!("\x1b[35mHello World")
}

زمانی که این کد رو کامپایل کنیم و بعد اجرا کنیم کاراکتر رنگی چاپ میشه حالا من خودم اسم رنگو نمیدونم :) برای اطلاع از این موضوع در رابطه با ASCII و ANSI escape sequences تحقیق کنید.

در آخرین تمرین میخواهیم کم کم با فرمت کردن آشنا بشیم با استفاده از علامت ‍{}. کد زیر را مینویسیم.

fn main() {
        println!("{}", "Hello World")
}

حالا وقتی کد رو اجرا کنیم رشته یا استرینگ Hello World با استفاده از علامت {} فرمت میشه و خروجی به این شکل خواهد بود.

Hello World

خب به انتهای این مقاله رسیدیم امیدوارم لذت برده باشید :)

۲۳ آذر، ۱۳۹۹

۵ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم نحوه نوشتن مقاله در پارس کلیک درست کرد.

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

۱۹ آذر، ۱۳۹۹

۵ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی زمینه های کاری مورد نیاز در خارج از کشور (کانادا) جواب داد.

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

۱۱ آذر، ۱۳۹۹

۵ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی انتخاب زبان برنامه نویسی در حوزه شبکه جواب داد.

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

۱۹ آبان، ۱۳۹۹

۶ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی کار با گیت در ایران جواب داد.

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

۱۲ آبان، ۱۳۹۹

۶ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی زبان برنامه نویسی برای آینده جواب داد.

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

اما زبانی مثل لیسپ و گویش هاش زندس هنوز و توی هوش مصنوعی استفاده میشه و میکنم، حالا میپرسی چرا ؟ اول از اینکه لیسپ یه زبون سطح بالا و دومین زبون سطح بالا ساخته شده هست چون خاص هست و فرق داره برای پروژه هایی که با لیسپ خوب میشن استفاده میشه کاری هم به مموری کازینگ ندارم. (خیلی فلسفی صحبت نمیکنم که چرا استفاده میشه و symbolic expression چیه اصن)

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

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

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

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

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

۹ آبان، ۱۳۹۹

۶ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی بهترین راه برای دیدن ویدئو‌های آنلاین از یوتیوب جواب داد.

مرسی. خیلی خوب بود راهنماییت !

۷ آبان، ۱۳۹۹

۶ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی مشکل عدم نمایش build پروژه next js جواب داد.

@aminghazi آها چه خوب.

۲۱ مهر، ۱۳۹۹

۷ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی دریافت api بدون es6 جواب داد.

@amir خیلی ممنون.

۲۰ مهر، ۱۳۹۹

۷ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی دریافت api بدون es6 جواب داد.

@amir

۷ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم دریافت api بدون es6 درست کرد.

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

چطوری میتونم از چند API حالا هرچی که باشه اطلاعات رو از طریق meta یا json یا html dom بگیرم بدون استفاده از استاندارد ES6 ؟؟؟

اگر مقاله ای در این رابطه دارید معرفی کنید !!!

۳۱ شهریور، ۱۳۹۹

۷ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی بولما یا بوت استرپ در کنار سَس در نکست جی اس جواب داد.

@warrior ممنون که راهنمایی کردید ؛)

۲۶ شهریور، ۱۳۹۹

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی ویندوز و لینوکس جواب داد.

@amin حرفه شما کاملا درسته :))

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی مشکل عدم نمایش build پروژه next js جواب داد.

احتمال این هست که درست build نشده از yarn استفاده کنید.

۸ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم بولما یا بوت استرپ در کنار سَس در نکست جی اس درست کرد.

یه پروژه نکست جی اس دارم و توی این پروژه از sass استفاده میکنم که یک css processor هست امکانش هست از Bulma یا BootStrap در کنار sass استفاده کنم یا کار جالبی نیست و نباید انجام داد ؟! اگه میشه راهنمایی کنید !!!

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی ویندوز و لینوکس جواب داد.

@mohammadreza_3 درسته علی پاکروح هم یکی از موسس های لین اکادمی هست که لین اسک زیره نظره لین اکادمی هست اگر هم خواستی چت کنی میتونی از لین چت تلگرامش استفاده کنی.

۲۵ شهریور، ۱۳۹۹

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی ویندوز و لینوکس جواب داد.

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

۲۳ شهریور، ۱۳۹۹

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی برنامه نویسی Drone جواب داد.

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

۲۰ شهریور، ۱۳۹۹

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی زبان های منفور سال ۲۰۲۰ جواب داد.

@amin خیلی ممنون امین جان.

۱۷ شهریور، ۱۳۹۹

۸ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم زبان های منفور سال ۲۰۲۰ درست کرد.

توی یک سایت زبان های منفور سال ۲۰۲۰ رو دیدم و برام عجیب بود و با بعضی هاشونم دارم کار میکنم. به این صورت:

  • Perl
  • Objective C
  • ColdFusion
  • COBOL 60
  • Pascal
  • Erlang
  • Haskell
  • CoffeeScript
  • Elm
  • VB.NET

کافی اسکریپت و الم و پرل نباید یادگرفت در اینصورت اما نظر سنجی سال ۲۰۲۰ استک اور فلو نشون میده که پرل حقوق خوبی داره ؟؟؟ منبع: edureka

۱۲ شهریور، ۱۳۹۹

۸ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی پرل یا پرل شیش جواب داد.

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

۱۱ شهریور، ۱۳۹۹

۸ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم استفاده از زبان هک در لاراول درست کرد.

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

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

۸ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم پرل یا پرل شیش درست کرد.

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

۳۱ امرداد، ۱۳۹۹

۸ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم پخش دوره ناکست جی اس درست کرد.

این کانال تلگرامی رو دیدم که دوره های ناکست جی اس پارس کلیک رو گذاشته حتی اسم پارس کلیک رو نزده توی بعضی دوره های پارس کلیک که گذاشته آقای عظیمی خودتون بررسی کنید اگه خواستید بهشون بگید که اسم پارس کلیک رو توی بعضی دوره ها که نزده بزنه: اینجا

۲۵ امرداد، ۱۳۹۹

۹ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم اضافه کردن برچسب راست برای گفتگو ها درست کرد.

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

۹ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی فروش آموزش های پارس کلیک در فرانش جواب داد.

من امروز روی این لینک اموزشی که میگید کپی کردن کلیک کردم پاکش کردن :)

۳ امرداد، ۱۳۹۹

۹ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی تشکر جواب داد.

دونیت رو هم به اقای عظیمی فراموش نکن :)

۱۰ تیر، ۱۳۹۹

١۰ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی امکانات php 8 جواب داد.

این تاریخ ازاد میشه و میشه استفاده کرد: November 26, 2020

۵ تیر، ۱۳۹۹

١۰ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی جنگو یا لاراول یا ریلز کدام یک! جواب داد.

@reza منظورم اینه که کدوم درآمد بیشتری داره و نظرتون بین این سه فریمورک چیه؟؟ هیچ مقایسه هم لازم نیس در رابطه با قدرتشون بکنیم نظراتتون رو میخواستم بدونم

١۰ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم جنگو یا لاراول یا ریلز کدام یک! درست کرد.

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

۳ تیر، ۱۳۹۹

١۰ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی اررور 419 در لاراول جواب داد.

@amir ممنون امیر جان

۲ تیر، ۱۳۹۹

١۰ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم اررور 419 در لاراول درست کرد.

سلام من کد اقای عظیمی رو زدم در اموزش لاراول اما اررور 419 یا همان Page Expired گرفتم. مشکل چیه؟؟؟

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Note;
use App\Card;
//use Illuminate\Support\Facades\Redirect;

class NotesController extends Controller
{
    public function store(Request $request, Card $card) // Route Model Binding
    {
//        return $request->all();
//        return \Request::all();
//        return request()->all();

        $note = new Note;
        $note->body = $request->body;
        $card->notes()->save($note);

//        return Redirect::to('/cards/{card}/2');
//        return redirect()->('URL');
//        return redirect('URL');
        return back();
    }
}

۳۱ خرداد، ۱۳۹۹

١١ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی نحوه دسترسی به ویدئوهای ویژه جواب داد.

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

۲۷ خرداد، ۱۳۹۹

١١ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی نصب روبی آن ریلز جواب داد.

@amir ممنون کار کرد.

١١ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم نصب روبی آن ریلز درست کرد.

سلام چند وقتی هست درگیر مسائل زیاد برنامه نویسی هستم از جمله روبی و ریلز.

اگر منبع مناسب یا اطلاعات کافی برای نصب Ruby on Rails با RVM و RBENV دارید لطفا راهنمایی کنید.

خیلی وقت هست درگیر نصب ریلز شدم!

۲۲ خرداد، ۱۳۹۹

١١ ماه پیش ٢۰۰+ امتیاز
@samikaner یک گفتگو به اسم مهاجرت در سن کم ممکن هست؟ درست کرد.

میخوام به امریکا یا کانادا مهاجرت کنم حالا یا مهاجرت کاری یا تحصیلی میخواستم بدونم آیا کسی که سن کمی داره مثلا 14 میتونه مهاجرت کنه شیمی و فیزیک و برنامه نویسی بلدم و توانایی گرفتن مدارک انگلیسی هم دارم این امکان فراهم هست آیا؟ پشتیبان مالی هم دارم. کسانی که مهاجرت کردن یا توی این زمینه تخصص دارن لطفا پاسخ کوتاه و مفید بدن!!!

۱۵ خرداد، ۱۳۹۹

١١ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی منو ها در جاوا جواب داد.

@ahmadi متاسفانه swing کار نکردم، بنده fx کار کردم.

۱۴ خرداد، ۱۳۹۹

١١ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی منو ها در جاوا جواب داد.

این موضوع توی Stackoverflow بحث شده یک سرچی دربارش بکنید گرافیک چی هست؟ JavaFX یا Swing ؟

١١ ماه پیش ١۰۰+ امتیاز
@samikaner به گفتگوی NetBeans 10 جواب داد.

کد توی NetBeans من اجرا شد مشکل از کد نیست مشکل فنی از Netbeans شما هست.