מאמרים בנושא "לינוקס"

האם אתה מוכן לבינאום ולוקליזציה?

19/04/09, מאת ארתיום; תחת נושאים: לינוקס, פיתוח, תכנה ומחשבים, C++‎‏, icode‏‏Un; ‏6 תגובות

הכנתי שאלון קצת שמאפשר לכם לבדוק… האם אתם מוכנים לכתיבת תכנה שתהיה מוכנה להתאמה לתרבויות שונות?

  1. אני רוצה לייצג מחרוזת, כ־char *some_text. מהו המידע שחסר לי?
  2. יש לי מחרוזת wchar_t *text או String text ב־Java, אני רוצה לקחת את התו הראשון שלה:
     wchar_t c=text[0]; // C
     Char c=text.charAt(0); // Java
    
    האם זהו קוד נכון?
  3. אני כותב את הקוד הבא:
     if n==1:
         print translate("You have one aplle")
     else:
         print translate("You have %d apples") % n
    
    מה לא בסדר בקוד הזה?
  4. מה לא בסדר בקוד הבא:
     #include <stdio.h>
     #include <time.h>
    
    int main()
    {
            time_t now_t=time(NULL);
            struct tm *now=localtime(&now_t);
            char str_time[32];
            strftime(str_time,sizeof(str_time),"%d/%m/%y",now);
            printf("Today is %s\n",str_time);
            return 0;
    }
    
  5. מהו גודל הזכרון הנדרש לשמירת תו unicode בודד?
  6. מהו גודל של wchar_t? (למתכנתי C++/C)‏?
  7. מהי גודל של תו unicode בשפת התכנות שאתה אוהב?
  8. מהו קידוד של מחרוזת (unicode) בשפת התכנות/toolkit שאתה אוהב?
  9. מה הבדל בין utf-8,‏ utf-16, ‏utf-32?‏
  10. מהו אורך התו הארוך ביותר ב־utf8?‏
  11. בניתי ספרייה עם שתי פונקציות בלבד. מה לא בסדר בקוד הבא (שתי בעיות לפחות)?
    extern Char32 to_upper_char(Char32);
    void to_upper(String str)
    {
            for(int i=0;i<str.size();i++)
                    str[i]=to_upper(str[i]);
    }
    
  12. מה לא בסדר בקוד הבא:
    def print_error_message(message):
        print translate("Error occured: ")+"“"+translate(message)+"”"
    
  13. מה לא בסדר בקוד הזה:
    <?php $rtl_langs=array("he","ar","pa"); ?>
    ...
    <div <?php if(in_array($lang,$rtl_langs) echo 'dir="rtl"'; ?> >
    ...
    </div>
    
  14. אני רוצה לחתוך את הטקסט בצורה יפה, כך שזה לא ייחתך באמצע המילה: מה לא בסדר בקוד הבא:
    // Cut nice pice of text
    wstring cut_nicely(wstring const &orig,int n)
    {
       if(orig.size()<=n) return orig;
       return orig.substr(orig.find_first_of(L" \r\n\t\f",n));
    }
    
המשך...

יותר מחשבים יותר ביצועים?

10/04/09, מאת ארתיום; תחת נושאים: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, CppCMS; ‏0 תגובות

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

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

לאחרונה הצלחתי להשיג גישה זמנית לרשת מחשבים חזקים במיוחד: Intel עם 4 ליבות שרצים ב־2.4GHz ו־4GB של זכרון. כך יכולתי לבדוק את מנגנון ה־cache המבוזר בעובד מעל TCP/IP ולהבין כמה אני מפסיק כתוצאה מביזור:

#   Local  Distributed
1   5,500   5,500
2  11,500   9,500
3  15,200  13,500

הטבלה מציגה את מספר הדפים בשניה שהמערכת wiki שבניתי מסוגלת לספק תחת הנחה של פגיעה 100% ב־cache (בגלל אילוצי הגישה לא יכולתי לשנות את הפרמטר). מספר השרתים הוא בין 1 ל־3 ומנגנוני ה־cache הם: cache המקומי הלא־מסונכון ו־cache המבוזר המסונכרן באופן מלא.

אפשר לראות, מחשב בודד מסוגל לייצר כ5 וחצי אלפי עמודים בשניה והמספר הזה הולך וגדל בצורה קרובה ללינארית עם שימוש ב־cache מקומי (כצפוי). שימוש ב־cache המבוזר מעל TCP/IP מקטין את מהירות הכוללת של המערכת אך עדיין שיפור ביצועים נשאר קרוב ללינארי.

יש לציין שהצלחתי למלא כמחצית מרוחב הפס של רשת 1GBit.

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

שדרוג ל־Lenny

25/02/09, מאת ארתיום; תחת נושאים: תכנה חופשית, לינוקס, תכנה ומחשבים; ‏3 תגובות

הגיע זמן לשדרג ל־Lenny, אומנם הוא הגיע כבר לפני הרבה זמן אבל Lenny עוד לא הגיע ;). אקדים ואומר, זה היה אחד השדרוגים הפשוטים ביותר שיצא לי לעשות אי פעם.

  • כששדרגתי Breezy ל־Dapper השדרוג נתקע באמצע ומצאתי מערכת לא שמישה, בלי חיבור לאינטרנט, אם כי בסוף הצלחתי להחלץ מזה.
  • כששדרגתי Sarge ל־Etch בגלל התנגשויות חצי מהחבילות הוסרו כולל Office ו־Gnome והייתי צריך להחזירם באופן ידני, שלא לדבר על כמה פעולות אחרות שהיה צריך לעשות.
  • שדרוג ל־Lenny היה לפי הכתוב… פשוט לשדרג.

קודם כל עברתי על הוראות שדרוג. מי שחושב ש־apt-get dist-upgrade ועושה את העבודה טועה!

תהליך שאפשר לסכם אותו בקצרה בשני שלבים:

  • שדרוג aptitude לחדש.
  • ביצוע aptitude dist-upgrade.

אם לא תלכו כך לא תצליחו, חייבים קודם את ה־aptitude החדש.

בנוסף לבעיות הרגילות בשדרוג, היו לי עוד כמה נקודות לציון:

  1. היה לי רק 1G פנוי במחיצת / שלא הקל על התהליך
  2. אני משתמש גרסת vserver של הקרנל, כך שעבורו אין דרייבר nvidia כחבילה.

נתחיל בסיפור

המשך...

לא רק GCC, או הניסיון הקצר עם קומפיילר של Intel.

22/02/09, מאת ארתיום; תחת נושאים: לינוקס, תכנה ומחשבים, C++‎‏; ‏0 תגובות

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

רקע

אף אחד לא אוהב Vendor Lock In אפילו עם מדובר במשהו טוב כמו GCC או Linux. לכן, אני מוודא כי CppCMS ירוץ גם על BSD וגם על Solaris. אבל עם קומפיילר היו לי קצת יותר בעיות. יש מעט מאוד קומפיילרים טובים והנפוץ בין כולם הוא כמובן GCC.

הרבה זמן היו לי תהיות לגבי זה, אפילו ניסיתי להתקין SUN Studio על OpenSolaris ב־Virtual Box, אבל… בינתיים Solaris לא מתנהג יפה אפילו עם GCC.

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

המשך...

גם לחלשים מגיע... או CppCMS במערכות משובצות מחשב.

21/02/09, מאת ארתיום; תחת נושאים: לינוקס, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏; ‏2 תגובות

בעיות ביצועים של מערכות web יכולות להופיע לא רק עקב עומסים כבדים אלא גם בגלל מערכות מוגבלות. פה שפות מקומפלות כמו C/C++/Pascal‎ יכולות לתת מענה מצוין. אבל כרגיל חסרים כלים: Klone זה לא הרבה יותר ממשהו דמוי PHP ברק C.‏‏ Wt הוא בנוי כמו GUI.‏ Pascal? מישהו בכלל זוכר שפה כזו ;).

לכן CppCMS יתמוך גם בצרכים של מערכות משובצות מחשב והן:

  • צמצום תלויות למינימום.
  • עבודה מהירה.
  • גודל קובץ ריצה מינימלי.

לכן, לקחתי CppCMS ועשיתי לו ניתוח — זרקתי את כל מנגנוני ה־cache, ביטלתי דחיסת zlib ובכל צמצמתי תלות ב־boost::iostreams, העפתי מודי עבודה מיותרים ב־embedded.

בנוסף, אם המפתח רוצה לבנות גרסת cgi אז בכלל, העפתי את כל הקוד שמטפל ב־thread-pool וכמובן גם בפרוטוקולים כמו scgi/fcgi. ובכן, התכנה הצטמצמה לגודל של 500Kb בלבד. שזה כ־10%–20% מגודל משערך PHP אופייני.

ובכך שוחררה גרסת CppCMS 0.0.4 שכוללת תמיכה במערכות משובצות מחשב.

עמודים

נושאים

עולם הסלסה

לינוקס ותוכנה חופשית

פרוייקטים שלי

פוסטים מומלצים