ארכיון יומי: 19 מרץ, 2009

עבודה עם HTTParty

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

הטיפ מראה איך לממש 2 דברים:

  1. עבודה עם HTTParty
  2. השני הוא הדגמה איך לתרגם טקסטים בצורה פשוטה תוך שימוש ב Google Translate.
1 #!/usr/bin/env ruby
2
3 require 'rubygems'
4 require 'httparty'
5
6 class GoogleApi
7   include HTTParty
8   base_uri 'ajax.googleapis.com'
9
10   def self.translate(string="", to="", from="iw")
11     get("/ajax/services/language/translate", :query => {:langpair => "#{from}|#{to}", :q => string, :v => 1.0})
12   end
13 end
14
15 GoogleApi.translate("שלום עולם", "en")

השתמשנו ב GoogleApi.translate בשביל לבצע תרגום בשבילנו. התוצאה שזה נתן היא זו:

{"responseData"=>{"translatedText"=>"Hello World"}, "responseDetails"=>nil, "responseStatus"=>200}

כמו שאפשר לראות, מאוד פשוט לבצע פעולות REST עם HTTParty ולקבל תוצאות.

את התיעוד עבור Google Translate ניתן למצוא כאן.

ביצוע Binding שמי במסדי נתונים

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

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

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

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