ארכיון חודשי: אוגוסט 2012

Gtk3, GObject Introspection ו Free Pascal

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

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

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

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

לזרוס 1.0

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

אודות לזרוס

לזרוס 0.9.29 המשתמש ב Qt תחת לינוקס

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

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

סביבות העבודה אשר כיום לזרוס יודעת לאפשר עבודה מולם הם: MS Windows, Linux, FreeBSD, Solaris, Mac OS X, WinCE, Android, JVM, iOS ועוד מספר מערכות אחרות, בהתאם לתמיכת המהדר.
בנוסף, ישנה תמיכה בסביבות גרפיות כדוגמת Windows GDI, X11, GTK, Qt, Cocoa, Carbon ו fpGUI.

התמיכה הזו מגיעה באמצעות ספריית רכיבים בשם LCL‎ ‏(Lazarus Component Library) אשר תפקידה הוא אספקת כלים להתמודדת עם כתיבת התוכנות הגרפיות (אך לא רק) ללא צורך בלימוד של סביבה מסויימת כדוגמת Windows GDI או Qt.

בנוסף, המערכת מגיעה עם תמיכה מובנת למספר מסדי נתונים בניהם ODBC, SQLite, Firebird SQL, MS SQL, Oracle, MySQL, PostgreSQL, Sybase ואפילו Paradox במידה והותקנו הספריות המתאימות במערכת. בנוסף גם יש תמיכה ל dBase בצורה טבעית.

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

לזרוס אף מגיעה עם תמיכה ברירת מחדל לפיתוח מערכות CGI ברמה נמוכה מאוד בשם fpWeb ועוד מספר כלים אחרים כדוגמת ExtPascal המאפשר לכתוב תוכנת web וויזואלית שמומרת ל ExtJS.

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

בין מעריצי אפל למציאות

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

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

השיר הבא, הולך להישמע לכם מוכר מידי, בגלל שיש שיר בשם Hotel California אשר באורך פלא דומה לו מאוד, אבל השיר שאני שמתי כאן, הגיע קרוב לעשור לפני …

עוד יום שלישי ה13

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

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

זהירות, הקוד קצר מידי, בייחוד אם משווים לC

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

איך זה שהפלוס דולף ?

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

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

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

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

אבל כל זה, לא מפריע לתעשייה לבחור בשפה ההזויה הזו, כאילו היתה זו תורה מסיני. התעשיה חושבת בגישה של "לתכנות פשוט אשתמש ב C ולתכנות מובנה עצמים ב ++C". כאשר מדברים ש++C היא התפיסה הרעה ביותר (למעט Objective-C), התשובות (של מי שלא מכיר אותי) היא "אבל אין לה תחליף".

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

הבעיה העיקרית של C ו ++C היא שהן גורמות בשל התחביר, וכן התפיסה שלהן לבעיות אבטחת מידע רבות בעולם המיחשוב. במידה והיו משתמשים באלטרנטיבה שאני מציג,3/4 מהבעיות האלו היו נעלמות, ולמעשה כמות הבאגים שמגיעות בגלל התפיסה והתחביר לא היו מתקיימות בכלל, מה שהיה משאיר סוגים אחרים לגמרי של באגים להתמודד איתם, אשר גם ב C וגם ++C עדיין "נדרשים לתת עליהם את הדין".

אבל כל הטריגר של הפוסט הזה, הוא בכך שלאחרונה רוב תוכנות המבוססות ++C בלינוקס שיוצא לי לעבוד איתם, או זולגות זיכרון כאילו אין מחר, או קורסות לתוך עצמן. זה כבר מרגיש כאילו סוג של פיטצ'ר שמגיע עם השפה, ולא באג. אולי זו הסיבה שחלק מתוכנות ה ++C לאחרונה לא מצליחות לרוץ אצלי. פשוט הקרנל מתלונן על buffer overflow ומיד מחסל את ריצת התוכנה.

טוב אפסיק את הפוסט לפני שיהיה לי עוד segfault

ביי פדורה, חזרתי לארץ'

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

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

למשל לא הצלחתי לבצע גיבויים לדיסקים חיצוניים (כל מיני בעיות שגרמו לדיסקים לעשות remount לעצמם בזמן הכתיבה). הזיכרון שלי השתגע כל הזמן והתנהג כאילו יש דליפת זיכרון רצינית (הגעתי למצב של 90 אחוז ram תפוס ו50 אחוז swap), הייתי צריך להתפשר מאוד על התצוגה, ובפדורה 17, מי שמתקין מ0, מקבל מערכת שמשנה את הצורה שanti-aliasing נעשת (זו לא תחושה, אלא משהו שמציק להרבה אנשים).

היו לי בעיות עם systemd, אשר למרות שעבדתי לפי ההוראות, דברים לא עבדו שם חלק, ופשוט חלק מה"שדונים" עלו למרות שהגדרתי אותם לא לעלות בהתחלה. ד"א גם בארץ' אני משתמש ב systemd, ושם אין לי את הבעיות האלו. אני לא מבין כל כך מה שונה בהתנהגויות האלו.

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

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

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

אז הורדתי את iso ההתקנה החדש של ארץ'. ומסתבר ששם הם שינו לרעה את צורת ההתקנה. אם מקודם היה ממשק שעושה דברים בשבילך, כאן אתה עושה הכל ידנית. ללא ממשק מסודר.  אז אתה יוצר לבד את מערכת המחיצות. ואז יוצר מערכת קבצים, ובסוף מעגן אותם לבד, להגדיר (עם תסריט מוכן) הורדת החבילות תתבצע למה שמעוגן תחת mnt, ואז להיכנס ל chroot, ולהמשיך להגדיר דברים. בסוף להגדיר את grub2 (עדיין אני לא מבין אותו). ואחרי שהכל עובד, לאתחל את המחשב, ולהתחיל להתקין את המערכת המועדפת עלייך מבחינה גרפית וכו'. וככה מצאתי את עצמי מ8 בערב ועד 3:30 לפנות בוקר מתקין הכל מ0.

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

סיכום אוגוסט פנגווין 2012

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

השנה אוגוסט פנגווין היה בבירת הצפון – חיפה.

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

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

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

גם השנה לא היו חולצות לכנס (שנה שנייה ברציפות. אסור להפוך את זה להרגל !).

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

היו בערך כ150 אנשים בכנס, ו100 הצביעו ברגליים שלהם מסיבות השמורות להם, וחבל.

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

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

לראות שונה – פוסט ה 1,000

1000-posts

זהו הגלגול השלישי של הבלוג "לראות שונה". והוא הגיע עם פוסט זה, ל1,000 פוסטים אשר מפורסמים כאן בפועל.
את הבלוג התחלתי ב11 לאוגוסט 2007 והוא התחיל עם סיכום אוגוסט פנגווין 2007.
היות והיה היום אוגוסט פנגווין, החלטתי לפרסם קצת מוקדם יותר את פוסט ה1,000 ולאחריו את סיכום אוגוסט פנגווין 2012 🙂

קצת סטטיסטיקה: נכון לזמן כתיבת פוסט זה, ישנם 3,316 תגובות בבלוג. כאשר אינני כותב פוסטים, כמות הצפיות נעה בבלוג בין 30 ל50 ביום, וכאשר אני כותב בלוג, כמות הצפיות נעה בין 90 ל 130 צפיות באותו היום ולפעמים גם ביום לאחריו.
הפוסט עם הכי הרבה תגובות וצפיות לפרק זמן הכי קצר (למעלה מ500 היו ביומיים הראשונים שלו), היה הפוסט הכי מדובר שלי (שהגיע גם לכלכליסט) – לעבוד עם מערכת הפעלה לא מוכרת.

כאשר יש קטגוריה בשם "קוד פתוח", הבלוג מתפרסם גם ב planet.foss.il, וכאשר הוא לא נמצא (ויש פוסטים אשר אינם קשורים לקוד פתוח ותכנה חופשית, או מעניינים בהכרח אנשים טכניים ברשימה), הוא מפורסם רק ב blogs.hamakor.org.il.

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

Redis Session for Ruby

I'ved created a standalone session system based on Redis database.
This session system was not build only for web in mind, but also for non web based systems.
I for example, use it with Asterisk based programs that I'm writing to clients.

The session lib supports at the moment only few features:

  1. Connect to Unix sockets
  2. Connect to TCP sockets, and changing the port number if needed
  3. Expiring all keys
  4. Expiring specific keys
  5. Changing expiry of a specific key
  6. Checking expiry of a specific key
  7. Saving and restoring Ruby based structures such as hashes, arrays, boolean etc…
  8. Removing keys
  9. Prefix that will be automatically added to each key name (in saving and restoring)

The usage of the system is very simple:

The current version (0.1.3), does not contain yet any documentation. However it will be added in next version.
The library itself is under the MIT license, and can be downloaded here.

You can create your own gem file. I hope that by the next version, it will be created automatically.

* You must have active Javascript support for wordpress.com and github to view the source code.