תגית: hello world

Brook Framework

Brook Framework הוא שם לא הכי ברור עבור framework לפיתוח אתרי ווב דינאמיים באמצעות פסקל מונחת עצמים, המשוחררת תחת LGPL 2.brook-framework_hello-world

הסביבה מזכירה מאוד את הרעיון של framework כדוגמת dancer של פרל, וPadrino ברובי.

ההצהרה הרשמית של הפרוייקט היא בתמיכה קלה ב:

  • נהול ניתובים – כל הפעולות מתבצעות לפי ניתובים
  • יכולת עבודה עם פריימוורקים נוספים, המספקים תוספות לעבודה עם ווב
  • תמיכה מובנת בJSON ופעולות שונות עליו
  • תמיכה בפעולות REST והפרדת העבודה לפי סוג הבקשה
  • אינטגרציה עבור Lazarus
  • תמיכה בכתיבת תוספים עבור הframework

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

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

יחסית קל ופשוט מאוד ליצור ניתובים דינאמיים, וסביבת CGI טבעית לשרתי ווב כדוגמת אפצ'י, אך לא רק.
במידה ומשתמשים בלזרוס, אז בחירה ב Simple CGI application, זה כל מה שנדרש עבור Hello World, אך במידה ולא, יש צורך ליצור שלושה קבצים.
קובץ אחד הוא בעצם ה"תוכנה" שלנו, שהיא הcgi. קובץ נוסף הוא ברוקר שלנו שיודע לדבר עם שרת HTTP, והקובץ השלישי זו בעצם התוכנית שלנו. כמובן שניתן להוסיף עוד קבצים/מחלקות לפי הצורך.

אפשר להשוות זאת למשל לסינטרה, בה קובץ הראשון הוא כדוגמת config.ru, הקובץ השני הוא Rack והשלישי זה המודול של סינטרה.

הרעיון הוא שכל מחלקה אחראית על נתיב מסויים (path info), ממש כמו ב Rails למשל, ואנו רושמים את הנתיב בחלק הinitialization של היחידה:

...
initialization
  TMyClassHandler.register('/info/:user');
end.

המחלקה בעצם רשמה את עצמה לנתיב של info – כלומר http://example.com/info/ik

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

אתם מוזמנים לבדוק ואף לתרום חזרה לפרוייקט.

regular expression על קצה הפוסט – חלק שלישי

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

זוכרים את ההדגמה שלי של "Hello World" ?

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

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

regular expression על קצה הפוסט – חלק שני

בחלק הקודם הצגתי בקצרה מאוד מה זה Regular Expression.

אבל ממש לא סיימתי להציג את השפה עצמה.

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

regular expression על קצה הפוסט – חלק ראשון

עולם המתכנתים מתחלק לשלושה חלקים:

  1. אלו אשר משתמשים ב Regex‏
  2. אלו אשר שמעו על Regex‏
  3. אלו שחושבים שאני מקלל אותם כרגע

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

Regular Expression או Regex כקיצור, זו למעשה שפה המאפשרת לתאר תבנית מסויימת של טקסט שרוצים למצוא או לשנות.

ישנן הרבה מימושים לשפה, כאשר כל מימוש מספק יכולות שונות – בעיקר תוספות למימוש הבסיסי ביותר. אחת הידועות ביותר נקראת Perl Compatible Regular Expression או PCRE בקיצור .אך התקן הבסיסי ביותר שיש עבור השפה, בכלל שייכת לPOSIX.

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

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

למשל, במידה ואנחנו בהכרח יודעים כי המחרוזת תראה כך:

Hello World

כלומר, אנחנו מחפשים מבנה מחרזות שהיא בהכרח תהיה Hello World (כאשר H גדולה, השאר אותיות קטנות, אז רווח ואז W גדולה, והשאר אותיות קטנות), אז השימוש ב Regex אינו יעיל, היות והוא אינו תורם לנו שום דבר מיוחד בנושא, למרות שניתן להשתמש בו במקרה זה. אך החיפוש הרגיל של מחרוזות בהכרח יהיה יעיל ומהיר יותר בנושא.
לעומת זאת, כאשר נרצה לדעת האם מדובר באוסף אותיות (אפילו התחלה באות גדולה בכל התחלת "מילה"), רווח, ועוד אוסף אותיות (שוב פעם עם אות גדולה), אז דווקא לRegex יתרון ברור, היות ואנחנו מחפשים תבנית, ולא אסופת תווים מדוייקת. שימוש ב Regex בסיסי לשם כך יראה בצורה הבאה:

^([\w]+)\s([\w]+)$

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

Gtk3, GObject Introspection ו Free Pascal

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

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

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

קובץ כזה יראה כך: להמשיך לקרוא