ためすう

Python で os.path.splitext を使ってみる

2019-09-09

やったこと

os.path.splitext を使ってみます。

確認環境

$ 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 os
>>> os.path.splitext('hogehoge/hoge2/sample.jpg')
('hogehoge/hoge2/sample', '.jpg')
>>> os.path.splitext('hogehoge/hoge2/sample.jpg')[0]
'hogehoge/hoge2/sample'
>>> os.path.splitext('hogehoge/hoge2/sample.jpg')[1]
'.jpg'
>>> os.path.splitext('~/.bashrc')
('~/.bashrc', '')

ファイルのパスと拡張子を分割します。

参考

numpy.random.choice を使ってみる

2019-09-08

やったこと

numpy.random.choice を使ってみます。

確認環境

$ 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'

調査

0以上5未満の数字を3個選びます。

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

また、確率も指定できます。

>>> np.random.choice(5, 3, p=[0.1, 0.1, 0, 0, 0.8])
array([4, 4, 4])
>>> np.random.choice(5, 3, p=[0.1, 0.1, 0, 0, 0.8])
array([1, 4, 4])
>>> np.random.choice(5, 3, p=[0.1, 0.1, 0, 0, 0.8])
array([4, 4, 4])
>>> np.random.choice(5, 3, p=[0.1, 0.1, 0, 0, 0.8])
array([4, 4, 0])

実行する度に、変わっていることが分かります。

参考

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

参考