תולדות FireStats

נשאלתי למה אני כותב את FireStats, מה מניע אותי.

אז קצת היסטוריה:
בראשית, היה קאונטרייז, וראה עמרי כי טוב.
ובאו כניסות, ובאו גם ורובוטים כחול אשר על שפת היום, וראה כי רע.
והוסיף לקוד של קאונטרייז בוט אחר בוט, וראה כי טוב, עד שנמאס.
ותיקן את קאונטרייז, ויקח בוטים מקובץ, וישלח התיקון לאנדרס, ולא ענה.
וינג'ס, וינג'ס, עד שהתחיל את קאונטרייז 2, וישפר, וראה כי טוב.
ויקרא את הקוד של קאונטרייז, וראה כי מלא היה בכפילויות ובברדק, ויבין כי רע.
ויאמר לחבריו, למה לכם הקאונטרייז הזה, בואו אלי, ואני אראה לכם את האור, אני אראה לכם את FireStats.
ויכתוב, ויראה כי לא ידע PHP, וילמד,
ויכתוב, ויראה כי לא ידע HTML, וילמד.
ויכתוב, ויראה כי לא ידע CSS, וילמד.
ויכתוב, ויראה כי לא ידע JavaScript, וילמד.
ויכתוב, ויקודד, ויכתוב, וישחרר גרסא ראשונה לציבור.
ויחזור אנדרס מחופשה, ויראה כי קם בן ונכד לקאונטרייז, וישמח.

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

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

FireStats 0.9.2-beta

גרסא חדשה של FireStats מסתובבת ברחובות!

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

ניתן להשיג בשרתים המובחרים.

FireStats 0.91 – Beta

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

N המלכות

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

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


FireStats 0.9- Beta

אחרי הרבה ימים ולילות, שחררתי בשעה טובה את גרסאת הבטא הראשונה של FireStats.

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

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

כמו תמיד, כל הפרטים בדף הבית של FireStats.

מאיפה באות בעיות אבטחה בתוכנה?

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

בוודאי שכמות בעיות האבטחה שמתגלות קשורה לכמות השימוש בקוד, אבל זה לא הגורם המרכזי. באיזו שהיא רמה, זה כבר לא משנה אם משתמשים בקוד 10 מיליון אנשים 100 מיליון.
מה שיותר משפיע זה:
1. היציבות של הקוד: בעית אבטחה = באג, לקוד שלא משתנה לא נכנסים באגים חדשים, לכן כמות בעיות האבטחה (הקיימות, בלי קשר אם התגלו או לא) יורדת.
2. התכנון של המערכת:
במערכת עם תכנון לקוי, יש לך יותר בעיות אבטחה מפונקציות.
3. האיכות של הקוד.
4. כמות הביקורת שהקוד מקבל.

אם לתת דוגמאות:
חלונות XP בת 6, ועדיין מתגלות בה בעיות אבטחה.
הבעיות נובעות מאיכות קוד נמוכה ומבעיות תכנון, והן ממשיכות להתגלות למרות היציבות של המערכת (רובם המכריע של השינויים הם תיקוני באגים, לא תכונות חדשות).

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

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

קוד פתוח

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

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

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

כיף לקבל אימיילים מאנשים שמשתמשים בקוד שלי, גם אם אני בעצמי לא משתמש בו.

ריבת קוד

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

אגב, מישהו רוצה חולצה של גוגל קוד ג'אם 2003 כחדשה?

FireStats

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

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

הדגמה חיה של FireStats.

דף הבית של FireStats.