קטגוריה: אתרי אינטרנט

My first ruby framework part 1

I'ved tested many static web page generators, and I found a very horrifying conclusion: They are either too big and overwhelming, or they are very small, compact, and written mostly for generating static blogs.

I'ved started to invest a day with a friend static generator, that he wrote for his blog, and even opened 11 bug reports for it, however, the generator he created is also very blog specific solution, and I want to create static web site, not a blog. The difference is in the way routing works, and the whole stat of mind when using such thing. And if I wish to make his generator do what I'm looking for, it will require from me a lot of work.

So, I'ved started yet another static web site generator (more like a framework for it imho 🙂 ), after I'ved tried not to go there in any possible way.

At the first day I'ved started planning how the skeleton of the static content will be, and started looking for libraries that can convert markup languages (markdown, reStracturedText etc…) to html, and I've chosen something that is written in Haskell, with a lot of power named Pandoc. It even has a Ruby wrapper for it, that I'm using for the project. So I jumped to the water of reinventing the wheel and creating yet another generator.

In the beginning, of writing my code, I'ved encountered several problems that needed to be solved. For example: How do I execute my executable without installing it as a Gem ? In default behaviour, if it's not installed, then Ruby does not know how to locate the files. But at the end I found an interesting solution for it:

$BASE_PATH = File.expand_path(File.dirname(__FILE__) + '/..')

I found additional problems to be solved. For example I needed to make Bundler find the Gemfile, but the executable is not part of the Gemfile path. After a lot of research and grep in the source code of Bundler, I found the answer:
It uses an environment variable named BUNDLER_GEMFILE, and it is needed to be set to the Gemfile path like so:

require 'bundler'
ENV["BUNDLE_GEMFILE"] = $BASE_PATH + '/Gemfile'
Bundler.require(:default)

Another problem that I found was in the way of parsing the cli parameters.
Ruby has it's own default library for it, but it was not built for what I was looking for.
So later on, I found a library named slop that is very nice, and works well, but not 100% of what I was looking for.
When I read the Bundler source code, I found Thor, and finally found the proper parser for me, but I will not use it in this version.

I find it very interesting how writing something like a framework takes different way of thinking then normal program.

It is very important to emphasize that at the time of writing this post, my code is still not ready, and many basic things are not implemented, and the core is constantly rewritten. But the next post will be about v0.1 that is ready 🙂

ליצור פריימוורק ברובי חלק ראשון

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

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

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

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

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

$BASE_PATH = File.expand_path(File.dirname(__FILE__) + '/..')

לאחר מכן, נתקלתי בעוד בעיות.
למשל היתה בעיה איך אני גורם לקובץ הריצה למצוא את Gemfile כאשר אני לא רץ בספרייה שהוא נמצא בה.
חיפוש וחפירה בהרבה מאוד קוד, גילה שיש רק דרך אחת לעשות זאת, וזה להשתמש ב environment variable של bundler בשם BUNDLE_GEMFILE :

require 'bundler'
ENV["BUNDLE_GEMFILE"] = $BASE_PATH + '/Gemfile'
Bundler.require(:default)

ועכשיו הוא יכול לעבוד כמו שצריך.

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

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

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

הפצת לינוקס מול תוכנה

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

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

אז מה הן הבעיות ? הנה רשימה חלקית:

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

רמזור תנועה פשוט – עוד ניסוי בארדואינו

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

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

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

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

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

האם גוגל בצרות ?

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

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

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

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

הארץ סוגרת את התוכן, ללא מתן תמורה לקורא

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

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

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

הנה מספר רעיונות למר שוקן לגרום לאנשים (גם כאלו אשר לא קראו עד היום את העיתון) למצוא ערך מוסף ואף אולי להעדיף לשלם עליהם מספר מעות:

  1. תן לי להרכיב את הידיעות והנושאים שמעניינים אותי בלבד
  2. עזור לי להסביר לך מה באמת חשוב ומעניין אותי, ותן לי תוכן בכיוון הזה (כלומר קהל היעד העיקרי שלך הם מתכנתים כמוני, אז תן להם תוכן שקשור בזה בעולם הטכנולוגיה)
  3. תן לי לנהל דיונים אמיתיים על כתבות, כולל עם הכתבים שלך על מה שנכתב – סגנון slashdot ולא טמקא …
  4. אפשר לי לשלם על ידיעה בודדת שאולי תעניין אותי, ולא על מנוי, כך שבמקום שאשלם על מנוי כאשר פעם בחודש אתה מפרסם ידיעה שמעניינת אותי, אוכל לשלם רק על מה שמעניין אותי באותו הזמן
  5. תן לי לנהל ידיעות – כלומר לשמור ידיעות שפרוסמו, לדעת למצוא אותן וכו'
  6. תן טעימות קטנות גם למי שאינו מנוי – תן לי לקרוא רבע מאמר מעניין ולהחליט מה הלאה (זוכר את הרכישה של מאמר ספציפי ?)
  7. צור קהילה סביבך, כזו שתרגיש שאתה הבית שלה, נגיד תקרא לה קפה דה מארקר ?

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

Planet Object Pascal

I'm glad to announce the creation of Planet Object Pascal.

I have created it in order to provide one place to have all known blog and knowledge of the Object Pascal developers (Virtual Pascal, Free Pascal, Delphi etc…)

If you have a blog that writes about Object Pascal, feel free to contact me, and I'll add you to the planet.

Having said that, I'm looking for a way to better design this, and at the long run, write something a newer system, then continue and using the unmaintained planetplanet system.

הממשל אינו זמין כעת, אנא נסה במועד מאוחר יותר

כל מי שצריך לעבוד מול מדינת ישראל, מוצא את עצמו צריך תמיד להתמודד עם בעיות (בירוקרטיות).

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

משום מה החליטו בפרוייקט "ממשל זמין", ליצור סרגל כלים המכיל דברים כמו תעודות הצפנה מבוססות סוקט (SSL/TLS מישהו ?), חתימה דיגיטלית על מנת לגשת למקומות כמו הגשת טפסים מיוחדים (ריח העו"ד עולה לאוויר), תשלום רישיונות וכו'. אממה. הוא תומך רק ב2 דפדפנים – IE ופיירפוקס (טוב לפחות יש חלופה). והם גם מכירים בכך שאנשים עובדים בלינוקס, אז סרגל הכלים יותר גם להתאים את עצמו ללינוקס (יש צדיק בסדום ?).

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

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

מדוע להגביל דפדפנים, ופשוט לא לעבוד לפי תקנים ?

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

מצגות בעולם הרחב של הרשת

מאז 2007, התחלתי להעביר הרצאות, חלקם ללקוחות בתשלום, ורובם קהילתיים לגמרי.

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

עד היום הייתי במידת הצורך יוצר שקפים באמצעות Impress של Libre/Open Office (בהתאם לקיומם בעולם), וכבר הרבה זמן שאני חושב להתחיל לעשות את זה קצת אחרת.

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

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

אז החלטתי ללכת על משהו בין מה שגוגל מציעים לבין impress.js, ומצאתי את reveal.js.
המערכת מציעה להעביר מצגות, עם תמיכה ב html5, css3 ו javascript. אבל אינה דורשת ממני לתכנת דברים, אלא להתמקד בתוכן, וכיצד אני רוצה שהוא יוצג. למעשה התכנות שלי זה html הכי מינימליסטי בעולם. המפתח שלה אפילו חשב על תמיכה בשפות כמו עברית, ולאפשר לנו להציג הרצאה מימין לשמאל לפי בחירה.

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

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

הכנתי הדגמה נחמדה של כיצד להשתמש בreveal.js. אצלי על המחשב, היא יושבת במקום אחד, וההדגמה במקום אחר, ולכן אתם רואים את הקבצים שהם בעצם symlink למיקום שאצלי.

May the source be with you 🙂

where have all the music gone ?

I used to be a Pandora user, but due to issues with the Music labelling cartel, it was forced to close it's service outside of the U.S. Australia and New-Zealand.
So I moved to Last.fm that offered me to pay a fee and listen to music. Until I got the following Email: להמשיך לקרוא