@אלישי אני מצטרף לכל מילה שלך, וזה בכלל לא אני עושה את כל השידרוגים...
הצוות של nodebb שזו המערכת עליה מושתת הפורום עושים כל מיני שינויים, ואני מידי פעם סה"כ "לוחץ על הכפתור" ומעדכן, על כל התופעות הלוואי שבעניין הטובות יותר והטובות פחות. חלק דברים זה התנגשות בין עיצובים מותאמים שהכנסנו בעבר לשיפורים ועיצובים חדשים, בקיצור יש עבודה לשפר, אבל שורדים

dovid
-
בעקבות השדרוגים הנעשים בפורום זה -
בנושא העיצוב...תרגעו ותנו לי לעבוד.
היום בערב תגידו הערות (שכנראה לא יהיה לי כח ליישם, מאה סליחות...).
הפורומים המובילים בארץ מגעילים נורא, כך שזה פוטנציאל -
הסבר על פורום תכנות המצומצם@Y-Excel-Access
ספציפית הקירטריון הזה - זה כבר לא באמת רלוונטי היום,
ואני אכן לא עומד על הדרישה הזו אם היא לא מולאה (והרבה לא ממלאים אותה).
אם זאת אני לא מסיר אותה, ואני רואה בעין חיובית את קיומה.
בשביל לתת רקע אישי, אתה צריך לתת אמון, ואתה צריך להרגיש שאתה משקיע וכביכול "מסתכן". כל הצטרפות לקבוצה אמורה להיות כזאת, אחרת זה אומר שזה "מה זה עולה לי".
נכון, זה גם סוג של כניעה. הלו, זה לא בית שלך, אתה מבקש כעני/עשיר בפתח. בדיוק ככה. משהו שמאוד קשה לישראלים.
עשית השוואה בין לספר את הרקע האישי במייל פרטי למנהל לבין חשיפת פרטי המנהל לכולם, זה לא אותו דבר. הפרטים האישיים כאמור אפילו לא נכנסים לראשי. הרבה כמובן מהחברים מכירים אותי ברמה אישית, אט אט במהלך השנים.בעיקרון הפורום הזה היה אמור להיות קבוצה מגובשת עם יחסים חברתיים קרובים, של אנשים עם אותו מקצוע, והרבה משותף. בפורום הקודם (code613m) שהיה מסונף לנטפרי אפילו היה מפגש פיזי פעם אחת. לצערי האחוה הזו ברוב המובן שלה זה לא קרה וקורה, אולי בגלל שנכשלתי באופן הנכון לבצע את הגיבוש הזה.
תכלס כיום כמעט אין סיבה להצטרף לפורום המצומצם - הפורום בחוץ נענה באותו מידה כמעט (הרבה חברים בכלל לא מבדילים בין השניים), ולגבי ההיסטרויה אין שמה שכיות חמדה כ"כ משמעותיות.
אני לא זנחתי לגמרי את תקוותי אבל אני לא עושה משהו מעשי כרגע בנידון.
נ.ב. בקשר אליך אישית, תבשר לי שפרצת כבר את תקרת שם הניק שלך.
-
פרסום מדריךאם יש לכם מדריך לפרסום, תוכלו לשלוח לי למייל המופיע בחתימה.
אם המדריך יימצא מתאים, הוא יפורסם בל"נ, ע"ש הכותב. -
תקלה כללית בשירות גוגל?שימו לב שגוגל בצעדים די דרמטיים ופתאומיים ומאוד לא אופייניים,
מנסים לחסוך במקום לאחרונה: הם הודיעו שהם ימחקו חשבונות לא פעילים של ג'מייל (זה לדעתי כמות אסטרונומית של מידע שייעלם מכדור הארץ), וגם הם הפסיקו של שירות העלאת תמונות בחינם (קרוב לודאי כמות עצומה כל יום).
כעת הם אומרים שהיה זיהוי שגוי של אי קיבולת, שזה ממש עושה לי תחושה של קשר בין הדברים.
מה יכול להיות? לא יודע. -
תקלה באתרבשעה האחרונה קרתה תקלה מצערת שנבעה משרשרת טעויות אנוש,
בעקבות התקלה נמחקו המון הודעות ואף משתמשים.
אנחנו עובדים על כך כעת, אתכם הסליחה. -
Regex - ביטויים רגולרייםRegex Flags
בRegex יש נושאים "פתוחים", ובדרך כלל השפות שמריצות Regex מאפשרות לקבוע "דגלים" כדי להחליט על האופן הרצוי (זה קרוי באנגלית בשמות flags או modifiers).
למשל, הגיוני שירצו שהRegex יתעלם מאותיות קטנות או גדולות, כלומר במקום לכתוב כל פעם את האותיות בשתי אופציות (כשזה a-z זה קל, אפשר לכתוב A-Za-z ואפילו פשוט A-z אבל כשזה מילים מסויימות זה מתחיל להיות קשה עד בלתי אפשרי, כי כל אות צריכה שתי אופציות), אנו נרצה שמבחינת הRegex אין הבדל כלל בין אות קטנה לאות גדולה. בשביל זה יש דגל בשם i, שהוא ראשית המילה insesetive = לא רגיש.
ניתן להחיל (חלק מה)דגלים רק על חלק מהביטוי (זה נקרא inline), זאת ע"י סימן שאלה שמייד אחריו באים הדגלים, נקודתיים, והחלק עליו יחולו הדגלים. למשל:(?i:javascript) Regex
זה ימצא javascript לא משנה עם אותיות קטנות גדולות או ערבוב שלהם, אבל יחייב שאח"כ יש Regex שהכל קטן והR גדול.
(ניתן מאידך להעביר דגלים על כל הביטוי כולו - שלא כחלק מהביטוי, צורת העברת הדגל למנגנון הRegex משתנה ממימוש שפה לאחרת. בJS בליטרל ניתן לכתוב מייד אחרי הביטוי (אחר הסלש את האותיות שמייצגות דגלים) בהמשך בע"ה כשאגיע למימוש בJS אראה דוגמה).
הדגלים הנפוצים הם:
g - פירוש, global והכונה, שאנו רוצים יותר מתוצאה אחת. לולי הדגל הזה, בשפות בהם הוא נתמך, חוזרת התוצאה הראשונה המתאימה בלבד, לחיסכון בביצועים. הg זה דגל שכמובן לא שייך על חלק מהביטוי.
m - מרובה שורות - multiline. זה משנה את התנהגות ה$^ במקום לתחילת וסוף הטקסט כולו לתחילת וסוף כל שורה ושורה בטקסט.
i - אי רגישות לאויות קטנות\גדולות, נתמך גם על חלק מהביטוי.
s - זה סיפור רציני. הפירוש של זה הוא single line, כלומר "ראה את כל הטקסט כיחידה, אחת, כאילו הוא בשורה אחת". לא, אין הכונה לשנות את התפקוד של \n או של $. אלא זה בא לשנות התנהגות ברירת מחדל משונה בRegex שהנקודה (שהיא הגוקר מספר אחד בRegex), אף שכוללת כל תו ביקום, לא כוללת קפיצת שורה! וזה אומר שחיפוש .* יחזיר שורות שורות במקום תוצאה אחת ארוכה. והחיפוש של A.*B לא יחזיר תוצאה אם ביניהם יש קפיצת שורה. הדגל הזה מתקן את זה למצב ההגיוני בו נקודה שווה כל תו בעולם כולל קפיצת שורה.
U (גדול!) - פירוש: Ungreedy - לא חמדן. זה דגל שהופך את התנהגות ה+ וה* וה{} ל"עצלנים", לוקחים כמה שפחות (זה שקול לסימן שאלה אחרי מציין הכמות שפועל בדומה לזה).(אגב, אחד המימושים המהירים ביותר של Regex הוא כנראה הpcre של php, ויש לו גם יותר דגלים שמראים שהRegex קיבל יחס ממש חם במימוש הזה).
בפעם הבאה אני מקוה להתחיל להראות איך לעבוד ספציפית בJS.
-
בקשה להמלצות על ערוצים/סרטונים של תכנות והמסתעףקודם כל אני משתף מה שעורר לי את הטריגר לעניין:
https://github.com/ErikCH/DevYouTubeList
לא להתלהב מידי, בנטפרי הכל סגור, אבל אני מפרסם את זה למקרה שמישהו מכיר מתוך זה ערוץ ממש טוב גם באנגלית כדי לחפש את סרטוניו בגוגל..
תודה מראש!נ.ב. ריפו על ספרים
https://github.com/EbookFoundation/free-programming-books -
מערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים@google3 סלח לי. יש לי תחושה שאתה עדיין אוחז בתירוצים ולא בבירור האמת. אז תן לעצמך סטירה בשמי... תפסיק עם התירוצים.
בא נניח כעת שזה לא תירוצים.
לא הבנתי בכלל את הארכיטקטורה שלך, אבל א: אתה יכול לשמור לקובץ טקסט פיזי, ב. אתה יכול לעשות שרת תור רק שהיה לך הסתייגות למקרה כשל.
אז הצענו לך את ההצעה הכי בעולם: מסד נתונים. זה בעצם הפתרון שהצעת עם התור, אבל לא אתה צריך לכתוב את הקוד שמנהל את זה, וזה משוכלל הרבה יותר ממה שהיית כותב, וגם תרשה לי לקבוע - אין שמה שום כשלים בדרך הטבע (אלא אם כן השרת מקונטבו למשל, גם זה אני לא בטוח).
מאוד קל לעשות ביזור לשם שרידות, ואז להסתבך בשאלה "הקטנה" של התיאום והסנכרון.
"מערכות גדולות" לא הכוונה היקף, אלא הכוונה חשיבות. אם חיים של אנשים היו תלויים בזה או משהו שמתקרב לכך, היינו באמת ממליצים לך על ביזור מסויים. ביזור אמיתי עושים עם מסד נתונים עם רפליקציות, או סתם מסד חירום (במקרה של כשל בשמירה במסד הראשי) בכל מופע.
ההצעה של הCSV לא מחייבת front-end. כמו שיש לינק לדרייב או הדומה לו, ימשיך להיות לינק ישיר לCSV שלא באמת קיים, PHP יטפל בניתוב הזה ויחזיר CSV עדכני מהמסד בכל בקשה. אם אתה מתכוון שהשרתים לא חשופים בכלל לרשת, אוקי, גם עוד לא התקנת מסד נתונים. שלוש צעדים נותרונ.ב. הקביעה שלי שאין כשלים היא מוגזמת אבל היא באה לתת איזון להגזמה הרבה יותר גדולה.
הסיכוי הכי גבוה לכשל בשרת מסד נתונים זה היעדר מקום בדיסק, זה יכול לקרות אם "הולכים לישון" למשך זמן בו יחס השמירה גדול ביחס למקום הפנוי. -
js - בעיה בקידוד CSV שיתמוך בעברית באקסלהקוד קצת מסורבל וטיפונת שגוי, אז שיפרתי אותו:
function exportToCSV() { const rows = [...document.querySelectorAll('#table-report-sales tr')]; const singleRow = (e) => [...e.querySelectorAll('th, td')].map(x => x.innerText).join(','); const csvContent = '\uFEFF' + rows.map(singleRow).join('\n'); const link = document.createElement("a"); link.setAttribute("href", 'data:text/csv; charset=utf-8,' + encodeURI(csvContent)); link.setAttribute("download", "sales_report.csv"); document.body.appendChild(link); link.click(); }
-
איך להמנע מהזרקת SQLאני מנסח שני כללים בלבד:
א. ערנות אנושית: להסתכל תמיד על החלקים הדינמיים בשאילתה (כמו הפרמטר ID) ולתת לב מאין המידע בא, ומה ההשלכות למקרה של מידע שגוי או עויין.
ב. שימוש בכלים הנכונים: לעבוד לפי הספר של הספריה/טכנולוגיה (במקרה שלך, הדרך שספריית MSSQL מציעה עבור שתילת קלט דינמי בשאילתה בצורה בטוחה).נתחיל מהכלל השני.
בשונה מכל תחום בתכנות בהם זה נחמד להיות מקורי ולממש לבד, באבטחה אתה צריך כמה שפחות לממש בעצמך.
מה שהצעת עם הרג'קס ועטיפת הגרש הוא ניסיון מימוש עצמי של טיהור קלט.
אתה דומה למישהו שמנסה לחשוב מאיפה הגנב ייכנס, מוצא רעיון בראש, סוגר את הפרצה ונרגע. הבעיה היא שהרעיון הוא אחד מתוך מאה! איך תדע שעברת על כל הרעיונות?
למשל לענייננו, לעטוף בגרש לא עוזר כלום. אם התוקף שלנו שתל גרשים בתוך המחרוזת, למשל הקלט הזהid=123'; update users set pass = 123 where name = 'admin' OR name = '
יעבוד מצויין עם עטיפת גרש מכל צד.
אז מה נשאר? ניקוי עם רגקס. ברג'קס תוודא שאין מה? אם תוודא שאין גרשים למשל, תצטרך להתמודד עם קלטים לגיטמיים שמכילים גרשים! מה, אסור להכניס לטבלה שם רחוב עם גרש?
מה הפתרון? להכיר את הדרך שהספריה/טכנולוגיה שאתה עובד איתה הכינו למקרה הזה, חכמת ההמונים היא מעולה כדי לסגור פרצות. במקרה של MSSQL הם ממליצים להשתמש בES6 Tagged template literals שזה בדיוק מה שעשית רק שאתה הפכת הכל לטקסט לפני שזה עובר למתודה, בשביל שהמתודה היא זו שתחליט איך להשתיל את הטקסט צריך לעשות ככה:app.get('/api/jobs', (req, res) => { const req = pool.query`SELECT * FROM users where id = ${where_string}`; req.then(result => res.send(result.recordset)); req.catch(err => console.error(err)); });
שים לב שהטקסט מגיע מייד אחרי שם הפונקציה query בלי סוגריים! זה נקרא tag function וזה הדרך הנוחה לתת לספריית הMSSQL את השליטה בטיהור הפרמטרים. יש דרך אחרת וזה שימוש מפורש בפרמטרים, זה טיפה יותר טרחה.
יש לשים לב שהכלל השני לא עוזר כלום בלי הראשון.
למשל אם הid הוא מספר תקין והכל בסדר אבל הוא פונה לרשומה שאסור למשתמש לגשת/לעדכן אליה/אותה? כל מקום שיש נתונים דינמיים בשאילתה זה אמור להדליק את מנגנון העירונות שאמור לבדוק תמיד את פונטציאל הסכנה במקרה שפספסנו משהו והנתונים חופשיים, וכשלב ב' אחרי אומדן הסכנה שחזור הדרך בהם הנתונים מתגלגלים, וכמה הדרך מאובטחת.כל יתר הדברים שהזכרת, הינם לדעתי לא מועילים או לא נצרכים.
ברור שזה פרקטיקה טובה לצמצם הרשאות, אבל זה לא נדרש (זה בעיקר טוב נגד באגים או טעויות אנוש קשות). -
עזרה באקסל@one1010 אני סוגר פה את הנושא,
ואתן לך כמה כללים לגבי נושאים דומים:
א. זה צריך להיות בגומלין, כי זה לא קשור בכלל לדיון על איך אלא בקשת תוצאה.
ב. נוסח השאלה צריך שלא להיות כלל להיות בסגנון "איך עושים", אלא "בבקשה מי מוכן לעשות/לכתוב לי" על כל הוריאציות.
(הנוסח האמיתי הוא מי מוכן לעשות לי עבודה קטנה באקסל וכודמה).
ג. חובה עליך לעשות כל מאמץ כדי לחסוך את מאמץ מהעונה או שאלות של הלוך ושוב.
זה אומר תמיד לצרף קובץ אלא אם כן יש סיבה שמונעת ממך והסיבה זו היא לא הטרחה או המאמץ, ויש לציין אותה כדי לפייס את המתייחסים.בהצלחה.
-
איך לומדים לבנות תוכנה@יעקב-מ-פינס כתב באיך לומדים לבנות תוכנה:
איזה כלים אני צריך בשביל לכתוב תוכנה (תוכנות לכתיבת קוד, תוכנות לבדיקת קוד, תוכנות לקימפול וכו'), איזה שפת תכנות כדאי לי ללמוד, על איזה סדר גודל של פרוייקט כדאי לי ללכת בתור התחלה וכו'
כל הרשימה הזו היא טפל.
העיקר זה התכנות ולא הכלים/שפות/איך מתחילים.
אך אכן כל מדריך שמלמד לתכנת לבוש על שפה כל שהיא ולעיתים גם עם כלי/טכנלוגיה כל שהיא, אבל זה רק לבוש למושג תכנות, שזה הרגלת הראש לנתינת הוראות לוגיות למחשב ולהשיג עם זה תוצאות רצויות, והיכרות עם "נימוסי" והרגלי התקשורת הזו שזה אותו דבר ב99% אחוז בכלל האפשרויות שעומדות בפני מפתח תוכנה.
אני ממליץ להתחיל מJavaScript לדפדפן.
(JS היא דה פקטו השפה הכי שימושית כיום, וגם אריכטקטורת הפיתוח בצד לקוח כיום היא כה משמעותית שלא נראה לי שיש מישהו שזה יהיה עבורו חומר שמיותר לו להמשך).
זה אומר למצוא מדריך שאומר איך לעשות שלום עולם בHTML+JAVASCRIPT ומכאן לאט לאט להתקדם.
(הכלי שמייד תצטרך זה VSCODE, אבל בשלב זה הוא נושא חסר משמעות לגבי רכישת היכולות תכנות). -
linux rm-rf on win@ש-ב-ח כתב בlinux rm-rf on win:
סליחה על ההטרדה.
שאלה טובה מוסיפה לאיכות הפורום, קל וחומר כשיש אחריה תשובה.
-
אלגוריתם: סינון מערך (#C)@קומפיונט
אם אתה רוצה את האלמנט ממש, אז הייתי עושה ככה:var testList = new[] { new { id = 1, version = 1}, new { id = 1, version = 5}, new { id = 2, version = 4}, new { id = 3, version = 3}, new { id = 3, version = 2}, new { id = 3, version = 1}, new { id = 1, version = 12}, new { id = 1, version = 155} }; var distinct = testList.GroupBy(l => l.id).Select(x => x.OrderByDescending(y => y.version).First());
אם מעניין אותך הערכים של הגירסה ומזהה ואתה לא צריך את האלמנט עצמו הייתי עושה יותר פשוט:
var distinct2 = testList.GroupBy(l => l.id).Select(x => new { maxVersion = x.Max(y => y.version), id = x.Key});
-
המלצה / בקשה על מהות הפורום תכנות@Y-Excel-Access אמר בהמלצה / בקשה על מהות הפורום תכנות:
כבר כך אני לא הבנתי מה מודל הרווח באתר הזה שמבחינתי הוא רק מפעל חסד
כמו מודל הרווח שלך שאתה עוזר פה.
זה כולם פה אותו דבר, זה כיף לעזור במה שקל לך.
זה גם מצוה וגם מחכים ומעשיר, וגם תרפיה בעבודה. -
JS ביטוי רגולארי לפיצול כתובת לעמודות רחוב בית/דירה ועיר@חוקר יש לי תוכנית מסובכת לומר לך מה לעשות,
ואז אני נזכר שאני אישית משתמש בAPI של גוגל כאני צריך כאלה דברים.זה ממש פשוט, והרבה יותר מדוייק
https://maps.googleapis.com/maps/api/geocode/json?key=XXXXXX&language=he&result_type=street_address&address=הרצל 17התוצאה נראית ככה:
{ "results" : [ { "address_components" : [ { "long_name" : "17", "short_name" : "17", "types" : [ "street_number" ] }, { "long_name" : "הרצל", "short_name" : "הרצל", "types" : [ "route" ] }, { "long_name" : "תל אביב-יפו", "short_name" : "תל אביב-יפו", "types" : [ "locality", "political" ] }, { "long_name" : "מחוז תל אביב", "short_name" : "מחוז תל אביב", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "ישראל", "short_name" : "IL", "types" : [ "country", "political" ] } ], "formatted_address" : "הרצל 17, תל אביב-יפו, ישראל", "geometry" : { "location" : { "lat" : 32.0616741, "lng" : 34.7703751 }, "location_type" : "ROOFTOP", "viewport" : { "northeast" : { "lat" : 32.06301403029149, "lng" : 34.7716624802915 }, "southwest" : { "lat" : 32.0603160697085, "lng" : 34.7689645197085 } } }, "place_id" : "ChIJv09_XJxMHRURWh4zBRBM2y0", "plus_code" : { "compound_code" : "3Q6C+M5 תל אביב-יפו, ישראל", "global_code" : "8G4P3Q6C+M5" }, "types" : [ "street_address" ] } ], "status" : "OK" }
אם אתה מתעקש על אלגוריתם,
אני מניח שכל הערים נמצאות בקצה המחרוזת.
אתה צריך לטעון את כל הערים למערך, ולבדוק עם endsWith אם המחרוזת מסיימת בטקסט הרצוי. אם יש רק תוצאה חיובית אחת זו העיר, אם יש יותר מאחת, צריך לעבור לבדוק אם הרחוב קיים שם וזה על ידי רג'קס שמוריד כל מספר וסימן אחורה, עד הטקסט הקודם ואז לולאה על הרחובות המתאימים לאותה העיר. בקיצור זה לא עבודה נחמדה. -
אקסס משותף@ארי סליחה בכפליים, לא באתי להעיר/לפגוע בך, סה"כ הסברתי את הקושי ואת לגיטימיותו (והדגשתי שאני מסכים עם השאלה שלך והיא גם לגיטימית).
אני שמח מאוד שאתה בקבוצה וכאברך כולל בטח שאתה תורם לאיכותה. -
פה זה פורום תכנות. לא IVR, לא אסטריסק!שימו לב שנושא השאלה שלכם יהיה תכנותי ככל האפשר,
והשתדלו לפרט בדיוק את הרקע: פלטפורמה נושא וכדומה.
שאלות ש"בונות" על ידע של מכרים מתוך הפורום עושות תחושה לכל היתר שהם לא בתמונה...אנא זהירותכם.
-
עיצוב כריכה לחוברתאני ממליץ שתפנה ל מקצועות.com