‏הצגת רשומות עם תוויות פרוייקט סוף תואר. הצג את כל הרשומות
‏הצגת רשומות עם תוויות פרוייקט סוף תואר. הצג את כל הרשומות

יום שלישי, אוגוסט 09, 2011

struct to arff defenition

בפרוייקט המתזמן נתקעתי עם בעייה מציקה - בכל פעם ששיניתי מעט  מבנה הנתונים שלי (  struct) הייתי צריך לוודא שאני משתמש בטיפוסים המתאימים ובמקומות המתאימים בכל אחר.
 
אחת הבעיות היא הצורך ביצוא ל arff קצת sed וקצת ביטויים רגולרים ומתקבל החלק הבא :

grep ';' $(dirname $0)/$HEADER \
      | grep -vvv typedef \
      | grep -vvv extern \
      | grep -vvv '}' \
      | sed -e "s/^$//g" \
            -e "s/\/\/.*$//g" \
            -e "s/;.*//g" \
            -e"s/\[.*\]//g" \
            -e "s/ \+\(unsigned\)\? \+\(long\|short\|int\|pid_t\|cputime_t\) \+/numeric /g" \
            -e"s/ \+char \+/string /g" \
            -e "s/\([a-z]*\) \([a-zA-Z0-9_]*\)/\2 \1/" \
            -e "s/.*/@ATTRIBUTE &/g"

הביטוי יזהה את המשתנים המוגדרים בקובץ לו עושים את הבדיקה.
אותי עניינו הטיפוסים : 
long ,short , int , pid_t , cputime_t בלבד אבל ניתן להרחיב לכל טיפוס אחר.

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

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

יום שבת, יולי 16, 2011

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

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


  1. פונקציה תהיה באורך של מסך vim אחד.
  2. לכל פונקציה קיים test case  - עבור sanity check.
  3. כל פונקציה מבצעת פעולה לוגית מינימלית :
    1. אם אתה לא בטוח כך אדם שלא יודע מה הקוד אמור לעשות תן לו לקרוא אם יש ולו שאלה אחת זה יותר מדי.
  4. כאשר יש שימוש ב goto שמור את המקום ממנו הגיע המעבר , כאשר יש שימוש בדגל debug הצג זאת.
  5. בעליית המודול תמיד ירוצו כל ה sanity checks שאפשר לבצע על המודול.
  6. בהדפסות תוסיף שם קובץ ושורה.
  7. השתמש בשם המתקבל מהמודול ולא בשם שקיים כרגע.
  8. לעולם אין הכרזה על יותר ממשתנה אחד בשורה.
  9. יש הפרדה בשם בפרמטרים שניכנסים לפונקציה  מאשר פרמטרים שקיימים בתוך הפונקציה.
  10. שם פונקציה מסביר הייטב מה הפונקציה עושה.
  11. התיעוד מסביר למה הפונקציה עושה את מה שהיא עושה ולא מה היא עושה.
  12. שימוש Hungarian apps
  13. enum ו #define  הם חבריך הטובים ביותר אבל אל תמציא שפה משלך.

אם פעם הסוג צריך להיות uint ו פעם ulong להגדיר את הסוג כtypedef.
אם אנו עובדים על null terminated string להשתמש ב '0\' במקום באפס.


תמיד תחזיק תסריט שבודק את החוקים שלך.

יום שלישי, מאי 17, 2011

קימפולים..

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

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

בנייה במכונות לקחה זמן זהה כמו במחשב הנייד שלי (רמז עבה לעצמי להחליף נייד) (עבור make -j2 ) - מאה דקות וארבע דקות +- שלושים שניות.

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

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

יום רביעי, ינואר 12, 2011

להשתמש בשפה הנכונה למשימה הנכונה

1.

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

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

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

הפרוייקט מוממש פעמיים :
פעם אחת בפרל.
ופעם אחת בJava

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

לכן על מנת שלא לשרוף זמן בחרנו בNLP של סטאנפורד (וויתרנו על ה NLP שקיימים ב CPAN מכייון שאחת הדרישות היתה שניתן יהיה להמיר בקלות את הפרוייקט לגאווה) - שאר בנושאים לא מעניינים כל כך.

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

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

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

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

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

אם אתם הולכים לעשות פרוייקט בנושא של ניתוח טקסט - בבקשה על תממשו NLP תשתמשו בפרל במקום ב JAVA:
מימוש של אותו הקוד בJAVA לקח חודשיים (כאשר בפרל הוא נכתב בשבוע) , פרל בניגוד לגאווה כבר מכילה הרבה מאוד פעולות לביצוע על טקסט, הנה מצגת קטנה.

וזה עוד לפני צרות הרישוי שאתם עומדים לפניהם.

יום רביעי, אוקטובר 20, 2010

פרוייקט בהנדסת תוכנה - רשת אוטונומית

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

הצורה הרגילה לפתור את הבעייה מערבת אנשי הנדסת חשמל (בתחום התקשורת) שנותנים מענה לבעייה ידועה (Anetena placement problem), לאחר הרמת התשתית הארעית (עד כמה שידוע לי דובר על 802.11 אבל זה לא בטוח) אנשי תשתיות פרסו רשתות תקשורת ופותרים בעיות של רשת אמינה, עמידה בהסרת קדקודים.אחת הבעיות היא שהקלים האוטומטיים סגורים הייטב בחברות (כי פריסה של רשת צריכה לדאוג לא רק להצבת צומת ברשת אלה להשפעות על כלל הרשת).

אני רוצה לפתור את הבעייה של יצרת תשתית תקשורת בזמן קצר ע"י כלי שגר - ושכח:

צוות לא הנדסי מקבל סט כלים (drones לדוגמה) ומשחרר אותם לאוויר, היחידות (מל"טים/רכבים ללא נהג וכו') ממקים את עצמם בהתאם לאוסף הבעיות [1] שהם צריכים לפתור.לאחר שינוי ברשת [2] או בתנאים הקיימים [3] היחידות ישנו את מיקומם. יש לציין שברשתות אלחוטיות הסיבה העיקרית לאיבוד מנות הינן הרשת (בשונה מרשת חוטית).

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

הפתרון שלי מתחלק לשניים :

יצרת אלגוריתם (רצויי מבוזר) שיאפשר פתרון של הבעייות [1].
מימוש האלגוריתם בקרנל לינוקס.

מה מצאתי עד היום:

קראתי מספר מאמרים מאונ' הארווארד,קימברידז ספר בנושא Manets בכולם הפתרונות הנידונים הם פתרונות של ראוטינג ברשתות בין אם מבוזרים או לא , בן אם multi hop או LCR (הזול ביותר מבחינת חשמל/ עומס/מחיר ) אבל תמיד כאשר הקמת תשתית איננה נדונה.
מצד שני קיים התחום של חשמל - הצבת האנטנות (שבתחום זה אני צריך עזרה) ותחום הנדסת תקשורת (חישוב עומסי הרשת ששם יש לי קצת ניסיון).
נקודה שכמעט ולא ראיתי אליה התייחסות היתה שרידות הרשת - היכולת של הרשת לעוד בהסרה הופסה של צמתים ונקודה הכשל שלה (חיבור לרשתות אחרות). בגלל שאנו מדברים על WMN יש לנו התייחסות לנקודות חיבור לרשתות אחרות. עד כמה שאני משער יחס של 80-20 (עקרון פרטו) יהווה יחס טוב.


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

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

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


[1] -
Maintain maximum connectivity to the other networks (if any)
Maximize the reliability of the network upon node removal.
Maximize the network area coverage.
Minimal feasible cost

[2] -
בגלל שהנקודות הבעיתיות ברשתות הינן נקודות החיבור לרשתות אחרות , יש לדאוג כי אם התווספו נקודות או הוסרו נקודת הרשת תידע להתאים את עצמה.
[3] -
לאחר הצבה ראשונית הרשת תבדוק את מצבה אחת לזמן מסויים.
WMN - Wireless mesh network


התחלתי ללמוד את המחקרים בנושא Optimal Antenna Placement Using a New Multi-Objective CHC Algorithm ו לא מזמן לכן יכול להיות שאני אמצע פתרונות טובים יותר לגישה שלי.
כמו כן רק לאחרונה נתקלתי בנושא של פתרונות של הצבת אנטנה (ומשם אני מושך את זה להצבת היחידות שלי) באמצעים של חיפוש גנטי:

LINEAR ANTENNA ARRAY DESIGN WITH USE OF
GENETIC, MEMETIC AND TABU SEARCH
OPTIMIZATION ALGORITHMS