@אינטרקום אמר בבקשה | מדריכים בJS:
נו.. מעולה... איפה אתה גר??
אני בירושלים. אם זה מתאים לך שלח לי מייל. (אני לא מבטיח לך שום דבר, אבל בטח נוכל להיפגש ולדבר)
@אינטרקום אמר בבקשה | מדריכים בJS:
נו.. מעולה... איפה אתה גר??
אני בירושלים. אם זה מתאים לך שלח לי מייל. (אני לא מבטיח לך שום דבר, אבל בטח נוכל להיפגש ולדבר)
@dovid אמר בתכנות | איך להתחיל?:
שלימוד שפה ולימוד כלים לרוב מייצרים מישהו שיודע לכתוב קוד אבל בכלל לא מתכנת של ממש,
וחסר לו הרבה תיאוריה ורגישות לאמנות הזאת
אה, תודה על המילים האלו!
זה מזכיר לי נושא חשוב מאוד.
על כל מתכנת מצויין יש 10 בינונים ו-100 לא טובים. (כמובן שאין אף אחד מהמאה בשיחה זו. איכשהו זה תמיד מישהו אחר ולא אנחנו...
)
יש טווח עצום של רמות מהגרועים ביותר עד המצויינים ביותר.
מה מבדיל בין המצויין לבינוני והגרוע? (חוץ מיכולות שכליות)
ובמילים אחרות, איך תמשיך לגדול אחרי שנהיית "יודע קוד" לכדי "מתכנת" ובהמשך להיות "מתכנת טוב" או אפילו מצויין?
נראה לי שחלק מההבדל הוא היכולת לדעת מה אתה לא יודע. אם תדע מה אתה לא יודע תמיד תלמד ותשאף ליותר.
צריך להתרגל למידה החשובה של ביקורת עצמית. אף פעם אל תחשוב שאתה יותר טוב מכולם. תמיד תחיה בהרגשה שאתה רק בתחילת הדרך ויש אחרים שטובים ממך בהרבה. אם תחיה בהרגשה זו, כבר תמצא בכל צעד את הרגעים של "אוי, כמה זה נכון!" ותדע את התחומים שבהם אתה צריך להשתפר. להיות מתכנת זה למידה תמידית לא רק של טכנולוגיות אלא גם של טכניקות.
אני מרשה לעצמי לומר את זה למרות שאני לא ה"מתכנת הדגול" שיכול להרשות לעצמו לטפטף לאחרים על איך להיות מתכנת, כי הדבר נכון בכל תחום ולא רק בתכנות
איזה שימושים עושים עם JS
בעיקר אתרי אינטרנט - גם צד הלקוח וגם צד השרת. (בצד לקוח אין כמעט שפות אחרות, בצד השרת JS היא (אחת מתוך כמה) מהשפות הפופולאריות ביותר היום
אין כמעט תוכנות דסקטופ שכתבות ב-JS (למעט אלה שמבוססים על electron שהוא בעצם דפדפן שמציג תוכנה אחת)
ומה נרוויח שנלמד את זה
JS היא השפה הכי פופולארית היום מבחינת כמות האנשים שמתכנתים בה ומשרות פנוייות.
חוץ מזה יש בו כמה יתרונות:
עוד נקודה:
כל שפה שתלמד תכניס לך מושגים חדשים שירחיבו את האופקים שלך. גם אם בסוף לא תעשה שימוש בשפה לא הפסדת מללמוד אותה.
@צדיק-תמים זה בעקבות "גילוי מרעיש" של קבוצת חוקרי אבטחה, שאפשר לשחק עם תווי יוניקוד בצורה שהקוד שנראה לעין לא עושה בדיוק מה שאתה מצפה שהוא יעשה. לכן החליטו חכמי vscode לתת לך אזהרה בכל פעם שהקוד מכיל תווים "מסוכנים" כאלו. אפשר להשתיק את האזהרה בהגדרות התוכנה
חפש unicode highlight בהגדרות.
אפשר גם להשתיק את האהרה רק על תווים מסויימים.
https://code.visualstudio.com/updates/v1_63#_unicode-highlighting
@שתיה
יש כמה רמות של הגנה.
הכי נפוץ הוא שהתוכנה תאסוף כמה נתונים על החומרה שעליו היא מותקנת ולגבב אותם קצת כדי לקבל "טביעת אצבע" של החומרה, ואז לחייב קוד נגדי שמתאים בצורה כלשהי ל"טביעת האצבע".
אם אתה חושש מפני אנשים שיעשו רברסינג לקוד של התוכנה אז אתה חייב להשתמש במנגנוני ערפול (וכולי האי ואולי... הכל תלוי מפני מי אתה מנסה להתגונן)
אני משתמש בתוכנת תג (לעימוד ספרים) והוא מוגן על ידי HASP. עד כמה שהצלחתי לחפור זה נראה הגנה די חזקה. זה מחייב חיבור של התקן חומרה כדי שהתוכנה תפעל.
גם פרוייקט השו"ת עשו הגנה דומה. (אם כי פחות חזקה. כי בגירסה כלשהו אני הקטן הצלחתי די בקלות לפרוץ אותו... נראה לי שמאז זה השתכלל קצת).
@בערל אמר בחדש | Windows 10 מתעדכן לגרסה 2004:
וגרעין מקורי עבור לינוקס
עוד נצחון ללינוקס במלחמה הגרעינית 
וברצינות, התרגום של קרנל (בהקשר זה) הוא "ליבה"...
הנלענ"ד בנידון:
טיפול בביצועים של מחשב הוא ענין דטרמיניסטי מדעי. יש אנשים שהורגלו לכך שלמחשב יש התנהגויות לא מובנות (להם) ולכן פיתחו השקפה כזאת שמסתכלת על המחשב כסוג טיפוס משונה שחייב תצומי מפעם לפעם ועוד כל מיני אומונות טפלות לגבי מה יעזור ומה לא.
אז הנה מה שיש למדע להגיד על הנושא... (סתם... אני לא טוען שאני יודע הכל, רק מציג כמה נקודות)
א) לפעמים יש אלגוריתמים עם ביצועים שפוחתים בצורה דרמטית במיוחד ככל שהכמות של הקלט עולה. למשל מה שידוע כ-quadratic time complexity שזה אומר שהביצועים יורדים במקביל לריבוע של הגידול בקלט.
יש טעות נפוצה בקרב מתכנתים, שלפעמים הם מצפים שקלט מסויים יהיה על פי רוב מספיק קטן שביצועים כאלו לא יהיו מורגשים, ואז מי שעובר גבול מסויים פתאום מתחיל לראות ביצועים מחרידים שיורדים בצורה אקספוננטיאלית.
ראה דוגמה יפה פה. ציטוט נבחר:
Dawson’s first law of computing: O(n^2) is the sweet spot of badly scaling algorithms: fast enough to make it into production, but slow enough to make things fall down once it gets there.
כל ההקדמה הארוכה הנ"ל כדי להגיד ש:
מה לעשות, לפעמים זה האשמה של המתכנתים נטו ואין ביכולתך כמעט לעשות שום דבר נגד זה. גם אם נגיד שתקנה i9 ונניח שיש לו ביצועים יותר טובים ב-30%+- זה לא מספיק כדי להעלים את הבעיה. בעיה כזו לא עוזר לזרוק עליו עוד ועוד חומרה, צריך להתלונן ל-JetBrains ולקוות שהם יתקנו את זה. (התרשמתי שהם די קשובים לתלונות). וכמובן צריך להשתמש בגירסה עדכנית ויציבה.
ב) חוק חשוב: כאשר יש צאוור בקבוק מסויים, לא עוזר כלל לטפל בדברים אחרים חוץ מצוואר הבקבוק עצמו.
זה לא הגיוני כלל לדבר על ראם ו-SSD, פעולת תחזוקה כזה או אחר וכו' כאשר יש צוואר בקבוק ב-CPU.
אגב, שים לב שלמעבד שלך יש 8 או 16 ליבות, ולכן צריך לתרגם את האחוזים שאתה רואה במנהל המשימות בהתאם. אם יש לך 8 ליבות ואתה רואה שימוש של 12.5 אחוז, תתרגם את זה בראש שלך ל"שימוש 100% בליבה אחת". (ובהערת אגב, אם רואים מספר זה במדוייק, בד"כ זה אומר שמדובר בתהליך שלא חילקו לת'רדים מקבילים ואז לא יעזור להוסיף ליבות.)
אני חושש האם התקנת תוכנות כבדות רבות עלול להכביד על המחשב גם לא בשעת השימוש בהם, וליצור זבל מערכת וכדומה
זה מיתוס נפוץ בקרב אלו שהורגלו לא להבין מה קורה בתוך המחשב שלהם. אין שום חשש. נקודה.
המחשב הזדקן מאוד
עוד מיתוס. בוא נהיה מדעיים. הזקנה לא שולטת על רוב ככל רכיבי המחשב, הגשמיים והרוחניים כאחד. הנוסח הזה מגיע מאנשים שהורגלו שאי אפשר להבין את התהליכים הקורים וצריך לתאר אותם במונחים של תהליכים פיזיים שמוכרים יותר למרות שהם לא רלוונטיים פה.
@odeddvir אמר במחשב חזק לסביבת עבודה למתכנת:
האינטואיציה שלי אומרת לי שלא.
האינטואיציה שלך עובדת מצויין! אני רק לא מסכים לחלק מהנימוקים.
תבדוק את כל התוכנות שרצות בקביעות ברקע, והאם באמת יש לך צורך בהן תמיד, או שלפחות בזמן הפיתוח אפשר לוותר עליהן. שים לב שיש לך 32 תהליכים של גוגל כרום רצים במקביל.
עיין לעיל אות ב. במקרה דידן, רואים בפירוש עלייה משמעותית בשימוש CPU בעת עשיית המטלה, ואם כן אין הגיון שדברים צדדים כניקוי כללי יעזרו.
ניקוי הרג'יסטרי על ידי CCleaner.
לענ"ד זה מיתוס גמור. כבר רבות בשנים שאני אוחז כך למרות הטענות הלהוטות של חברים שאחרי ניקוי רג'יסטרי המחשב ממש כמו חדש. אין לזה הרבה הגיון, ואם זה באמת היה יעיל כל כך, מייקרוסופט כבר היו מפתחים משהו.
אבל זה נושא צדדי, כי כנ"ל אות ב בכל מקרה זה לא יעזור לנידון שלנו. וכן לגבי הנקודה השלישית שלך.
@zvinissim קשה להעלות מדריך על זה כי זה נושא שלם שצריך להקדיש קצת זמן ללמוד את זה מסודר.
אבל לעצם הבעיה, הפתרון לחלק הזה הוא פשוט להוריד חלק מהקוד שמיותר:
[component="topic/teaser"] {
display: none
}
פטור בלא כלום אי אפשר, אז הקדמה קצרה לנושא של CSS:
קובץ CSS מורכב מ"כללים" כל כלל מורכב משני חלקים: ה-selector דהיינו החלק שלפני המסולסלים, חלק זה מגדיר על איזה אלמנטים העיצוב יחול, וה-body של הכלל שזה החלק בתוך המסולסלים ששם מכניסים את העיצוב הרצוי
לצורכך, אתה צריך בעיקר ללמוד על selector-ים, כי להבנתי אתה לא רוצה עיצובים מסובכים אלא בעיקר להסתיר תוכן עם display: none
לגבי selector-ים יש כמה סוגים. כל סוג בוחר אלמנטים לפי פרמטר אחר:
h1 פשוט כותבים h1c1 כותבים בסלקטור: .c1#id1attr="val" שאפשר להוסיף לאלמנט) סלקטור כזו כותבים בתוך סוגריים מרובעות. לדוגמה: [component="category/post"] בוחר כל אלמנט שבו המאפיין component יש לו את הערך "category/post"אפשר לחבר ביחד כמה סלקטורים לקבל תוצאה רחבה או צרה יותר
חיבור עם פסיק: מרחיב את הבחירה לכל האלמנטים שמתאימים לשום אחד מהסלקטורים ברשימה. למשל: h1, .xyz יתן לך גם כל האלמנטים מסוג h1 וגם אותם שיש להם קלאס xyz
חיבור עם רווח: מצר את הבחירה לאלמנט שיש לו ב"ייחוס" שלו כל הסלקטורים שברשימה לפי הסדר, למשל: h1 .xyz .abc בוחר כל אלמנט שהוא עצמו יש לו קלאס של abc והוא צאצא של אלמנט עם קלאס xyz ושה-xyz הזה הוא צאצא של h1
חיבור בלי רווח או פסיק: מחייב שכל התנאים יתקיימו באלמנט אחד. למשל: h1.xyz.abc בוחר רק אלמנט שהוא גם קלאס abc וגם קלאס xyz וגם שהוא מסוג h1
זה ממש ממש על קצה המזלג...
@zvinissim ה-2 גרושים שלי:
אקספלורר אפשר להוציא לגמרי מהמשוואה כי זה מיושן ואיטי. הסיבות היחידות להשתמש בו נמצאים רק בארגונים גדולים א) שיש להם אתרים פנימיים שעובדים רק עם אקספלורר. ב) אני לא בטוח בזה אבל אולי יש מדיניות קבוצתיות ו/או הגבלות אבטחה שעובדים רק עם אקספלורר.
אדג' (הישן/נוכחי בניגוד לאדג' החדש שמבוסס על כרום).
שוב, בארגונים גדולים יכול להיות שיגבילו את השימוש רק באדג' מטעמי אבטחה. חוץ מזה אין בו הרבה יתרונות. מכיון שאני לא משתמש בו הרבה, אני לא יכול לחוות עליו דעה. מה שכן השתמשתי לא הרגשתי שזה רץ כמו כרום או פיירפוקס. לרוב משתמשים נראה לי שהשימוש היחיד שהם עושים באדג' הוא להוריד את כרום...
התחרות האמיתי הוא בין כרום (וגרורותיו - brave vivaldi, edge ועוד) לפיירפוקס.
בגירסאות האחרונות של פיירפוקס (מאז מה שקוראים firefox quantum) יש שיפורים משמעותיים מאוד בביצועים.
הצדדים העקריים לכאן ולכאן:
גם אצלי
השבתתי את הדגל הזה: chrome://flags/#smooth-scrolling וזה הסתדר
אני מסתפק אם יש דרך מסודרת ללמוד אבטחת אתרים. יכול להיות שאין דרך. או שהדרך המסודרת קשה מאוד.
כמובן, שהבסיס הוא מה שדוד כתב: לפני שתלמד איך לפרוץ לאתר אתה חייב ללמוד איך בונים אתר.
יש לי שתי המלצות:
המלצה כללית מאוד:
המלצה פרטית:
@aiib
נאלתר משהו מהר

@NH-LOCAL חיכיתי שתשאל 
אלך לפי סדר דבריך:
מבחינת ניידות אין נוחה ממנה
יש לי טענה הפוכה, שורת הפקודה שונה לגמרי בין ווינדוס ללינוקס, משא"כ שפות תכנות בד"כ זהות בכל הפלטפורמות, אפשר לשאת איתך פייתון על דיסק און קי
והיא פשוטה מאוד לשימוש
תסביר לי אם ככה למה יותר קל לי לכתוב 500 שורות JS מ-10 שורות CMD? 
שורת הפקודה בהחלט מתאימה לזה - ניתן ללמוד ממנה היטב איך עובד תכנות
ממש ממש לא. שפות שורת הפקודה נועדו בעיקר כדי לשרשר פקודות בצורה נוחה
זה לא אמור להיות שפת "תכנות" אלא שפת "תפירה"... דהיינו צורה שימושית לתפור ביחד פקודות
גם את החלקים של תכנות שיש שם באיזשהו צורה (פונקציות, משתנים, לולאות, מערכים, בקרת זרימה וכו) זה בצורה שונה מאוד והרבה יותר מסורבל משפות תכנות. מי שלומד לולאה בבאש, זה לא יעזור לו כמעט כלום בלולאות בשפות תכנות נורמליות
כדי לכתוב עם שפת shell (איזה שיהיה, bash, batch, powershell) צריך ללמוד מושגים שלא נצרכים כלל עבור תכנות. למשל: מה זה משתני סביבה, קוד יציאה של פקודה, קלט ופלט ושרשורם ב-pipe, שכל זה לא קשור בשום צורה לתכנות טהור
מצד שני יש הרבה מושגים בתכנות שכמעט ולא נפגשים בהם או שלא נפגשים בהם כלל בשורת הפקודה, או שעובדים בצורה שונה מאוד ממה שמקובל (סוגי משתנים שונים, מבני נתונים, קלאסים וכל הנושא של OOP, ועוד)
ניתן ליצור ממנה דברים ממשיים שמטפלים בקבצים (ולא רק מדפיסים "hello world") כבר בשלב ממש ראשוני
כן, אבל הוא לא מסוגל לשום דבר מעבר לזה כמעט, אתה יכול לתפור ביחד פקודות, אבל איפה שאין פקודה מתאימה וצריך להסתדר לבד לכתוב לוגיקה מסויימת, אתה נשאר עם שפה מסכנה מסורבלת ומכוערת
ויש הרבה דברים שפשוט בלתי אפשריים בשורת פקודה גם אם תעבוד קשה מאוד. ליצור ממשק גמיש ומותאם אישית ועוד הרבה דברים בלי שיעור. תעשה שרת אינטרנט בשורת הפקודה.
מי שרוצה לכתוב תוכנה אמיתית יתקשה מאוד להסתדר עם שורת הפקודה
תגובה: תכנות + AI
@chagold כתב בתכנות + AI:
אני מתכוין לבקשות ברמה הגיונית. כגון אם יש לי פרוייקט ב-vue שאני צריך לעדכן קודים גם בקומפוננטים, גם במודולים וכמו"כ getters וכו'. שאבקש ממנו להוסיף שדות מסויימים והוא יודע להציע הצעות על כל המקומות הרלוונטים בפרוייקט, ולא רק ברמת הקובץ הנוכחי.
תשובה שלא ממין השאלה, אני ממליץ בחום להשתמש בטייפסקריפט
במקרה כזו של הוספת שדות, הקומפיילר כבר יצביע על כל מקום שצריך לעדכן בגלל ההוספה
בפרט ב-vue3 ממש קל להתחיל לכתוב טייפסקריפט, פשוט מוסיפים lang="ts" לקטע ה-script
זה יכול לעזור לך יותר מכל AI
אני כבר לא רוצה שוב לתכנת ב-JS
יש כמה רמות בתוך TS כמה הקומפיילר יחמיר בבדיקות, לפי רמת החומרה כך רמת התועלת
אני יכול להבטיח עם הרבה ביטחון שמי שיתחיל לכתוב טייפסקריפט לא יתחרט ויראה הרבה תועלת
אגב לשאלתו של @צבי-ש
https://tchumim.com/topic/14712
סתם למען הספורט (ממ... וגם אולי מישהו ילמד משהו מזה) אכתוב דרך אחרת
הרעיון הוא שמכיון שיש לך 9 קוביות שלכל אחד מהם יש רק שני מצבים אפשריים, אפשר לייצג את ה-state של כל צד במשחק בתוך מספר אחד. כל ביט במספר מייצג קוביה אחת. אם הביט כבוי סימן שאין לו
גודל מספר ב-JS הוא 64 ביטים, אבל לצורך פעולות שאני הולך לעשות אפשר להשתמש רק ב-32 ביטים הראשונים, לצרכך היה מספיק משתנה בעל 16 ביטים, אבל אין את זה ב-JS, למען ה"שטיק" הייתי יכול להכניס את שני צדדי המשחק במספר אחד, אבל זה סתם מיותר
מהלך המשחק נראה כך:
const listWin = [
7, 56, 448, 73,
146, 292, 273, 84
];
function checkWin (board) {
return listWin.some(win => (board & win) === win);
}
let user = 0;
function toggleUser () {
user ^= 1;
};
const boards = [0, 0];
const userNames = ['X', 'O'];
function doTurn (i) {
boards[user] |= (1 << i);
if (checkWin(boards[user])) {
console.log(`${userNames[user]} wins!`);
// TODO: signal end of game
return;
}
toggleUser();
}
בכל לחיצה אתה קורא doTurn עם מספר הקובייה שנבחרה
לא מיממשתי לוגיקה שבודק אם קובייה כבר מלאה, וכן לא מימשתי לוגיקה שיודע לצייר את הקוביות בהינתן שני מספרים שמייצגים את מצב המשחק
תהליך היצירה של listWin נראה ככה:
function makeWinList () {
function pack ([x, y, z]) {
return (1 << x) | (1 << y) | (1 << z);
}
return [
[0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6]
].map(pack);
}
הפוסט הזה איך שכתבתי אותו לא שימושי למי שלא מכיר משחקי ביטים
אולי בהמשך אכתוב הסבר ממצה
אני מציע שלהביא פלט מ-ChatGPT יהיה מותר (לפחות בפורום התכנות) אך ורק כחלק מתשובה אנושית ולא במקום תשובה אנושית, וגם כחלק מתשובה, רק אם יש בנותן טעם להביא את זה, אבל להביא את הפלט במקום תשובה אנושית יהיה אסור
@מנצפכ לא, מה פתאום למחוק? זה נחמד, שאלה ותשובה בצידה, לזה נועד הפורום.
תמשיך לשאול! ואל תתנצל על כלום
דעתי האישית:
בכללות כדאי לא להוסיף ספריות בלי שום אבחנה.
אבל מצד שני לא להיות פנאטי בנושא. ולדעת לבדוק מה רמת האיכות של הספרייה, ולמדוד את זה מול הצורך שלך בספרייה והתועלת שזה יביא
במקרה של lodash שווה מאוד להשתמש בו, זה גורם לקוד יותר קריא. זו ספרייה יסודית ואיכותית.
אני חושב כרגע על כמה סיבות להימנע מספריות חיצוניות, וכמה סיבות כן להשתמש (זה מה שאני חושב כרגע, אולי שכחתי כמה נקודות)
א) גודל הקוד: לפעמים ספרייות מנפחים מאוד את הבנדל הסופי, וזה משפיע על מהירות טעינת הדף, ושימוש בראם, וכדומה
תבדוק את הנושא של tree shaking שזה אומר שהמהדר יודע איזה פונקציות לייבא והשאר הוא משמיט. אני לא בקי.
ב) אבטחה: אם צד שלישי שולט על הקוד יש לו אפשרות להכניס דברים זדוניים וכו'
ג) איכות: לפעמים ספרייות צד שלישי הם לא איכותיים, ואתה תלוי על צד שלישי עבור תיקוני באגים
מצד שני:
א) תחזוקה: פחות קוד אומר פחות באגים, ופחות תחזוקה, לכן יש ענין לכתוב כמה שפחות קוד
ב) קריאות ואיכות: אם מדובר בספרייה איכותית, זה יכול לתרום הרבה לאיכות הקוד שלך והקריאות, כי הם חשבו על אבסטרקציות נכונות, ומודלים טובים/אלגנטיים וכו' שספק אם היית חושב על זה בעצמך
ג) השקעה: זה פחות השקעה להשתמש בקוד מוכן, מאשר לכתוב את זה בעצמך
איך לבדוק איכות של ספרייה?
אפשר לפי ה-issues בגיטהאב, לפי כמות ההורדות, ועוד פרמטרים, עם הזמן מפתחים חוש ריח