מאמרים בנושא ‏תכנה ומחשבים‏.

Sqlite - עבודה עם WAL.

ב־יום ראשון, 4 בדצמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים; ‏0 תגובות

אומנם גרסה 3.7 של Sqlite שוחררה יותר מלפני שנה, לא רבים שמו לב לשורה הקצרה ברשימת השינויים:

Added support for write-ahead logging.‎

זאת שיטת עבודה שכל בסיס נתונים מודרני עובד איתה, לעומת שיטת העבודה הרגילה של Sqlite3 והיא ניהול "לוג לשחזור לאחור" - Rollback.

כיצד קובץ Rollback עובד. בכל פעם שרוצים לעשות שינויים בדף של קובץ בסיס הנתונים, רושמים את הערכים בקודמים בקובץ במיוחד. כך שאם ניפול, נדע בדיוק איך לשחזר את המצב הקודם. אז בכל טרנזקציה Sqlite3 מבצע את הפעולות הבאות: רושם את הכל המחיקות לקובץ rollback ומבצע fsync עליו, לאחר מכן מעדכן את בסיס הנתונים הראשי ומוודא כי הנתונים הגיעו לדיסק עם fsync נוסף ובסוף מוחק את קובץ ה־rollback. מה שחשוב כאן זה שקריאת מערכת הפעלה fsync, מתבצעת פעמיים: פעם על קובץ לוג ופעם על הקובץ הראשי. הקריאה הזו מבטיחה שהמידע הגיע לדיסק פיזי והיא כמובן מאוד יקרה מבחינת הזמן.

השיטה החדשה שמומשה בגרסה 3.7, עובדת עם קובץ WAL -‏ Write Ahead Log. כל שינוי נרשם לקובץ הלוג והקובץ המקורי נשמר ללא שינויים. מה שחשוב כאן שכדי להבטיח שרידות מספיק לקרוא fsync - פעם אחת בלבד עבור קובץ WAL. הטרנזקציות הבאות יוסיפו עוד מידע לסוף הקובץ. אחת לכמה זמן sqlite3 מעביר את כל השינויים לקובץ בסיס הנתונים המקורי ומאפס את קובץ הלוג. יותר מזה, כיוון שהקובץ המקורי נשאר ללא שינויים אז טרנזקציות קריאה יכולות לרוץ במקביל לטרנזקציות כתיבה.

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

כך שאם אתם משתמשים פעילים של Sqlite3 - תבדקו את האופציה

PRAGMA journal_mode=WAL;

היא יכול לשפר משמעותית את היישומים שלכם.

בנוסף עם תמיכה ב־WAL, התווספה עוד אופציה מעניינת שמאפשרת להאיץ פעולות עדכון של בסיס נתונים בצורה משמעותית בלי לפגוע בקונסיסטינטיות שלו. כלומר לוותר על ה־D של ACID.

אם מגדירים

PARAGMA synchronous=NORMAL

אז במצב של WAL ה־fsyncים שמבטיחים את ה־D -‏ Durability ייקראו רק פעם ב־checkpoint ולא כל טרזקציה. אם המחשב קורס (חשמל/חומרה) אז אנחנו נאבד מספר טרנזקציות אחרונות אבל בסיס הנתונים יישאר תקין, במילים אחרות, אנחנו ניפול בגבול טרנזקציה, אבל לאו דווקא הטרנזקציה האחרונה. שיטה זו מאפשר להגדיל מספר עדכונים מכמה עשרות בשנייה לכמה אלפים.

גם חלק מבסיסי הנתונים הגדולים תומכים באפשרות העבודה ב־ACI ללא D.

למשל, ב־PostgreSQL ניתן להגדיר אופציה synchonous_commits=off ברמת הקשר. אז עדכון הלוג יתבצע ללא fsync ורק פעם בשניה יתבצע עדכון מלא. בבסיס הנתונים MySQL אפשר להגדיר את זה בעזרת אופציה innodb_flush_log_at_trx_commit=2, אבל ההגדרה הזו תעבוד ברמת שרת MySQL כולו ולא רק ברמת הקשר או בסיס הנתונים הספציפי.

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

מי הרס את שולחן העבודה שלי?

ב־יום חמישי, 1 בדצמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, תכנה ומחשבים; ‏15 תגובות

פעם הייתי משתמש מרוצה של KDE 3. יצא KDE 4 הזדעזעתי, לא התרגלתי, לא הצלחתי להתאים אותה לדרישות שלי. עברתי ל־Gnome 2 שאז כבר התקדם בצורה משמעותית. ואז יצאה Unity הבלתי נסבלת ומיד עברתי ל-Gnome 3. אומנם הזדעזעתי קצת פחות ואפילו הצלחתי להגיע למשהו סביר, אבל בכל זאת לא הייתי מרוצה. אז ניסיתי XFCE בגרסה האחרונה. אני חושב שאשאר שם.


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

ניסיתי לאחרונה 3 סביבות שנחשבות ה"מתקדמות ביותר" היום: KDE 4,‏ Unity וגם Gnome 3 - בשלושתן מצאתי מספר בעיות שהפריעו לי:

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

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

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

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

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

הגדרות והתאמה אישית: חוץ מ־KDE 4 שמכיל תפריט הגדרות עשיר במקום ברור (כמו תמיד) כולם מאוד צמצמו את יכולת ההגדרה של הסביבה. קשה יותר להתמצא, יש פחות אופציות פחות ערכות נושא.

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

הכל היה מאוד גמיש והיה קל לשנות את ההגדרות. למשל, כשעבדתי עם KDE3 הגדרתי מיקום הפנלים דומה לזה של Gnome עם שינויים והתאמות שונות.

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

גם הרבה אפשרויות שהיו לי נעלמו: לא הצלחתי למצוא דרך הגדיר "מקש חם" למסוף ב-KDE. אין תחליף ל-kkbswitch שמאפשר עבודה נוחה עם יותר משתי שפות. כל סביבת עבודה ממציאה דרך יצירתית ולא ברורה משלה לבצע הגדרות. לדוגמה, ב-Gnome 3 צריך לעשות alt-click כדי להגיע להגדרות פנלים. ב-KDE-4 זה סיוט לנסות להוסיף או לסדר כלים על הפנל וכן הלה.

מחשב נועד לעבודה: השינויים לא צפויים ורכיבים שנעלמים פוגעים באופן ישיר ביכולת העבודה שלי. למשל Gnome 3 לא ייבא את הסרגל עם לחצני התכנה שלי מ-Gnome 2. דברים שאתה משתמש בהם ביום יום נעלמו.

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

אני חושב שמפתחים התחילו לשכוח ש-Gnome/KDE/Unity הם בסה"כ קליפה - "Shell". הם צריכים לעזור לנו לעבוד - לא להפריע. הם לא הרכיב המרכזי אלא רכיב חשובה אבל משני.


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

נשברתי והתקנתי XFCE. מיד מצאתי דרך להגדיר כמעט כל מה שאני צריך, בצורה פשוטה וישירה. הסביבה מהירה בטירוף - וממש לא מדובר במחשב חלש. היא נוחה כמו ש-Gnome 2 היה. היום היא בהחלט חזקה ועונה על דרישות המשתמש מצד אחד. מצד שני, היא לא מביאה את הגישה המצועצעת של הסביבות המודרניות - היא עושה רק את מה שצריך לעשות ותו לא.


עדכונים

מסתבר שלינוס עבר ל־XFCE‏.

ציטוט:

I'm using Xfce. I think it's a step down from gnome2, but it's a huge step up from gnome3. Really.‎

מספר ימים עם Unity

ב־יום חמישי, 1 בדצמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, תכנה ומחשבים; ‏6 תגובות

כבר הרבה זמן עבדתי עם Ubuntu 10.10 ויצא כבר 11.10 אז החלטתי שאחרי שנה שלא שדרגתי את האובנטו שלי הגיע הזמן לשדרג. כיוון שלא ניתן לקפוץ בין שתי גרסאות שונות אז נאלצתי לשדרג קודם ל־10.04. כיוון שהייתי צריך לעבוד על המחשב על איזושהי עבודה דחופה, החלטתי לדחות את השדרוג הבא ולא להתעסק יותר מידי עם הגדרות (כי לא היה לי זמן לזה).

אז החתחלתי לעבוד עם Unity. דבר ראשון שקפץ לי: הם ניסו להעתיק את הממשק של Mac OS X. העתיקו את התפריט שמופיע למעלה העתיקו את ה־Dock. האמת שלא אהבתי את זה, אבל החלטתי לתת לזה ניסוי.

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

אבל פה פחות או יותר נגמרו התכונות הטובות וכאן התחילו בעיות שימושיות שלי איתו:

  1. אין appletים... זה אחד הדברים החשובים מבחינתי, תמיד מופיע לי מד העומס, מד צריכת הזיכרון. איפה אפלט של שולחן עבודה וירטואלי שאפשר להזיז חלון פעולת עכבר אחת?
  2. התאמה אישית... איפה אני עושה התאמה אישית של ממשק? איך למשל אני מגדיר 6 שולחנות עבודה ויראואליים או 4 שיושבים בשורה אחת. קשה למצוא ולמשל אפילו חיפוש בתפריט הציג לי שתי תוכנות של הגדרות (אחד של Gnome והשניה של KDE)
  3. איך אני מגיע להגדרות המערכת וכד', למשל כיצד מגדיר מדפסת. פעם היה תפריט ברור System->Printing ומה עכשיו?

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

טוב, אחרי שאשדרג ל־11.10 אחזיר את ה־Gnome הרגיל (או שגם הוא ייהרס כי זה היה Gnome 3?)

אני כבר מחכה ש־12.04 תשוחרר - LTS אז אני לפחות אדע שיש לי שקט בלי מהפכות למשך שנתיים.

שוחררה גרסת 1.48 של Boost שמכילה Boost.Locale

ב־יום רביעי, 16 בנובמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Unicode, Boost‏; ‏2 תגובות

סוף סוף שוחררה גרסה 1.48 של Boost. אחד הדברים המשמעותיים בה היא שילוב של Boost.Locale - ספריית הלוקליזציה שאני פיתחתי.

קישורים:

להזכירכם, Boost.Locale פותחה כחלק מפרויקט CppCMS‏

כמה מטומטם ה־API יכול להיות

ב־יום שישי, 23 בספטמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, C++‎‏; ‏3 תגובות

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

תוך כדי בירור נכנסתי למכונה וגיליתי חלונית עם הודעה בסגנון:

The library e:\mingw\lib\libsqlite3.dll is not valid windows library. Reinstalling
application may solve the problem

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

אני מצפה שפונקציה תחזיר שגיאה ולא תציג חלון! אחרי חיפוש קצר הגעתי לפונקציה SetErrorMode... שמאפשרת "לפתור" את הבעיה. אבל באמת... אם אין dll אז LoadLibrary יחזיר שגיאה אבל אם ה־dll לא ניתן לטעינה תקפיץ חלון?!?!

מי האידיוט שתכנן את ה־API הזה... בחלום הרע שלי לא הייתי מצפה להתנהגות כזו!

בקיצור: אם אתם לא חייבים אל תפתחו לחלונות!

העמוד הבא

העמוד הבא

דפים

נושאים