הפתרון לספאם?

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

הפיד שבער

כמו שהבטחתי, הפסקתי להשתמש בFeedburner, מה שאומר שכל מי שמנוי על הרסס צריך לוודא שהוא מנוי על הפיד הנכון, שהוא:
http://firefang.net/blog/feed/

ולא על הרסס של Feedburner.

Singularity

נפלתי על פודקאסט מד"ב מצויין בשם Singularity, מאת ביל דסמט.

תרגום חופשי מהדף בפודיו-בוקס:

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

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

שלושת הספרים/פודקסטים מומלצים בחום (כולם זמינים בPodiobooks)

Tivo וGPL3

TiVO מזהירים שGPL3 יפגע בהם.
מסתבר שמערכות TiVO הן מבוססות לינוקס, ומתוכננות להפסיק לפעול אם הן מזהות שמשתמש מנסה לנטרל את מנגנון הDRM
TiVO מוסרים שאם GPL3 יאומץ, הם לא יוכלו להמשיך לכלול שיפורים עתידיים בגנו/לינוקס למערכת שלהם.

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

גוגל קונים את פידברנר

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

פענוח שפות פורמליות

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

key1=value1
key2=value2
key3=another value

הטקסט שלמעלה הוא טקסט בשפה של קבצי Properties בג'אווה.
לא קשה לכתוב קוד בסיסי שמפענח אותו (נעזוב לרגע את זה שלא צריך לכתוב כזה כי המחלקה Properties יודעת לקרוא את זה):


private static void parse(BufferedReader reader) throws IOException
{
String line = null;
while ((line = reader.readLine()) != null)
{
StringTokenizer tok = new StringTokenizer(line, "=");
String key = tok.nextToken();
String value = tok.nextToken();
System.err.println("Read: key = " + key + ", value = " + value);
}
}

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

key1=ABC\
DEFG

פה יש רק ערך אחד לפי החוקים של השפה.

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

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

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

בגדול, יש חלוקה כזו:
חלק ראשון הוא המנתח הלקסיקלי, שמקבל זרם תווים, ומוציא זרם של לקסמות, הידועים גם כאסימונים (Tokens). האסימונים מוגדרים באמצעות ביטויים רגולריים (שפה דומה לשפה שמשמשת את grep).
חלק שני הוא המנתח התחבירי, שמקבל זרם של אסימונים מהמנתח הלקסיקלי, ומוציא עץ תחביר אבסטרקטי (Abstract syntax tree).
יש כלים שיודעים לקבל הגדות לקסיקליות ותחבירות, ולייצר מזה בצורה אוטומטית קוד שיודע לפענח קלט בשםה הנתונה. למעשה, הטכניקה המקובלת לכתיבת קומפיילרים כבר עשרות שנים מתבססת על כלים אוטומטיים כאלו.
את הPreprocessor של אנטנה כתבתי תוך שימוש בantlr, שהוא כלי כזה שכתוב בג'אווה, אבל יודע לייצר קוד במגוון שפות, ובקורס קומפילציה שאני לוקח כרגע בפתוחה לומדים להשתמש בכלים הקלאסיים – flex וbison.
לדעתי antlr הרבה יותר סימפטי לעבודה.

אם תהיה דרישה אני ארחיב עוד בנושא.