דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
ח

חוקר

@חוקר
הפסקת מעקב מעקב

הפורום כעת לקריאה בלבד, לקריאה נוספת.

אודות
פוסטים
1.3k
נושאים
201
שיתופים
0
קבוצות
0
עוקבים
5
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • מחלקה פשוטה וקלה ל MySQL ב node
    ח חוקר
    תכנות

    כתבתי מחלקה פשוטה מאוד וקלה לשימוש עבור טיפול בשאילתות ונתונים בMYSQL.
    מי שרוצה להשתמש, בשמחה.
    למי שיש מה להאיר, להעיר או לתקן, בחדוה.
    המחלקה משתמשת בספריה הפשוטה של mysql ומחריזה פרומיס.
    המחלקה מיישמת את הפונקציה של מניעת הזרקת SQL (לא יודע איך קוראים לזה בשם המקצועי).
    ניתן לבצע שאילתות פשוטות ולקבל את הנתונים, ניתן לבצע הכנסת נתונים, עדכון נתונים, וצור או עדכן נתונים.
    בכל שאילתה זה פותח וסוגר את החיבור, ולא משאיר חיבור פתוח (כך קיבלתי מרבותי, שלא להשאיר חיבור פתוח).
    להלן המחלקה, אשמח לתגובתכם.

    const mysql = require( 'mysql' );
    module.exports = class Database {
        constructor( config ) {
            if (config.database === undefined || config.database === '' || config.database === null){
                config.database = config.user;
            }
            this.config = config;
        }
        query( sql, args ) {
            let connection = new mysql.createConnection( this.config );
            return new Promise( ( resolve, reject ) => {
                connection.query( sql, args, ( err, rows ) => {
                    if ( err ){
                        connection.end();
                        return reject( err );
                    }else{
                        connection.end();
                        resolve( rows );
                    }
                } );
            } );
        }
        selectSQL(query, args){
            return this.query(query, args);
        }
        insertSQL(data, table){
            let query = 'INSERT  INTO `' + table + '` (';
            for (let d_key in data){
                query += '`' + d_key + '`, ';
            }
            query = query.replace(/, $/, '');
            query += ') VALUES (';
            for (let d_key in data){
                query += '?, ';
            }
            query = query.replace(/, $/, '');
            query += ')';
            let args = [];
            for (let d_key in data){
                args.push(data[d_key]);
            }
            return this.query(query, args).then(rows => {
                if (rows.insertId && rows.insertId !== 0){
                    return rows.insertId;
                } else{
                    return null;
                }
            });
        }
        insertORupdateSQL(data, table){
            let query = 'INSERT  INTO `' + table + '` (';
            for (let d_key in data){
                query += '`' + d_key + '`, ';
            }
            query = query.replace(/, $/, '');
            query += ') VALUES (';
            for (let d_key in data){
                query += '?, ';
            }
            query = query.replace(/, $/, '');
            query += ')';
            query += ' ON DUPLICATE KEY UPDATE ';
            for (let d_key in data){
                query += "`" + d_key + "` = VALUES(`" + d_key + "`), ";
            }
            query = query.replace(/, $/, '');
            let args = [];
            for (let d_key in data){
                args.push(data[d_key]);
            }
            return this.query(query, args).then(rows => {
                if (rows.insertId && rows.insertId !== 0){
                    return rows.insertId;
                } else{
                    return null;
                }
            });
        }
        updateSQL(data, table, idcolum, id, addstr = ''){
            let query = 'UPDATE `' + table + '` SET';
            for (let d_key in data){
                query += ' `' + d_key + '` = ?, ';
            }
            query = query.replace(/, $/, '');
            query += ' WHERE `' + idcolum + '` = ' + " ? " + addstr;
            let args = [];
            for (let d_key in data){
                args.push(data[d_key]);
            }
            args.push(id);
            return this.query(query, args).then(rows => {
                return rows;
            });
        }
    };
    
    
    

    להלן דוגמה פשוטה למימוש
    שימו לב, באם הפרמטר database ריק, הוא מקבל את הערך של user.

    const config = {
        host: "host",
        user: "user",
        password: "password",
        database: ""
    };
    const Database = require('./db.js');
    let database = new Database(config);
    database.query('CREATE TABLE `test` (`test1` int(5) NOT NULL, `test2` int(5) DEFAULT NULL, `test3` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `test4` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,  PRIMARY KEY (`test1`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci').then(rows => {
        database.insertSQL({'test1' : '35', 'test2' : '31', 'test3' : '12', 'test4' : 'test',}, 'test').then(rows => {
            database.updateSQL({'test2' : '22', 'test3' : 'aa'}, 'test', 'test1', '35').then(rows => {
                database.insertORupdateSQL({'test1' : '40', 'test2' : '10', 'test3' : 'bb', 'test4' : 'sql_test',}, 'test').then(rows => {console.log(rows);})
            })
        })
    });
    

    insertSQL מקבל אובייקט של שמות עמודות = הערך שלהם, ומשתנה של שם הטבלה.
    updateSQL מקבל אובייקט של שמות עמודות = הערך החדש שלהם, ומשתנה של שם הטבלה, משתנה של עמודת ה PK ומשתנה של הערך של עמודת הPK של השורה שעליה יש לבצע את השינויים.
    insertORupdateSQL הוא כמו insertSQL רק שבאם הערך של PK כבר קיים, זה דורס את הנתונים הקודמים לשורה זו.


  • שאלות של מתחיל - מקצועי ב nodejs
    ח חוקר
    תכנות

    @אהרן אמר בשאלות של מתחיל - מקצועי ב nodejs:

    חייב לומר שאתה חתיכת השראה, איך ידע יחסית מועט ובנישה מאוד ספציפית יכולות לפרנס אדם בכבוד + שותפות בפרויקטים גדולים וידועים.

    הכל ע"י סיעתא דשמיא.
    בסך הכל לא למדתי תכנות, אלא התחלתי עם מערכת פשוטה של שיעורים עבור מסגרת מצומצמת, בהמשך החסידות ביקשו את עזרתי למערכת מכירת מקומות, מכירת מוצרים וכדומה, והכל תחת המודולים של ימות המשיח.
    כאשר פותח שלוחת API התחלתי לנסות את עצמי בדברים בסיסיים בPHP, ולא ע"י לימוד PHP מעמיק (זה הגיע כמובן עם הזמן) אלא ע"י חיפוש נקודתי בדיוק מה שרציתי לעשות, יחד עם הבנת הקודים ומה שבין הקודים, שראיתי בדוגמאות וכדומה.
    ב"ה הגעתי להישגים גדולים, ולדעתי בגלל צורת הלימוד המוזרה שלי.
    כמו שראית, כשאני רואה דוגמת קוד אני משתדל להבין גם את מה שמונח בין המילים ולא רק את המילים..
    ובעזה"י גם בנוד נתקדם בצורת הלימוד שלי, עם כי ללמוד שפה חדשה לאחר הכרת שפה אחרת שהיא שונה בתכלית, מצד אחד קל יותר, מצד שני קשה יותר לשנות כיון, ושאלותי יוכיחו..
    בכל מקרה תודה על הסבריך, ננסה להתחיל להתקדם..


  • ידידי קול הלשון - תוכניות ורעיונות..
    ח חוקר
    תכנות

    @avi_av אמר בידידי קול הלשון - תוכניות ורעיונות..:

    @מוגן אמר בידידי קול הלשון - תוכניות ורעיונות..:

    יש התקדמות בענין?

    אני מעוניין לקדם את זה.
    מקווה שנצליח

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


  • mysql הוספת אינדקס על עמודת varchar(25) בטבלת עם 30,859,912 שורות
    ח חוקר
    תכנות

    @לעזור-לכולם כתב בmysql הוספת אינדקס על עמודת varchar(25) בטבלת עם 30,859,912 שורות:

    @חוקר
    אם כבר אז לשבת בבוקר
    יתכן שיש לך גם המון קליינטים מחו"ל

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

    בכל מקרה חשבתי א"כ לעשות שכפול של השרת ולבצע שבת אחת טסט ולראות במוצ"ש שהכל תקין, ורק אם כן לבצע זאת שבת הבאה על השרת האמיתי


  • חילוץ ערכים מjson בjs
    ח חוקר
    תכנות

    @ענן
    data[0].user


  • מעוניין ללמוד לכתוב קוד VBA לשליחת מייל מאקסס עם המון נתונים מתוך שאילתא. תעזרו לי?
    ח חוקר
    תכנות

    @sivan22 אמר במעוניין ללמוד לכתוב קוד VBA לשליחת מייל מאקסס עם המון נתונים מתוך שאילתא. תעזרו לי?:

    אנגלית היא חובה בשביל מתכנתים

    אני הייתי כותב "פלוס גדול" ולא חובה.
    אני מתכנת עם הישגים יפים מאוד ב"ה ולא מבין אנגלית.
    אבל בהחלט שזה קשור ג"כ לחלק השני שכתבת

    @sivan22 אמר במעוניין ללמוד לכתוב קוד VBA לשליחת מייל מאקסס עם המון נתונים מתוך שאילתא. תעזרו לי?:

    ויכולת לימוד לבד (אוטודידקט) היא המפתח להצלחה.

    זה יכול מאוד לפתור את בעיית הלא להבין אנגלית..


  • שליחת.מייל מחשבון הגימייל ב PHP
    ח חוקר
    תכנות

    קח בחשבון נקודה אחת, בעבר היה ניתן להתחבר בקלות לג'ימייל מספריות SMTP בקלות על ידי שם המשתמש והסיסמא של המייל.
    מתאריך 30/05/2022 מסיבות אבטחה גוגל חסמו אפשרות לגשת לחשבון גוגל ע"י SMTP עם הסיסמא של החשבון.
    אז ייתכן ואתה מנסה עם הסיסמא הראשית של החשבון ולכן זה נכשל.
    הכי קל, אם מוגדר/מגדירים למייל אימות דו שלבי גוגל מאפשר לך להפיק סיסמא לאפליקציה שזה סיסמא שיש לך שליטה לבטל אותה ונראה לי שיש לזה הרשאות מוגבלות, אבל ניתן לשלוח עם זה מיילים ללא בעיות.
    אם יש לך בעיה לעשות אימות דו שלבי זה מאוד קשה.
    אפשר ע"י יצירת פרוייקט בגוגל קלאוד ולהתחבר ע"י מתן הרשאות מהמייל המבוקש לשליחת מיילים אבל הפרוייקט שאתה פותח לפני בדיקה של גוגל זה מוגדר על מצב טסטים וההרשאה נמשכת עד 7 ימים וכל שבע ימים זה נתקע.
    רק עם יש לך חשבון בגוגל וורקס זה יותר קל כי אז ניתן לתת הרשאה פנימית בארגון לשליחת מיילים הפרוייקט של הארגון ושם גם במצב טסטים אין תוקף להרשאה שניתנה.
    יש על זה חומר כאן בפורום, חלק מזה בפורום הסגור נראה לי


  • עדכון משתנה בתנאי
    ח חוקר
    תכנות

    @יוסף-בן-שמעון אמר בעדכון משתנה בתנאי:

    אני דוקא מתחבר לדרך הלימוד הזו,

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


  • שליחת POST לנדרים+ ב VBA
    ח חוקר
    תכנות

    שיטת השליחה בנדרים השתנתה מ GET ל POST בלבד.
    עליך לבודד את הנתונים Mosad=123456&ClientName=&Adresse=&Phone=0512345678&ClientId=&CardNumber=4580458045804580&Tokef=1219&Amount=520&Tashloumim=12&Groupe=&Avour=Yemot&Token=&CVV=123&Zeout=123456789&Currency=1&MasofId=Online מה URL ולשלוח את המידע בPOST


  • עברית בsql
    ח חוקר
    תכנות

    @ivrtikshoret אמר בעברית בsql:

    mysqli_query($sql, "SET NAMES ‘utf8’");

    תנסה להחליף את השורה 25

    mysqli_query($sql, "SET NAMES ‘utf8’");
    

    ל

    mysqli_set_charset($conn ,"utf8");
    

    ושים לב שאתה מריץ אותו לפני הפקודה של mysqli_query


  • JS - אימות מספר חשבון ישראלי
    ח חוקר
    תכנות

    ואגב להלן הקוד הנוכחי שלי ב PHP.
    אם יש כאן מה לתקן, אשמח..

    <?php
    
    var_dump(accountValidation(52, 177, 111111));
    
    function accountValidation($bank, $branch, $account): bool
    {
    
        $bank = str_pad((string)($bank ?? 0), 2, '0', STR_PAD_LEFT);
        $branch = str_pad((string)($branch ?? 0), 3, '0', STR_PAD_LEFT);
        $account = (string)($account ?? 0);
    
        if (strlen($branch) > 3 || strlen($bank) > 2) return false;
    
        if ($bank == 10 || $bank == 13 || $bank == 34) {
            $maxLen = 8;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
    
            $counter = (int)(substr($account, 6, 2));
    
            $r = $branch . $account;
    
            for ($i = 0, $mul = 10; $i < 9; $i++ , $mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $result = $counter % 100;
        return $result == 90 || $result == 72 || $result == 70 || $result == 60 || $result == 20;
    
      } else if ($bank == 12) {
            $maxLen = 6;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $branch . $account;
    
            for ($i = 0,$mul = 9;$i < 9; $i++ , $mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        return $div == 0 || $div == 2 || $div == 4 || $div == 6;
      } else if ($bank == 4) {
            $maxLen = 6;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $branch . $account;
    
            for ($i = 0,$mul = 9;$i < 9; $i++ , $mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        return $div == 0 || $div == 2;
      } else if ($bank == 11 || $bank == 17) {
            $maxLen = 9;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $account;
    
            for ($i = 0,$mul = 9;$i < 9; $i++ , $mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        return$div == 0 ||$div == 2 ||$div == 4;
      } else if ($bank == 20) {
            $maxLen = 6;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            if ((int)$branch > 400) $branch = str_pad((string)((int)$branch - 400), 3, '0', STR_PAD_LEFT);
    
            $r = $branch . $account;
    
            for ($i = 0,$mul = 9;$i < 9; $i++ , $mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        return $div == 0 ||$div == 2 ||$div == 4 ||$div == 6;
      } else if ($bank == 31 || $bank == 52) {
            $maxLen = 9;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $account;
    
            for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        if ($div == 0 ||$div == 6) return true;
        $counter = 0;
        $r = substr($account, 3);
    
        for ($i = 0,$mul = 6;$i < 6;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
       $div = $counter % 11;
        return $div == 0 || $div == 6;
      } else if ($bank == 9) {
            $maxLen = 9;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $account;
    
            for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        return ($counter % 10) == 0;
      } else if ($bank == 22) {
            $maxLen = 9;
            if (strlen($account) > $maxLen) return false;
            $account = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $account;
            $counter += (int)($r[0]) * 3;
            $counter += (int)($r[1]) * 2;
    
            for ($i = 2,$mul = 7;$i < 8;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        return (11 - ($counter % 11)) == $r[8];
      } else if ($bank == 46) {
            $maxLen = 6;
    
            $account1 = $account;
            if(strlen($account1) > $maxLen)
                $account1 = substr($account, strlen($account) - $maxLen);
            $account1 = str_pad($account1, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $branch  . $account1;
    
            for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        $special = [ 192, 191, 183 ,181, 178, 166, 154, 539, 527, 516, 515, 507, 505, 503  ];
    
        if ($div == 0 || ($div == 2 && in_array($branch, $special))) return true;
    
        $maxLen = 9;
        if (strlen($account) > $maxLen) return false;
            $account2 = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
    
        $counter = 0;
        $r = $account2;
    
        for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        if(($counter % 11) == 0) return true;
    
        $account3 = substr($account, 3);
    
        $counter = 0;
        $r = $account3;
    
        for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        return ($counter % 11) == 0;
      } else if ($bank == 14) {
            $maxLen = 6;
            $account1 = $account;
            if(strlen($account1) > $maxLen)
                $account1 = substr($account, strlen($account) - $maxLen);
            $account1 = str_pad($account1, $maxLen, '0', STR_PAD_LEFT);
            $counter = 0;
    
            $r = $branch . $account1  ;
    
            for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        $div = $counter % 11;
    
        $specialA = [  385, 384 , 365, 347 ];
        $specialB = [ 361 ,362 ,363 ];
    
        if($div  == 0) return true;
        if(in_array($branch, $specialA) && ($div == 0 ||$div == 2)) return true;
        if(in_array($branch, $specialB) && ($div == 0 ||$div == 2 ||$div == 4)) return true;
    
        $maxLen = 9;
        if (strlen($account) > $maxLen) return false;
            $account2 = str_pad($account, $maxLen, '0', STR_PAD_LEFT);
    
        $counter = 0;
        $r = $account2;
    
        for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        if(($counter % 11) == 0) return true;
    
        $account3 = substr($account, 3);
    
        $counter = 0;
        $r = $account3;
    
        for ($i = 0,$mul = 9;$i < 9;$i++ ,$mul--)
          $counter += (int)($r[$i]) * $mul;
    
        return ($counter % 11) == 0;
      }
    
        return false;
    
    }

  • ישיבה על קברו, בלי סיסמא?
    ח חוקר
    תכנות

    @חוקר אמר בישיבה על קברו, בלי סיסמא?:

    כבר לפני כמה שעות השלמתי את הפיתוח של סיסמא

    בס"ד בוצע עדכון גרסה בנדרים פלוס
    וכעת יש דרישת סיסמא
    b2a0b670-2597-4ee7-88a1-4de87e53f8d8-image.png
    מקווה שניתן לחזור לשגרה.
    בסופו של דבר זו הייתה קפיצה לא רעה לעמוקים, כעת כבר העשרתי את עצמי עם מנגנון חסימה..


  • ישיבה על קברו, בלי סיסמא?
    ח חוקר
    תכנות

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


  • ניהול קאש למאות קריאות במקביל
    ח חוקר
    תכנות

    @nigun
    מה שאני עשיתי בNODEJS הוא כך.
    יוצר משתנה (מעל הבלוק של השרת, דהייני משתנה שנמצא בסקופ הראשי והוא יהיה זמין לכל בקשות הHTTP ולא נוצר לכל בקשה מחדש).
    וכאשר אני מקבל בקשה אני בודק, באם המשתנה עדיין לא מוגדר, או שהוא מוגדר אך ה lestTime שלו הוא מעל שניה אחורה, אני מגדיר מחדש את המשתנה עם פרומייז ובתוכו מבוצעות פעולות החישוב, המחזירות בסיומם את הערך העדכני כולל עדכון ה lestTime לתאריך ושעה הנוכחים.
    באם הוא מוגדר והוא עודכן לפני פחות משניה הוא מחזיר את הערך העדכני.
    מה שאני מרוויח: הפעולה מבוצעת לכל היותר פעם אחת בשניה לכל הבקשות יחד, וברגע שעברה שניה מהעדכון ויש בקשות חדשות, הן ממתינות את הכמה מאות מילי שניות לביצוע החישוב, וכל בקשה נוספת מצטרפת להמתנה, וברגע שהחישוב הסתיים כולם מקבלים יחד את התשובה, והבקשות הבאות באותה שניה כבר מקבלים תשובה מוכנה ללא המתנה.
    אני לא יודע איך לתרגם אותו לשפה שלך, אך זה הכיון.

    let myData = {};
        'GatStatistics' : function(DinerId, QuestionId){
            if (!myData.Statistics[DinerId]){
                myData.Statistics[DinerId] = {};
            }
            if (!myData.Statistics[DinerId][QuestionId] || moment().diff(myData.Statistics[DinerId][QuestionId]['lestTime']) > 1000 ){
                myData.Statistics[DinerId][QuestionId] = database.selectSQL('SELECT COUNT(`id`)...', [QuestionId, DinerId]).then(row => {
                    let StatisticsData = {
                        'General' :  {'true' : 0, 'false' : 0},
                    };
    ...// פעולות חישוב שונות..
                    return myData.Statistics[DinerId][QuestionId] = {'lestTime' : moment(), 'StatisticsData' : StatisticsData, 'PercentStatisticsData' : PercentStatisticsData, 'PercentStatisticsDataHe' : PercentStatisticsDataHe};
                }).catch(error => {
                    console.error(error);
                    return {'status' : 'error'};
                });
            }else {
                return new Promise((resolve, reject) => {
                    resolve(myData.Statistics[DinerId][QuestionId]);
                })
            }
            return myData.Statistics[DinerId][QuestionId];
    }
    
    //הגדרות השרת שמטפל בבקשה
                if (Action === 'GetStatistics'){
                    return myData.GetStatistics(DinerId, myData.Users[DinerId].QuestionId).then(res1 => {
                        res.send(res1);
                    }).catch(error => {
                        res.send({'status' : 'error'});
                        console.error(error);
                    });
    

    בהצלחה


  • איטיות ב SUM ב MYSQL
    ח חוקר
    תכנות

    @יוס אמר באיטיות ב SUM ב MYSQL:

    מזהה התלמיד

    לפי השאילתה נראה שהאינדקס בטבלת המבחנים אמור להיות על pupil.
    זה אמור דבר ראשון להקל על השאילתה. עזרה ראשונה..
    במקביל תוכל גם לשנות במקום לולאה של שאילתאות עבור הסכום של כולם, תוכל לעשות שאילתה כזו:

    SELECT SUM(`score`), `pupil` FROM `score`GROUP BY `pupil`
    

    כך תקבל בשאילתה אחת טבלה ובה 2 עמודות, עמודת הסכום ועמודת התלמיד, לכל תלמיד הסכום שלו.


  • איטיות ב SUM ב MYSQL
    ח חוקר
    תכנות

    לכאורה שאילתה עם gruop by תעשה לך את העבודה ללא לולאה.
    ובכל מקרה, אם יש בעיות אז לדעתי זה באינדקס.
    תבדוק שיש לך אינדקס על העמודה של מזהה התלמיד או משהו כזה איך שזה שמור אצלך.
    תבדוק ותעדכן.
    בהצלחה


  • מה המחיר של המרת דיבור לטקסט של גוגל
    ח חוקר
    תכנות

    @dovid אמר במה המחיר של המרת דיבור לטקסט של גוגל:

    ואני אגיד לכם סוד נוסף.
    אני משלם לכמה חברות כל חודש וביניהם גם גוגל קלאוד.
    ומעולם לא עשיתי משתמש חדש בשביל ה300 דולר הללו.
    ולמה זה סוד? כי החכמה היא להתרכז באיך להרויח את המליון הבא ולא באיך לחסוך את הנסיעה באוטובוס.

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


  • תמחור פרוייקט
    ח חוקר
    תכנות

    @nigun אמר בתמחור פרוייקט:

    טיפ שנתן לי מתכנת עם קצת יותר ניסיון בתחום ממני (9 שנים + העסקת פרלנסרים אחרים)
    כל פעם שאני רושם שעות עבודה
    לכתוב מה עשיתי בזמן
    ובסוף אפשר לעבור על זה
    ולראות מה היה מיותר, ולא ראוי שיהיה על חשבון הלקוח.
    זה גם עוזר לעתיד אם רוצים לתמחר גלובלי, לדעת כמה זמן לוקח כל דבר.

    תוכל לעשות זאת בקלות עם התוסף שציינת למעלה
    https://toggl.com/


  • אתר חדש להתראות צבע אדום עם התרעות מקדימות וסינון לפי ערים
    ח חוקר
    גומלין - כללי

    כתב באתר חדש להתראות צבע אדום עם התרעות מקדימות וסינון לפי ערים:

    באתרוג לא מתחבר.

    אציין שהיתי מול התמיכה של אתרוג והצגתי את הבעיה המדויקת, למשל הסינון קוטע כתובות והם טיפלו. כעת תקין
    4670c01f-8c39-4a1b-adda-62f4b875f355-image.png 6096c54d-d1d4-4e20-8ea7-2cbff771b08f-image.png


  • כולל בירושלים לאברכים מבוגרים
    ח חוקר
    גומלין - כללי

    אשמח למידע אודות כולל לפני הצהריים:

    • איזור ירושלים/רמות
    • מכניס אברכים בגילאי 50-60
    • אוירה חסידית/ירושלמית
    • לימוד עדיף יורה דעה (אח"כ: אורח חיים/סדר מועד)
    • לא כ"כ משנה גובה המילגה

    עבור אברך תלמיד חכם בגיל 50-60 שיושב ולומד במשך היום מאז ומתמיד, אלא שהכולל שלו נסגר לפני תקופה והמשיך ללמוד עם החברותא שלא במסגרת כולל, רק שזה קצת נשחק ויש רצון להיכנס למסגרת מחייבת ואוירה טובה.
    תודה מראש

  • 1 / 1
  • התחברות

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום