ארכיון חודשי: ינואר 2010

למצוא את הקסם

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

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

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

$ find

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

$ find /some/path

והחיפוש יתבצע על כל הקבצים והספריות בנתיב מסויים.

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

$ find /some/{path,location,directory}

ואז החיפוש יתבצע גם בתת הספרייה path, גם בlocation וגם ב directory. שימו לב שהסוגריים המסולסלים שייכים ל bash ולא ל find והם מפורשים עבור find ל3 נתיבים שונים. כלומר זה מקביל ל:

$ find /some/path /some/location /some/directory

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

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

$ find /some/path -name "*test*"

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

במידה ונרצה לחפש ספרייה או סוג מאוד מדוייק של קובץ (לפי מערכת הקבצים של לינוקס/יוניקס ולא לפי סיומת) נשתמש בפקודה הבאה:

$ find /some/path -type d

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

במידה ונרצה אבל לקבל רק את הספריות תחת אותו נתיב ללא תת הספריות שיש להן, נוכל להגביל את find בצורה הבאה:

$ find /some/path -type d -maxdepth 1

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

$ find /some/path -type d -maxdepth 5 -mindepth 2

נגיד ונרצה לקבל רק קבצים ששונו במהלך ה24 שעות אחרונות ומעלה נעשה את זה בצורה הבאה:

$ find /some/path -mtime +0

חשוב להבין קצת איך הזמנים האלו עובדים.

mtime עובד על n*24 אבל חשוב להבין משהו חשוב: 0 הוא לא 24*0 אלא 0 אומר רק 24 שעות. כלומר אפשר להגיד שזה יותר כמות הפעמים שנעשה 24+24 . כך שהספרה 1 היא בעצם 48 שעות.

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

עוד פעולה שתעזור לכם מאוד, זו האפשרות להריץ פקודה על כל דבר שנמצא באמצעות find ואנחנו נעשה את זה באמצעות הפקודה exec :

$ find /some/path -exec /bin/rm -rf {} \;

חשוב לשים לב לכמה פרטים:

  • כמו בכל האפשרויות האחרות, אפשר לשלב את כולם בשורה אחת (אלא אם כתוב בתעוד משהו אחר בנושא על אפשרות כלשהי)
  • סוגריים מסולסלים הם שם הקובץ המלא שהתקבל והם לא שייכים ל bash אלא ל find
  • הלוכסן ההפוך עם הנקודה פסיק צריכים להיות עם רווח מהפקודה/סוגריים מסולסלים, אחרת find יצעק על שגיאה ב exec
  • במידה וצריך יותר מפקודה אחת, אז צריך להוסיף עוד אפשרות של exec בהתאם לכמות הפקודות שצריך לבצע. לפעמים צריך לשים אותם לפי סדר מסויים אם אחת תשפיע על השנייה
  • אי אפשר להשתמש בפקודות bash אלא רק בתוכנות ממשיות. אני ממליץ להשתמש בנתיב המלא לפקודה, אך במידה והפקודה נמצאת במשתנה PATH לא חייבים.

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

$ find /some/path -print

במידה ויש רצון להדפיס פרמטרים ספציפיים כמו נתוני state על הקובץ, תאריכים שונים ועוד, אפשר להשתמש באפשרות printf

$ find /some/path -printf "…."

יש ל find עוד המון יכולות ואפשרויות מחיפוש באמצעות ביטויים רגולריים (regex) ועד לצורת הרשאות. יש פשוט המון אפשרויות שלא תמיד חשבתם עליהם אבל כשתדעו עליהם, פתאום תראו עד כמה הפקודה מקלה על צורת העבודה שלכם ולכן מומלץ להמשיך ולילמוד על האפשרויות של find במסמך ה man של הפקודה.

Jaml – לכתוב HTML בג'אווה סקריפט

אם אתם עוסקים ב RIA בטח יוצא לכם לכתוב מידי פעם קוד דינאמי בJavascript שיוצר HTML.

על מנת להקל על המשימה ובנוסף לעזור ביצירת קוד DRY, הומצאה ספרייה שמאוד מושפעת מ HAML בשם JAML.

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

קוד של ג'אווה סקריפט כזה יקרה כך:

Jaml.register('simple', function() {
  div(
    h1("Some title"),
    p("Some exciting paragraph text"),
    br(),

    ul(
      li("First item"),
      li("Second item"),
      li("Third item")
    )
  );
});

Jaml.render('simple');

והמקביל שלו ב HTML יראה:

<div>
  <h1>Some title</h1>
  <p>Some exciting paragraph text</p>
  <br />
  <ul>
    <li>First item</li>
    <li>Second item</li>
    <li>Third item</li>
  </ul>
</div>

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

אפשר לראות למשל שימוש בקוד חוזר לפי לוגיקה: להמשיך לקרוא

פונקציות חלון ב Firebird 3

פונקציות חלון במסדי נתונים (גם מוכרים כפונקציות אנליטיות), הן פונקציות בתוך שאילתא בחלק ה select המאפשרות לבצע אגריגציה על מידע ללא סינון של המידע עצמו בפעולות count, max, avg וכו'.

גרסה 3 של firebird מספקת תמיכה בסיסית בתכונות האלו על ידי שימוש ב OVER.

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

שאילתא "רגילה" תראה בצורה הבאה: להמשיך לקרוא

root סוף

אחת הטעויות העצומות של משתמשים מתחילים בלינוקס זה המחשבה שהם צריכים להשתמש במשתמש מסוג root בשביל כוח בכל זמן נתון, כי ב Windows זה נהוג להיות משתמש "חזק" (אתה לא רואה אותם בתור משתמשי system שהם משתמשים יותר חזקים אבל) אחרת כמעט ואי אפשר לעשות כלום במערכת אלא אם המנהל נתן לכם הרשאות, אבל בד"כ אתם המנהלים של המערכת, אז מה זה משנה …

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

דרושים: תותחי מכירות

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

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

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

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

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

מי אמר שאין כסף בקוד פתוח ?

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

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

עוד "ראש" שהוא דווקא מאוד נדיב במחיר של 1,000 דולר לגרום לFPC לדעת לעבוד עם תחביר EBNF ובכך בעצם להרחיב את הסכמה שהמהדר תומך (אם היה לי ידע בלכתוב מהדרים, הייתי קופץ על זה).

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

אח"כ עוד אומרים שאין כסף בקוד הפתוח

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

זהירות !!!!1

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

סיוט בקבלת תמיכה טכנית

מזה חודש ומשהו שיש לי בעיה בכניסה לאתרים שונים. בדיקה מקיפה יותר שעשיתי בסופ"ש האחרון גילתה שה traceroute שלי איך שהוא עובר מהרשת הפנימית שלי ישירות לרשת החיצונית לארה"ב -> ארגון iana ורק אז הולך לספק אינטרנט (במקור ברק, אבל מאז שהם התחברו לנטוויז'ן נהיה יותר רע) שם השרת שלהם שולח את הפקטות שלי שוב אליו (משחק מסירות עם עצמו ?) ואז הוא ממשיך לנתב אותי בתוך נטוויז'ן עד שאיפשהו בשרת ה6 הוא מחליט לצאת לכיוון הרצוי.

חשוב לציין שאני עם חיבור ל HOT (מוכיחים כל פעם מחדש שחוסר מקצועיות זו התכונה הבולטת שלהם) ללא חייגן, וכל ההגדרות לראוטר שלי נעשות על ידי DHCP מצד HOT ואין לי התערבות בהם. אז החלטתי להתקשר לתמיכה של 013netvision. אני חייב לציין שאם שפיות או IQ זה דבר חשוב לכם, זה לא רעיון טוב להתקשר לתמיכה הטכנית שלהם. המוטו של החברה זה דבר ראשון לנקות את ה cache ב Internet Explorer. במידה ואין לכם דפדפן זה, ובכן התקלתם את הקו הראשון ואין להם מושג ירוק איך להמשיך מכאן ("אני לא יכול לתמוך בך ללא internet explorer" היא תשובה אמיתית שקיבלתי). העניין הוא שכשאתה שואל "רגע זה שאין לי ping ל google יפתר אם אני אנקה את ה cache ?" (נותן עוד סיכוי להיגיון לנצח) נתקל בתשובה של "ברור" נחרץ (אפילו בלי נימה צינית או סרקסטית שאולי לפחות תגרום לשעשוע קל למישהו). אז לאחר שאתה גורם לקו הראשון לא להצליח להתמודד אתך (או אם אין לך כוח לרמת שירות וידע נמוכים שגורמים לים המלח להראות כאילו הוא מינימום האוורסט), אז אתה עובר לתמיכה בכירה. כאן זה תלוי על מי נופלים (את האמת לפעמים זו לא נפילה. נתקלתי ב2-3 אנשי תמיכה בכירה שעוד היה נחמד לדבר איתם). בד"כ שם כבר אפשר לא להתבייש ולדבר על traceroute או על ping או חס וחלילה רחמנא לצלן לינוקס (אשר מוקצה מחמת המיאוס אצל 013netvision).

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

היתה לי בעיה להתחבר ל mirror.isoc.org.il, בנוסף לכך כאמור (שעד עכשיו) שיש לי ניתוב לiana לפני שזה הולך לי ל 013netvision וכבר הסברתי את ההמשך… אז מסתבר שאיכשהו HOT אוהבים לדפוק גם ניתובים וגם איכשהו כולאים לך את כתובת ה MAC ורק אם משנים את ה MAC של הראוטר אז נקבל ip חדש שאיכשהו לא חסום לדברים ואפשר לחזור לעבוד עד לפעם הבאה. את הטיפ הזה של שינוי ה MAC קיבלתי מענבר (לפחות תומכת אחת בישראל מבינה משהו בחיים שלה ;)).

ד"א ניתוב יחסית הגיוני נראה אצלי ככה: להמשיך לקרוא

FPC לאן – פוסט תקופתי

עכשיו אחרי ש FPC 2.4.0 שוחררה לעולם, אני יכול לדבר על עץ הפיתוח שאני עוקב אחריו באמת וזה 2.5.1. זהו עץ שיהיה בסופו של דבר גרסה 2.6.0.

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

אינני יודע אם למשל הדבר הבא נכנס ל 2.4.0, אבל הוא קיים ב 2.5.1:

var
   s : string;
...
case s of
  'String1' : ...;
  'String2' : ...;
  ...
end;
...

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

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

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

  1. תמיכה בתחביר for in
  2. תמיכה במחלקות הניתנות לאיטרציה על ידי הגדרת אופרטור בתוך מחלקה למניה בשם Enumerator וכמה פונקציות

דוגמא ל for in אפשר לראות בצורה הבאה:

procedure StringLoop(S: String);
var 
  C : Char;
begin
  for C in S do
    DoSomething(C);
end;

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

מה מערכת הקבצים הטובה ביותר עבור Firebird ?

במסמך השוחרר השבוע על ידי Philippe Makowski ב IBPhonix המנסה להסביר קצת מידע על מערכות קבצים בלינוקס המתאימות לFirebird מראה מדידה לפי כלי בשם TPC בגרסאות שונות שלא באמת כזה פשוט למדוד ולמצוא מה מערכת הקבצים הטובה ביותר עבור Firebird בלינוקס.

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