ארכיון חודשי: מרץ 2010

לא SQL

בשנת 2009 יצאה לה לדרך תנועה חדשה אשר אומרת לא ל SQL. התנועה נתנה דגש לעוד מסדי נתונים אשר הגישה אליהם לא מתבצעת על ידי SQL ולרוב יש יחסים בין טבלאות ותמיכה ב ACID.

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

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

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

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

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

זה ציפור, זה מטוס, זה kde 4 לא זה Windows 7

יצא לי אתמול פעם ראשונה לראות ולעבוד על Windows 7 במציאות.  טעם הWindows שעבדתי עליו היה Home Premium בעברית, ואני חייב לציין שידידות זו לא התוכנה הבולטת שלו.

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

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

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

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

ב W7 יש גם אפשרות למצוא ערכות נושא שממש מזכירות את Gnome, ובכלל כל המערכת והסביבה מזכירה כאילו לקחו את KDE 4 ואפילו כמה פיטצ'רים שהיו קיימים ב KDE3 והוסיפו אותם לסביבה הגרפית וקראו לזה Microsoft Windows 7. אולי היו צריכים לקרוא לזה "טעם KDE 4" ולסיים עניין 🙂

בשורה התחתונה, נראה כי מיקרוסופט עשו copy paste לסביבות לינוקס ואח"כ עוד אומרים שלינוקס לא ידידותית…

גוגל מול פייסבוק

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

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

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

מרתף היין

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

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

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

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

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

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

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

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

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

עידו

Singing xmlrpc with Ruby and Sinatra

I was fighting Sinatra in order to make it an xmlrpc server. The big problem is that the xmlrpc library that arrive with Ruby -> well it sucks big time.

The client actually really nice, but the server really sucks. So, I started fighting the XMLRPC, and Sinatra did not like some of my work, and did not want to go to stage to perform, and I needed to talk with it's manager 🙂

At the end I found out why Sinatra and XMLRPC server does not like each other, and I was able to make Sinatra work with XMLRPC server at the end. The problem of course is the XMLRPC, and Sinatra actually a fine singer (so take off the Mafia from me now ok ?).

So how we can make Sinatra find dity and perform with XMLRPC as a server ?

Here is a Proof of concept for working with the two of them (writing it without testing the PoC):

#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'
require 'uri'
require 'xmlrpc/server'
require 'xmlrpc/marshal'
require 'xmlrpc/parser'
require 'xmlrpc/create'
require 'xmlrpc/config'
require 'xmlrpc/utils'

module MyModule
  class Application < Sinatra::Base
    def initialize(app=nil)
      super                        # we are inheriting stuff from older constructor
      ...                          # fill in the missing stuff you need for your app
      @rpc = XMLRPC::CGIServer.new # We are using general server rather then actual server
      # The line bellow is a MUST for make it work properly, add some dummy call
      # or if we have only one call, it will also work for us
      @rpc.set_default_handler do | dummy |
        dummy
      end # @rpc.set_default_handler do | dummy |

      # <?xml version="1.0"?>
      # <methodCall>
      #   <methodName>ngx1.call_init</methodName>
      #   <params>
      #     <param>
      #       <value>
      #          <struct>
      #             <member>
      #               <name>x</name>
      #               <value><int>10</int></value>
      #             </member>
      #             <member>
      #               <name>y</name>
      #               <value><int>10</int></value>
      #             </member>
      #          </struct>
      #       </value>
      #     </param>
      #   </params>
      # </methodCall>
      @rpc.add_handler('sum') do | x, y | # names of params must be equal to the rpc names
         x + y   # sending the result as xmlrpc
      end # @rpc.add_handler('sum')

    end # initialize(app=nil)

    get '/' do
      throw :halt, [400, 'XML-RPC server accepts POST requests only.']
    end # get '/' do

     post '/' do
       throw :halt, [400, 'bad request type'] unless request.content_type =~ %r|text/xml|
       headers 'Content-Type' => 'text/xml'
       begin
         @responce = @rpc.process(request.body.read) # lets read the content from the client and proccess it
       rescue RuntimeError
         header 'Content-Type' => 'text/plain'
         throw :halt, [400, 'bad request type']
       end # rescue
     end # post '/' do

   end # Application < Sinatra::Base
end # MyModule

And now Sinatra can sing again "New York New York" -> "If i can make it there, I'll make it anywhere"

האם הבראוזר באמת חשוב ?

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

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

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

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

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

דיבוג בעיות תקשורת ברשתות

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

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

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

מרוב תקלות ואבסורד לא רואים את היער

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

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

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

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

איך משווים בין מחורזות בג'אווה (הנה כמה אפשרויות) ?

"a" == "a"

"a".equals("a")

"a".compare("a")

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

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

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

יש לי לקוח אשר מחזיק router + ips בכלי אחד של Fortigate. יש לי כמה שרתי לינוקס אצלו ברשת (למעשה שרתים שלו שאני היחיד שנוגע בהם) והשאר זה הכל Windows. נטוויז'ן שמנהלים לו את הכלי הזה, החליטו ש ssh זה פרוטוקול לא מאובטח ולכן אני מחוייב להתחבר ב ssl vpn ואז משם אני יכול להתחבר לאן שאני רוצה ברשת, אם זה rdp או ssh.

כמה בעיות בגישה הזו:

  1. שניהם עובדים על אותו סוג מנהרה
  2. אני עדיין יכול לעשות מה שאני רוצה בתוך הרשת שלו
  3. יש לי עוד שכבה שיכולה/עושה בעיות ומאיטה את הרשת
  4. בשניהם אפשר להחליט איזו סוג הצפנה (עד כמה שאני יודע) אפשר להשתמש
  5. ב ssh אפשר לשים עוד כמה הגנות שאני לא יודע אם אפשר להכניס אותם ל ssl vpn

ככה שאני מאמין בלב שלם שנטוויז'ן טועים בקטע הזה.

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