ארכיון חודשי: ינואר 2012

Redis סיבוב שני

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

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

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

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

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

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

הבעיה הכלכלית חברתית בישראל

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

מה שעצוב זה, שמשנות ה80 ועד היום שום דבר לא השתנה לטובה:

השנה 1994, הגרסה 0.2 התכנה FPK

התגלה אוצר באחד משרתי ה FTP של הפרוייקט FPC: גרסה 0.2 של המהדר.
נחמד לראות, ומומלץ להשתמש במילון גרמני אנגלי/עברי בשביל להבין.

מערך כתכונה

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

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

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

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

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

...
  TPerson = class(TPrimates)
...
  public
...
    property MatchingColor[name : string] : TColor read GetColor write SetColor;
...
  published
...
    property ShirtColor : TColor read FShirtColor write FShirtColor;
...
  end;
...

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

לתכונה הגדרנו שם כלשהו שהוא מחרוזת. וGetter ו Setter. כלומר התכונה היא גם לקריאה וגם לכתיבה.

הגדרת ה Getter תראה בצורה הבאה:

private
...
   function GetColor(AName : String) : TColor;
...

ה Setter יראה בצורה הבאה:

private
...
   procedure SetColor(AName : String; AValue : TColor);
...

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

התכונה של צבע החולצה (ShirtColor), כותבת ישירות לשדה מסויים, ולא דורשת מאיתנו בעצם ליצור Getter ו Setter בכלל. היות ואין פעולה חשובה שצריך לבצע במיוחד לשם כך. הגדרות של Geter ו/או Setter מתבצעות רק כאשר אנחנו צריכים להתערב במשהו, ולא בכל פעם שאנחנו כותבים תכונה.

להמשך קריאה בנושא, אתם מוזמנים לגשת לכאן.

ככה לא עושים פיטצ'ר אבטחה

בשעה טובה ומוצלחת הפצת הלינוקס האהובה עלי – Arch הכניסה לתוכה חתימת חבילות התקנה.

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

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

אז ארצ' נכנסו סוף כל סוף לעולם של הגדולים -> דביאן וredhat. ומציעים גם חתימה של חבילות ! אבל המימוש שלהם לא נכון.

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

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

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

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

אז כאשר האנשים הטובים בהפצה הבינו את הבעיה, הם פתרו אותה על ידי יצירת מספר מפתחות "על" (master keys  ואנחנו מייבאים אותם בצורה הבאה:

$ sudo -s
# for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do
    pacman-key --recv-keys $key
    pacman-key --lsign-key $key
    printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \
        --no-permission-warning --command-fd 0 --edit-key $key
done

במידה ואתם לא בוטחים בי, תמיד אפשר לאשר ידנית את המפתחות בצורה הבאה:

sudo pacman-key --lsign-key

כאשר מפתח נראה בסגנון הבא: FFF979E7.

את המפתחות אתם מקבלים על ידי pacman – מנהל החבילות עצמו.

בהצלחה !

a tale about PIPA, SOPA and Copyrights

Imagine a person finding a road that everyone is using, and decide to charge money from every car that is passing by. Then that person think about it, and start taking money also from people who are walking by that road, just looking at it, or just reading about it.

The person is also limiting the number of people that can use the road, in what type of vehicles, number of passengers, the location from where the driver is from etc…

And if to add  on all of that. the person never fixes the road, or provide extra benefit of using it. You get what he provides "as-is", in the way that he think you should have it, and that's it.

When people that live beside the road, started to create their own path to the road, so they could arrive from one place to another, caused a big headache to the road owner.  Because they did not pay for the usage of the road, and did not stand in his limitation. So the road owner decided not only to sue them, but also to provide some money for public elected figures to place bills and rules, to say that without his permission, and in his conditions, it is illegal to do so.

So people started to create their own roads instead, and the traffic started to move to thar roads instead,  and the original road owner, started to loose a lot of road users -> money to that newer and better roads, that take only minor maintenance fees, but do not limit anything. Even the roads are better maintained then the original road that the person took over and start changing on it.

So now that person decided to pay again to that public figures to place more bills and call the other roads thieves, pirate etc..  And that everyone who is not using the original road hurts the right of the original road owner.

Redis or not

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

למי שלא מכיר, אז Redis הוא מסד נתונים אשר מספק מערכת Key value עם הרבה יכולות. הוא מאפשר לי ליצור הרבה מעבר ל key value, ולמעשה הוא סוג של data struct manager.

פירוש השם הוא קיצור של מספר מילים ולא כתיבה שגויה של צנון: REmote Dictionary Server. רק אם תהיתם במקרה.

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

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

שקט חייב להישמע

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

עוד פוסט חסר תועלת בנושא הפריצות

infrastructures

ב21 לנובמבר 2011 פרסמתי פוסט בנושא הבעיות של חנויות ישראליות ברשת האינטרנט.

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

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

ואז הגיע 0mar. הוא במקום להגיד שהמלך הוא עירום, פשוט שם לנו תמונה מול העיניים, נתן לנו כמה סטירות לחי, ועדיין ביט כמנהגו נוהג – במקום להבין את הבעיה שיש ולתקן אותה, סמוך על ביז'ו חזר, ופלוני מאשים את אלמוני, שמאשים את John Doe שמאשים את Jane Doe שבכלל עוד לא נולדו באותו היום … (כמובן שאני לא באמת רוצה לפגוע בביז'ו הוא לא באמת אשם)

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

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

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

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

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

ממשק גרפי לציטוטים חלק רביעי

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

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

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

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

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

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

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

עוד מספר פיטצ'רים שחשבתי להוסיף:

  •  לשלוח ציטוטים לרשת חברתית (או יותר נכון מספר רשתות חברתיות).
  • להוסיף צלמית ל system tray, וגם לשלוט משם.

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

בעיות ברשת

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

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

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

אם לצטט את "סגול עמוק": Sometimes I feel like screaming

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

אווירה קפקאית

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

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

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

מוגש כחומר למחשבה.

קבלת רשימה דינאמית של העמודות של כל (חלק) הטבלאות במסד הנתונים

קראתי פוסט ממש מעניין בנושא שכתב אדם בשם Jiří Činčura :

"נשאלתי שאלה לפני שבוע. היא היתה פשוטה מאוד. במידה ואקבל רשימה של עמודות בצורה מסודרת, הייתי רוצה לסרוק את כל הטבלאות (עם מספר תנאים) עבור השמות האלו, ולקבל את התשובה חזרה. זה היה Firebird, אז מייד קפצתי לתוך טבלאות המערכת ויצרתי שאילתא 'on the fly' בתוך execute block, המוכר גם בשם anonymous stored procedure."

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

חדשות Firebird

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

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

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

בנוסף, אפשר להתחיל להנות מהרצאות על Firebird ובכלל סרטונים על Firebird בערוץ SQLFirebird ב Youtube.

תהנו מהרצאה של Ann Harrison (אחת מהממציאים של מסד הנתונים המקורי):

freeswitch

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

Asterisk היא מערכת סה"כ נחמדה, מבית היוצר של חברת Digium והיא משוחררת ברובה כקוד פתוח.

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

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

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

nvidia widgets

NvWidget_MacOS_386nvidia שחררה לפני מספר שנים sdk להשתמש בAPI שהיא משחררת עבור שימוש ב OpenGL. בעקבות ה sdk, קם פרוייקט אשר יצר רכיבים גרפיים המשתמש ב API של nvidia.

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

where have all the desktops gone ?

The title of this post inspired by Paula Cole's song title, but not because of the song itself…

In the past several years, the Unix (and mostly Linux) Desktop field started to have a lot of big changes (The ice age is over ?). The changes are so massive, that people started to immigrate from one environment to another, while companies such as MS do a lot of copy paste to specific features that invented for the Unix desktop (and then they say that Unix desktop is not very user friendly :)).

Most people does not know how to handle changes. They like the icon in the same place, and even if you move it for them only by 2 pixels to the right, it's like a new environment for them, and they do not know what to do. However the desktop changes in Unix are much bigger then moving by 2 pixels away.

Amazingly, I found myself taking the opposite direction of most Linux users today (now you understand the name of my blog ? ;)). At the year of 2,000 when I first owned my own Linux Installation -> Mandrake 7 (prior to that I used Unix's such as Solaris and IAX at work places), I could not find a good desktop environment to work with. I tried KDE 2, Gnome 1 and XFCE 3, and they sucked big time for me. Then KDE 3 came out, and later on, also Gnome 2, and then XFCE 4, and the only environment I found good enough for me was XFCE 4 (I used to work a lot with CDE on Unix), and also found out about WindowMaker (The NeXT like WM), and things was finally good for me. להמשיך לקרוא

exitproc

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

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

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

אז כיצד "רושמים" את ה callback ? זה מאוד פשוט: להמשיך לקרוא

לכידת אותות סוררים ביוניקס

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

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

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

הבעיה היא שהתעוד יחסית נורא בנושא כאשר מדובר בתכנות למי שהידע שלו בC אינו הכי חד או קיים בכלל.

למשל אם תכתבו בלינוקס : להמשיך לקרוא

תזרים מול רווחיות

היה לי דיון לאחרונה עם מספר אנשים בנושא של סוף שנה וחישוב של דו"ח רווח והפסד. ונראה כי אנשים לא מבינים מה ההבדל בין רווחיות לבין תזרים מזומנים. כלומר אם עשית עסקה של 100,000 ש"ח ועל הנייר אתה משאיר ביד 80,000 ש"ח, על פניו יש לך 80,000 ש"ח. אבל זה לא המצב בפועל. האם זה לוקח בחשבון מתי אתה תראה את הכסף ? האם אתה לוקח בחשבון את המיסוי, וכו' ?

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

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

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

היה שם מרצה שהסביר את ההבדל בין רווחיות לתזרים בצורה הבאה:

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

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

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

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

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

FPC 2.6.0 שוחררה

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

תוספות

רשימת התוספות: להמשיך לקרוא