スプレッド演算子

スプレッド演算子とは

スプレッド構文 - JavaScript | MDN によると、

関数呼び出しでは 0 個以上の引数として、Array リテラルでは 0 個以上の要素として、Object リテラルでは 0 個以上の key-value のペアとして、Array や String などの iterable オブジェクトをその場で展開します

とあります。自分なりの言葉でいうと、 iterableオブジェクト(順番に値を取り出せるオブジェクト)をその場で展開してくれるものといった感じでしょうか。

プログラム

以下ではプログラムを通じてスプレッド演算子の 使い方を例示していきます。

配列の結合

// 配列をpushする。
let arrA = [0, 1, 2];
let arrB = [3, 4, 5];

// 以下は、errorとなる。引数に配列を持てないため
arryA.push(arrB);
// スプレッド演算子(...)を用いると
// iterableオブジェクト(順番に値を取り出せるオブジェクト)をその場で展開してくれる
arrA.push(...arrB);

// スプレッド演算子を使わないケースは以下の通り
arrC = Array.prototype.push(arrA, arrB)
console.log(arrC);

配列の中から最大値を取得

// 最大値
let arrD = [1, 2, 3, 4, 5];
// 配列を引数に持つことが出来る。
console.log(Math.max(...arrD));
// 通常のケースだとapplyを用いて引数を配列化
// 第一引数はthisを指定出来るが、使わないため、null
console.log(Math.max.apply(null, arrD))

分割代入

// 分割代入
// 配列やオブジェクトの要素を取り出して個別の変数に代入する
let aryE = [1, 2, 3];
let [a, b, c] = aryE;
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

参考サイト

JSのスプレッド演算子を理解する

geth 起動方法、contractデプロイ

geth 起動方法

# port指定する
$ geth --datadir ./myDataDir --networkid 1114 -port 7545 --rpc console 2>> myEth.log

# ログ見るために
$ tail -f myEth.log
# アカウント作成
> personal.newAccount("<YOUR_PASSPHRASE>")
# Check your default account, type
> eth.coinbase
# To set your default account, type 
> miner.setEtherbase(web3.eth.accounts[0])
# Check your balance with 
> eth.getBalance(eth.coinbase)
# Run
> miner.start()
# end mining
> miner.stop()

command(geth上)

# 初期化 初回のみ 18000sアカウントを解除
personal.unlockAccount("0xb76be8f5914ca4ece4527ef7f065e64739aa52eb","<YOUR_PASSPHRASE>", 18000)

command(truffleディレクトリ)

# インストール 初回のみ
npm install --save truffle
# 初期化 初回のみ
$ truffle init
# contracts フォルダにcontract記述しておくことー
# contract compile
$ truffle compile
# build/contractsにファイル出来る。
# migrationファイル作成する。
$ truffle migrate --devlopment --rpc

設定ファイル

# truffle.js
# gasの量が少ないとデプロイ出来ない
module.exports = {
   networks: {
   development: {
   host: "localhost",
   port: 7545,
   network_id: 1114, // Match any network id
   gas: 2500000
  }
 }
};

イベント通知

参考

minerの方法

go ethereum - Deploy contract on private blockchain using Geth - Ethereum Stack Exchange

ポリモーフィックアソシエーション

ポリモーフィズムとは

rails でリレーション(1対多関係) を組む際に、一つのモデルに対して 複数のモデル リレーション を組む際に非常に便利です。

利点としては以下の通りです。

  • リレーション元のデータがどの モデル ID と紐付いているか、保存されている。
  • ↑により、外部キーは一元管理される。(複数の外部キー作らなくて良い!)

実行してみる

# relation
class Review < ActiveRecord::Base
  belongs_to :resource, :polymorphic => true
end

class Artist < ActiveRecord::Base
  has_many :reviews, :as => :resource
end

class Live < ActiveRecord::Base
  has_many :reviews, :as => :resource
end

class Disc < ActiveRecord::Base
  has_many :reviews, :as => :resource
end
#実行ファイル

disc = Disc.create(name: 'disc_test', info: 'disc_info')
disc.reviews.create(review_content: 'disc_review')

live = Live.create(name: 'live_test', info: 'live_info')
live.reviews.create(review_content: 'live_review')

artist = Artist.create(name: 'artist_test', info: 'artist_info')
artist.reviews.create(review_content: 'artist_review')

結果

Review f:id:jesushill:20180211142319p:plain

Artist(抜粋) f:id:jesushill:20180211142428p:plain

link

今回作成したプログラム Rails ガイド

Redis勉強[メモ]

Redisの特徴

  • データは全てメモリ上に保存される → HDDやSSDより早い
  • シングルスレッド
  • データ型は String型 Hash型 List型 Set型 SortedSet型 

プログラム例

以下、pythonで実装。ライブラリはこちら

import redis

# 接続 port は6379がwell known port
r = redis.Redis(host='localhost', port=6379, db=0)

print(r)

r.set("KEY", "VALUE")

# キーに対応する値を取得
print(r.get("KEY"))
# キーが存在するのか
print(r.exists("KEY"))

# キーに値を追加する。
r.append("KEY", " TEST")
print(r.get("KEY"))

# 削除
r.delete("KEY")
print(r.get("KEY")) # None

# hash形式で保存
r.hset("parent", "data_field", "child1")
print(r.hget("parent","data_field"))
print(r.hdel("parent","data_field"))
print(r.hget("parent","data_field"))

よく使われるシチュエーション

一時的にメモリに保存されるので大量アクセスや即座にreadを行うのに向いている ウェブアプリのセッション管理など

【会計】-残高試算表-

 残高試算表

総勘定元帳

前回 の総勘定元帳を作成し 各勘定科目(現金、預金など)の推移がわかるようになった。

面倒な点

決算(後述)の際には残高がわかれば良いので、一つ一つの勘定科目を確認するのに、 各総勘定元帳を見るのは面倒!

残高試算表の利点

残高試算表 を作成することで、面倒なことがなくなる。

利点

  1. 各勘定科目の残高がわかる!
  2. 間違えに気づくことが出来る

作成の流れを整理

  1. 総勘定元帳で勘定科目ごとの増減を作成
  2. 勘定科目の残高を残高試算表に転記
  3. 各勘定科目ごとの残高がわかる(会社の積み上げた数値がわかる!)

総勘定元帳(-1.)

  • 資産
日付 摘要 借方 貸方 残高
1/1 現金 10,000 10,000
  • 負債
日付 摘要 借方 貸方 残高
1/1 支払手形 10,000 5,000
  • 費用
日付 摘要 借方 貸方 残高
1/1 現金 5,000 5,000
  • 純資産
日付 摘要 借方 貸方 残高
1/1 売上 10,000 10,000

残高試算表(-2.)

総勘定元帳を合体!

  • 残高試算表
借方 貸方
現金
10,000
支払手形
5,000
費用
5,000
純資産
10,000
合計
15,000
合計
15,000
  • 各勘定科目の残高を合計すると、残高は一致(借方と貸方)
  • ミス防止かつ、パッと各勘定科目の合計がわかる!

【会計】-総勘定元帳-

総勘定元帳

  • 総勘定元帳 勘定科目ごとに増加・減少の流れを整理
  • メリット 各勘定科目ごとに残高がひと目でわかる。

具体例

以下の例を考える。

売上仕訳

借方 貸方
当座預金
100000
売上
100000

家賃支払仕訳

借方 貸方
家賃
20000
当座預金
20000

総勘定元帳

  • 家賃
日付 摘要 借方 貸方 残高
1/1 当座預金 20,000 20,000
  • 売上
日付 摘要 借方 貸方 残高
1/2 当座預金 100,000 100,000
日付 摘要 借方 貸方 残高
1/1 家賃 20,000 20,000
1/2 売上 100,000 80,000

※ 総勘定元帳を作成すると、各勘定科目がどんな要因で増減したか、残高がわかる。

【会計】簿記 -仕分け-

仕分け

前回 は5つのグループを 紹介しました。

今回は5つのグループに属する勘定科目の仕分けを紹介します。

資産のグループ

資産の増加は借方、資産の減少は貸方に表記する

代表的な勘定科目

  • 現金
  • 普通預金
  • 有価証券
  • 建物
  • 備品(PC、文房具など)

仕分け例

現金で10万円のPCを買った場合

借方 貸方
備品
100000
現金
100000

※ 備品(資産の増加なので、借方)、現金(資産の減少なので、貸方)

負債のグループ

負債の増加は貸方、負債の減少は借方に表記する

代表的な勘定科目

  • 借入金
  • 買掛金
  • 未払金

仕分け例

銀行から100万円を借り入れした場合

借方 貸方
現金
100000
借入金
100000

※ 借入金(負債の増加なので貸方)、現金(資産の増加なので、借方)に記載

純資産のグループ

純資産の増加は貸方、純資産の減少は借方に表記する

代表的な勘定科目

  • 資本金
  • 繰越利益剰余金

仕分け例

繰越利益剰余金 100万を利益準備金、株主配当金に50万円ずつ処分

借方 貸方
繰越利益剰余金
100000
利益準備金
500000
株主配当金
500000

利益準備金は資本金の4分の1に達しない場合、一定の割合(剰余金の10分の1)を出すことが会社法で決められている。

収益のグループ

収益の増加は貸方、収益の減少は借方に表記する

代表的な勘定科目

  • 売上
  • 受取配当金
  • 有価証券売却益

仕分け例

1個2万の商品を50個現金で販売

借方 貸方
現金
100000
売上
100000

費用のグループ

費用の発生は借方、費用の取り消しは貸方に表記する

代表的な勘定科目

仕分け例

家賃1000万円を現金で支払い

借方 貸方
家賃
100000
現金
100000