2014年9月28日日曜日

Amazon で買った古本に不具合があったので値引交渉してみた

※具体的な方法だけ知りたい方は後半をご覧ください.

発端


Amazon のマーケットプレイスで「書き込みなし」説明されていた古本を注文したのですが,
届いた本を見たところ,説明に反して書き込みがありました.

マーカーが5行ほど引いてあるページが3ページあるだけだったので,
読む分には大して問題ないのですが,
書き込みがあると分かってたら他の出品者から買ったかも,と思うと
ちょっと嫌な気分でした.

嫌なので返品するか,
返品して買い直すのが面倒なのでこのまま泣き寝入りするか.

「送り返すのは面倒だけど,何らかの対応はしてほしい」
と欲張って考えていた結果,第三の方法を思いつきました.
タイトルにもある通り,値引交渉です.

相手に大量 (10 万冊以上) の取引実績があり,
かつユーザの評価が高かったことも決断の後押しになりました.
おそらく悪質なものではなく単なるミスの可能性が高く,
またトラブルにも慣れていて,丁寧に対応してくれそうだと思えたからです.

# ちなみに購入した本はリファレンス的なものだったので,
# 一度読んでから不具合を理由に返品して後は買い直さない,という
# セコい方法はできません(笑).

提案する値引額の設定


値引額は高いほどこちらには得ですが,
相手から「ダメです,全額返金するので着払いで送り返してください」
と言われると,返送なしで済ませたい目論見が外れてしまうので,
どれくらいの額なら相手が応じてくれそうか,落とし所を考えました.

結論を先に言うと,マーケットプレイスの送料 (257 円) を提案することにしました.
理由は以下のとおりです.

通常の返品処理の場合,
こちらが着払いで送り返すことになるはずです.
その場合,相手は着払い分を負担することになります.

「その金額を配送業者ではなくこちらにください」と言っても
相手はそんなに抵抗ないのでは,と考えました.
払う金額は一緒で,払う先が変わるだけだからです
(返金の際の手数料はかかるかもしれませんが).

着払いの金額は業者や送り方によって変わりますが,
ここは分かりやすく,Amazon のマーケットプレイスで指定されている 257 円に設定しました.

ちなみに郵便の定形外で 250 g 以上を着払いで送る場合は
250 円 + 10 円以上の手数料,と同程度の金額になります.

値引額の上乗せをしない理由


「書き込みのない本と書き込みのある本は
値段が違うのでその差額も加えて請求しては」
と考えた人もいるかもしれませんが,
私はしないことにしました.

Amazon のマーケットプレイスでは,出品数が多い本の場合は,
書き込みなどの本の状態によらず販売額がほとんど変わらないのは珍しくありません.
これはリアルの古本屋ではありえないですが,
マーケットプレイスではよく見かけるケースです.

おそらく,他より 1 円でも安ければ,
状態が良くなくても買う人がそれなりにいるからだと思います.

もちろん,多少高くても美品のほうを求める人はいるでしょうから,
売れやすさは違ってくるはずです.
それを考慮して多少上乗せすることも考えたのですが,
相手がその金額を見てどう考えるか分からなかったので
やや弱気に,上乗せはしないことにしました.

Win-Win の関係


提案を却下されないためのダメ押しとして,
返品ではなく値引にすることで
相手の負担が減ることを主張することにしました.

返品の場合は相手の負担は

・着払の送料の支払い
・返品された本の受け取り,再販売の準備作業

になります.また,相手への文章には書きませんでしたが,懸命な人(業者)なら

・再販売した本が売れず在庫を抱えるリスク
・提案を拒否することでユーザ(私)とトラブルになるリスク

も意識するはずです.

しかし値引であれば

・送料分の値引(返金)

だけで済むはずです.
払う額が同程度ならば,後者が得なのは明らかです.

ちなみに私のほうの負担は

・出品者への連絡
・返品の作業
・別の出品者から本を買い直す

だったのが

・出品者への連絡
・本の書き込みを我慢

になります.
上記に加え,利点として,相場より 250 円前後安く本を買えたことになります.

私としては,良い提案だと思っています.

# 書き込みなしと 250 円のどっちを取るかは
# 各自の価値観によるでしょう.

Amazon での操作の流れ


私は以下のようにしました.
写真の添付は必須ではないのですが,
現物はこうなっていた,という証拠として念のためつけておきました.

・アカウントサービスから「注文履歴」を選択
・「出品者に連絡する」を選択
・Amazon のログイン画面に戻るのでログインすると「出品者に連絡する」の画面が表示される
・「お問い合わせ内容」に「破損または不具合のある商品が届いた」を選択すると入力フォームが表示される
・届いた本の,書き込みがあったページを写真にとってファイル添付(任意.10 MB まで)
・入力フォームに相手へのメッセージを記入
・送信

入力フォームに書いた内容は,控えとして自分のメールアドレスにも届きます.

ちなみに,入力フォームには以下のように書きました.

--------------- ここから ---------------
商品紹介には「中身は書き込み、ヨレ、汚れない状態」とありましたが,
届いた商品に3ページほど書き込み(マーカーでのアンダーライン)を見つけました.
あるページの写真を添付します.

こちらから提案なのですが,
送料 (257円) 分の割引(返金)でなんとかならないでしょうか.

たとえば着払いで返品する場合はそちらがその程度負担することになるでしょうし,
互いに手間が発生するでしょうから.

ご検討よろしくお願いします.
--------------- ここまで ---------------

事実説明,提案がある旨とその内容,提案受け入れによる双方へのメリットの発生,
と,淡々と書いています.

# 文中の「なんとかならないでしょうか」はいまいちな表現ですが,
# これ以上に良い表現が思いつかなかったのでこれで送りました.

提案の結果は


相手からはその日のうちに連絡があり,
あっさり承諾してくれました.

その数時間後,Amazon のシステムから
配送料 (257 円) の返金処理が行われた旨のメールが来ました.
後日,クレジットカードの明細も手続きが行われていました.

というわけで,特に問題もなく,綺麗に終わりました.

さいごに


マーケットプレイスで購入した商品に不具合があるものの,
その商品を使い続けても構わない程度の不具合であるならば,
返品の前に,出品者に値引の交渉を持ちかけるのもありかもしれません.
この手はオークションにも使えるかもしれません.

私は面倒くさがりだったので,一発で交渉を終わらせるべく,やや弱気の提案をしました.
着払いで相手が負担する金額と同程度である,配送料の返金を提案し,
返品の場合よりも手間が減らせるというメリットも主張しました.

今回の場合は成功しましたが,
出品者によっては考えが違うでしょうから,承諾してくれないかもしれませんし,
逆にもっと高額の値引でも受け入れてくれるかもしれません.

ちなみに,
「届いた本に自分で書き込みして不具合を主張したら,古本を安く買える裏技になるのでは」と
邪な考えが浮かぶ人もいるかもしれませんが,それはやめましょう.
Amazon に見つかって制裁を受けても私は知りません.

2014年7月6日日曜日

作業から脱線してネットサーフィンで時間を無駄にしないための小さなコツ

作業中にふと別のことを思いついて調べ物をしていたら,
いつの間にかネットサーフィンになって無駄な時間を過ごしていた,ということがあります.
そうならないように,私は以下の工夫をしています.

調べたいものを思いついたらいきなり調べるのではなく,
ToDo リストに「◯◯について調べる」とメモしてから調べるようにしています.
また,今の作業に関係ない調べ物の場合は,
今の作業が終わってからやるようにします.

私の場合,ToDo リストには
Wunderlist のデスクトップアプリを使っています.
Ctrl + F3 で小さい画面にしておけば邪魔になりません.

一旦 ToDo リストに入れるという一手間をかけることで,
以下のふたつの効用があります.

ひとつは,後で冷静になって見返せることです.
「やっぱり不要なのでやめる」と,無駄な時間を減らせたり,
「重要ではないので後回し」と判断して
優先すべき作業が後回しにならないようにできます.

もうひとつは,「◯◯について調べる」と目の前に明示することで
今の作業内容を意識できることです.
脱線しそうになっても「まてまて,今は◯◯について調べているところじゃないか」と
踏みとどまれる確率が高くなります.

調べ物の最中に興味深いページを見つけることがあるでしょうが,
これもやはり ToDo リストに入れて,
本当に見る必要があるか検討してから見るようにします.

たびたび ToDo リストに戻って仕切りなおす習慣をつけることで,
連鎖的にネットサーフィンしてしまうのを防ぐことができます.

2014年6月15日日曜日

Let's note MX3 のタッチパネルを無効化する

Let's note CF-MX3 はタッチパネル搭載なのですが,
私はほとんど使っていません. 

むしろ,画面を指しながら説明しているときに
うっかり指やペンが触れたりすると画面が遷移したりするので
かえってストレスのもとになっています. 

というわけで Panasonic の FAQ をもとに無効化しました.
Windows7 と Windows8 では方法が違うので,両方載せておきます.
私は Windows7 なのですが,この場合は

「コントロールパネル」
→「ペンとタッチ」
→「タッチ」タブ
→「入力デバイスとして指を使う」のチェックを外す

で出来ました.

2014年5月18日日曜日

[bash] sed だけで 1 次元セルオートマトンを作る

sed コマンドだけで 1 次元セルオートマトンを作るアイデアを
思いついたので、実装してみました。

メインループの中は実質的に sed コマンドしか使っていません。
また、スクリプト全体でも、コマンドは sed, expr, echo の
3 種類だけしか使っていません(for, while などの構文は使っていますが)。

1次元セルオートマトンとは何か、については
セル・オートマトン - Wikipedia の「1次元セル・オートマトン」の項目
をご覧ください。

スクリプト本体と実行方法


スクリプトを示します。
前準備が少し長いですが、
本質は最後のほうの while ループ内です。

#!/bin/bash
# 1D cellular automaton

# rule number
NRULE=90
#NRULE=30
#NRULE=110

# number of generation
NSTEP=300

# half size of width (width = HALFSIZE * 2 + 1)
HALFSIZE=300

# function to repeat string $2 $1 times
rep(){
  n=$1
  s=$2
  ss=""
  i=0
  while [ "$i" != "$n" ]; do
    ss=${ss}${s}
    i=`expr $i + 1`
  done
  echo -n $ss
}

# initial state
zeros=`rep $HALFSIZE 0`
str=$zeros"1"$zeros

next=()
tmp=$NRULE
i=7
while [ "$i" != "-1" ]; do
  next[$i]=`expr 2 + $tmp % 2`
  tmp=`expr $tmp / 2`
  i=`expr $i - 1`
done

# PBM header
echo "P1"
echo `expr $HALFSIZE \* 2 + 1` $NSTEP

# main
istep=0
while [ "$istep" != "$NSTEP" ]; do

  # output PBM
  echo $str | sed -e "s/\([01]\)/\1 /g"

  # calculate next generation
  str=0${str}0   # 0 is boundary
  for i in 1 2 3; do
    str=`echo $str | sed \
      -e "s/111/11${next[0]}11/g" \
      -e "s/110/11${next[1]}10/g" \
      -e "s/101/10${next[2]}01/g" \
      -e "s/100/10${next[3]}00/g" \
      -e "s/011/01${next[4]}11/g" \
      -e "s/010/01${next[5]}10/g" \
      -e "s/001/00${next[6]}01/g" \
      -e "s/000/00${next[7]}00/g"`
  done
  str=`echo $str | sed -e "s/[01]//g"`
  str=`echo $str | sed -e "s/2/0/g" -e "s/3/1/g"`

  istep=`expr $istep + 1`
done

実行方法ですが、
上記をたとえば cellular_automaton.sh という名前で保存して

    $ ./cellular_automaton.sh > rule090.pbm

と実行します。
私の手元 (CPU: Intel Core i7-3770 @ 3.40GHz, OS: Debian wheezy) では
5 秒弱かかりました。

得られた結果を、pbm 形式をサポートしているビューアで開くと
以下のような絵が見えるはずです。
時間は上から下に流れています。



スクリプト内のルール番号 NRULE を変更すると違う絵が描けます。
ルール番号の数字の意味は最初に示した参考文献のとおりです。

縦の長さは NSTEP、横の長さは HALFSIZE で調節できます。

アルゴリズム解説


本質的な部分だけを再掲します。
入力となる str にはセルの状態を表す文字(ここでは 1 または 0)
がセルの数だけ入っています。

  for i in 1 2 3; do
    str=`echo $str | sed \
      -e "s/111/11${next[0]}11/g" \
      (略)
  done
  str=`echo $str | sed -e "s/[01]//g"`
  str=`echo $str | sed -e "s/2/0/g" -e "s/3/1/g"`

3 行目で 111 を 11${next[0]}11 の 5 文字に変換しています。
${next[0]} には 111 の次の世代の文字が入っています。
本来なら

    s/111/${next[0]}/g

と置換したいところですが、
"111" のいずれの文字もあとから隣のセルが
参照するかもしれないので消せません。

これはどういうことかというと、
例えば ...01110... の並びの場合は
左から 011, 111, 110 の次の世代を計算する必要がありますが、
先に 111 を置換してしまうと、その結果は

    ...0(111 の次の世代の文字)0...

となってしまい,
両脇の 011, 110 の計算ができなくなります。

そこで、両脇のセルが参照できるように
上記のように 5 文字に置換しています。
変換後の 5 文字の意味はそれぞれ

    1 文字目、2 文字目、次の世代の文字、2 文字目、3 文字目

となっています。

このように置換した結果だと

    ...011(111 の次の世代の文字)110...

となるので、011, 110 の計算ができます。

別の変数を用意して、次の世代の文字はそこに格納しておけば
こんな複雑なことはしなくていいのですが、
それだとすっきりと書けない気がしたのでやりませんでした。

for ループを 3 周回しているのは、
sed は 1 回のコマンド内で変換した文字列は再変換しない
仕様になっているためです(でないと無限ループが起こりうる)。

これはたとえば

    $ echo 0000 | sed -e "s/00/0/g"
    00

という結果から確認できます。

先ほど示した
...011(111 の次の世代の文字)110... の結果は、
真ん中の 5 文字が変換済なので、
011, 110 の変換はできません。
ということで、3 文字から 1 文字を計算する
1 次元セルオートマトンを 1 ステップ回すためには
3 周回す必要があります。

このとき、変換前の世代と変換後の世代の文字を混ぜないため、
変換後の文字は 2 または 3 になっています。
これはスクリプト中間あたりの

    next[$i]=`expr 2 + $tmp % 2`

がそれに対応しています。

ループ 3 周を抜けたあとは、
もとが ...01110... の場合だと

    ...01311211310...

となります。新旧世代を塗り分けると

    ...01311211310...

となります。
旧世代が 3 文字続く場所がなくなったので、変換は終わりです
(端付近はこの限りではありません。
なので 4 周以上回すと文字数が保存されないことがあります)。

上記のままだと次の変換ができなくなるので

    str=`echo $str | sed -e "s/[01]//g"`

で旧世代の文字を削除し、

    str=`echo $str | sed -e "s/2/0/g" -e "s/3/1/g"`

で 2 を 0 に、3 を 1 に戻します。

2014年5月17日土曜日

SyntaxHighlighter でブログにコードを綺麗に表示

ブログにプログラムソースを載せることがあるのですが、
もう少し綺麗に見せたいと思ったので
を参考に SyntaxHighlighter を導入してみました。

テストも兼ねて使ってみたのが以下です。

#!/bin/bash
i=0
while [ $i != 10 ]; do
  i=`expr $i + 1`
  echo $i
done

2014年5月15日木曜日

[雑感] 第一印象が良すぎると、長期的には損をする?

人間には、第一印象が良い相手を信用するようなバイアスがあるように思えます。
そのようなバイアスを利用してお金を巻き上げるのが詐欺でしょう。

第一印象で人を信じてしまう人に、第一印象がとても良い人が出会うと、
高い評価を得ることができるでしょう。
短期的には得をします。

けれども、第一印象に比べて実力のレベルがとても低い人は、
長期的には損をするかもしれません。

前者が顧客で後者がサービス提供者の場合
(仕事に限るつもりはないですが、例えとして)、
信じ込んでしまった顧客は、提供者の仕事のチェックをしなくなるかもしれません。
提供者がミスをしても、それが致命的な状況に拡大するまでなかなか気づきません。

そして、その顧客は「なんて酷いことをするんだ、裏切られた」と言って、
第一印象の良いサービス提供者を逆恨みするかもしれません。

このような事態を避けるには、
自分が顧客側に立つ場合は、
相手の見た目と内容(仕事)のレベルは一致しないと思うようにし、
サービス提供側に立つ場合は、
見た目のレベルが内容のそれを卓越しすぎないように、
内容に強化していくことになるでしょう。

実際には上記の事態はあまり起こらなくて、
内容を活かすような見た目を作れなくてうまくアピールできない、
というのがほとんどなのでしょうけど。

2014年5月11日日曜日

[雑感] スルー力をつける他に、怒りをシフトさせるという提案

巷で「スルー力がほしい」「スルー力をつけたい」とよく聞きます。

私も最近、ある考え方(後日書きます)をするようになってから
少しスルー力がついた気がしますが、
手放しに喜べないと危惧しています。

年をとって、怒る元気がなくなっただけの可能性もあるので。

「ある考え方」だって、怒らない言い訳として、
自分を説得するためにでっち上げただけかもしれません。

細かいことにしょっちゅう腹を立てるのは馬鹿らしいことですが、
「細かいけれども、実は重要なこと」をスルーしてしまうまでに
神経が鈍感になってしまうのもまずいです。

そこで、「腹立たしいこと」を下手に全部なんとかしようとせず、
全体の怒る量を保存しながら、「重要なことには全力で怒る」ほうに
シフトするように仕向ける考え方もありだと思います。

実際に行う場合は、
予め「こういう件は重要なので怒ってよし」と決めておくとよいでしょう。
怒ってから考えると判断基準が揺らぐためです。

ダイエットに例えるなら、食べる量を減らしてひもじい思いをする方法よりも、
糖分や脂肪は制限するけど野菜は無制限、みたいな方法のほうが
本人の精神衛生にもよくて、定着しやすいと思うのです。