patorashのブログ

方向性はまだない

PayPayチャレンジでDyson pure hot + coolを購入してきた

冬のボーナスも出て、何買おうかなーと思っていたところだったのですが、妻がDyson pure hot + coolのHP04WSが欲しいと言ってたので前に現物を見に行ってたのですが、高くて断念してました。

そうこうしているうちに世間がPayPayの100億円あげちゃうキャンペーンの話題で盛り上がってました。

paypay.ne.jp

当初は「自分にはあんまり関係ないなー、iPadがメルカリで売られてるんだなー」くらいで静観していたのですが、TLでも結構使ってる人がいたので多少気になり始めていたところに、エディオンからPayPay対応したぜってメールが届いたので急に閃きました。

お知らせ|PayPayの取り扱いを開始|家電と暮らしのエディオン

あの高いやつが買えるチャンス!普通に待ってても値引きないし!(ブラックフライデーでも新型であるHP04は値引きなしだった)

乗るしかない、このビッグウェーブに!

ということで行ってきました。 お店の玄関にはPayPayのことが書かれた看板が。そして高額商品のところにはPayPayで買うといくらのキャッシュバック!というのが書かれてました。

f:id:patorash:20181208222154j:plain

8万ちょいなので1万6千円分のキャッシュバック。全額キャッシュバックが当たればいいなぁ~と願いながら初のPayPayチャレンジ!

残念ながら外れてしまいました。

f:id:patorash:20181208215918j:plain

それにしても私の前に支払いしてた人はお掃除ロボットのルンバのいいやつを買ってましたし結構やってる人は多そうでした。 高い買い物でしたが、まぁいつかは買う予定ではあったし、お得に買うことができて良かったです。キャッシュバックは1月に貰えるみたいです。

気になるのはPayPayの障害がよく発生していることですが…。これで流行るのかな~?PayPay。あと支払いが自分のスマホのほうに金額を入力して支払いってやるところ。これは不便なような…。バーコードを読むだけのパターンもあるみたいですが。今のところ、クレジットカードでスッとやるほうがUXはいいですね。因みに普段はKyashでQUICPayを使ってます。

LenovoのPCを注文したが第二次審査で止められたが解決した

昨日の日記で書いた続きです。最終的には注文が受理されたので、どういうフローになったかを記しておきます。

まず昨日の日記です。

patorash.hatenablog.com

クレジットカードの第二次審査で止められて、ムキー!😡となっていたのですが、ググると結構そういうことはあるらしい…。

chrome.hatenablog.jp

私のメールにも、

  1. 銀行振込にする
  2. 違うクレジットカードで払う
  3. 同じカードで新たに注文し直して今の注文をキャンセルにする

という三択が書かれていたのですが、注文番号が変わると楽天Rebates経由での注文ということが紐付かなくなってポイントバックがなくなるんじゃないか?という懸念がありました。

今回は2の『違うクレジットカードで払う』で返信して、翌日のLenovoからの電話を待ちました。

Lenovoの担当者からの電話

Lenovoの担当者さんから電話があり、「お客様はLenovo IDを持っておられたので、今の注文はキャンセル扱いにして、新しく見積もりを作っておいたので、それを違うクレジットカードで決済してみてください」と言われました。 この時点で私は、🤔「これは注文番号が変わるのでは?」と思い、「楽天Rebates経由での注文だったのだけれど、その方法だとポイントバックはなくなりますか?」と質問したのですが、担当者の方は楽天Rebatesのことを知らなかったため、事情を説明して、「今の注文番号のまま、なんとかならないか?」と相談しました。

すると、1,2,3の選択肢の全てが新しい注文番号を発行するフローであることが判明!担当者さんが「Rebatesとかの連携を扱っているのは違う部署なので、調整して明日連絡します」と言ってくださいました。いやー、面倒臭い客で本当にすみません…😥

明日まで待つかー…と思っていたら、15分後くらいにまた電話があり、「今のクレジットカードの再審査が通れば、今の注文番号のままいけるので、クレジットカード会社に連絡して停止したのを解除してもらってください。その後、Lenovoのほうでまた再審査します」という話に。それでいいなら、それが一番助かります。

カード会社に連絡

カード会社は楽天カードだったのですが、よくある問い合わせを見ていると、カスタマーセンターに電話するしかなさそう。 混んでいる時間だったので結構待たされましたがなんとか繋がり(電話代は有料…)、確認したところ、セキュリティでブロックしていたことが判明。久々の高額商品の購入だったので、怪しいと思って発動したのかもしれません。でも、たかだか20万円なのに…。 早速解除してもらい、「本日中であれば、セキュリティのブロックは発動しないようにしました。明日からは発動しますのでご利用されるのであれば今日中がオススメです。」と言ってもらいました。準備は整った!

Lenovoに再審査依頼メールを送る

その後、クレジットカードのブロックを解除してもらった旨のメールを送りました。 そして、再審査に入る返信をもらい、最終的に審査に通って注文が受理されたメールが届きました!よかったー!

今回はRebates経由だったので余計に大変でした。最初は「Lenovoめー!😡」と思ったのですが、止めてたのはカード会社なので、Lenovoは悪くありません。 これでおそらくRebatesからのポイントバックも貰えるでしょう。

ちなみに楽天Rebatesで買えるのはLenovoだけじゃなくてAppleDellビックカメラとかも対象です。Appleは2%とポイントバック率は低いですが、商品が高額なので25万のものを買ったら5,000ポイント返ってくるのでMacBookProやMac miniの注文をご検討している人も使ったらお得だと思います! Rebatesお友達紹介キャンペーン

LenovoのPCを注文した

かれこれ8年くらいは公私ともにMacを使ってきているのですが、ここ最近のMacの値段の高騰などによって、WindowsもしくはUbuntuなりを使ってみようかなと思うようになってきていました。

前の会社で支給されていたPCがあまりにも遅くて、iPhoneアプリ開発用に購入されていたMac miniがお試し開発後に放置されていたので、Core2Duoになるし快適になるはず!と思ったのが、Macを使い始めた理由でした。 その後、当時のMacのキーボードの打鍵感が好きで、個人的にもMacBookを買って、それからはずっとMacBook系を使っていました。MacBook、MacBookAir、MacBookProときていましたが、アベノミクスによって円高も終わり、Macの値段は急激に上がっていきました。

欲しい構成のMacの値段は手が出なくなってしまったので、ずっと今のMacBookProを使っていくか、もうちょい貯めて買うか…と悩んでいたのですが、Macは互換性を切り捨ててポートをUSB-Cだけにするし(利点が多いのはわかるが…)、いい加減Appleに対して疲れてきていた感がありました。

そういうこともあって、Lenovoの割引がすごいという話はよく聞いていたため、なんとなくLenovoのノートPCを物色する日々が続いていました。 そうしたら今回、楽天スーパーセールのタイミングで楽天Rebates経由でLenovoのPCを買うと20%ポイントバックというのを見かけてしまい、LenovoのPCを買う決断をしました。

候補は、ここ数日ずっと検討していたThinkPad E480, A485, L380でした。 A485はAMD Ryzen 7 pro 2700uが載っていて一番候補だったのだけれど、購入のタイミングでページを見たら、Windows 10 Proモデルがクーポンの対象になっていなかったので断念。多分、前に見ていたやつが売り切れてしまったのかなと思います。 L380は13インチで重さもまぁまぁよくてメモリが32GB載るので二番目の候補でした。 E480はコスパがめちゃくちゃいい。けれど、付属ポートがちょっと貧弱…。最初に見かけたときはこれだ!と思っていたのですが、色々見ているうちに三番候補に。

最終的に、L380 Yogaに決めました。 Yogaは、ディスプレイは360度開いてタブレットモードになるやつで、タッチペンが付いているモデルです。

www.lenovo.com

開発用途なので、以下の構成に。

これで税込で約20万円くらいでした。

注文はしたのですが、何故かLenovoが行なっているクレジットカードの二次審査に引っかかったみたいなので、まだ注文は成立していません。こんなパターン初めてだったのでググったら、結構あるみたいでした。支払限度額も十分にあるのに、何故…。とりあえず、他のクレカに替えるか、銀行振込になりそうです。 とはいえ、成立すれば20%ポイントバックになる予定なので、4万ポイント貰える!わーい!

ちなみに20%ポイントバックは期間限定だったのでもう終わっていますが、スーパーセールの間は10%ポイントバックをやっているみたいなので、もしLenovoのPCを買われるのであれば、楽天Rebatesを経由するとお得です!普通にLenovoのクーポンも使えますし。

以下のリンクから移動してもらってLenovo以外でも商品を買ってもらえたら私とあなたに500ポイントもらえるらしいのでよかったらよろしくお願いします。

Rebatesお友達紹介キャンペーン

まだ注文が成立していないけれど、届くのが楽しみです。

配列に同じ要素が何個あるかを数える

先日、会社のチャットワークでそういう話題が出て、いろんな方法があることを知った。

1. array.count(item)

l = [1,2,2,1,3]
l.uniq.map{|item| [item, l.count(item)]}.to_h

配列の変数のcountメソッドの引数に値を渡したら同じ値をカウントしてくれるっていうのは知らなかった。

2. array.group_by(&:itself)を使ってからmap

l = [1,2,2,1,3]
l.group_by(&:itself).map{ |k, v| [k, v.size] }.to_h

group_byをしているほうがイケてる感じ。しかしto_hがなんかダサい…。これをなんとかしたい…。

3. array.group_by後にtransform_values

l = [1,2,2,1,3]
l.group_by(&:itself).transform_values(&:size)

うおお、あったー!transform_valuesメソッド!Hashのvalueを更新するメソッド。 メソッド名はちと長いけれど、これが一番イケてる。ブロック書かずに済んだし。

itselfメソッドも知らなかったので収穫であった。

こういう話題が社内で流れてくると楽しいですね。

ニックネームを管理するgem imyou(異名)をリリースした

仕事で使うためにgemを作ったったという話です。

自分が担当している製品は、情報を収集して、それを集計して…みたいなことをよくやるのですが、その時の課題が『表記揺れ』だったりします。よくありますよねー。ASUSのことをどう読むのか?みたいな問題。いくら公式が『エイスース』と言っても、『エーサス』『アーサス』『アサス』などと書かれることはあるわけです。情報を収集するときに『エーサス』と書かれているものは『エイスース』として認識したい!ということですが、そのためにはニックネームを管理する仕組みが必要です。

そこで、ニックネームを管理するためのgem imyou(異名)を作りました。

github.com

gemの名前はニックネームを被りにくい日本語にしたものです。Rails 4と5に対応しています。

使い方

使い方はREADMEに書いていますが、一応説明を。

インストール

Gemfileに書いてbundle installしてください。

gem 'imyou'

マイグレーション

imyou用のテーブルを生成する必要があります。generatorを定義してあるので、それを使ってmigration用のファイルを生成して、マイグレーションしてください。

$ rails generate imyou:migration
$ rails db:migrate

Userモデル

Userモデルには、nameカラムがあるとします。

class User < ApplicationRecord
  has_imyou
end

ニックネーム検索するときの対象として、nameカラムも含めたい場合は以下のように。

class User < ApplicationRecord
  has_imyou :name
end

実際に使う

登録系

登録は、add_nicknameメソッドと、nicknames=メソッドを定義してあります。

@user = User.create(name: '孫悟空')

# ニックネームを登録
@user.add_nickname('カカロット')

# ニックネームを取得
@user.nicknames # => ['カカロット']

# ニックネームを配列で登録
@user.nicknames = %w(カカロット 孫くん ゴクウ)
@user.nicknames # => ['カカロット', '孫くん', 'ゴクウ']
削除系

削除は、remove_nicknameメソッドと、remove_all_nicknamesメソッドを定義してあります。

@user = User.create(name: '孫悟空')
@user.nicknames = %w(カカロット 孫くん ゴクウ)

# ニックネームを削除
@user.remove_nickname('孫くん')
@user.nicknames # => ['カカロット', 'ゴクウ']

# ニックネームを全て削除
@user.remove_all_nicknames
@user.nicknames # => []
検索系

検索系は、完全一致検索と、部分一致検索を定義してあります。本名(?)を検索対象にするためにオプションwith_name_columnがあり、デフォルトでtrueになっています。 もしニックネームのみを検索対象にしたい場合は、falseを設定します。

@user = User.create(name: '孫悟空')
@user.add_nickname('カカロット')

# 名前とニックネームで完全一致検索
User.match_by_nickname('孫悟空').exists? # => true
User.match_by_nickname('カカロット').exists? # => true
User.match_by_nickname('悟空').exists? # => 完全一致していないのでfalse

# 名前とニックネームで部分一致検索
User.partial_match_by_nickname('悟空').exists? # => 部分一致しているのでtrue
User.partial_match_by_nickname('カカ').exists? # => 部分一致しているのでtrue

# ニックネームのみを対象にして検索
# 完全一致検索
User.match_by_nickname('孫悟空', with_name_column: false).exists? # => ニックネームはカカロットのためfalse
User.match_by_nickname('カカロット', with_name_column: false).exists? # => true
# 部分一致検索
User.partial_match_by_nickname('悟空', with_name_column: false).exists? # => ニックネームに部分一致していないのでfalse
User.partial_match_by_nickname('カカ', with_name_column: false).exists? # => 部分一致しているのでtrue
参照系

with_nicknamesスコープを定義しているので、これを呼ぶとeager_loadが実行されるのでN+1は起きません。

@user = User.with_nicknames.first

以上です。

こんな機能があったらいいなぁとか、IssueなりPRなりお願いします!

シェルスクリプトを書くときのおまじない

最近、他の人がRundeckに登録していたジョブを修正していってるのだが、bundle installとかherokuコマンドが動かなかったりしたので、動かしているジョブではどうやっているのかなと思ったら、以下のように書いてあった。

/bin/bash -l -c 'bundle install'

-lはログイン状態のシェルで-cは引数のコマンドを実行するということだったのだけれど、場合によっては、これを複数行書いているようだった。

/bin/bash -l -c 'なにかの処理1'
/bin/bash -l -c 'なにかの処理2'
/bin/bash -l -c 'なにかの処理3'

うーむ、シェルスクリプトって普通、先頭に#!/bin/bashとか書くんじゃなかったっけ?と思いながら調べたら、1行目のオプションで-lをつければそれでいいらしい。

#!/bin/bash -l
set -Ceu

なにかの処理1
なにかの処理2
なにかの処理3

set -Ceuは、間違ってファイルを上書きしたりしないようにとか、エラーが起きたら落ちるようにするためのものらしい。基本、つけておいたほうが安心だなと思ったので付ける。

qiita.com

これで綺麗な感じでシェルスクリプトが書けるようになってきたのでよかった。

また損切りを断行!

ここ数日、円高がすごく進行した影響もあり、打診買いしていたドル円のロングがストップロスにひっかかってしまった。さらに下げたのでまぁよかったといえるが、今現在だとだいぶ戻っている。NZドル円もトレーリングストップしていたので引っかかってしまい、総合すると数百円プラスという程度になってしまった。

ただ、下げたタイミングで残っていたトルコリラ円のショートの決済(損切り)を一部断行したので、多少は安く済ませられた…。

ダウ平均が下がって、日経平均が下がって、リスクオンで円が買われて円高で、という流れが続いているので、円高傾向かなと思う。ダウ平均が上がれば、円安になっている。これが結構曲者で、スタート時点でダウ平均が下がっているけれど、マイナスが縮小してくると円安になるけれど、ダウ平均は、いうてもマイナスのままなんですよ。難しい。

日経平均が下がったのでまた楽天ダブルベアを一部決済。日経平均が上がったら買い戻ししようかなと思っているけれど、じわじわ下がっていってるので、タイミングがくるかどうか…。

ストップロスをおくのが大事っていうのはよく聞くし頭でも理解できているけれど、なかなかうまくできない。しかしそれが素人。 で、素人はストップロスをおけばええんや!と思ってストップロスをおくけれど、バンバン切られたあとにリバウンドしていって損だけが残ってしまい、もう損をしたくないと思って損切りしないで耐える作戦をしいて、大損を抱えて自滅する。

とまぁ、ここまでは経験してきたので今更わかったというのもなんだが、

  • レンジ相場でストップロス戦略を取ると刈り取られるだけ
  • レンジ相場はトラリピが強い
  • トレンド相場になるとトラリピは辛い(塩漬け)
  • トレンド相場で勝率が高いタイミングでストップロス付きで参入する
  • もしストップロスをつけても、もう一段下がったら、下げトレンドの底か、再び上昇トレンドになったタイミングでストップロス付けて参入する
  • これを繰り返していれば、損小利大できる
  • しかし素人は利益が出るとすぐに決済するので利大しづらい。欲にかられながらも決済を急がないこと

ということなのだろう。

底がくるのを待ちます。