k01ken’s b10g

He110 W0r1d!

PythonでJSONデータを読み込み、処理する

開発環境は、Windows 10 Pro(64bit) + Python 3.7.6。

PythonJSONをパースする場合、組み込みのパッケージであるjsonパッケージを使います。
使い方には、JSONファイル自体を読み込む場合と、JSON形式の文字列の場合の2パターンがあります。

JSONファイルを読み込む場合

試しに、以下のjsonファイルをprof.jsonという名前で保存します。

{
  "name": "Json Taro",
  "age": 10,
  "hobby": "Writing json"
}

次にJSONパースするためのPythonのプログラム(名前はparser.pyとします)を書きます。

import json

json_file = open("prof.json", "r")
print(json.load(json_file))

結果は、以下の通り。
f:id:k01ken:20210608223939p:plain

個別にデータを取り出す場合は、

import json

json_file = open("prof.json", "r")
loaded_json_file = json.load(json_file)

print(loaded_json_file["name"])
print(loaded_json_file["age"])
print(loaded_json_file["hobby"])

f:id:k01ken:20210608225929p:plain
という風にします。

JSON形式の文字列を処理する場合

import json

json_string = '{"name": "Json Hanako", "age":13, "hobby": "Writing json."}'
loaded_json_string = json.loads(json_string)

print(loaded_json_string["name"])
print(loaded_json_string["age"])
print(loaded_json_string["hobby"])

結果は以下のようになります。
f:id:k01ken:20210608230502p:plain

コマンドラインからJSON文字列を処理する場合

Pythonコマンドライン引数を取得する場合、受け取った文字列にスペースがある場合は、スペースの直前までしか、文字列として取得できません。その場合は、ダブルクォーテーションで囲う必要があります(シングルクォーテーションだと機能しない)。また、ダブルクォーテーションの中でダブルクォーテーションを使いたければ、\"としておかないといけません。コマンドライン引数で、JSON形式の文字列を渡す場合、以下のようになります。

python parser.py "{\"name\": \"Json Hanako\", \"age\":13, \"hobby\": \"Writing json.\"}"

受け取るPythonファイルは以下のようになります

import json
import sys

json_string = sys.argv[1]
loaded_json_string = json.loads(json_string)

print(loaded_json_string["name"])
print(loaded_json_string["age"])
print(loaded_json_string["hobby"])

結果は以下のようになります。
f:id:k01ken:20210608233413p:plain

習慣化すること① 早く寝て、睡眠時間をしっかりと取る

1つ1つシンプルな行動を習慣化することで、自分を変えてみたいと思い、今日から行うこの企画。

何を習慣化するのか優先順位を考えると、起きている間のあらゆることのパフォーマンスに関わるので、睡眠が最上位に来ると思って、まず、夜、しっかり寝ることから習慣化しようと考えました。

そのための対策として、

  • 何時に寝るのかを先に明確に決める

 →(具体例: 22時30分になったら、ベッドに入る

  • 寝ることを先延ばしする行動を先にどんどんやっておく、あるいは、やめる

 →(具体例: 今日まだやっていない習慣化された行動をさっさと行う、ついついネットを見ることをやめる
を実践することにしました。

Vuetifyの用途別の使い方まとめ

開発環境は、Windows 10 Pro(64bit) + vue 2.6.12 + vuetify 2.4.11。

■始めに

Vuetifyでは、ルートとなるコンポーネントには、template部分に、v-appタグで囲っておかないといけない。
■参考リンク
Application

■指定の要素を中央に寄せたい

※中央に寄せたい要素(block属性の場合)のclass属性に、mx-autoを指定します。
f:id:k01ken:20210606232153p:plain

<template>
  <v-main>
    <v-card elevation="3" class="mx-auto" max-width="360">
      <v-container class="spacing-playground pa-10">
        <v-text-field label="メールアドレス"></v-text-field>
	<v-text-field label="パスワード"></v-text-field>
	<v-btn color="primary">ログイン</v-btn>
      </v-container>
    </v-card>
  </v-main>
</template>

■v-btnの位置を右に寄せたい

※v-btnはdisplayがinline-flexなので、親要素にdivタグを追加し、そのclass属性に、d-flex justify-end ~を追加した。
f:id:k01ken:20210607071711p:plain

<template>
  <v-main>
    <v-card elevation="3" class="mx-auto" max-width="360">
      <v-container class="spacing-playground pa-10">
        <v-text-field label="メールアドレス"></v-text-field>
	<v-text-field label="パスワード"></v-text-field>
        <div class="d-flex justify-end mb-6">
	  <v-btn color="primary">ログイン</v-btn>
        </div>
     </v-container>
   </v-card>
  </v-main>
</template>

■参考リンク
flex

Vue CLIを使う際に知っておきたいポイント

開発環境は、Windows 10 Pro(64bit) + node 14.17.0 + npm 6.14.13 + @vue/cli@4.5.12 + Vue 2.6.12。

Vue CLIを使っていて、自分が知っておきたいポイントをメモしておきます。

■新しいコンポーネントを追加した際にホットリロードを反映させたい

※Vue CLIの対話の中でvue-routerを入れている、typescriptを使っている前提で説明します
例えば、以下のファイルを、Signup.vueという名前で、src/viewsディレクトリに入れるとします。

<template>
  <div>
    <h1>Signup.vue</h1>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
  name: 'Signup',
  data: () => ({})
})
</script>

<style scoped>
</style>

次に、src/routerディレクトリ内のindex.tsを開いて、routes変数に入れる配列内の要素の末尾に、以下のオブジェクトを追加します。

{
  path: '/signup',
  name: 'Signup',
  component: () => import('../views/Signup.vue')
}

これによって、Signup.vueを更新するたびに、ホットリロードが反映されます。

自分の問題を解決する方法

自分が今抱えている問題を解決する自分なりの方法を紹介したいと思います。

  1. 自分が思いつく限りの問題を書き出す
  2. 1つの問題に対し、思いつく限りの原因を書き出す
  3. 1つの原因を1つの問題として、さらにその原因を思いつく限り書き出す
  4. 複数の問題に共通する1つの原因を見つけ、それを優先して、解決する策を考える
  5. 解決策を実行して、結果として、どうなったのかを検証する

Go言語のGinとVue CLI間でHTTP Cookieのやりとりをする

開発環境は、Windows 10 Pro(64bit)。

フロントエンドがVue.js、バックエンドがGin(Go言語)とした場合、開発時に、Go言語のマイクロWebフレームワークであるGinのWebサーバーと、Vue.JSの開発ツールであるVue CLIの開発用Webサーバー間で、それぞれ違うポート番号のlocalhostドメインでWebサーバーを立ちあげた際に、HTTP Cookieの有無によって、動作を変更したい場合、HTTP Cookieを渡そうとするとWebブラウザのCORS対策でうまく動作しません。今回は、その対策について書いてみます。

物事を習慣化させる方法

物事を習慣化するためのテクニックとして、

  1. 徹底してハードルを下げたものを最初は始める。もし、継続できなかったら、ハードルを一段階下げて、継続できるまでそれを繰り返す。この部分では、徹底して、自分のペースで、自分に甘くする。
  2. すでに習慣化されている行動の後に、新しい習慣をつける
  3. 新しい1つの習慣が定着するまで、あせって他の習慣は身に着けない
  4. 既存の習慣と矛盾するような習慣、阻害するような習慣を取り入れない

物事を習慣化することによって、大した労力を使うことなく、逆に、やらないと気持ちが悪いという精神状態に自然となれます。

ただ、闇雲に何でも習慣化すればいいわけじゃなくて、問題となっている原因を掘り下げて、その原因を解決することを習慣化しないといけない。

例えば、夜更かしをどうしてもしてしまって、朝起きるのが、つらいという場合、早寝することを習慣化したいとします。そこで、なぜ、夜更かしをするのか?と考えた時に、その主な原因として、考えられることは、インターネットをダラダラとやってしまうことだとします。

原因が分かったところで次に、その原因を解決する方法を考えます。例えば、夜10時以降は、インターネットをしない、というのを、習慣化すべき行動目標とした時に、それを実践します。

できなければ、夜10時30分以降は、インターネットをしないという風にハードルをさらに下げるか、それとも、インターネットを使う目的を紙に書かない限り、インターネットに接続しない、また、紙に書いたことを行ったら、すぐに接続を切るなど、別の行動目標を作っても構いません。