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

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

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

dovid

@dovid
ניהול
אודות
פוסטים
10.2k
נושאים
184
שיתופים
0
קבוצות
2
עוקבים
32
עוקב אחרי
0

פוסטים

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

  • שליפת נתונים מאתר
    dovidD dovid

    @ארי כתב בשליפת נתונים מאתר:

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

    זה לא הכלי המתאים.
    בכל מקרה של בירור מה קורה בדף אינטרנט תשתמש בכלי הפיתוח של הדפדפן, הוא טוב בהרבה מההקלטה של נטפרי ומכיל המון פרטים שאין בהקלטה כלל.

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

    תכנות

  • JS הערות על שיקולים בלולאת for
    dovidD dovid

    @OdedDvir בהמשך למה ש@yossiz כתב,
    שים לב ש@צדיק-תמים הציע (ובצדק בהתחשב בנסיבות) להפוך את המערך, וגם ליצור עותק אם רוצים לשמור על הסדר במקורי... מדובר בהכבדה של אלפי אחוזים על המעבד והזיכרון, אלפי אלפי אבל בלתי מורגש ולא ראוי לייחס במקרים קלאסיים.
    זה מאוד רווח ושכיח בJS, כשהגעתי לJS (עם ניסיון C#) יצאתי מדעתי על כל כזה דבר.
    כיום אני חושב שבמידה מסויימת זה בריא, כי הגיוני להתעלם מזה. מתכנת חייב לסגל לעצמו גם את האפשרות להתמקד במטרה ולא בפרטי הביצוע (ניהול ברזולוציה נמוכה..). אני שילמתי יקר על השיעורים האלה, אבל עד היום לא למדתי לקח לגמרי, כי אידאולוגית אני חייב להישאר במחנה השפוי שאוהב את הקוד ולא משתמש בו כמו בדפיקה על מכונת פחיות תקולה.
    בעיית ביצועים שאני מציע להתייחס ולהיזהר ממנה גם בסקאלות חסרות משמעות, היא בעיה חבויה שלא ברורה מאליה. פה למשל כאשר הקוד יהפוך לאיטי וירצו לשפר אותו, הבעיה תקפוץ לעין מייד - כתוב במפורש את בזבוז הביצועים.
    עוד הערה, בC# גישה לאורך מערך נחשבת גישה למשתנה. במילה "מעריכים" שכתבת על length נשמע שזה פעולת חישוב, ולזכורני יש בזה אמת בJS (למרות שזה לא פונקציה) אבל בתכלס כמו שאמר @yossiz המנועים של javascript כיום מוחקים את ההבדל הזה לגמרי כנראה https://jsben.ch/4WrFK.

    תכנות

  • ריצה בלופ מהאחרון לראשון בJS
    dovidD dovid

    @שאול אני נהנה מהקוד שלך כי הוא מראה על תחכום, ועל ראש מתכנת.
    מה שבעצם חיפשת זה להעלות את המשתנה a באחד בכל סיבוב.
    אולם אתה מצהיר על הa בתוך הלולאה אז הוא לא יכול לזכור מה היה ערכו ב"גלגול" הקודם. צריך להכריז עליו מחוץ לולואה ועם let כי const זה לא בר עדכון.
    העלאה באחד של משתנה זה פעולה פשוטה , a = a + 1, או בדרך הקצרה a++; ככה:

    let a = 0
    for (e of s) {
      a++;
      console.log(s[s.length - a])
    }
    

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

    for (let a = 1; a < (s.length + 1); a++) {
      console.log(s[s.length - a])
    }
    

    בגלל הגמישות של לולאת for אז אפשר ישירות לעשות מניה הפוכה:

    const s = str.match(/.{1,10}(\s|$)/g);
    
    for (let i = s.length -1; i > -1; i--){
        console.log(s[i])
     }
    

    מה שעשיתי זה קביעת המשתנה i למספר הגבוה, וכל פעם לרדת אחד עד האפס.
    יש בעצם שלוש חלקים, אתחול (let i = s.length -1), תנאי (i > -1), ועדכון מונה (i--).
    האתחול קורה פעם אחת לפני הלולאה בכל מקרה, התנאי נבדק כל פעם לפני האיטרציה (כל "סיבוב") ועדכון המונה מתרחש אחריו.

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

    תכנות

  • לשם הידיעה, יש בעיה כעת בmailgun
    dovidD dovid

    https://status.mailgun.com/

    תכנות

  • SQL - GROUP BY HEBREW MONTH ?
    dovidD dovid

    להלן קוד linqpad שמייצר רשימה כזו (בחמישית השניה במחשב שלי)

    var HebrewCulture = System.Globalization.CultureInfo.CreateSpecificCulture("he-IL");
    HebrewCulture.DateTimeFormat.Calendar = new System.Globalization.HebrewCalendar();
    
    var startDate = new DateTime(2000,01,01);
    var listDays = Enumerable.Range(0, 50_000).Select(e => startDate.AddDays(e));
    var rows = listDays.Select(d => new
    {
    	GDate = d,
     	HebDate = d.ToString("d", HebrewCulture),
    	HebMonth = d.ToString("MMMM", HebrewCulture),
    	HebYear = d.ToString("yyyy", HebrewCulture),
    	HebYearInt = HebrewCulture.DateTimeFormat.Calendar.GetYear(d),
    	HebMonthInt = HebrewCulture.DateTimeFormat.Calendar.GetMonth(d)
    });
    
    Util.WriteCsv(rows, @"D:\allDates.csv");
    

    זה בין השנים 2000-2136

    עריכה: צירפתי את הקובץ לשימוש מי שרוצה
    allDates.zip

    תכנות

  • צאט בוט במייל | איך מומלץ לעשות?
    dovidD dovid

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

    תכנות

  • שליפת סיומת קובץ - לפי שם הקובץ (C#)
    dovidD dovid

    @mekev עוד הערות:

    • אין צורך לבדוק אם תיקיה קיימת. המתודה Directory.CreateDirectory בודקת את זה ובמקרה ויש היא פשוט לא עושה כלום.

    • Directory.GetCurrentDirectory() לא נחוץ. אתה יכול ישר לתת שם יחסי וההתחלה תהיה הCurrentDirectory, כלומר שני הקודים הבאים זהים:

    string originalPath = selectedFile.FileName;
    string path = Directory.GetCurrentDirectory();
    Directory.CreateDirectory(path + "\\contract");
    File.Copy(originalPath, path + "\\contract" + "\\" + idRow + fileExt, true);
    

    ובלי:

    string originalPath = selectedFile.FileName;
    Directory.CreateDirectory("contract");
    File.Copy(originalPath, "contract" + "\\" + idRow + fileExt, true);
    

    שים לב שבקוד השני הנתיב מתחיל ישירות מהמילה contract ללא פתיחה של "\". זה נקרא נתיב יחסי והוא מחושבן תמיד ביחס לCurrentDirectory.

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

    תכנות

  • פרומיסים לוקחים זמן?
    dovidD dovid

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

    timeout(() => console.log(1), 0); //המתנה של 0 מילישניות כלומר מייד, בעצם לא ממש מייד...
    

    זה נקרא קאלבק, כי זה אומר כשייגמר הזמן (אבל זה עכשיו!!) אזזזז תריץ את זה. אוקי אז כעת אני קודם עושה מה שמיידי! זה הראש של JS.

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

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

    תכנות

  • צימצום גודל של json
    dovidD dovid

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

    ob_start('ob_gzhandler');
    

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

    תכנות

  • חיבור מרכזייה לתוכנה מקומית (api <> c# winform)
    dovidD dovid

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

    מפה יש כמה דרכים:
    א. דרך פשוטה, לעשות טיימר בתוכנה שבודק שורות חדשות בטבלת הSQL, עדיף שהטבלה תהיה עם מפתח ראשי identity והשאילתה תשלוף TOP X עם ORDER BY ID DESC, ככה המסד לא מתאמץ כלל.
    ב. דרך נוספת פשוטה יחסית שראיתי שתוכנות עושות זה לבנות מאזין בתכונה לשינויים בתיקיה מסויימת (FileSystemWatcher) ובעת קבלת שיחה נכנסת השירות כותב לתיקיה זו קובץ ריק.
    ג. הדרך הכי יעילה זה לעשות גם מאזין בתוכנה, מסוג UDP broadcast (דוגמה), ואז התוכנה שרצה ברקע יכולה להודיע לכל התוכנות שהתקבלה שיחה חדשה.

    תכנות

  • שאלה פילוסופית עד איזו רמה של מיקרו אופטימיזציה האדם מצווה לדקדק
    dovidD dovid

    @yossiz אמר ב[שאלה פילוסופית עד איזו רמה של מיקרו אופטימיזציה האדם מצווה לדקדק]

    זקן מדע המחשבים דונלד קנות' אמר:
    We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%

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

    תכנות

  • עזרה - ביטול פיצול שורות מציק בPrettier
    dovidD dovid

    @צדיק-תמים אני חושב שהגדרת Print Width בערך גבוה תעזור.

    נ.ב. הביטוי מאוד ארוך אבל גם מאוד מסורבל.

    • כל מקום שיש A-Za-z זה אריכות מיותרת, אפשר A-z
    • במקום (http|https), אפשר פשוט לכתוב https? הסימן שאלה אומר שהs הוא רשות.
    • כל הסוגריים הראשונים עם ה?: בתחילתם, מיותרים,
    • במקום {0,1} אפשר לכתוב פשוט ? (זה בדיוק אותה משמעות).

    כל זה בלי לצלול למטרת הביטוי, שממבט מהיר נראה מסובך מאוד סתם.
    הביטוי הבא כנראה ייתן את התוצאה המקווה:

     let idC = url.match(/^https?:\/\/[^\/]+\/channel\/([\w_-]+)/)
    

    אם אני מנחש נכון שמדובר ביוטיוב, הייתי מציע לך להשתמש בביטוי הזה וזהו:

     let idC = url.match(/\/channel\/((?:UU|UC)?[\w_-]{21}[AQgw])/
    

    סליחה על הסטיה, לא התאפקתי. אל תלמד ממני ואם יש לך הערות/שאלות פתח נושא אחר או מייל אישי..

    תכנות

  • מישהו מכיר את היוצר של ----? (נערך)
    dovidD dovid

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

    תכנות

  • פונקציית setTimeout
    dovidD dovid

    @אבי-203 אתה יוצר בלולאה מיידית שלושה טיימרים, שאחרי 1000 MS יעשו משהו.
    אז אחרי 1000 MS כולם קורים מיידית.
    בשביל שכל אחד יקרה בסיום קודמו, צריך ליצור אותו אז (בתוך הקלאבק), או להעלות את מונה השניות בלולאה שכל טיימר יחכה כפול מקודמו, או להשתמש בsetInterval אם זה רלוונטי.

    תכנות

  • איך ליצור חיבור יחיד בין C# ל SQL
    dovidD dovid

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

    <connectionStrings>
        <add name="YOUR_NAME" connectionString="Data Source=XYZ;User ID=XYZ;Initial Catalog=XYZ;Password=XYZ;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" //>
    </connectionStrings>
    

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

    new SqlConnection(ConfigurationManager.ConnectionStrings["YOUR_NAME"].ConnectionString)
    

    אבל המצב הזה של כתיבת קוד שוב ושוב בכמה מקומות היא מזמינה בעיות נוספות מלבד בעיית הקונקשיין. בדיוק בשביל זה יש בC# מחלקות.
    אתה יוצר מחלקה, כזו למשל:

    public class ConnectToDb
    {
    	string connectionStr = ConfigurationManager.ConnectionStrings["YOUR_NAME"].ConnectionString;
    	
    	public IEnumerable<SqlDataReader> GetRows(SqlCommand command)
    	{
    		using (var conn = new SqlConnection(connectionStr))
    		{
    			conn.Open();
    			command.Connection = conn;
    			var reader = command.ExecuteReader();
    			while(reader.Read())
    				yield return reader;
    			
    		}
    	}
    }
    

    ואז להשתמש ככה בכל מקום:

    var dataGet = new ConnectToDb();
    foreach (var row in dataGet.GetRows(new SqlCommand("SELECT * FROM TABLE")))
    {
        Console.WriteLine(row["id"]);
    }
    
    תכנות

  • חיפוש ( {{טקסט}} ) במחרוזת והחלפתם.
    dovidD dovid

    @ש-ב-ח מנסיוני זה שאלה של עקשנים... וזה נפוץ בפרט בJS, שאיש הישר בעיניו יעשה ואם תגיד לו מה לעשות יגיד לך טול קורה מבין עיניך, הרי JS דארעא חד הוא.
    תאר לך שאתה רואה מתכנת שלא משתמש בif אלא בwhile עם יציאה בתוך הלולאה... זה שנכנס לך בראש שmap זה לעשות פעולה על כל איבר בלולאה וזה לא! זה לא סיבה להחזיק בו. מה רע לשנות הרגלים? יש המון רע בלהמשיך להשתמש בדבר לא מתאים: א. קריאות לעצמך ולאחרים (תאר לך שהיית עושה את כל התנאים בלולאה כנ"ל) ב. רמת קוד בעיני אחרים ג. הבנת קוד של אחרים אחרי שאתה רגיל לכתוב אחרת, ועוד ועוד.
    ואם כבר ביצועים, כן, זה לוקח קצת זיכרון ואפילו אולי מעבד מיותרים, אבל צריך טלסקופ להבחין בדברים האלה.

    תכנות

  • 13278106011170710 - איזה פורמט של זמן זה?
    dovidD dovid

    @yossiz אכן... אבל תנוחם בעבד לווה לאיש מלווה, גם לי לא קל.. תודה רבה!

    תכנות

  • רשימה יפה של מוצרים שמקרוסופט זנחה במהלך השנים
    dovidD dovid

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

    תכנות

  • איך לגשת לתיבת טקסט בwunform מתוך פונקציה
    dovidD dovid

    @אוריי בשפה מונחית עצמים כמו C# יש מושג של מחלקה, ויש מופע.
    מחלקה היא כמו תבנית עוגה, והמופע היא כמו העוגה. למחלקה אחת יכול להיות מופעים רבים.

    נניח ישנה מחלקה כזאת:

    class MyExample 
    {
         public int Name {get; set; }
    }
    

    אם תנסה לכתוב בקוד MyExample.Name תקבל שגיאה (An object reference is required for the non-static field, method, or property 'Name'), כי זו רק התבנית, אתה חייב ליצור מופע ככה:

    MyExample mofa = new MyExample();
    Console.WriteLine(mofa.Name);
    

    אבל, יש תבניות שיש להם כן חברים (שם כולל למאפיינים פונקציות וכל מה שיכול להיות במחלקה) משל עצמם ללא מופע, וממילא כן ניתן לגשת למאפיין ישירות. החברים האלו צריכים להיות מסומנים עם הציון static כלומר הערך אינו דינמי ומשתנה פר מופע, אלא אחיד לכל המופעים - הוא חלק מהתבנית.

    אתה ניגש לTextBoxCmd שהוא חבר במחלקה Form1. אבל הוא לא סטטי, כלומר הוא קיים רק אם תיצור מהמחלקה את העוגה, כלומר תעשה new.
    (מעניין שכתבת form1 באותיות קטנות וזה לא עשה לך שגיאה, לכאורה אם זה משתנה קיים אז זה צריך לעבוד לגמרי ואם זה לא זה צריך להיכשל עם שגיאה של מציין לא מוכר).

    תכנות

  • וורדפרס כמסד נתונים - מותר?
    dovidD dovid

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

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

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

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

  • אין לך חשבון עדיין? הרשמה

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