ארכיון חודשי: ינואר 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 והמקש הימני הם רק בצד המשתמש לא בצד של בעלי המקצוע.

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