API>CLI>우주 탐사

16423 단어 rubyoopcliapi
나는 Flatiron 학교의 첫 번째 정점 프로젝트에 대해 비할 바 없이 흥분했다.8주가 순식간에 지나갔다.
남편과 나는 최근 2014년 과학 다큐멘터리Cosmos: A Spacetime Odyssey를 봤고 천체 물리학자 닐 데그라스 타이슨(Neil Degrasse Tyson)이 연출했다.나는 타이슨이 이른바'상상의 배'를 통해 이야기를 하는 방식에 놀랐다. 그곳에서 그는 시공을 초월해 우주를 탐색하고 해석했다.이 다큐멘터리 시리즈는 나의 CLI(명령행 인터페이스) 프로젝트 분야의 모델링, 공간 탐색에 기여했다.

RESTful API 검색


다음 재미있는 연습은 HTML에서 적당한 데이터를 추출하거나 RESTful API에서 원격 데이터 원본을 가져오는 것이다.나는 내가 매우 좋아하는 두 개의 API를 발견했다.하나는 나에게 행성 데이터를 제공했고, 다른 하나는 우주선 데이터를 제공했다.나의 첫 번째 방법은 이 원격 데이터 원본을 검색하고 내 영역 모델링에서 데이터를 조작하는 것이다.
class API 

    def self.space_data
        url = 'https://...'
        uri = URI.parse(url)
        response = Net::HTTP.get_response(uri)
        response.body

        space_data = JSON.parse(response.body)["bodies"]
    end 
    # => 'json' module returns Ruby hashes with key and value pairs

    def self.planets
        planets = []

        space_data.each do |data|
            if data["isPlanet"] == true
                planets << data["englishName"]
            end 
        end 

        planets 
    end 
    # => ["1 Ceres", "136199 Eris", "Uranus", "Pluto", "Neptune",...

    def self.planet_info(name)
        space_data.detect do |data|
            if data["englishName"] == name 
                puts "Name: " + data["englishName"].to_s
                puts "  Mean Radius: " + data["meanRadius"].to_s + " kilometres"
                puts "  Density: " + data["density"].to_s + " g.cm3"
                puts "  Gravity: " + data["gravity"].to_s + " m.s-2"
                puts "  Perihelion: " + data["perihelion"].to_s + " kilometres"
                puts "  Aphelion: " + data["aphelion"].to_s + " kilometres"
                if data["discoveredBy"] != ""
                    puts "  Discovered by: " + data["discoveredBy"].to_s
                end 
                if data["discoveryDate"] != ""
                    puts "  Discovery Date: " + data["discoveryDate"].to_s
                end 
            end 
        end 
    end 
    # => self.planet_info("Uranus")
    # => Name: Uranus
    # => Mean Radius: 25362.0 kilometres
    # => Density: 1.27 g.cm3
    # => Gravity: 8.87 m.s-2
    # => Perihelion: 2734998229 kilometres
    # => Aphelion: 3006318143 kilometres
    # => Discovered by: William Herschel
    # => Discovery Date: 13/03/1781

    def self.spacecraft
        url = 'https://...'
        uri = URI.parse(url)
        response = Net::HTTP.get_response(uri)
        response.body

        spacecraft = JSON.parse(response.body)
    end
    # => 'json' module returns Ruby hashes with key and value pairs

    def self.spacecraft_info 
        spacecraft.each do |ship|
            puts ship["rocket_name"].to_s 
            puts ship["description"].to_s
            puts "  Height: " + ship["height"]["feet"].to_s + " feet"
            puts "  Mass: " + ship["mass"]["lb"].to_s + " lbs"
            puts "  Success Rate: " + ship["success_rate_pct"].to_s + "%"
        end 
        nil 
    end 
    # => Falcon 1
    # => The Falcon 1 was an expendable launch system privately developed and...
    # =>   Height: 73 feet
    # =>   Mass: 66460 lbs
    # =>   Success Rate: 40%
    # => Falcon 9
    # => Falcon 9 is a two-stage rocket designed and manufactured by SpaceX...
    # => ..

end

영역 모델링 디자인


세 개의 주요 모델(또는 클래스)이 있습니다.그들은 우주인, 우주선, 행성이다.상호 간의 세 가지 주요 객체 관계는 다음과 같습니다.
우주비행사는 많은 우주선을 가지고 있다
우주 비행사는 우주선을 통해 많은 행성을 방문한다
우주선은 우주인에 속하거나 많은 우주인이 있다
우주선이 행성에 착륙하다
이 행성은 우주선에 속한다
이 별에는 많은 우주인들이 우주선을 통과한다
CLI 클래스는 도메인 모델링에서 상호 작용을 허용하고 API 클래스는 사용자에게 응답을 제공합니다.나는 모든 종류의 직책을 보여 주는 전체적인 제어 흐름도를 만들었다.그들은 진실한 세계를 모방한 우주 탐색에 속하고 많은 관계를 가지고 있다.

여정은 국제 우주정거장에서 시작된다.사용자, 우주인 한 명이 그의 이름과 다년간의 우주 여행 경험을 입력할 것이다.사용자는 또 다른 우주인을 추가해서 기조를 구성할 수도 있다.세 개의 기존 우주선 선택이 있을 것이다.그것들은 SpaceX 우주선이며, 데이터는 SpaceX RESTful API에서 제공한다.사용자는 Planet, Dwarf Planet or Asteroid 을 목적지로 선택할 수 있습니다.은하계에서 단일 행성 속성은 our Solar System에 불과하다.행성의 중력이 0.0과 같을 때, 우주선은 착륙할 수 없을 것이다.우주 비행사와/또는 우주 비행사가 그들의 첫 번째 목적지에 도착했을 때, 여정은 멈추지 않을 것이다.이것은 사용자의 현재 위치에 따라 가장 가까운 행성부터 다른 목적지까지의 여행 선택의 연속적인 순환이 될 것이다.모두 13개의 행성, 273개의 왜소행성과/또는 소행성이 있다.만약 우주선의 성공률이 50%보다 낮으면 우주팀은 다시 국제 우주정거장으로 돌아가 서로 다른 우주선을 선택해야 한다.사용자는 또 다른 우주인을 추가할 수도 있다.사용자가 우주여행을 마치면 전체 우주기조원들은 국제 우주정거장으로 돌아가 이번 임무에 참여한 우주인 명단, 선정된 우주선과 방문한 행성에 대한 간략한 기록을 첨부할 것이다.

루비 환경 설정


루비 gemspecconfig/environment.rb 를 설정하는 데 시간이 걸렸다는 것을 인정해야 합니다.나는 비디오 강좌를 보고 간단한 bash 명령을 배우기로 결정했고 기본 루비 환경을 설정하는 데 매우 유용하다는 것을 발견했다.나는 ./bin/console 를 나의 실시간 IRB 세션으로 설정했다. 이것은 모든 종류와 실례 방법, 그리고 binding.pry 을 테스트할 때 매우 유용하다. 특히 원격 데이터 원본을 조작할 때 매우 유용하다.그들은 나의 루비의 가장 친한 친구가 되었다../bin/space_exploration는 사용자의 시작점입니다. 촉발SpaceExploration::CLI.new.
나는 재미있는 루비를 탐색했다.require_all 중복 사용을 대체하는 데 도움이 됩니다require_relative.원격 데이터 소스를 가져오는 데 사용되는 GEM에는 open-uri, net/httpjson 이 거의 없습니다.나는 건축가로 설계가 나의 업무에서 커다란 역할을 발휘하고 있다.나는 내가 제공한 사용자 인터페이스가 좋을수록 나의 응용 프로그램과 상호작용하는 사용자 체험이 좋다고 믿는다.colorizelolize는 놀라운 루비로 더 많은 색을 추가할 수 있다.제출 후 더 많은 Ruby gems를 탐색할 계획입니다.
한편, 학습git은 개인의 또 다른 이정표적 성과이다.나는 이제 수동으로 나의 환매를 GitHub에 제출하고 전체적으로git를 이해하는 데 익숙해졌다.나는 가능한 한 빨리 나의 GitHub 환매를 조직할 것을 건의받았다. 왜냐하면 시간이 지날수록 더 많은 환매가 제출되기 때문이다.

명령줄 인터페이스, 클래스 및 모듈


API, CLI 및 기타 클래스를 개발할 때 주요 과제는 할당 책임입니다.몇 번이나 나는 종류와 실례 방법을 잘못 분배했다. 왜냐하면 그것은 더욱 복잡해졌기 때문이다.모든 모델이나 클래스는 자신의 행위와 속성 집합을 가지고 있으며, 신중한 방법은 각 집합이 어떤 종류에 속하는지 이해하는 것이다.코드를 다시 분해하는 것은 건조함을 유지하기 위해 반드시 없어서는 안 될 일상적인 작업이 되었다.이 모듈을 만드는 것은 모든 클래스에 나타나는 중복 코드를 흡수하기 위해서입니다.개체 관계가 정의되면 다시 액세스할 수 있는 또 다른 분해 연습입니다.
일주일 동안의 프로젝트가 완성되는 과정에서 나는 필사적으로 코드를 작성한 후에 돌아가서 나의 전체 대상 관계를 재평가했다.CLI 클래스에 많은 시간이 걸렸습니다.이것이 바로 나의 대부분의 코드가 있는 곳이다.하나의 예는 다양한 사용자를 위한 설정 if/else 또는 case/when 조건을 입력하는 것입니다.잘못된 사용자 입력을 받았을 때 원시 실례 방법으로 되돌아갈 수 있도록 추가 실례 방법을 만들어야 합니다.다른 감지의 효과적인 피드백을 위태롭게 하는 방법을 피하기 위한 논리는 매우 유용하다.
전반적으로 말하자면, 나는 루비: 대상을 대상으로 프로그래밍(OOP)을 더욱 깊이 이해할 수 있어서 매우 기쁘다.나는 지난달에 기본적인 루비 프로세스 프로그래밍 개념만 장악한 것을 기억한다.Ruby OOP는 대상 관계와 체계 구조에서 메타프로그래밍까지의 실제 응용에서 매우 강한 노봉성을 가지고 있다.나는 Flatiron 학교에서 다음에 무엇을 제공할 것인지 지체없이 알고 싶다.

핀티비트 / CLISpaceExploration 회사


당신의 우주 탐사에 오신 것을 환영합니다. 그곳에서 당신은 당신의 우주 선원을 선택하고, 당신이 가장 좋아하는 우주선(SpaceX가 동력을 제공), 그리고 우리 태양계의 무수한 행성을 선택할 수 있습니다!


우주 탐사



우주 여행
당신의 우주 탐사에 오신 것을 환영합니다. 그곳에서 당신은 당신의 우주 선원을 선택하고, 당신이 가장 좋아하는 우주선(SpaceX가 동력을 제공), 그리고 은하계의 무수한 행성을 선택할 수 있습니다!
YouTube Demo

에 관하여


여정은 국제 우주정거장에서 시작된다.사용자, 우주인 한 명이 그의 이름과 다년간의 우주 여행 경험을 입력할 것이다.사용자는 또 다른 우주인을 추가해서 기조를 구성할 수도 있다.세 개의 기존 우주선 선택이 있을 것이다.그것들은 SpaceX 우주선이며, 데이터는 SpaceX RESTful API에서 제공한다.사용자는 행성, 왜소행성 또는 소행성을 목적지로 선택할 수 있다.단일 행성 속성은 우리 은하계의 태양계에만 한정된다.행성의 중력이 0.0과 같을 때, 우주선은 착륙할 수 없을 것이다.여정은..
View on GitHub
포스트 스크립트:
이것은 내가 Flatiron 학교의 모듈 1정석 프로젝트다.나는 우수한 프로그래머가 되는 촉매제 중 하나가 건설적인 비판을 환영하는 것이라고 믿는다.마음대로 메모 남겨주세요.🙂
냉정을 유지하고 계속하다.
외부 소스:
Wikipedia
ASCII Art Archive
fentybit | GitHub | |

좋은 웹페이지 즐겨찾기