【Python】JSONの扱い方
Pythonでは、JSON(JavaScript Object Notation)データを扱うために組み込みのjsonモジュールが用意されている。
JSONの読み込み
JSONデータをPythonオブジェクトに変換するには、json.load()
またはjson.loads()
メソッドを利用する。
import json # JSONファイルの読み込み with open('data.json', 'r') as file: data = json.load(file) # JSON文字列の読み込み json_string = '{"name": "Takahashi", "age": 24}' data = json.loads(json_string)
PythonオブジェクトからJSONへの変換
PythonオブジェクトをJSON形式の文字列に変換するには、json.dumps()
またはjson.dump()
メソッドを使用する。
import json data = {'name': 'Takahashi', 'age': 24} # PythonオブジェクトをJSONファイルに書き込む with open('data.json', 'w') as file: json.dump(data, file) # PythonオブジェクトをJSON文字列に変換 json_string = json.dumps(data)
JSONデータの操作
import json # JSONデータの読み込み with open('data.json', 'r') as file: data = json.load(file) # JSONデータの操作 data['name'] = 'Tanaka' data['age'] = 30 with open('data.json', 'w') as file: json.dump(data, file)
【Ruby】メソッドの可視性(public、protected、private)
【Ruby】メソッドの可視性(public、protected、private)
Rubyのメソッドには、public
protected
private
の3種類の可視性があります。
可視性の特徴
- public:すべてのインスタンスから実行できる(デフォルト)。
- protected:クラスの外からは呼び出せない。自分自身、またはサブクラスのインスタンスから実行できる。
- private:クラスの外からは呼び出せない。自分自身のインスタンスから実行できる。
可視性の変更
以下のようにしてメソッドに可視性を変更できる。
可視性の変更方法1
クラス内で可視性(public、protected、private)を書くと、以降のメソッドが指定した可視性に変更される。
class Baz # デフォルトはpublic def default_method "デフォルトのメソッド" end public def public_method "publicのメソッド" end protected def protected_method "protectedのメソッド" end private def private_method1 "privateのメソッド1" end # 可視性は直前のメソッドではなく、以降のメソッドに対して適用されるため、private_method2もprivateになる。 def private_method2 "privateのメソッド2" end end
可視性の変更方法2
変更したい可視性 :メソッド名
という記述でも、可視性を変更することができる。
class Baz def default_method "デフォルトのメソッド" end def public_method "publicのメソッド" end def protected_method "protectedのメソッド" end def private_method1 "privateのメソッド1" end def private_method2 "privateのメソッド2" end public :public_method protected :protected_method private :private_method1, :private_method2 end
public
publicが設定されたメソッドは、すべてのインスタンスから実行することができる。メソッドにはデフォルトでpublicが設定されている。
class Baz def default_method "デフォルトのメソッド" end public def public_method "publicのメソッド" end end Baz.new.default_method #=> "デフォルトのメソッド" Baz.new.public_method #=> "publicのメソッド"
protected
protectedが設定されたメソッドは、クラスの外からは呼び出すことができない。自分自身、またはサブクラスのインスタンスから実行できる。
class Baz protected def protected_method "protectedのメソッド" end end Baz.new.protected_method #=> NoMethodError
class Baz def initialize(a) @a = a end def default_method(a) "#{protected_method}, #{a.protected_method}" end protected def protected_method @a end end baz1 = Baz.new("baz1") baz2 = Baz.new("baz2") baz1.default_method(baz2) #=> "baz1, baz2"
private
privateが設定されたメソッドは、クラスの外からは呼び出すことができない。
class Baz private def private_method "privateのメソッド" end end Baz.new.private_method #=> NoMethodError
class Baz def initialize(a) @a = a end def default_method(a) "#{private_method}, #{a.private_method}" end private def private_method @a end end baz1 = Baz.new("baz1") baz2 = Baz.new("baz2") baz1.default_method(baz2) #=> NoMethodError
Makefileの書き方
Makefileをなぜ書くのか
make(メイク)は、プログラムのビルド作業を自動化するツール。コンパイル、リンク、インストール等のルールを記述したテキストファイル (makefile) に従って、これらの作業を自動的に行う。
つまり、コンパイルやリンクなどの一連の手順をMakefileに書いておけば、makeコマンドを実行するだけでコマンド実行などを自動的に行なってくれる。
Makefileの基本構造
Makefileに次のようなルールを書くことで、ビルド手順を指示する。
ターゲット : 前提条件 コマンド
- ターゲット:コマンドによって生成されるファイルの名称
- 前提条件:ターゲットを生成するために必要なファイル
- コマンド:makeが実行する動作
Makefileの例
main: main.c gcc main.c -o main
ターゲット・前提条件・コマンドは複数指定することができる。
main: main.c sub.c gcc main.c sub.c -o main
注意
Makefileでは、コマンドの先頭はタブで始める必要がある。
スペースだとエラーが発生する。
$ make Makefile:3: *** 分離記号を欠いています. 中止.
はてなブログの仕様により、タブがスペースに変換されるため、Makefileの例をコピペするとこのエラーが出るかもしれない。
コメント
Makefileでは、#から行末までの文字がコメントとして無視される。
# コメント main : main.c # コメント gcc main.c -o main # コメント
変数
変数名 = 値
で変数を定義し、$(変数名)
で変数の値を使う。
# 変数定義 SRC = main.c # 生成規則 main : $(SRC) gcc $(SRC) -o main
自動変数
Makefileでは、特別な意味を持つ変数(自動変数)がよく用いられる。
main : main.c gcc $^ -o $@ # gcc main.c -o main になる
自動変数一覧
変数名 | 意味 |
---|---|
$@ | ターゲットのファイル名 |
$% | ターゲットメンバーの名前 |
$< | 前提条件の一番最初の名前 |
$^ | 前提条件の全ての名前 |
$? | ターゲットよりも新しい全ての前提条件の名前 |
$+ | 前提条件の全ての名前(重複があっても省略しない) |
$* | ターゲットのパターンマッチに一致した部分文字列 |
詳しい説明はこのサイトに書いてある。
quruli.ivory.ne.jp
擬似ターゲット
Makefileのターゲットには、実際にはファイルの名前でない擬似ターゲットを指定することができる。
clean: rm *.o
このように記述すると、make clean
と入力するとrm *.o
コマンドが実行される。
ただし、cleanファイルが存在する場合、ターゲットは正しく機能しない。
$ make clean make: 'clean' は更新済みです.
この問題を解決するために、cleanが擬似ターゲットであることを明示的に宣言する必要がある。
.PHONY: clean clean: rm *.o
【rlwrap】Ocamlの対話式コンパイラで矢印キーを使う方法
はじめに
$ ocaml Ocaml version 4.12.0 #
矢印キーを用いて、テキストカーソルを移動させたり、過去に入力した内容を表示させることが出来ない。
# 1 + 2;; - : int = 3 # ^[[A
この問題はrlwrapを用いることで解決できる。
rlwrap
rlwrapをインストールする。
$ sudo apt install rlwrap
rlwrapを使ってOcamlを起動する。
$ rlwrap ocaml Ocaml version 4.12.0 #
↑キーを押して過去に入力した内容を表示出来ることを確認する。
# 1 + 2;; - : int = 3 # 1 + 2;;
rlwrap ocaml
と入力するのは面倒なので、bash設定ファイルにエイリアスを設定する。
echo "alias ocaml='rlwrap ocaml'" >> ~/.bashrc source ~/.bashrc
【Ubuntu】マウスホイールのスクロール量の調節【imwheel】
やったこと
Ubuntuを使っていて、マウスホイールのスクロール速度が遅いと思ったので、imwheelを使ってスクロール量を調節した。
imwheelとは
imwheel はマウスホイールの挙動をプログラムごとに調整するツールです。マウスホイールの入力をキーボードの入力にマッピングしたり、マウスホイールの速度を上げたりすることができます。修飾キーもサポートしています。
imwheelのインストール
次のコマンドでインストールできる。
$ sudo apt install imwheel
次のコマンドでimwheelを実行できる。
$ imwheel INFO: imwheel started (pid=6368)
imwheelを実行すると、マウスホイールのスクロール速度が速くなった。
imwheelの設定ファイル
imwheelのデフォルトの設定は/etc/X11/imwheel/imwheelrc
に書かれている(公式のドキュメントではetc/X11/imwheelrc
に設定ファイルがあるらしいが、私の環境では/etc/X11/imwheel/imwheelrc
にあった)。
この設定ファイルを編集することで、imwheelが変更するマウスホイールの挙動を細かく設定できる。ただし、このファイルを編集すると全ユーザの設定が変更されるため、今回は~/.imwheelrc
を作成・編集する(~/.imwheelrc
の内容は1ユーザにしか適用されない)。
スクロール量を変更
.imwheelrcを編集してスクロール量を変更する。
# chromeのみに適用 "chrome" None, Up, Button4, 5 None, Down, Button5, 5 # 全てのプログラムに適用 ".*" None, Up, Button4, 10 None, Down, Button5, 10
上の行の設定の方が優先度が高く設定されるため、全てのプログラムに適用する".*"
は、他の設定を上書きしないように最後に書く。
imwheelの設定を適用
次のコマンドで、imwheelを再起動して設定を適用させる。
$ imwheel -k
おまけ
imwheelの設定をGUIで行えるプログラムを、公開してくれている人がいたので使ってみる。
http://www.nicknorton.net/?q=node/10www.nicknorton.net
次のコマンドを入力すると、imwheelの設定画面が表示される。
$ bash <(curl -s http://www.nicknorton.net/mousewheel.sh)
設定画面のMouse wheel speedを変更し、Applyを押すと設定が適用される。