מכתב אמיתי

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

Ragowan, Danny wrote:

| Hello Shachar ,
| Hope you are well.. it has been a while since we last have communicated ;-))
|
|
Yes, it was.

| Just following up with you to see whether all is in order with regards to
| Compuware software ..
|
Nothing new has transpired. Almost nothing new, that is.

A while back I was stuck while developing an open source project, with an unexplained access violation. I got a demo from you, which totally and utterly failed to spot the problem. I decided that much though I like the idea behind the Compuware tools, it is not worth the money.

Since then I managed to find out the cause of the problem that haunted me back then. It turns out to be a bug in ATL. The details are available at http://gborg.postgresql.org/pipermail/oledb-dev/2004-November/000155.html.

Quite frankly, I expected bounds checker to be able to tell me more about the bug. If it told me “you tried to access memory area X, which was allocated here and freed here”, the entire search would have been so much shorter. I realize that this is not a technically simple task to achieve, but as things stand Bounds Checker failed the usefulness test as far as I’m concerned, and so I don’t think I will be acquiring it. I should point out that open source project “valgrind” does correctly detect such errors and give useful output, and without performing any compile time instrumentation. I would have used it here, except it only has a Linux version. Being open source, however, there is nothing stopping you from applying the valgrind technique for Windows.

Here is an example of a program exhibiting the precise same type of error as happened in ATL, which caused the access violation we were trying to debug using bounds checker.

#include 
#include

int main()
{
const char **a;

a=malloc(sizeof(*a));

*a="Hello";
free(a);
printf("%sn", *a);

return 0;
}



Running with valgrind:

==17356== Memcheck, a memory error detector for x86-linux.
==17356== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==17356== Using valgrind-2.4.0.rc3, a program supervision framework for x86-linux.
==17356== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==17356== For more details, rerun with: -v
==17356==
==17356== Invalid read of size 4
==17356== at 0x804842A: main (valgrindtest.c:12)
==17356== Address 0x1BA58028 is 0 bytes inside a block of size 4 free'd
==17356== at 0x1B904B04: free (vg_replace_malloc.c:152)
==17356== by 0x8048426: main (valgrindtest.c:11)
Hello
==17356==
==17356== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 13 from 1)
==17356== malloc/free: in use at exit: 0 bytes in 0 blocks.
==17356== malloc/free: 1 allocs, 1 frees, 4 bytes allocated.
==17356== For counts of detected errors, rerun with: -v
==17356== No malloc'd blocks no leaks are possible.



| Pls let me know if I can be of any assistance to you concerning our products
| at this time
|
|
Not at this time, no. As you can see, your open source competition is doing a better job at it than you.

| Always at your service!
| Best regards ,
|
|
Shachar


Shachar Shemesh
Lingnu Open Source Consulting ltd.
Have you backed up today’s work? http://www.lingnu.com/backup.html



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

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

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

מסתבר, אבל, שהכלי לא מסוגל להתמודד עם “גישה לזכרון שהוחזר”. התשובה שקיבלתי מהתמיכה שלהם – “זו בעיה לא נתמכת”. אם לא היה ניתן לגלות את הבעיה בכלל, הייתי מבין. עובדה, אבל, ש-Valgrind כן מסוגל לגלות אותה, ואף לתת מידע שימושי לצורך פתרון של הבעיה.

קחו את זה בתור נקודה למחשבה לגבי open source ו-market leaders.

שחר

האם זה חדשני?

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

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

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

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

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

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

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

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

שחר

Bear