@מנצפכ לא, מה פתאום למחוק? זה נחמד, שאלה ותשובה בצידה, לזה נועד הפורום.
תמשיך לשאול! ואל תתנצל על כלום
yossiz
-
שימוש בפקודה curl בשרת חינמי (PHP) -
שילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?דעתי האישית:
בכללות כדאי לא להוסיף ספריות בלי שום אבחנה.
אבל מצד שני לא להיות פנאטי בנושא. ולדעת לבדוק מה רמת האיכות של הספרייה, ולמדוד את זה מול הצורך שלך בספרייה והתועלת שזה יביאבמקרה של lodash שווה מאוד להשתמש בו, זה גורם לקוד יותר קריא. זו ספרייה יסודית ואיכותית.
אני חושב כרגע על כמה סיבות להימנע מספריות חיצוניות, וכמה סיבות כן להשתמש (זה מה שאני חושב כרגע, אולי שכחתי כמה נקודות)
א) גודל הקוד: לפעמים ספרייות מנפחים מאוד את הבנדל הסופי, וזה משפיע על מהירות טעינת הדף, ושימוש בראם, וכדומה
תבדוק את הנושא של tree shaking שזה אומר שהמהדר יודע איזה פונקציות לייבא והשאר הוא משמיט. אני לא בקי.
ב) אבטחה: אם צד שלישי שולט על הקוד יש לו אפשרות להכניס דברים זדוניים וכו'
ג) איכות: לפעמים ספרייות צד שלישי הם לא איכותיים, ואתה תלוי על צד שלישי עבור תיקוני באגים
מצד שני:
א) תחזוקה: פחות קוד אומר פחות באגים, ופחות תחזוקה, לכן יש ענין לכתוב כמה שפחות קוד
ב) קריאות ואיכות: אם מדובר בספרייה איכותית, זה יכול לתרום הרבה לאיכות הקוד שלך והקריאות, כי הם חשבו על אבסטרקציות נכונות, ומודלים טובים/אלגנטיים וכו' שספק אם היית חושב על זה בעצמך
ג) השקעה: זה פחות השקעה להשתמש בקוד מוכן, מאשר לכתוב את זה בעצמךאיך לבדוק איכות של ספרייה?
אפשר לפי ה-issues בגיטהאב, לפי כמות ההורדות, ועוד פרמטרים, עם הזמן מפתחים חוש ריח -
בעיה ב API של youtube@ass הגעת לפורום של הזקנים העצבניים...
לכן במקום התשובה שציפית לקבל תקבל שיחת מוסר ארוכה מטובלת בכמה שיעורי חיים...
(טוב, לא כולם זקנים, אני מציג רק את עצמי)
השאלה לא מספיק ממוקדת. אי אפשר לצפות שמישהו יעבור על כל המדריך שציינת ויבדוק למה לא עובד הקוד אצלך. (ובנוסף יש את האפשרות המאוד סבירה שהבעיה קשורה למשהו שבכלל לא כתבת בשאלה)
התהליך הנורמלי של מתכנתים הוא לנסות למקד את הבעיה.
כלומר לנסות למצוא איזה שורה של הקוד לא מתנהגת בצורה הצפוייה.
איך?
א) PHP פולטת שגיאות ואזהרות שונות, האם אתה מקבל אותם בפלט? (אם לא, תדאג שכן תקבל אותם). האם אתה רואה בפלט הזה שום שגיאות או אזהרות שיכולות להיות קשורות לנושא?
ב) אם לא קיבלת שום שגיאה, תעבור על הקוד שלב שלב ותוסיף פקודות print שידפיסו את המצב הנוכחי, כלומר, ערכים של משתנים קשורים, או סתם לוג שהגעת לשלב הזה בהצלחה. תנסה לזהות אם המצב הנוכחי לא מתאים למה שציפית. (זו דרך לא מקצועית של דיבוג אבל נהוג מאוד בקהילת מפתחי PHP... נקרא בעגה המקצועית - כלומר אצלי... - בנימה של זלזול: console log debugging)
ג) או תשתמש בדיבאגר אמיתי ותצעד צעד צעד דרך הקוד לבדוק איפה הוא נכשל. יש את xdebug עבור PHP.אני לא מומחה PHP. אולי יש למומחי ה-PHP פה טיפים יותר יעילים לדיבוג בעיות
-
קישורים שימושיים ללימוד SQL והמסתעף (מתעדכן)אני מביא פה רשימה של קישורים שימושיים ללימוד SQL והמסתעף. זה יכלול רק מקורות שאני יכול להמליץ עליהם כמקורות איכותיים.
לימוד שפת SQL
רמה בסיסית
- https://selectstarsql.com
- ספר (אינטראקטיבי) באנגלית ובעברית ללימוד SQL בסיסי, (חבל שהספר אף פעם לא הושלם, אני קראתי את החלק באנגלית אני לא יכול להמליץ על התרגום לעברית)
- מומלץ!
- https://tchumim.com/topic/9178/האנטומיה-של-שאילתת-sql

- https://jvns.ca/blog/2019/10/03/sql-queries-don-t-start-with-select
- אגב, כל הכתבות באתר הנ"ל מומלצים מאוד





- אגב, כל הכתבות באתר הנ"ל מומלצים מאוד
תוכנות
- TablePlus
- תוכנה קלה ופשוטה
- תומכת בכל ה-DB הנפוצים
- הגירסה החינמית מוגבלת קצת
- Azure Data Studio
- תוכנה של מייקרוסופט בנוי על הבסיס של vscode (זה ה-SSMS של vscode)
- תומך ב-SQL Server ו-Postgres
- SQL Server Management Studio
- תוכנה משוכללת ומלאה לניהול SQL Server
- MySQL Workbench
- תוכנה משוכללת לניהול DB של MySQL
Query Plans ואופטימזציה
- https://use-the-index-luke.com
ספר שלם על ביצועי SQL נכתב בצורה נגישה. - https://www.depesz.com/2013/04/16/explaining-the-unexplainable
- סידרה של 3 כתבות על Query Plans של postgres
- מומלץ מאוד!
- https://explain.depesz.com
- אתר מאת המחבר הנ"ל שמציג query plans של postgres בצורה יפה
- https://dalibo.github.io/pev2
- מציג query plans של postgres בצורה של עץ גרפי עם הרבה שכלולים
אתרים ובלוגים
- http://mysql.rjweb.org
אתר מלא טיפים לשימוש יעיל ב-mysql מאת איש שענה בקריירה שלו על עשרות אלפי שאלות בפרורומים בנוגע למיטוב SQL - https://use-the-index-luke.com/3-minute-test
מבחן קצר בביצועי SQL. אפשר להשתמש במבחן והתשובות ללימוד מושגים בסיסיים.
ההמשך יבוא...
- https://selectstarsql.com
-
ללמוד תכנות מאפס בצורה לא אינטנסיבית. אפשרי?@tzvi נראה לי (מהתבוננות על אחרים) ש
- מי שלא להוט אחרי תכנות לשמה (ולא לשם פרנסה), בד"כ לא יצליח ללמוד לבד גם עם חומרים/ספרים מתאימים
- מי שהאופי שלו לא מתאים (הוא לא עקשן, הוא לא מדייק בפרטים קטנים, לא יכול להתרכז לבד) לא יצליח ללמוד לבד
גם מי שהאופי שלו כן מתאים צריך להיות מוכן להרבה תסכול בהתחלה, יהיו לא המון המון שגיאות לא מובנות, צריך או לבקש עזרה או להיות ממש עקשן או בעל כשרון גדול
@nigun אני לא טיפוסי, לא יצאתי ללמוד לתכנת אלא להבין מחשבים ואיך הם מתוכנתים. מי שרוצה לתכנת בפועל, אם ישמע לעצתי, לא יתחיל עם C, וגם לא יסיים עם C, זה פשוט לא רלוונטי לרוב המוחלט של מתכנתים. (מי שבאמת רוצה להבין מחשבים, שלא ילמוד שפות עיליות עם זכרון מנוהל, רק C וכדומה, כמה שיותר קרוב לברזלים)
-
אני רוצה להשתמש נורמלי אשמח שתצביעו לי@שמחת-החיים זה לא עובד ככה. אם תתרום משהו של ערך ממילא יצביעו לך. (גם בלי מוניטין אפשר להשתמש בפורום).
-
מי עוד משתגע מהתנהגות כרום לגבי טקסט bidi?אה, מה זה bidi, אתה שואל?
bidi = bidirectional = דו-כיווני. למשל טקסט שמאל לימין בתוך קטע ימין לשמאל, (למשל תחילת קטע זו).הנה text בידי, כלומר text דו כיווני.
תפסתם את הרעיון? טוב
אז למי שמכיר, יש 2 אופציות בממשקים עם טקסט דו-כיווני, וויזואלי ולוגי.
כלומר, אם לוחצים חץ ימינה בתוך קטע דו כיווני, האם הסמן ינוע לכיוון ימין או שמאל? אם הולכים לפי המהלך הוויזואלי, אז הסמן תמיד ינוע ימינה. אם הולכים לפי המהלך הלוגי, אז חץ ימינה הולך אחורה לתו הקודם, איפה שהוא, הן ימינה הן שמאלה.
בכרום, למרבה הצער, תפסו את שיטת הוויזואלי, הבעיה היא שלמרות שעל פניו זה נראה יותר אינטואיטיבי, למעשה זה פחות אינטואיטיבי.
לדוגמא, איפה נשים את הסמן אם נרצה להוסיף כאן האות z להשלמת שם המשתמש שלי?yossi| האם נשים את הסמן כך (איפה שה
|)
|yossi או כך?התשובה הוא ההיפך מהאינטואציה הפשוטה (שלי לפחות),
לסבך את המצב יותר, בבחירת טקסט אז גם בכרום עובדים עם השיטה הלוגי (כאן חייבים כי השיטה הוויזואלי פשוט לא לוגי...)
אבל אי משום הא הייתי מסתדר, ב"ה אני מאוד מחונן ואני יכול להסתדר עם זה.
אבל תלחצו על הלינק. תקבלו דף עם קטע דו כיווני. אני מאתגר את כולכם לנסות לבחור את המילה
ה-HTMLעם העכבר. בהצלחה!(לא, אני לא מצפה לפתרון אבל אני צריך לפרק את התסכול)
<rant/> -
היתכן שאין מחשב טוב בכל העולם?@chocolate האם אתה מחפש מקסימום ניידות ומראה חיצוני "מסובב ראשים"? או שאתה רוצה סוס עבודה?
כדי לקבל ניידות מקסימלית ומראה חיצוני צריך לפשר קצת על מבנה חזק ו-repairability. אין מה לעשות.
לדעתי אתה לא באמת צריך את זה. וא"כ אתה לא מסתכל כלל על הסדרות הנכונות.
אני לא מומחה בנושא, אז אני לא רוצה להמליץ על סדרה מסויימת, רק אציין שאני מאוד מרוצה במחשב נייד שלי שהוא מסדרת thinkpad E series. שזה אפילו לא הסדרה החזקה ביותר שלהם.
יש בו חסרונות קלות כמו מסך ממוצע ומטה, חיי סוללה חלשים, ומראה חיצוני - לא "מי יודע מה". אבל בסה"כ זה משרת אותי מעל לשלוש שנים בינתיים בלי שום בעיה. וגם ראיתי את הפנים וזה קל מאוד לתקן דברים, לא צריך לפרק את הכל עד לדיוטא האחרונה כדי להגיע לרכיבים. אני אוהב את המבנה הפנימי שלו.נ.ב. חוץ מכל הנ"ל אני חושב שאתה בונה יותר מדי על חוות דעת, אין דרך למדוד איזה אחוז מהקונים נתקלים בבעיות אלו ואיזה אחוז מרוצים עד לגג ופשוט לא כותבים חוות דעת
-
אבטחת חשבונות@n123456 כתב באבטחת חשבונות:
בסדר לפתוח אותם על המייל שמשתמשים בו לשאר דברים
זה בסדר. אין שום בעיה שאנשים יודעים מה כתובת המייל שלך
מה שחשוב מאוד זה לשמור על "הגיינה" נכונה בנוגע לסיסמאותועוד כיוצא בזה המלצות לאבטחת חשבון
אני כותב את הכללים לפי סדר חשיבות (לענ"ד)
הכלל הכי חשוב:
חשבון המייל הוא החשבון הכי חשוב! זה המפתח לכל שאר החשבונות, ולכן צריך לשמור עליו בצורה נכונהאסור בשום פנים ואופן להשתמש בסיסמת המייל עבור שום חשבון אחר!
סיסמת חשבון המייל חייב להיות משהו שקשה לנחש. סיסמה ארוכה יחסית ולא לפי תבנית שקל לניחוש (כמו 123456 או תאריך הלידה שלך, או "סיסמה123" וכדומה)
והכי טוב שתגדיר אימות דו שלבי
(גוגל דורשים אימות נוסף בכל מקרה כאשר אתה נכנס ממחשב לא מוכר, כדאי שאתה תשלוט על זה ותגדיר את זה בהגדרות החשבון)הכלל השני בחשיבותו - אבל גם חשוב מאוד:
לא להשתמש באותו סיסמה עבור שום שני אתרים. לכל אתר סיסמה משלו!
אפשר להתפשר לגבי כלל זה לגבי אתרים לא חשובים. אבל באתרים חשובים כדאי מאוד להקפיד על זהכלל שלישי:
כדאי שכל סיסמה יהיה סיסמה חזקה, שזה אומר קשה לניחושכלל רביעי:
המחמירים (או ברוח הזמן
המהדרין) מגדירים אימות דו שלבי בכל מקום שמוצעת אפשרות כזאת
זה לא הכרחי בהרבה מקרים אבל כדאי עבור אתרים ששומרים מידע רגישאם תשמור על כללים אלו תהיה חייב להשתמש במנהל סיסמאות, שזה תוכנה שיוצרת ושומרת בשבילך סיסמאות
היום יש מנהל סיסמאות בסיסי מובנה בדפדפן כרום
זה מספיק לגמרי ומומלץ להשתמש בואני אישית שומר אצלי בזכרון רק שתי סיסמאות
הסיסמה של המייל שלי שהוא גם הסיסמה של מנהל הסיסמאות שלי אבל בשום פנים ואופן לא סיסמה של שום דבר אחר
(אני מאפשר לעצמי קולא זו להשתמש באותו סיסמה עבור מייל ומנהל סיסמאות, כי אני סומך על בטיחות מנהל הסיסמאות ושהסיסמה לא שמורה בשום מקום ברשת או במחשב, אם אתה רוצה להחמיר גם בזה, מה טוב)
סיסמה שנייה: סיסמה (קשה לניחוש אבל) קל לי לזכרון, אני משתמש בו רק עבור אתרים ממש לא חשובים
בשום פנים אני לא משתמש בו עבור אתרים חשובים
כל שאר הסיסמאות הם מחרוזות רנדומליים לגמרי ונשמרים במנהל הסיסמאות (הם נראים ככה:LUn2n.BV6oואין שום דרך לזכור אותם לבד)
(אני משתמש ב-1password עבור ניהול סיסמאות. אבל זה מוצר בתשלום אבל אפשר לגמרי להסתדר עם מוצרים חינמיים, פשוט החוויה שם הכי טובה) -
מייל.קום - אבטחה ופרטיות@סיסמה כתב במגיב ל מייל.קום - כתובת מייל בעברית:
א"כ מה רמת האבטחה?
אנשים רבים שואלים את זה...
יש פה שתי שאלות: א) האם אני עושה משהו בזדון לב לפגוע בפרטיות שלך או באבטחה. על זה התשובה היא חד משמעית לא! המיילים לא נשמרים כלל, אין לי שום ממשק בו אני יכול להסתכל במיילים שעוברים (חוץ מלוגים שכוללים כתובת השולח, שום דבר מעבר, לא נושא או שום פרט מזהה אחר) הם נמצאים על השרת בד"כ משך כמה שניות, רק כמה זמן שלוקח להעביר אותם הלאה. שאר המערכת בנויה לפי כל כללי האבטחה המוכרים והמומלצים
ב) אולי שלא במודע יש פה חולשת אבטחה ופורץ עם כוונות רעות ייכנס והוא יפגע בפרטיות שלכם. (אגב, זה יכול לקרות בחברה גדולה גם כן). על זה אני לא יכול להבטיח לך שלזה לא יקרה. אני רק יכול להתפלל ולקוות ולעשות מה שביכולתי.אולי יום אחד אם העסק יכניס מספיק כסף אוכל לשלם לחברת אבטחה שיחתמו על האבטחה של המערכת. כרגע המחיר של בדיקת אבטחה כבד מדי בשבילי.
נקודה חשובה שהרבה טועים בו:
רק המיילים שעוברים דרך המערכת שלי נסמכים על הבטחות האבטחה והפרטיות שלי. העובדה שחיברת את כתובת הג'ימייל שלך למערכת לא פוגעת באבטחה ופרטית של כל חשבון הג'ימייל שלך (קיבלתי הרבה בקשות למחיקת חשבון, כאילו רק זה שיש לך חשבון אצלי יכול להיות סכנה. זו טעות עמהרצית) -
האם ניתן להוריד את כל הפונטים מהאתר הזה.עדכון:
הנה סקריפט מלא, זה מוריד את כל הגופנים ומכניס אותם לקובץ זיפ. בסוף ההרצה הדפדפן תוריד קובץ זיפ שמכיל כל הפונטים. (אזהרה: זה יכול להשתמש בהמון זכרון ראם. ראו הזהרתם.)
(כנס לדף זה והכנס את הסקריפט לקונסול. חכה עד הגמר...)const numPages = parseInt($('.page-link').eq(-2).text()); for (let i = 2; i <= numPages; i++) { console.log(`Getting results page: ${i}`); const html = await fetch(`catetory.php?b=&key=%25%25&pg=${i}`).then(res => res.text()) const body = $.parseHTML(html); $(document.body).append(body) } const fonts = $('.center a b').toArray(); console.log(`${fonts.length} fonts`); await import('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js'); let zip = new JSZip(); for (const [i, font] of fonts.entries()) { const name = $(font).text(); console.log(`Downloading ${name}. Font ${i + 1} of ${fonts.length}.`) const arrayBuffer = await fetch(`/download/${encodeURIComponent(name)}.ttf`).then(res => res.arrayBuffer()); zip.file(name + ' - (' + i + ').ttf', arrayBuffer); } const zipFile = await zip.generateAsync({ type: "blob" }); const url = URL.createObjectURL(zipFile); const a = document.createElement('a'); a.href = url; a.download = `fonts.zip`; document.body.appendChild(a); a.click(); delete zip -
הצבעה נגד?!?!?!?!@margalit אין צורך להשתמש ביותר מסימן שאלה אחת...
ו... אין אפשרות להצביע נגד, כי המנהלים ביטלו אותו -
מחלקה פשוטה ב-JS לטפל בחוסר הודאות בקיום localstorageקיבלתי הרבה דיווחי שגיאות בקוד פרונטאנד מסויים בגלל מצבים שונים שבהם localstorage לא זמין, למשל בדפדפנים מסויימים במצב גלישה בסתר, או גירסאות מסויימות של דפדפנים למובייל וכדומה
אז כתבתי את המחלקה הזאת כמעטפה ל-localstorage
אשמח לקבל שיפוריםexport class Storage { static #nullStorage = { getItem() {}, setItem() {}, removeItem() {} }; static #cookieBasedStorage = { getItem(key, defaultValue) { // https://stackoverflow.com/a/64472572 return Object.fromEntries(document.cookie.split('; ').map((v) => v.split(/=(.*)/s).map(decodeURIComponent)))[key] ?? defaultValue; }, setItem(key, value) { document.cookie = `${key}=${value}`; }, removeItem(key) { document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC`; } }; static #storage = this.#storageAvailable(localStorage) ? localStorage : this.#storageAvailable(this.#cookieBasedStorage) ? this.#cookieBasedStorage : this.#nullStorage; static #storageAvailable(storage) { // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage try { const x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); return true; } catch (e) { return false; } } static getItem(key, defaultValue) { return this.#storage.getItem(key) ?? defaultValue; } static setItem(key, value) { this.#storage.setItem(key, value); } static removeItem(key) { this.#storage.removeItem(key); } } -
ספריית Sequelize: איך למנוע שליחת שדות מסויימות לצד לקוחתיאור הבעיה
על פי רוב בממשקי API, האובייקטים שה-API שולח משקפים במידה רבה את המבנה של ה-DB. עד כדי כך, שלרוב התשובה של ה-API הוא פשוט ייצוג JSON של שורות ב-DB.
מתכנתים עצלנים כמו רוב עמך (כולל אני) בד"כ פשוט עונים לבקשות API עם תבנית זו:- שאילתת DB לקבל את הישויות הרלוונטיות
- הרצת לוגיקה על היישויות, כמו בדיקת הרשאות, או עדכון נתונים וכו'
- סיריאליזציה של ישות ה-DB שרלוונטי לתשובה ל-JSON, ושליחה לקליינט
הבעיה היא שקורה הרבה שהשדות שנצרכים עבור שלב 2 שונים מהשדות שרוצים לשלוח בשלב 3
למשל בבקשת login בד"כ שולפים שורה שמייצגת משתמש, ועבור שלב 2 רוצים לבדוק שהסיסמה נכונה, ולכן שולפים את השדה שמייצג את ההאש של הסיסמה, אבל בשלב 3 בד"כ לא רוצים לשלוח את זה חזרה לקליינט
עוד דוגמה: אפליקציה ששומרת מפתח API של המשתמש כדי להריץ עבורו פעולות מול צד שלישי, רוצה לשלוף את המידע הזה מה-DB עבור שלב 2 כדי לטפל בבקשות שונות, אבל לא רוצה לשלוח את זה חזרה לקליינט
וכהנה רבות
מצו"ב קוד קצר לטיפול נוח בנושא זה עבור משתמשי Sequelize
הסבר על הפתרון
בספריית Sequelize, כאשר הופכים מודל ל-JSON, מנוע JS משתמש מתחת למכסה בפונקציית
Sequelize.Model.prototype.toJSON
הרעיון הוא שנוסיף שדה סטטית להגדרת המודלים שלנו שמכיל מערך של שדות שצריך תמיד להשמיט מהסיריאליזציה, ונכתובtoJSONמותאם אישית שלנו שיכבד רשימה זו
כדי שזה יעבוד גם על מודלים מקוננים, נקרא לפונקצייה זו בצורה ריקורסיבית על מודלים מקונניםהנה הקוד
// Override the builtin `toJSON` method to allow hiding certain fields from the client // To hide a field, add it to the `hidden` array on the model's prototype // We recursively call `toJSON` on all included models Sequelize.Model.prototype.toJSON = function () { const includes = this._options.includeNames ?? []; const hiddenKeys = this.hidden ?? []; const values = Object.assign({}, this.get()); for (const hiddenKey of hiddenKeys) { delete values[hiddenKey]; } for (const include of includes) { if (Array.isArray(values[include])) { values[include] = values[include].map((value) => value.toJSON()); } else if (typeof values[include].toJSON === 'function') { values[include] = values[include].toJSON(); } } return values; };והנה הגדרת מודל לדוגמה:
const User = sequelize.define( 'User', { firstName: { type: DataTypes.STRING, allowNull: false, }, lastName: { type: DataTypes.STRING, }, passwordHash: { type: DataTypes.STRING, } }); User.prototype.hidden = ['passwordHash']או אם אתה מעדיף קלאסים:
class User extends Model { static hidden = ['passwordHash'] } User.init( { firstName: { type: DataTypes.STRING, allowNull: false, }, lastName: { type: DataTypes.STRING, }, passwordHash: { type: DataTypes.STRING, } }, { sequelize, modelName: 'User', }, );נ.ב. הקוד נכתב עבור sequelize v6. אני משתמש בשדה פנימית של
Model(ה-_options.includeNames). אין הבטחה שהקוד ימשיך לעבוד בגירסאות הבאות של sequelizeעוד הערה:
אני לא חושב שקוד זה מספיק טוב לאפליקציה רצינית
נראה לי שאפליקציה רצינית אמורה להפריד בין הייצוג הפנימי לאובייקטים החיצוניים שנשלחים לקליינט, ולהשתמש בשכבה שיודע להמיר בין אובייקטים פנימיים לאובקטים "חיצוניים"
בפרוייקט אחד שלי השתמשתי ב-https://github.com/typestack/class-transformer לצורך זה -
שפת תכנות GOlang@לעזור-לכולם לא כתבת באיזה רמה אתה כותב ב-php ו-js, ומה רצית להשיג מלימוד גו.
המלצתי הוא להשקיע בכתיבה מקצועית יותר בשפות שאתה כבר כותב במקום ללמוד שפה חדשה.
במקרים מסויימים יכול להיות באמת יתרונות לגו על פני js ו-php. למשל עיבודים כבדים או עיבוד מקביל של הרבה נתונים.
שאלת על ביקוש: אז יש יותר ביקוש למתכנת טוב מאשר למתכנת שמכיר הרבה שפות. -
עזרה| תקשור בapi בשפת הphp לפלטפורמת nodebb@mgm-ivr זה לא אמור להיות דבר קל... אז לא להיות מופתע שלא הצלחת.
כמו בכל בעיית תכנות (או כללית) הא' של הא' זה לפצל את הבעיה לחתיכות קטנות יותר ולפתור אותם בנפרד.
לשם כך, נוריד רגע את השפה מהסיפור מכיון שזה לא כל כך משנה. התשובה שלי לא יהיה ספציפית ל-PHP אלא לכל שפה. אם יש לך שאלה ספציפית בנוגע למימוש ב-PHP תשאל שוב אחרי שהבנת את העקרון הכללי.
טוב, עכשיו נקדים ונאמר א) התיעוד שלהם לוקה קצת בחסר... ב) לפי התיעוד שלהם אין שום API עבור התחברות למשתמש שלך על ידי שליחת שם משתמש וסיסמה.
(ואגב, הם מודים בפה מלא שה-API לא נוצר במחשבה תחילה עבור שימוש כ-API כללי, בעיקר זה נוצר עבור תקשורת של הפרונט-אנד עם הבק-אנד והדבר די ניכר.)אז איך עושים בקשות API עבור המשתמש שלך?
בתיעוד יש שתי אופציות:- להשתמש בקוקי בתוקף שלקחת מהדפדפן. השם של הקוקי שאתה צריך הוא
express.sid.
מה שלא כתוב בתיעוד הוא שאם תשתשמש בקוקי תצטרך גם csrf token... - או אפשר ליצור טוקן שיאמת אותך. הטוקן הזה מייצרים בפאנל הניהול תחת settings > API Access ואז לוקחים את הטוקן ומכניסים אותו בהידר
Authorizationאחרי המילהbearer.
למעשה, אפשר לעשות עוד משהו שלא כתוב בתיעוד וזה לשלוח בקשת לוגין עם הפרמטרים הנכונים ולקבל חזרה את הקוקי הנצרך.
(אני לא מאריך בכל פרט ופרט, אם משהו לא ברור תשאל. (אבל בבקשה שאלות ממוקדות ומפורטות))
- להשתמש בקוקי בתוקף שלקחת מהדפדפן. השם של הקוקי שאתה צריך הוא
-
בירור | עבודה בתחום התכנותאני רוצה להוסיף עוד נקודה:
מישהו שאל אדם גדול (אני לא זוכר את השם) שיש לו בת (או בן?) מבוגר/ת ואומרים לו שיש יותר בני זוג פוטנציאליים (שמתאימים להדבר הספציפי שהוא מחפש) באמריקה, האם להתחיל לחפש בן/בת זוג באמריקה?
האדם גדול הנ"ל שאל אותו "כמה בני זוג הבת שלך צריכה? לא מספיק אחד? אז מה צריך את המאות הנוספות שיש במקום אחר?"
המסר ברור.
נניח שאין הרבה משרות מתאימות בשוק. אבל אתה צריך רק משרה אחת, לא?(כמובן שהדברים הם לצנינים בצידי אלה שדוגלים בסטטיסטיקה... אבל המציאות מוכיחה אחרת, לא לחכמים הלחם)
-
תכנות | איך להתחיל?@למה אני קורא את שאלותיך (משאלותיך...) ובאמת לא מבין מה אתה מבקש.
האם תוכל בשורה אחת להביע שאלה ענינית (ולא משאלה...)?הבנתי שאתה רוצה "להיות מתכנת". טוב. מה - אם כן - מונע ממך מ"להיות מתכנת"?
אתה לא יודע שפת תכנות? תלמד שפת תכנות. איזה? פייתון, JS, #C... איזה מהם שתמצא מדריך טוב בשפה שאתה מבין ושמתאים לאופי שלך.
אתה לא יודע איך מחשב עובד? לא צריך לדעת איך מחשב עובד להיות מתכנת. יש מספר מבייש לגמרי של מתכנתים שלא מבינים איך מחשבים עובדים...
אתה רוצה להבין איך מחשב עובד? שוב, מה מונע ממך מלקחת מדריך בשפה שאתה מבין ושמתאים לאופי שלך ולהתחיל ללמוד?
אלא מאי, אתה מבקש מראה מקומות למדריכים? אבל זה לא מה שביקשת...
-
הרצת בדיקת מהירות אינטרנט בלופזה אמור לעבוד:
let runCount = 0; const interval = 1000 * 60 * 30; // 30 min const results = []; function runTest () { $('.start-text')[0].click(); } function getResults () { const res = {}; ['ping-speed', 'upload-speed', 'download-speed'].forEach((sel) => { res[sel] = parseFloat($(`.${sel}`)[0].innerHTML) }); results.push(res); return res; } function getAverage (field) { return results.map(res => res[field]).reduce((p, c) => p + c, 0) / runCount; } function printStats () { console.log(` ========================= RUN COUNT: ${runCount} Average: PING: ${getAverage('ping-speed')} DOWNLOAD: ${getAverage('download-speed')} UPLOAD: ${getAverage('upload-speed')} ========================= `); } function loop () { if (runCount) { getResults(); printStats(); } runTest(); runCount++; } loop(); setInterval(loop, interval);לך לאתר speedtest.net ותדביק את זה בקונסול. כל
חמש דקותחצי שעה הוא יריץ מחדש את הטסט וידפיס את הממוצע העדכני.
ייתכן שאם הטאב לא בפוקוס הסקריפט יפסיק לעבוד, אני לא יודע.
בכל שלב אפשר לכתוב בקונסול את ה"פקודה"resultsולקבל את רשימת התוצאות המלאה.@מעלה-ומוריד אמר בהרצת בדיקת מהירות אינטרנט בלופ:
שאלתי ובקשתי אם יש מי שמוכן לכתוב או לשדך אותי למדריך לJS הנצרך.
אני מאמין שלא מדובר במשהו ארוך או מורכב, אני טועה?לא יודע. תחליט בעצמך אם 43 שורות עונה להגדרה של ארוך או מורכב.