Display Quote v1

ב23 לנובמבר2011 (מזל שיש היסטוריה לgit) החלטתי להתחיל פרוייקט אשר ממיר גרסת פרל ישנה של הצגת קובץ הציטוטים שלי בצורה רנדומלית למסוף. תכנת הפרל היתה הפרוייקט הרציני הראשון שעשיתי בפרל והוא נועד לעזור לי ללמוד את השפה. קבלתי בפרוייקט עזרה מ2 אנשים יקרים, הראשון מוכר בשם Moffie והשני מוכר בשם Guess77.

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

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

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

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

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

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

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

אבל עכשיו נתקלתי בבעיה. הפרוצדורות inc ו dec (תנחשו מה התפקיד שלהן), ובכן, הן לא בדיוק פרוצדורות "אמיתיות" כך שהן לא בדיוק יכולות להיכנס ל dispatch table. אז מה עושים ? כותבים wrapper עבורם, ואומרים לו שהוא inline, כך שאני בעצם מתחכם למהדר, ובפועל הוא שם את הפרוצדורות האלו, אבל הוא רואה אותן כפרוצדורות אחרות לגמרי (נפלאות דרכי המהדר).

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

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

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

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

בגרסה 2.0 אני מתכוון לגרום לה להיות טבעית באנדרואיד ובN900 שלי.

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

מחשבה אחת על “Display Quote v1

  1. פינגבק: Display Quote ההמשך | לראות שונה

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s