5 ש"ח
500 ש"ח אם כולל תקיעת אצבע לעין הספאמר.
5 ש"ח
500 ש"ח אם כולל תקיעת אצבע לעין הספאמר.
ראשית אבקש מ @dovid וכרישים נוספים שיתקנו אותי באם אני שוגה (כולל עריכה במקור).
ריאן דאהל יוצר nodejs עבר להשתמש עם go המתאים יותר לעומסים כבדים ותחביר מאוד נוח לא-סינכרוני ומקביליות.
לפני תקופה חזר להשתמש בnodejs ונחרד ממה שעשה
אמנם האיסינכרוניות בקריאות I\O היה רעיון נהדר, אבל חסרים חלקים קריטיים משלימים.
לכן הוא התחיל לעבוד על deno, עם 3 מטרות עיקריות:
jsconf2018.pdf
https://thenewstack.io/node-js-creator-blasts-node-js-offers-a-secure-typescript-based-alternative/
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
מה הוא ה setInterval וה x שהכנסת אליו, והסיומת 2000, כנראה הכוונה לפורט, אך לא הבנתי את כל התחביר כאן.
שתהיה בריא, @magicode עונה לך על אריכטורה ואתה שואל שאלות בסיס-בסיסיות על פונקציות ותחביר שרק אזכור שלהם מעלה טרליון תשובות בגוגל?!
נראה שבציטוט את זה אני מכיר מPHP
שברח לך, הסברת הכל..
לעצם הענין setInterval
מפעיל פונקציה שמעבירים אליו כארגומנט, בכל פרק זמן. בדוגמא כאן אתה יכול לראות ש setInterval
קיבל 2 ארגומנטים 1 פונקציה 2 ערך 2000 שהוא ההפרש בין הפעלה להפעלה. במקרה הזה הפונקציה (ארגומנט 1) יופעל בכל 2000 מילי סקנד.
כמו"כ בהטחה השניה .then(json => המשתנה json תמיד יהיה בעצם התשובה של ההבטחה הראשונה, לא משנה איזה שם אני תוקע שם?
לא. של ההבטחה הקודמת.
אסביר קצת יותר על הפרומיסס בכלל
fetch('https://www.charidy.com/some/api')
פשוט מכיל קוד (בערך)
return promise(response)
כלומר data עטופה בפרומיס, לכן
fetch('https:...').then(res => res.json())
שווה ל:
promise.then(res => res.json())
then
הוא מתודה של promise
then
מקבל ארגומנט פונקציה (בדוגמא שלנו זו הפונקציה res => res.json()
), אליה היא מעבירה את ה-DATA שהוכנס לתוך הפרומיס הנוכחי, בדוגמא שלנו הארגומנט שמכיל את ה-DATA שהוא בעצם התשובה שהתקבלה מהכתובת\האתר, הוא res
(או כל שם אחר שנותנים לו).
במקרה הזה, fetch מחזיר לנו את המידע יחד עם מתודות נוספות שמבצעות המרות שונות למידע, אחת מהם היא json שמבצעת המרה של המידע לפורמט json ושוב מחזירה אותו עטופה בפרומיס
לכן לפונקציה שתכניס לתוך הthen
השני יוכנס הDATA בתצורת json. כלומר
.then(res => res.json()).then(json =>
שווה ל
newPromise.then( dataFormatJson => you code that can usedataFormatJson value)
התחביר של המחרוזת: אני רואה שהשתמש ב מה התקן שלו, מתי הוא משמש? מתי עדיף "" או '' או.
כמו"כ אני רואה ששמת שם ${}
אתה יכול להרשות לעצמך להתעלם מסכמות חדשות ליצירת מחרוזות. תשתמש רגיל:
"string" + value + "string"
חייב לומר שאתה חתיכת השראה, איך ידע יחסית מועט ובנישה מאוד ספציפית יכולות לפרנס אדם בכבוד + שותפות בפרויקטים גדולים וידועים.
@nigun אמר במעבר לGO למה? איך? ומתי?:
@dovid
אם יורשה לי לשאול (כמובן אתה לא חייב לענות)
איך אני אמור לדעת מי כאן סך הכל בנה כמה אתרים חמודים בוורדפרס ומי ארכיטקט ראשי של IBM?
אם אתה לא מסוגל להעריך את יכולות המשתתפים כאן לפי היסטורית ההודעות שלהם, בשביל מה שאלת כאן?
אתה 'סותר' את התשובות עם הנחות שגויות אותם אתה שולף תוך כדי תנועה ("אסינכרוני זה דבר איום", מביא הוכחה 'גרועה' מ @חוקר שהוא הוכחה לגמרי הפוכה, בנה מע' די מורכבת וקריטית (תרומות) שהושמשה מיד עבור אלפי משתמשים, והשיג המהרה של 1000%, וכל זה בלימוד תוך כדי תנועה כשלפני זה לא היה לו מושג ירוק בנוד) - במקרה הטוב, או שכבודו פשוט 'לא מסתפק' בתשובות, ויוצא 'צודק'.
מערכות היום נהיות יותר ויותר תלויות תקשורת, והברזלים מרובי ליבות, ללא א-סינכרוניות ומקבליות איך תקבל מהירות משמעותית?
הכלים החדשים מהירים יותר במידה רבה בגלל שינוי צורת החשיבה שהם מביאים איתם.
בנתיים נראה שאתה רוצה שהכל ישאר כשהיה, ו'קסם' כלשהו יעשה עבורך את השדרוג.
@yossiz להבנתי (נתחרה על אי הבנת הנקרא), ההסבר שלך לא הוסיף לי שום הבנה על יתרונות השפה.
@nigun אמר במעבר לGO למה? איך? ומתי?:
GO מהיר הרבה יותר ולפעמים אותו דבר כמו NodeJs ככה שלא הרווחתי כלום מקוד האסינכרוני
זה לא דבר והיפוכו
המהירות ב-GO מושגת במידה רבה משימוש רחב בא-סינכרוניות ומקביליות מאוד מובנה וזורם עם הקוד.
קצת מוזר שאתה נכנס לדקויות של הפרשים בין נוד לGO בזמן שהוא קטן הרבה הרבה יותר מההפרש מהירות הריצה שבין PHP לשניהם.
@magicode אמר בידידי קול הלשון - תוכניות ורעיונות..:
אני מוכן לעזור בלתת עצות
אז העצה הראשונה שלי
https://electronjs.org/
יש לך נסיון אדיר, והעצות שלך מוערכות מאוד!
נשמח אם תמשיך לעקוב.
בשפת JS, עובד בדפדפן וב-NODEJS.
מראים טסטים שהם מנצחים כל מתחרה בפער ניכר.
https://github.com/nextapps-de/flexsearch
אשמח שמי שבודק א"ז יכתוב כאן התרשמות.
ביצועים - אוחז ששפה דינאמית זה רעיון נהדר, ולא מוכרחים לשלם ע"ז מחיר בביצועים, כשהוא שוקל להחליף את המנוע מתחת בgo או אחר
ככל שאני מבין נכון, התכנון הוא:
להכניס מקביליות מובנית בכל הקודים הא-סינכרונים במהותם (פרומיסס, fs, תקשורת, timeOut וכדו') או קודים שיורצו שפירוש ע"י פונקצית ()run,
ואת זה להשיג ע"י הורדת התלות ב-V8 למינימום (רק פיענוח ה-js שיכתוב המשתמש) ולמודולים רבים ככל האפשר להשתמש ב- go (הספיק להתחרט בשביל לא לנהל 2 אוספי זבל עצמאיים) rust & tokio שהיא גם שפה סופר מהירה בשל היותר סטטית (לא רק), גם מכילות כבר מודולים רבים שאפשר 'לגשר' אותם בקלות, וגם מובנה בהם המקביליות ביעילות ובקלות (הבדיקות נעשות הן כש-rust רץ בתהליך נפרד לגמרי והן כשהוא מורץ בתהליכון בשביל להסיק מה מהיר יותר).
עד כמה זה ניתן, וכמה זה מייעל את המהירות, הוא ידע אחרי שה'גשר' יוכח כיציב ומהיר מספיק, גנרי ומאוד נוח לשימוש.
ניהול חסימות ושיתוף זכרון בין תהליכים זה אתגר לא קל (בנתיים יש כבר גירסה שעובדת לא רע, ובמקום שיתוף זכרון קלאסי, מנהל-תור-הפעולות יחזיק אצלו את קטע הזכרון וישתף אותו כל פעם עם התהליך שצריך אותו תוך כדי שמירה שתהלים אחר לא פועל עליו במקביל).
יצירת דפדפן חדש (ככל שאני מבין נכון).
איזו מבוכה על התרגום השגוי. הנכון:
תאימות לדפדפן - שהAPI יהיה תואם ככל האפשר (בשאיפה למוחלט, כמעט בקנאות) ל-API של הדפדפן; קוד שרץ בדנו יוכל לרוץ בדפדפן.
אמור מעתה @yossiz איש אשכולות.
@clickone
מוערכת מאוד התרומה שלך כאן גם תוך כדי ניהול מגה-פרויקטים!
תשתמש ב-let במקום ב-var
באופן כללי המשתנים כן מאוכלסים לפי הסדר
אא"כ הם מקבלים מידע ממקור א-סינכרוני שלא בהכרח מחזיר תשובה
בשביל זה יש פרומיס, שמבצע את הצעד הבא אחרי שמתקבלת התשובה לנוכחית.
לחדשים שלא מבינים במה מדובר
מצורף לינק לתחילת הדיון.
@ארכיטקט אמר בכת מיסיונרית נכשלה שוב בניסיון המי יודע כמה להעביר אותי על דתי:
זו לא היתה הבטחת בחירות
זכור לי משהו על הבטחת בחירות
לכתוב פה פעם בשבוע
@ארכיטקט
מזמן אמרו זקני ציון
אנשים כמוך עוזרים למתכנתים לשרוד במקצוע.
בקיצור, תבוא יותר, זה תמיד יהיה פתרון לבעיה שלנו.
דוד
עם אנשים כמוך
משיח כבר צריך להגיע!
פורסם במקור בפורום CODE613 ב31/03/2017 13:30 (+03:00)
הורדת סרטים מיוטיוב
כאן יש קוד של mat שמביא את הלינקים להורדת הסרט ברזולוציות השונות
אני (נאמר..) עטפתי את זה עם כפתור הורדה מסודר שמופיע בכל דף יוטיוב
(function() {
function setList() {
if ("undefined" == typeof ytplayer) {
alert('אין מידע');
return;
}
var formats = {
'5': {
'ext': 'flv',
'width': 400,
'height': 240
},
'6': {
'ext': 'flv',
'width': 450,
'height': 270
},
'13': {
'ext': '3gp'
},
'17': {
'ext': '3gp',
'width': 176,
'height': 144
},
'18': {
'ext': 'mp4',
'width': 640,
'height': 360
},
'22': {
'ext': 'mp4',
'width': 1280,
'height': 720
},
'34': {
'ext': 'flv',
'width': 640,
'height': 360
},
'35': {
'ext': 'flv',
'width': 854,
'height': 480
},
'36': {
'ext': '3gp',
'width': 320,
'height': 240
},
'37': {
'ext': 'mp4',
'width': 1920,
'height': 1080
},
'38': {
'ext': 'mp4',
'width': 4096,
'height': 3072
},
'43': {
'ext': 'webm',
'width': 640,
'height': 360
},
'44': {
'ext': 'webm',
'width': 854,
'height': 480
},
'45': {
'ext': 'webm',
'width': 1280,
'height': 720
},
'46': {
'ext': 'webm',
'width': 1920,
'height': 1080
},
'59': {
'ext': 'mp4',
'width': 854,
'height': 480
},
'78': {
'ext': 'mp4',
'width': 854,
'height': 480
},
};
var info = ytplayer.config.args.url_encoded_fmt_stream_map.split("&").map(function(e) {
e = e.split("=");
return {
key: e[0],
value: decodeURIComponent(e[1])
};
});
var all = [];
var current = {};
info.forEach(function(i) {
current[i.key] = i.value;
if (i.key == "url") {
all.push(current);
current = {};
}
});
var element = document.getElementById('watch7-main');
function printDwonload(info) {
var a = document.createElement('a');
var format = formats[info.itag];
a.target = "_blank";
a.href = info.url;
a.innerText = "הורדה " + format.ext + " " + format.width + "x" + format.height;
a.download = "";
a.style.display = "block";
element.appendChild(a);
}
all.forEach(function(i) {
if (!i.itag) return;
printDwonload(i);
});
}
var element = document.getElementById('watch7-main');
//var a = document.createElement('a');
var a = document.createElement('button');
a.type = "submit";
a.id = "download-submit";
a.onclick = "setList";
a.addEventListener('click', setList);
a.target = "_blank";
//a.href = 'setList()';
a.innerText = "הורדה ";
a.download = "";
a.style.display = "block";
a.style.color = "#fff";
a.style.padding = "15px 25px";
a.style.background = "#1ab394";
a.style['background-color'] = "#428bca";
a.style['border-color'] = "#357ebd";
a.style['font-size'] = "18px";
a.style.top = '30px';
a.style.right = "auto";
a.style.left = "auto";
a.style.margin = "20px";
element.appendChild(a);
})();
פורסם במקור בפורום CODE613 ב17/11/2015 13:52 (+02:00)