को नियंत्रित करने के लिए रूबी डीएसएल में सुधार करने में मदद की ज़रूरत है। मैं एक Arduino परियोजना को नियंत्रित करने के लिए रूबी में एक डीएसएल लिख रहा हूं; Bardino। यह एक बार बंदर है जो पेय पदार्थों की सेवा के लिए नियंत्रित सॉफ्टवेयर होगा। Arduino Arduino को बताने के लिए सीरियल बंदरगाह के माध्यम से आदेश लेता है कि किस पंप चालू करने के लिए और कितनी देर तक।एक Arduino नियंत्रित पेय डिस्पेंसर (बार बंदर)
वर्तमान में यह एक नुस्खा पढ़ता है (नीचे देखें) और इसे वापस प्रिंट करता है। सीरियल संचार के लिए कोड को अभी भी कुछ अन्य विचारों के साथ-साथ नीचे उल्लिखित कुछ अन्य विचारों में भी काम करने की आवश्यकता है।
यह मेरा पहला डीएसएल है और मैं पिछले उदाहरण से काम कर रहा हूं, इसलिए यह किनारों के चारों ओर बहुत मोटा है। कोई भी आलोचना, कोड सुधार (रूबी डीएसएल सर्वोत्तम प्रथाओं या मुहावरे के लिए कोई अच्छा संदर्भ है?) या किसी भी सामान्य टिप्पणी।
मैं वर्तमान में डीएसएल का एक मोटा मसौदा तो एक पेय नुस्खा निम्नलिखित (Github link) की तरह लग रहा है:
desc "Simple glass of water"
recipe "water" do
ingredients(
"Water" => 2.ounces
)
end
यह बदले में व्याख्या की और वर्तमान में निम्नलिखित (Github link) के साथ परिणाम है:
[[email protected] barduino-tender]$ ruby barduino-tender.rb examples/water.rb
Preparing: Simple glass of water
Ingredients:
Water: 2 ounces
यह डीएसएल के लिए एक अच्छी शुरुआत है, हालांकि, मुझे लगता है कि इसे थोड़ा बेहतर कार्यान्वित किया जा सकता है। मेरे विचार नीचे दिए गए थे:
- परिभाषित करना कि सामग्री के नाम और उस संख्या पंप से कनेक्ट होने वाले "सामग्री" क्या हैं। शायद एक हैश का उपयोग कर? अवयव = {"पानी" => 1, "वोदका" => 2}। इस तरह, जब एक घटक का व्याख्या किया जाता है तो यह या तो ए) सीरियल बंदरगाह पर पंप संख्या भेज सकता है, इसके बाद Arduino के लिए औंस की संख्या के बाद औंस की संख्या बी) उपयोगकर्ता को बताएं कि घटक मौजूद नहीं है और निरस्त कर दिया गया है इसलिए कुछ भी नहीं है c) यदि वे बदल गए हैं तो आसानी से बदलने या नई सामग्री जोड़ने की क्षमता है।
- नुस्खा बनाना कम कोड जैसा दिखता है, जो एक डीएसएल का मुख्य उद्देश्य है, शायद एक नुस्खा निर्माता बना सकता है? उपयोगकर्ता को एक पेय नाम, सामग्री शामिल करने और कितना करने के लिए संकेत देने के लिए उपलब्ध सामग्री का उपयोग करना?
गीथब प्रोजेक्ट here है, फोर्क से मुक्त महसूस करें और पुल अनुरोध करें, या अन्य उपयोगकर्ताओं के लिए यहां अपने कोड सुझाव और उदाहरण पोस्ट करें। और यदि आप सभी उत्सुक हैं, रूबी आर्डिनो विकास ढांचे का उपयोग करते हुए Arduino कोड here है।
अद्यतन
मैं संशोधित और एक नुस्खा के लिए ओरियन एडवर्ड्स सुझाव प्रतिबिंबित करने के लिए एक सा साफ बातें। यह अब निम्न की तरह दिखता है।
description 'Screwdriver' do
serve_in 'Highball Glass'
ingredients do
2.ounces :vodka
5.ounces :orange_juice
end
end
मैंने एक हैश भी जोड़ा (कुंजी घटक और मूल्य जिस पंप संख्या को लगाया गया है)। मुझे लगता है कि यह बहुत प्रगति प्रदान की है। मैं अब के लिए किसी और सुझाव के लिए खुला प्रश्न छोड़ दूंगा, लेकिन आखिरकार ओरियन के जवाब का चयन करूंगा। अद्यतन डीएसएल कोड here है।
मिश्रण में कुछ छद्म कोड जोड़ने के लिए। सामग्री में घटक के लिए {if ingredient.exists? serial.send (pump_number) प्रतीक्षा करें 1 सेकंड serial.send (राशि) Arduino से ठीक के लिए प्रतीक्षा करें अगले घटक को जारी रखने के लिए} – mwilliams