از زمان تحصیلم تا الان (سال۹۵) ، یک سری کتابها مونده. قدیمی شدن ولی فکر نمیکنم محتواش تغییری کرده باشه. وضع کتابها اکثرا سالمه.
اگر کسی خواست بگه. قیمت هرچندتاش هم که خواستید ، چه یکی چه همش ، واریز مبلغ ۲۰۰ هزار تومن به حساب خیریه محکه.
کتابهای رشته علوم کامپیوتره ، چندتا هم از مهندسی پزشکی داره.
اگر کسی خواست بگه. قیمت هرچندتاش هم که خواستید ، چه یکی چه همش ، واریز مبلغ ۲۰۰ هزار تومن به حساب خیریه محکه.
کتابهای رشته علوم کامپیوتره ، چندتا هم از مهندسی پزشکی داره.
دیروز رفتم دنبال یک کتاب توی انقلاب. اتفاقا خیلی کتاب عادیه و همه جا هستش. گفتم الکی خرج نکنم و دست دومش رو بگیرم. چی شد چی نشد راهمون افتاد ته یک پاساژ. یک مغازه خسته و قدیمی. کتاب رو خواستم گفت داریم. لیبل پشت کتاب خورده بود. قیمت زمان حال و آکبندش. کتاب مال چه زمانی بود؟ ۱۳۷۸! نو نو بود ولی تاثیر گذر زمان روی برگههاش مشخص بود.
لیبل ۲۸۵ هزار رو کندم زیرش ۵۵ بود. اون رو هم کندم قیمت زیرش ۱ هزار بود!
خلاصه که بازار کتاب دست دوم هم به فنا رفته.
یه جای دیگه برای یک کتاب دیگه رفتم. گفت داریمش گفتم چند؟ رفت دیجی کالا رو نگاه کرد قیمت نو رو بهم گفت 😂
لیبل ۲۸۵ هزار رو کندم زیرش ۵۵ بود. اون رو هم کندم قیمت زیرش ۱ هزار بود!
خلاصه که بازار کتاب دست دوم هم به فنا رفته.
یه جای دیگه برای یک کتاب دیگه رفتم. گفت داریمش گفتم چند؟ رفت دیجی کالا رو نگاه کرد قیمت نو رو بهم گفت 😂
رقصنده با کد
Javanoscript - Day 3 The Function.prototype.call() method calls the function with a given this value and arguments provided individually. Implement your own Function.prototype.call without calling the native call method. To avoid overwriting the actual Fu…
Answer:
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
Function.prototype.myCall = function (context, ...args) {
// If context is null/undefined, use globalThis (like real call)
context = context ?? globalThis;
// Create a unique property to avoid collisions
const fnKey = Symbol();
// Assign the function (this) to the object
context[fnKey] = this;
// Invoke it with the provided arguments
const result = context[fnKey](...args);
// Clean up
delete context[fnKey];
return result;
};
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
به عنوان یه پیشنهاد:
سی اس اس سلکتورها رو خوب بلد باشید.
خوندنش شاید بیشتر از نیم ساعت زمان نبره ولی توی نقاط حساسی از مصاحبهها نجاتتون میده
#interview #tips
سی اس اس سلکتورها رو خوب بلد باشید.
خوندنش شاید بیشتر از نیم ساعت زمان نبره ولی توی نقاط حساسی از مصاحبهها نجاتتون میده
#interview #tips
Javanoscript - Day 4
Min By
Implement a function minBy(array, iteratee) that finds the element inside array with the minimum value after going through iteratee.
Arguments
1. array (Array): The array to iterate over.
2. iteratee (Function): The iteratee invoked per element, which is a function that accepts one argument: (value).
Returns
(*): Returns the minimum value.
Examples
The function should ignore elements where iteratee produces null or undefined.
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
Min By
Implement a function minBy(array, iteratee) that finds the element inside array with the minimum value after going through iteratee.
Arguments
1. array (Array): The array to iterate over.
2. iteratee (Function): The iteratee invoked per element, which is a function that accepts one argument: (value).
Returns
(*): Returns the minimum value.
Examples
minBy([2, 3, 1, 4], (num) => num); // => 1
minBy([{ n: 1 }, { n: 2 }], (o) => o.n); // => { n: 1 }
The function should ignore elements where iteratee produces null or undefined.
minBy([{ n: 1 }, { n: 2 }], (o) => o.m); // => undefined
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
Answer:
function minBy(array, iteratee) {
let minValue = Infinity;
let result;
for (const item of array) {
const val = iteratee(item);
// Ignore null/undefined results
if (val == null) continue;
if (val < minValue) {
minValue = val;
result = item;
}
}
return result;
}
Javanoscript - Day 5
Type Utilities
JavaScript is a dynamically typed language, which means the types of variable can be changed during runtime. Many interview questions involve recursion of values that contain values of different types and how to handle each value type (e.g. different code is needed to iterate over an array vs an object). Knowledge of handling the JavaScript types is crucial to solving questions like Deep Clone and Deep Equal.
In this question, we will implement the following utility functions to determine the types of primitive values.
- isBoolean(value): Return true if value is a boolean, false otherwise.
- isNumber(value): Return true if value is a number, false otherwise. Note that NaN is considered a number.
- isNull(value): Return true if value is null, false otherwise.
- isString(value): Return true if value is a String, else false.
- isSymbol(value): Return true if value is a Symbol primitive, else false.
- isUndefined(value): Return true if value is undefined, else false.
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
Type Utilities
JavaScript is a dynamically typed language, which means the types of variable can be changed during runtime. Many interview questions involve recursion of values that contain values of different types and how to handle each value type (e.g. different code is needed to iterate over an array vs an object). Knowledge of handling the JavaScript types is crucial to solving questions like Deep Clone and Deep Equal.
In this question, we will implement the following utility functions to determine the types of primitive values.
- isBoolean(value): Return true if value is a boolean, false otherwise.
- isNumber(value): Return true if value is a number, false otherwise. Note that NaN is considered a number.
- isNull(value): Return true if value is null, false otherwise.
- isString(value): Return true if value is a String, else false.
- isSymbol(value): Return true if value is a Symbol primitive, else false.
- isUndefined(value): Return true if value is undefined, else false.
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
اشتراک تجربه شخصی:
امروز توی جلسه دیلی ، توسط تیملیدی که سنش حدود ۷ سال کمتر از منه , بهم اهانت خیلی خشک و جدیای شد. حس میکنم خودش هم بعدش متوجه شد که اشتباه کرد.
ولی راضیام از خودم.
اگر ۵ سال پیش بود ، احتمالا حداقل کاری که میکردم این بود که قندون رو توی سرش خرد میکردم ، ولی امروز به جز چند دقیقه اول که بالخره هر آدمی کمی عصبی میشه ، کل عکس العملم این بود : 🤷♂
قبلا فکر میکردم صرفا مطالعه کتاب و تفکر ، میتونه توی لحظات عصبانیت به آدمها کمک کنه که کنترل کنن خشمشونو ، ولی این روزا فکر میکنم تاثیر کتاب و افزایش سن و تجربه مشابه ، به صورت ترکیبی خیلی کمکم کرد و عملا امروز stress test به معنای نرمافزاریش بود 😁
میدونم الان میگید مگه میشه یه نفر بهمون اهانت کنه و چیزی نگیم؟
بله میشه. آرامش بزرگترین جوابیه که توی این شرایط میتونید بدید.
از این به بعد کد ریویو و مرج تسک باقی همکارا ، تسک منیجمنت ، پیگیری مشکلات ، جواب سوالا و تصمیمگیریها رو خودش باید انجام بده. حالا اون ضرر کرد یا من؟
روزی هم که مسلما دست خداست. نباید حرصش رو زد. گشنه سر روی بالش نمیذاریم. گذاشتیمم بهش میگیم فستینگ 😜
امروز توی جلسه دیلی ، توسط تیملیدی که سنش حدود ۷ سال کمتر از منه , بهم اهانت خیلی خشک و جدیای شد. حس میکنم خودش هم بعدش متوجه شد که اشتباه کرد.
ولی راضیام از خودم.
اگر ۵ سال پیش بود ، احتمالا حداقل کاری که میکردم این بود که قندون رو توی سرش خرد میکردم ، ولی امروز به جز چند دقیقه اول که بالخره هر آدمی کمی عصبی میشه ، کل عکس العملم این بود : 🤷♂
قبلا فکر میکردم صرفا مطالعه کتاب و تفکر ، میتونه توی لحظات عصبانیت به آدمها کمک کنه که کنترل کنن خشمشونو ، ولی این روزا فکر میکنم تاثیر کتاب و افزایش سن و تجربه مشابه ، به صورت ترکیبی خیلی کمکم کرد و عملا امروز stress test به معنای نرمافزاریش بود 😁
میدونم الان میگید مگه میشه یه نفر بهمون اهانت کنه و چیزی نگیم؟
بله میشه. آرامش بزرگترین جوابیه که توی این شرایط میتونید بدید.
از این به بعد کد ریویو و مرج تسک باقی همکارا ، تسک منیجمنت ، پیگیری مشکلات ، جواب سوالا و تصمیمگیریها رو خودش باید انجام بده. حالا اون ضرر کرد یا من؟
روزی هم که مسلما دست خداست. نباید حرصش رو زد. گشنه سر روی بالش نمیذاریم. گذاشتیمم بهش میگیم فستینگ 😜
Javanoscript + React - Day 6
useBoolean
Implement a useBoolean hook that manages a boolean state, with additional convenience utility methods.
Arguments
- initialValue: boolean: Initial value of the boolean state. If not provided, it should default to false.
Returns
The useBoolean hook returns an object with the following properties :
- value: boolean: The current boolean state
- setTrue: () => void: A function to set the boolean state to true
- setFalse: () => void: A function to set the boolean state to false
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
useBoolean
Implement a useBoolean hook that manages a boolean state, with additional convenience utility methods.
export default function Component() {
const { value, setTrue, setFalse } = useBoolean();
return (
<div>
<p>{value ? 'enabled' : 'disabled'}</p>
<button onClick={toggle}>Toggle</button>
</div>
);
}
Arguments
- initialValue: boolean: Initial value of the boolean state. If not provided, it should default to false.
Returns
The useBoolean hook returns an object with the following properties :
- value: boolean: The current boolean state
- setTrue: () => void: A function to set the boolean state to true
- setFalse: () => void: A function to set the boolean state to false
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
اگر الان کارت نزده میری توی مترو ، اگر توی جاده میندازی توی خاکی سریعتر برسی ، اگر حق پارک بقیه رو میگیری ، اگر توی کار دنبال امتیاز با خراب کردن بقیهای ، اگر وایفای مردم رو بدون اجازه استفاده میکنی یا به صورت کلی هر خلافی که چون صرفا کوچیکه برای خودت پسندیده میدونی و زیرسیبیلی رد میکنی ، فردا روز اگر به زن و بچت تجاوز کردن و توی بیابون پیداشون کردی ، اگر وسط خیابون انتهای دسته چاقوی ۲۰ سانتی روی سینت حس کردی ، اگر رفتی دیدی خونت خالی شده ، حق نداری حتی یک کلمه حرف بزنی و باید کامل لال شی.
توی علم روانشناسی هست بهش میگن slippery slope.
توی فارسی میگن خودت کردی که لعنت بر خودت باد.
دم اونایی گرم که مثل آدم دارن زندگی میکنن.
توی علم روانشناسی هست بهش میگن slippery slope.
توی فارسی میگن خودت کردی که لعنت بر خودت باد.
دم اونایی گرم که مثل آدم دارن زندگی میکنن.
اگر بخوام دوره بذارم ، به نظرتون کدوم بیشتر مورد نیازه بازاره و درصد مفید بودنش بیشتره؟ فعلا قصدشو ندارم و فقط ارزیابیه
Final Results
17%
فرانت جامع - html , css , js
12%
جاوااسکریپت مقدماتی
18%
لینوکس مقدماتی
15%
ریکت
23%
نکستجیاس
15%
نستجیاس
39%
دوره فول استک - نکست و نست و منگو
Javanoscript + React - Day 7
useCounter
Implement a useCounter hook that manages a counter state, with some additional convenience utility methods.
Arguments
- initialValue: number: Initial value of the counter state. If not provided, it should default to 0.
Returns
The useCounter hook returns an object with the following properties:
- count: number: The current counter value
- increment: () => void: A function to increment the counter value
- decrement: () => void: A function to decrement the counter value
- reset: () => void: A function to reset the counter value to initialValue, or 0 if not provided
- setCount: (value: number) => void: A function to set the counter value to value, it has the same signature as setState
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
useCounter
Implement a useCounter hook that manages a counter state, with some additional convenience utility methods.
export default function Component() {
const { count, increment, decrement, reset, setCount } = useCounter();
return (
<div>
<p>Counter: {count}</p>
<button onClick={increment}>Increment</button>
<button onClick={decrement}>Decrement</button>
<button onClick={reset}>Reset</button>
</div>
);
}
Arguments
- initialValue: number: Initial value of the counter state. If not provided, it should default to 0.
Returns
The useCounter hook returns an object with the following properties:
- count: number: The current counter value
- increment: () => void: A function to increment the counter value
- decrement: () => void: A function to decrement the counter value
- reset: () => void: A function to reset the counter value to initialValue, or 0 if not provided
- setCount: (value: number) => void: A function to set the counter value to value, it has the same signature as setState
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
اگر واقعا به علوم کامپیوتر علاقه دارید ، تا جان در کف دارید ریاضی بخونید.
شاید بعضیها ناراحت شن ولی واقعیت اینه که بیشتر از ۹۵ درصد یا حتی ۹۹ درصد برنامه نویسا ، پلیر هستن تا برنامهنویس. خودم هم شاملشون میشم. نه چیزی رو از نیستی میسازیم ، نه چیزی رو بهینه میکنیم ، نه چیزی رو بهبود میدیم.
کارمون اینه یا div بچینیم ، یا crud بزنیم ، یا table دیتابیس بزنیم، یا داکر بیاریم بالا. دیگه خیلی آدم خفنی باشیم ، حواسمون به تردینگ جاوااسکریپت و سکوریتی بک و ایندکس و شارد دیتابیس و ارکستریشن کوبر میشه. خب؟ هرکسی داکیومنت کوفتیشون رو بخونه میتونه همین کارارو انجام بده.
کدوممون چیزی رو ساختیم؟ احتمالا هیچ کدوم. اونایی که هم که یه چیزی ساختن بعید نیست رفته باشن چندتا چیز آماده رو سرهم کرده باشن.
از هر مسیری میرم به کف برسم میرسم به کمبود دانش ریاضی. از بازی سازی بگیر تا هوش مصنوعی تا حتی html !!
بله همین اچتیامالی که سبک سرانه بهش نگاه میکنید ، مفاهیم عمیق ریاضی داخلشه.
خلاصه اگر زیر ۲۰ یا حتی زیر ۳۰ هستید ، صبح ظهر شب فقط ریاضی بخونید.
پاورقی: خودم ریاضی دبیرستان رو با ۱۰ گذروندم و ۴ بار ریاضی ۱ رو توی دانشگاه افتادم. کسی نبود توجیه کنه چرا ریاضی خوبه. خود استاداش هم نمیدونستن.
شاید بعضیها ناراحت شن ولی واقعیت اینه که بیشتر از ۹۵ درصد یا حتی ۹۹ درصد برنامه نویسا ، پلیر هستن تا برنامهنویس. خودم هم شاملشون میشم. نه چیزی رو از نیستی میسازیم ، نه چیزی رو بهینه میکنیم ، نه چیزی رو بهبود میدیم.
کارمون اینه یا div بچینیم ، یا crud بزنیم ، یا table دیتابیس بزنیم، یا داکر بیاریم بالا. دیگه خیلی آدم خفنی باشیم ، حواسمون به تردینگ جاوااسکریپت و سکوریتی بک و ایندکس و شارد دیتابیس و ارکستریشن کوبر میشه. خب؟ هرکسی داکیومنت کوفتیشون رو بخونه میتونه همین کارارو انجام بده.
کدوممون چیزی رو ساختیم؟ احتمالا هیچ کدوم. اونایی که هم که یه چیزی ساختن بعید نیست رفته باشن چندتا چیز آماده رو سرهم کرده باشن.
از هر مسیری میرم به کف برسم میرسم به کمبود دانش ریاضی. از بازی سازی بگیر تا هوش مصنوعی تا حتی html !!
بله همین اچتیامالی که سبک سرانه بهش نگاه میکنید ، مفاهیم عمیق ریاضی داخلشه.
خلاصه اگر زیر ۲۰ یا حتی زیر ۳۰ هستید ، صبح ظهر شب فقط ریاضی بخونید.
پاورقی: خودم ریاضی دبیرستان رو با ۱۰ گذروندم و ۴ بار ریاضی ۱ رو توی دانشگاه افتادم. کسی نبود توجیه کنه چرا ریاضی خوبه. خود استاداش هم نمیدونستن.
توی دورانی که هوش مصنوعی گوش فلک رو داره کر میکنه ، تمرکزمون رو گذاشتیم روی اصل انسان بودنمون تا محصولاتی خلق کنیم که ساده و انسان محور باشن. یا حداقل بتونن بدون پیچیدگی عجیب غریب ، مشکلی هرچند کوچیک رو حل کنن.
هر چی سادهتر بهتر.
هر چی کمخرجتر بهتر.
هر ایدهای دارید ، توی تیم خودمون ازتون حمایت میکنیم.
از هیچ ایدهای خجالت نکشید.
چه بخواید ابزاری بزنید که ۲ تا عدد رو با هم جمع کنه ، چه بخواید گیمانجین بنویسید ، چه بخواید فروشگاه سیرترشی بزنید ، در حد توانمون کمکتون میکنیم.
هیچ مسله مالی هم بین ما و شما مطرح نیست ، به شرط اینکه محصول جوری باشه که یه خیری به مردم برسونه.
خودمون یه محصول آوردیم بالا. دومیش توی راهه.
پاورقی: تیم کوچیکی هستیم که میخوایم به محصولاتی که وابستگی به هوش مصنوعی رو کم میکنن یا بهش نیاز ندارن ، کمک کنیم. هیچ چیز عجیب غریبی در جریان نیست.
------------------------------------
هر چند که از نظر دوستان عجیبه ، ولی از نظر من ایده هر چی مسخرهتر ، بهتر 😁
هر چی سادهتر بهتر.
هر چی کمخرجتر بهتر.
هر ایدهای دارید ، توی تیم خودمون ازتون حمایت میکنیم.
از هیچ ایدهای خجالت نکشید.
چه بخواید ابزاری بزنید که ۲ تا عدد رو با هم جمع کنه ، چه بخواید گیمانجین بنویسید ، چه بخواید فروشگاه سیرترشی بزنید ، در حد توانمون کمکتون میکنیم.
هیچ مسله مالی هم بین ما و شما مطرح نیست ، به شرط اینکه محصول جوری باشه که یه خیری به مردم برسونه.
خودمون یه محصول آوردیم بالا. دومیش توی راهه.
پاورقی: تیم کوچیکی هستیم که میخوایم به محصولاتی که وابستگی به هوش مصنوعی رو کم میکنن یا بهش نیاز ندارن ، کمک کنیم. هیچ چیز عجیب غریبی در جریان نیست.
------------------------------------
هر چند که از نظر دوستان عجیبه ، ولی از نظر من ایده هر چی مسخرهتر ، بهتر 😁
رقصنده با کد
توی دورانی که هوش مصنوعی گوش فلک رو داره کر میکنه ، تمرکزمون رو گذاشتیم روی اصل انسان بودنمون تا محصولاتی خلق کنیم که ساده و انسان محور باشن. یا حداقل بتونن بدون پیچیدگی عجیب غریب ، مشکلی هرچند کوچیک رو حل کنن. هر چی سادهتر بهتر. هر چی کمخرجتر بهتر. هر…
اینم محصول دوممون
https://www.menuliza.com/
هر جا منو نیاز داشتید ، خیلی سریع بدون لاگین یا احراز هویت یا هر چیز دیگهای بلافاصله میتونید منوی دلخواهتون رو بسازید و qr کدش رو به اشتراک بذارید. هر کسی اسکنش کرد ، منو رو میبینه.
شاید براتون جالب باشه این سامانه ، کلا بکاند نداره.
قطعا ضعفهای زیادی داره ولی به مرور زمان اصلاح میشه. از زمان ایده تا پیادهسازی ۲ ساعت کار برده.
ممنون میشم اگر حوصله کردید پست لینکدنشو لایک و کامنت کنید دیده بشه :
https://www.linkedin.com/posts/alithecodeguy_menuliza-create-qr-code-menus-instantly-activity-7401714712830349312-Gu8-?utm_source=share&utm_medium=member_android&rcm=ACoAACtcWEYBTrZMU9DqRUSmbHsrw5UuZpcD8m0
https://www.menuliza.com/
هر جا منو نیاز داشتید ، خیلی سریع بدون لاگین یا احراز هویت یا هر چیز دیگهای بلافاصله میتونید منوی دلخواهتون رو بسازید و qr کدش رو به اشتراک بذارید. هر کسی اسکنش کرد ، منو رو میبینه.
شاید براتون جالب باشه این سامانه ، کلا بکاند نداره.
قطعا ضعفهای زیادی داره ولی به مرور زمان اصلاح میشه. از زمان ایده تا پیادهسازی ۲ ساعت کار برده.
ممنون میشم اگر حوصله کردید پست لینکدنشو لایک و کامنت کنید دیده بشه :
https://www.linkedin.com/posts/alithecodeguy_menuliza-create-qr-code-menus-instantly-activity-7401714712830349312-Gu8-?utm_source=share&utm_medium=member_android&rcm=ACoAACtcWEYBTrZMU9DqRUSmbHsrw5UuZpcD8m0
MenuLiza by NoAi Studio
MenuLiza - Create QR Code Menus Instantly
Build your menu, generate a QR code, and share it anywhere. MenuLiza lets you create customizable menu tables with QR codes for easy sharing and printing.
Javanoscript - Day 8
Array.prototype.reduce
Array.prototype.reduce is a way of "reducing" elements in an array by calling a "reducer" callback function on each element of the array in order, passing in the return value from the calculation on the preceding element. The final result of running the reducer across all elements of the array is a single value.
Implement Array.prototype.reduce. To avoid overwriting the actual Array.prototype.reduce which is being used by the autograder, we shall instead implement it as Array.prototype.myReduce.
Examples
Notes
There are some nuances regarding how the Array.prototype.reduce function works and what values are being passed to the reducer callback. You are recommended to read the specification for Array.prototype.reduce on MDN Docs before attempting.
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
Array.prototype.reduce
Array.prototype.reduce is a way of "reducing" elements in an array by calling a "reducer" callback function on each element of the array in order, passing in the return value from the calculation on the preceding element. The final result of running the reducer across all elements of the array is a single value.
Implement Array.prototype.reduce. To avoid overwriting the actual Array.prototype.reduce which is being used by the autograder, we shall instead implement it as Array.prototype.myReduce.
Examples
[1, 2, 3].myReduce((prev, curr) => prev + curr, 0); // 6
[1, 2, 3].myReduce((prev, curr) => prev + curr, 4); // 10
Notes
There are some nuances regarding how the Array.prototype.reduce function works and what values are being passed to the reducer callback. You are recommended to read the specification for Array.prototype.reduce on MDN Docs before attempting.
@danceswithcode
@alithecodeguy
#js #javanoscript #interview87
رقصنده با کد
اگر بخوام دوره بذارم ، به نظرتون کدوم بیشتر مورد نیازه بازاره و درصد مفید بودنش بیشتره؟ فعلا قصدشو ندارم و فقط ارزیابیه
خب بر اساس نظرسنجی ، تمایلات سمت فولاستک بودنه. حالا بپرسیم که چه ترکیبی به نظرتون بهتره؟
Final Results
6%
ریکت و اکسپرس و منگو
8%
ریکت و اکسپرس و پستگرس
10%
ریکت و نست و منگو
30%
ریکت و نست و پستگرس
8%
نکست و منگو (نکست فول استک)
13%
نکست و پستگرس (نکست فول استک)
25%
یه استک جدید خودم ساختم :LPERN (لینوکس و ریکت و اکسپرس و پستگرس)