ためすう

numpy.zero_like を使ってみる

2019-09-08

やったこと

numpy.zero_like を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

>>> x = np.arange(6)
>>> x = x.reshape((2, 3))
>>> x
array([[0, 1, 2],
       [3, 4, 5]])
>>> np.zeros_like(x)
array([[0, 0, 0],
       [0, 0, 0]])

x と同じ形で、更に0で初期化されている行列になっています。

参考

numpy.zeros を使ってみる

2019-09-08

やったこと

numpy.zeros を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

>>> import numpy as np
>>> np.zeros(5)
array([0., 0., 0., 0., 0.])
>>> np.zeros((3, 3))
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> np.zeros((4, 2))
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.]])

参考

Google Colaboratory でファイルをダウンロードする

2019-09-08

やったこと

Google Colaboratory 上に作成したファイルをダウンロードします。

調査

output.zip ファイルがあるとします。

!ls

出力結果

output.zip

ファイルをダウンロードする

from google.colab import files
files.download("output.zip")

参考

Ruby で pry を使ってみる

2019-09-02

やったこと

gem の pry を使ってデバッグしてみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

gem のインストール

$ gem install pry-byebug

ruby ファイルの準備

ruby-pry.rb

require 'pry'

class Sample
  attr_accessor :hoge, :fuga

  def initialize
    @hoge = 'hogehoge1'
    @fuga = 'fugafuga2'
  end

  def hey
    'hey'
  end
end

s = Sample.new
binding.pry

p s.hey
s.hoge = 'hogehoge'
p 'end'

ファイル実行

$ ruby ruby-pry.rb

From: /path/ruby-pry.rb @ line 19 :

    14: end
    15:
    16: s = Sample.new
    17: binding.pry
    18:
 => 19: p s.hey
    20: s.hoge = 'hogehoge'
    21: p 'end'

[1] pry(main)> step

From: /path/ruby-pry.rb @ line 12 Sample#hey:

    11: def hey
 => 12:   'hey'
    13: end

[1] pry(#<Sample>)> next
"hey"

From: /path/ruby-pry.rb @ line 20 :

    15:
    16: s = Sample.new
    17: binding.pry
    18:
    19: p s.hey
 => 20: s.hoge = 'hogehoge'
    21: p 'end'

[1] pry(main)> s.hoge
=> "hogehoge1"
[2] pry(main)> next

From: /path/ruby-pry.rb @ line 21 :

    16: s = Sample.new
    17: binding.pry
    18:
    19: p s.hey
    20: s.hoge = 'hogehoge'
 => 21: p 'end'

[2] pry(main)> s.hoge
=> "hogehoge"
[3] pry(main)> exit
"end"
  • step: 関数の中に入る
  • next: 次の行を実行
  • exit: 終了

参考

Ruby で casecmp を使ってみる

2019-09-02

やったこと

Ruby で casecmp を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

$ irb
...
irb(main):007:0> words = ['abc', 'Abc', 'ABC', 'aaa']
=> ["abc", "Abc", "ABC", "aaa"]
irb(main):008:0> words.each do |r|
irb(main):009:1*   p r.casecmp('abc')
irb(main):010:1>   p 'abc'.casecmp(r)
irb(main):011:1>   p 'end!!!'
irb(main):012:1> end
0
0
"end!!!"
0
0
"end!!!"
0
0
"end!!!"
-1
1
"end!!!"
=> ["abc", "Abc", "ABC", "aaa"]

参考

OpenAPI Generator を使ってみる

2019-08-27

やったこと

OpenAPI Generator を使ってみます

スタブサーバーを作成する

$ GENERATOR=spring
$ docker run --rm -v ${PWD}:/local \
  openapitools/openapi-generator-cli generate \
  -i /local/openapi.yaml \
  -g ${GENERATOR} \
  -o /local/out/${GENERATOR} \
  --additional-properties returnSuccessCode=true
$ docker run --rm -v ${PWD}:/usr/src/mymaven \
  -w /usr/src/mymaven maven mvn package
$ docker run --rm -p 3000:3000 \
  -v ${PWD}:/usr/src/myapp -w /usr/src/myapp \
  java java -jar target/openapi-spring-1.0.0.jar

http://localhost:3000/posts にアクセスして、モックのデータを取得することができました。

その他

  • python-flask
  • ruby-on-rails

flask や rails もあったのですが、都度実装が必要そうでした。

参考

  • WEB+DB vol.108

Swagger UI を使ってみる

2019-08-26

やったこと

Swagger UI を使ってみます

調査

Swagger UI を表示する環境を準備

$ docker pull swaggerapi/swagger-ui
$ docker run -p 80:8080 swaggerapi/swagger-ui

http://localhost:8080/ で Swagger UI が利用できるようになります。

Swagger UI から Web API サーバーへアクセスできるようにする

Gemfile

gem 'rack-cors', :group => :development
$ bundle install

config/initializers/cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :options]
  end
end

openapi.yml はこの記事で書いたものを利用します。

※ public ディレクトリに配置しました。

http://localhost:3000/openapi.yml で Exploreすると利用できます。

課題

実運用するときには、外から見えない位置に openapi.yml を配置する必要があると思いました。

参考

Swagger Editor を使ってみる

2019-08-25

やったこと

Swagger Editor を使ってみます

調査

Swagger Editor を github から clone する

$ git clone https://github.com/swagger-api/swagger-editor.git

ローカルで Swagger Editor を起動する

$ open swagger-editor/index.html

Swagger Editor を書いてみる

例は下記です。

# swaggerのバージョン定義
openapi: "3.0.2"
info:
  title: "タスク情報API"
  version: "1.0.0"
  description: "desc...."
servers:
  - url: http://localhost:3000
    description: Local server
paths:
  /tasks/show:
    get:
      description: タスク詳細を取得する
      operationId: getTask
      parameters:
        - $ref: '#/components/parameters/taskIdParam'
      responses:
        '200':
          $ref: '#/components/responses/Task'
components:
  schemas:
    Task:
      type: object
      properties:
        task:
          $ref: '#/components/schemas/TaskProperties'
    TaskProperties:
      type: object
      properties:
        id:
          type: integer
          example: 1
        name:
          type: string
          example: 'タスク1'
  parameters:
    taskIdParam:
      name: taskId
      in: path
      description: タスクのID
      required: true
      schema:
        type: integer
  responses:
    Task:
      description: タスクレスポンス
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Task'

イメージ

Swagger Editor

参考

Rails で autodoc を使ってみる

2019-08-25

やったこと

Rails で API ドキュメントを生成する autodoc を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

Gemfile

group :development, :test do
  # ... something
  gem 'autodoc'
end
$ bundle install

app/controllers/tasks_controller.rb

class TasksController < ApplicationController
  def show
    point = Struct.new(:x, :y)
    tmp = point.new(111, 222)

    render :json => tmp.to_json
  end
end

rspec の実行 + APIのドキュメント生成

spec/requests/task_apis_spec.rb

require 'rails_helper'

RSpec.describe "TaskApis", type: :request do
  describe "GET /tasks/show" do
    it "works! (now write some real specs)", :autodoc do
      parameters = {id: 100, id2: 222}
      get '/tasks/show', params: parameters
      expect(response).to have_http_status(200)
    end
  end
end
$ AUTODOC=1 bundle exec rspec spec/requests/task_apis_spec.rb

出力結果

doc/task_apis.md に出力されます。

今回は、内容をキャプチャに記載します。

autodoc結果

参考

Python の zip 関数を使ってみる

2019-08-23

やったこと

Python の zip 関数を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zip(x, y)
<zip object at 0x10ef954c8>
>>> for a, b in zip(x, y):
...   print(a, b)
...
1 4
2 5
3 6

参考