プログラムはこうして作られる

Web上を探せばテトリスソースコードチュートリアルはいくらでもあるのだけれど、 この本はプログラミング自体を全く知らない前提でアルゴリズムも1から作り出していく、という意欲的な内容。

全くのプログラミング初心者だけでなく、普段プログラミングを仕事にしているにも関わらず、人の考えたライブラリや、ググったものをちょっとカスタマイズですませるような事が多く、果たして私は本当にプログラマーと言えるのか?という風に思うことがよくある人にもオススメ。 私のことなのだが。

完成品をgithubに上げておいた。rubylikeな書き方になっているのは私が慣れている書き方にしたため。 github.com

我々はこの筆跡を知っている!

jojoex-2018.com

国立新美術館での荒木飛呂彦原画展 -冒険の波紋- ここにある荒木先生直筆のメッセージ。
独特の筆跡でもあるのだけれどどこか既視感があって、記憶をまさぐっていたら
3部で花京院が承太郎に渡したハンカチに書かれていた脅迫状の筆跡にそっくりだった。
まあどっちも荒木先生が書いたのでそっくりもなにもないのだが。

【参考ページ】 atmarkjojo.org

しかし、花京院のこの脅迫状には有名な誤字があり、「幽波紋(ゆうはもん)」が「幽波絞(ゆうはしぼり?)」になっていたのだった。
(今発売されているコミックスでは修正されているらしい)
それを踏まえてもう一度今回の荒木先生のメッセージを読む。

JOJO 冒険の波紋」

「冒険の波絞」 ではない!

おとなはウソつきではないのです。 
まちがいをするだけなのです…… 
~ジョジョの奇妙な冒険 第四巻あとがき~

だが同じ間違いはしないのです。

Get back the future

www.sankeibiz.jp

最近の日本製品の品質不正を踏まえてバック・トゥ・ザ・フューチャーの以下のシーンを御覧ください。

1955年のドク「故障するのも不思議じゃない。日本製だ」
1985年から来たマーティ「どういう意味?日本製は最高さ」

1986年の私「せや!日本製最高や!」
2017年の私「ドクの方が正しいのでは?」

30年経って観ると何とも悲しい気分になるシーンだ。日本ブランドがこんなに強かったのも今の子供には信じられなくなっているのかもしれない。

vue.jsでStoreパターンを使用した時のv-model代用設定

v-model を使うとStoreを通さずにdataが変わってしまう。 Storeパターンの制約を守るために以下のように:valueを更新する必要がある。

See the Pen Storeパターンにおけるv-modelへの対処 by tamoriinu (@yokoyama) on CodePen.

グループ

こんなデータがあるとして、

[
    { name: "筒香",   bats: 5, hits: 3 },
    { name: "ロペス", bats: 5, hits: 2 },
    { name: "宮崎",   bats: 5, hits: 4 },
    { name: "筒香",   bats: 4, hits: 2 },
    { name: "ロペス", bats: 4, hits: 4 },
    { name: "宮崎",   bats: 4, hits: 4 },
]

こんな結果が欲しいとき

[
    {:name=>"宮崎", :bats=>9, :hits=>8},
    {:name=>"ロペス", :bats=>9, :hits=>6}, 
    {:name=>"筒香", :bats=>9, :hits=>5}, 
]

rubyでこんな風に書いた

records = [
    { name: "筒香",   bats: 5, hits: 3 },
    { name: "ロペス", bats: 5, hits: 2 },
    { name: "宮崎",   bats: 5, hits: 4 },
    { name: "筒香",   bats: 4, hits: 2 },
    { name: "ロペス", bats: 4, hits: 4 },
    { name: "宮崎",   bats: 4, hits: 4 },
]

ans =  records.each_with_object([]) do |item, memo|
    if ev = memo.detect{ |ev| item[:name] == ev[:name] }
        ev.merge!(item.merge(bats: item[:bats] + ev[:bats], hits: item[:hits] + ev[:hits]))
    else
        memo << item.dup
    end
end
.sort_by{|h| -h[:hits] }

p ans
# [
#     {:name=>"宮崎", :bats=>9, :hits=>8},
#     {:name=>"ロペス", :bats=>9, :hits=>6},
#     {:name=>"筒香", :bats=>9, :hits=>5}
# ]

SQLのほうがシンプルに書ける。

# create table
create table bayrecord (
    name varchar(20),
    bats int,
    hits int
);

# insert data
insert into bayrecord values ('筒香', 5, 3);
insert into bayrecord values ('ロペス', 5, 2);
insert into bayrecord values ('宮崎', 5, 4);
insert into bayrecord values ('筒香', 4, 2);
insert into bayrecord values ('ロペス', 4, 4);
insert into bayrecord values ('宮崎', 4, 4);

# select
select name, sum(bats), sum(hits) 
    from bayrecord
    group by name
    order by sum(hits) desc;

参考 ja.stackoverflow.com