2018年11月22日木曜日

Amazonのサイバーマンデーで、買い物を。。。



と一瞬考えてみましたが、現在 特に欲しいものがないので、
見合わせることにしました。

2018年11月21日水曜日

禁煙開始して11ヶ月、あと少しで一年経ちます。

禁煙開始して324日、約11ヶ月が経ちました。
あと少しで1年が経とうとしています。

計算すると、吸わなかったタバコの本数は6,480本。
金額換算で155,520円を使わなかったことになります。が財布には残っていないのは何故!?

2018年8月18日土曜日

Googleプライバシーポリシーを読み込んでみる【記事は途中】

以前から気にはしていましたが、ずっとスルーしていた「Googleプライバシーポリシー」を読んでみました。

2018/9/4
2回読んでみましたが、とにかくあらゆる情報を収集するそうです。

Googleスプレッドシートで Google Apps Script を使って Amazon API から価格を取得してみた。

Google スプレッドシートで、Google Apps Script から Amazon API を使用して、価格を読み込みに挑戦しました。
以前から出来ることは知っていましたが、やり方が全くわかりませんでした。
今日はまとまった時間が取れたので、下のページを参考に試行錯誤でやってました。

【参考】Amazon Product Advertising API を Google Apps Scriptで使う

若干の変更を加える必要がありましたが、価格の読み込みに成功しました。
ISBNから取得を紹介するページは多くありましたが、ASINで検索する方法の紹介が見当たらなかったので少し苦労しましたが難しい部分はありませんでした。
もう少し作り込んで近日中にコードを下に貼り付けていきたいと思います。

最近は時間が無いのでスキマ時間にPCで遊ぶくらいしかできない。。。

次のスキマ時間はいつだ!?

2018/8/18
APIを読み込んで価格の取得方法はわかりました。
取得した価格をスプレッドシートへ入力する方法もわかりました。
前回の価格と今回の価格を比較して、安ければメールを送る方法もわかりました。
トリガーから、時間主導型のイベントを設定して動作させる方法がわかりました。

さて、ここからが問題。。。この前の Prime Day で欲しかったものをまとめて買ったので価格チェックをしたい商品が思い浮かばない。


function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    {
      name : "AmazonAPIを実行",
      functionName : "amazonFunction"
    }
  ];
  sheet.addMenu("スクリプト実行", entries);
  //メインメニュー部分に[スクリプト実行]メニューを作成して、
  //下位項目のメニューを設定している
};


function callAmazonAPI(asin) {
  // Amazon API を読み込んで、価格を抽出する。
  
  var associate_tag_id = "アソシエイトのタグID";
  var access_key_id    = "アクセスキー";
  var secret_key       = "シークレットキー";
  var endpoint = "webservices.amazon.co.jp";
  var uri = "/onca/xml";
  
  var params = {
    Service: "AWSECommerceService",
    Version: "2013-08-01",
    Operation: "ItemSearch",
    AWSAccessKeyId: access_key_id,
    AssociateTag: associate_tag_id,
    SearchIndex: "All",
    Timestamp: new Date().toISOString(),
    Keywords: "asin= " + asin,
    //ResponseGroup: "ItemAttributes,Offers"
    ResponseGroup: "Offers"
  };

  // ソートが必要
  var sort_params = Object.keys(params).sort();
  sort_params = sort_params.map(function(key) {
    return key + "=" + encodeURIComponent(params[key]);
  });

  var canonical_query_string = sort_params.join("&");
  var string_to_sign = "GET\n" + endpoint + "\n" + uri + "\n" + canonical_query_string;

  // 署名が必要
  var signature = Utilities.base64Encode(Utilities.computeHmacSha256Signature(string_to_sign, secret_key));

  // リクエストのURL
  var request_url = 'http://' + endpoint + uri + '?' + canonical_query_string + '&Signature=' + encodeURIComponent(signature);

  // レスポンス取得
 // 503エラーでもレスポンスを受け取れるようにmuteHttpExceptionsをtrueにする
  var response = UrlFetchApp.fetch(request_url, {muteHttpExceptions: true});
  var responseCode = response.getResponseCode();
  var responseBody = response.getContentText();
  var document = XmlService.parse(responseBody);
  var prise = '';
  var name = XmlService.getNamespace('http://webservices.amazon.com/AWSECommerceService/2013-08-01');
  var root = document.getRootElement();
  
  if (responseCode === 200) {
    var items = root.getChild('Items', name).getChildren('Item', name);
    for(var i = 0; i < items.length; i++) {
      // xmlからitemの情報を取得 
      prise = items[i].getChild('OfferSummary', name).getChild('LowestNewPrice', name).getChild('Amount', name).getText();
      return prise
    }
  } else {
    // エラー時はxmlのnamespaceが異なる
    ns = XmlService.getNamespace('http://ecs.amazonaws.com/doc/2013-08-01/');
    var message = root.getChild('Error', name).getChild('Message', name);
    return message.getText();
  }

}

function amazonFunction () {
  // Amazon API から取得した価格をスプレッドシートへ入力し、値段が安ければメールを送信する。

  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheetData = book.getSheetByName("シート1");

  var rowASIN  = 1;
  var colPrise = 2;

  var colStartData = 2
  var colEndData = sheetData.getDataRange().getLastColumn()
  var rowEndData = sheetData.getDataRange().getLastRow()

  sheetData.getRange( rowEndData+1, 1 ).setValue(new Date().toLocaleString())
  
  for (var i = colStartData; i <= colEndData; i += 1) {
    
      var asin  = sheetData.getRange( rowASIN, i ).getValue();
      var price = callAmazonAPI( asin )
      sheetData.getRange( rowEndData+1, i ).setValue(price);
  }
  
  checkPrice() //価格を比較して安ければメールを送信
}

function checkPrice(){
  // 商品の価格を前後比較する。
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheetData = book.getSheetByName("シート1");

  var colStartData = 2
  var rowItemName  = 2
  var colEndData = sheetData.getDataRange().getLastColumn()
  var rowEndData = sheetData.getDataRange().getLastRow()
  
  for (var i = colStartData; i <= colEndData; i += 1) {
    // 前後データを取得する
    var itemName = sheetData.getRange( rowItemName , i ).getValue().replace(/\r?\n/g,"") // 改行を除去する。
    var prePrice = Number(sheetData.getRange( rowEndData-1, i ).getValue());
    var nowPrice = Number(sheetData.getRange( rowEndData  , i ).getValue());
    var dtPrice  = prePrice - nowPrice
    
    if( dtPrice > 0 ) {
      // 価格が安くなったらメールを送る。
      var title = itemName + "が、"+String(dtPrice)+"円、安くなっています。"
      var body  = "ご主人さま\n\nAmazonの価格を調べたら\n"+title+"\n\nどうされますか?\n\n前回の価格 "+String(prePrice)+"円\n今回の価格 "+String(nowPrice)+"円"
      MailApp.sendEmail('メールアドレス', title, body);
    }
  }
}

//function myFunction () {
//  Browser.msgBox("確認", "Hello GAS World.", Browser.Buttons.OK);
//}


2018年8月13日月曜日

Google Apps Script で Hello World をやってみる。

Google Apps Script で Hello World をやってみました。

まず、Chrome拡張機能に Google Apps Script を入れる。

エディターを立ち上げてコード入力する。

function myFunction() {
  Logger.log("Hello World!!");
//  Browser.msgBox(Logger.getLog());
}

Google Apps Script には下記2種類がありますが、私自身やり始めたばかり
●Standalone Script (ドライブ上に単独で存在するもの)
●Container Bound Script (スプレッドシートに紐づくもの)
なので Standalone Script で実行していたようで、Browser.msgBox はエラーが出て動きませんでした。実行結果は、Ctrl+Enter で確認して完了。

さて、ここからが始まりの始まりなんですよね!


2018/8/16
定期的にスクレイピングを実行できるようなので、Amazonの価格変動をメールで連絡してもらうスクリプトが作ってみたい。

2018年8月12日日曜日

【メモ】Amazon Connect

メモになります。
Amazon Connect と言うものが始まっているようです。
黒船に乗ってコールセンターがやってきました。
AIを使った自動音声応答が可能になるかもしれません。
https://aws.amazon.com/jp/connect/

BOSE QuietComfort 35を買ってしまった。

今年1月から始めた禁煙の効果が出てき始めました。
なんと6月末に BOSEのQuietComfort 35 を買ってしまいました。
買ってすぐに、家で使ってみたり、散歩で使ってみたり、と色々使ってみましたがフーンって感じでしたが、先日の出張でその凄さを体感。

新幹線にて、ノイズキャンセルで静かになるのは当たり前、人の声やアナウンスが微かに聞こえるので気になったときは耳元のスイッチで音楽を停止できる、音楽をスキップできる、当然ながらスマホに到着時刻のアラームを設定すれば耳元で教えてくれる、などなど手放せないグッズになりました。

あると便利なものなの購入は計画的に。


2018年8月4日土曜日

Chromebookを買ってしまった。

先日のamazon prime day でchromebookを買ってしまった。

ASUS Chromebook Flip C302

使い始めて約2週間が経ちます。
一番良い点は、ファンレスなので非常に静かなところでしょうか。

電源がすぐ入るので使いたいときにすぐ使える。
キーボードは高級感があり使いやすい。
Google Chromeをメインに使用するのですが、非常に快適。
Google 日本語入力が使えるので、音声入力を使用すると便利。

全般的に快適です。




2018/8/12
しばらく使ってみて分かったことは、起動時間が短い、シャットダウンに時間がかからない、電池の持ちが良い、で使用頻度がぐっとあがってきています。
ノートPCを立ち上げ時間の待ち時間で終わる程度の作業だが、スマホではやり難くてイライラする、場合に活躍、この使い方がわかってきたのでメイン機の交代時期かなぁ、と感じてます。
Chromebookは考えるより使ってみればいい、さらに欲をいえば画面の解像度は高いと作業性があがるんですね。

2018/9/22
快適に使用しています。起動時間が短いのは正義、無駄な時間は削除です。

2018/11/21
Chromebookを使っていると、スマホを触る時間が短くなって、時間に余裕ができた気がするとは思っている。

2018年6月26日火曜日

Amazon prime を利用して1ヶ月がたちました。

Amazon prime を利用して1ヶ月が経ち、無料期間が終わりましたので、いつでも解約できるよう月払いで継続しました。
プライムを利用しようと思ったきっかけは、Kindle本に読みたいビジネス書が2冊あったから。
タイムセールで安くなっていましたので買うか、プライムにするか、迷いましたが無料お試しに負けました。
振り返ると、良かったと思います。
プライムビデオは、旧作映画と海外ドラマを電車移動中に観るようになり、Amazonミュージックは、車で聞くようになりました。
やれることを一巡したら再検討すると思いますので、それまで楽しんでみます。
便利は買うもの、なんですね。

2018/8/11
先日の prime day で、Kindle unlimited が2ヶ月100円、Amazon Music Unlimited が4ヶ月100円、でキャンペーンやってたので契約しました。予想より良かったですが、正規料金でも継続するべきが、現在検討中。



2018/8/16
Kindle Unlimitedは来月初旬で2ヶ月になるので、解約しようと思っています。
ビジネス書や専門書が沢山あるので読みたいものがまとまった時点で契約する使い方が良いと思います。Androidの本が読みたい衝動はどうすっかな!?

2018/9/21
Kindle Unlimitedは予定通り解約しました。次に読みたい本が出てくるまでお預けです。 今はKindleで「俺が魔族軍で出世して、魔王の娘の心を射止める話(の予定)」を読んで楽しんでいます。mobiに変換してくれるサイトがあったのでKindleへメールで転送すれば読めるので快適に楽しんでいます。

2018年6月17日日曜日

音声入力に可能性を感じています。

最近は仕事が忙しくなり、全体的に時間がたらないなあ、と思う今日この頃。

少しでも仕事する時間を短くしたい、音声入力を使ってキーボードを打つ手間を短くできたら楽になるのに、議事録を手早く簡単に書けたら、と以前から思っていました。

Windows の音声認識はイマイチだし、
市販の音声認識ソフトのドラゴンスピーチやAmiVoiceは、
そこそこいい値段がするので躊躇していました。

Twitterでチラチラと見ていたので知ってはいましたが、WEBを調べているとGoogleドキュメントを使用して、音声入力が簡単にできるそうです、Googleの音声入力を紹介しているブログを読むと、ブログの人もGoogleの音声入力を使用して記事を書いているよう。

ということで、早速この記事を、Google ChromeでGoogleドキュメントを開き、Google音声入力を使用して書いてみました。
改行や句読点、誤記訂正をキーボードで入力する必要はありますが、明らかに文字を入力する時間が短くなります。

使い方に慣れれば、いろいろと期待できるところがありそうです。
今回は、音声入力を使ってブログの記事を書いてみましたが、この音声入力を使ってプログラムの開発ができれば、開いた両手で参考文献を読みながら、他事を考えながら作業できるので、可能性が高まり、効率が上がりそうです。

これを使って記事を量産できるかも・・・しれない!?

2018/8/13
音声入力を色々試した結果、とても便利ですが使える場所が限定的(静かな場所)。一人で集中できる場所って、今の私には車の中くらいしかない。。。

コンビニと100均材料でプリント基板作成 アセトン転写

ここを参考にやってみる。

コンビニと100均材料でプリント基板作成 アセトン転写

 やりたいことが色々とあったので、後回しになっていましたが、そろそろ手が回るようになったので実際にやってみます。


2018年6月16日土曜日

Google Home mini を買ってしまった

今日、2018年6月16日、Google Home miniを買ってしまった。

今朝、インターネットを検索していると、ヨドバシカメラでGoogle Home miniの半額キャンペーンをやっているのを発見。 もしかして、近所の家電量販店でも半額キャンペーンをやっているかもしれない、と思い近所のヤマダ電機へ行ってきたとろこ、同じように半額キャンペーンをやっていました。 3000円だったので、迷わず購入。 まっすぐ家に帰ってセットアップ。 音声認識は予想以上に精度が良かったです。 ワールドカップの結果を教えてくれたり、最新のニュースを説明してくれたり、クジラやイルカの鳴き声を教えてくれたり、タイマーを設定してくれたりします。 これ以外の使い方はわかりませんが。。。 Google Home mini は色々な機能を持っていると思いますが、今の僕には使いこなすことは難しいと思います。なので、今回買ったこの Google Home mini は Bluetooth スピーカーをメインとして活躍していただこうと思います。 追伸 最近、Google音声入力の使い方がわかってきました。コツをつかめば非常に便利。入力速度はブラインドタッチより早くて楽チン。

2018年8月5日
Google Home mini は文鎮のようなものとなりました。

2018年5月13日日曜日

久しぶりに読書「1440分の使い方」

今回初めて、Amazonプライムに登録して、午後から読書と映画鑑賞。
 「1440分の使い方」が読みたくて、電子書籍を324円で買うか、読み放題で読むか、迷いながら選択しました。

【感想】
僕が知りたかったヒントが少し書いてある気がします。
書いてある言葉は簡単ですか、理解するにはスキルが必要でもあります。


当たり前ですが、ふと思ったんです、電子書籍は簡単で読みやすく、ハイライト、メモ、しおり等、便利な機能がいっぱいですが、これいいよ、読んでみなよ、と友人・同僚に貸してあげられないので物足りないと。。。
 

2018年5月4日金曜日

【メモ】競馬を解析してみたい。

機械学習に興味があったので検索していたところ、競馬への利用を考える人たちがいますし、実際に投資として運用し、税金などで問題になる人も見えるようです。
いつの日か、競馬を統計的に解析してみたいですね。


興味がある話

「競馬で得た配当金を脱税」

160億円ボロ儲け!英投資会社が日本の競馬で荒稼ぎした驚きの手法

競馬で1億5500万円 脱税裁判の会社員「卍氏」のインタビュー


解析の話

競馬の解析をガチでやったら回収率が100%を超えた件

競馬の予測をガチでやってみた

2018年3月11日日曜日

禁煙のコツまとめ、まだ73日目ですが。。。

簡単にですが禁煙のコツをまとめます。

一度でも禁煙をしてみた人は必ず成功します。
禁煙してタバコの夢を見たことある人は成功します。
禁煙していたが喫煙している人は、次の禁煙はすごく簡単にできます。

ということがわかりました。


さて、どうするかですが、

禁煙すると決めたら、タバコと灰皿、ライターは捨てます。
アメとチョコを準備していつでもお腹いっぱい食べれるようにします。


タバコがどうしても吸いたくなったら、タバコとライターを買って吸います。
でも、その時は1つだけルールがあります。吸い終わって満足したら、必ずタバコとライターを捨てます。絶対に自宅へタバコを持って帰ってはいけません。絶対に!です。


でも、いつでも吸っていいんです。
自宅へ持って帰っては行けないだけ!


私は、禁煙中1日だけ、午前にタバコが吸いたくなり、1本吸って19本捨てました。
そして午後にもタバコが吸いたくなり、1本吸って19本捨てました。
さすがに3本目は欲しいとは思わなくなったのです。
冷静に計算してビビりました。続かないと。。。

てな感じで、現在73日目、もう少し続けたいと思います。
喫煙していたらごめんなさい。


補足

禁煙始めてわかったんですが、喫煙者が一定時間毎にタバコを吸う姿を見ていて、タバコの呪縛が滑稽だと。

2018年5月4日
現在も禁煙継続中です。

2018年8月5日
現在も禁煙継続中です。216日目。



pythonでキャリッジリターン(CR)を使う。

徐々にPython3へ移行しようと思っています。
なので、文頭は#!/usr/bin/env python3と明記しています。

キャリッジリターン(CR)をPythonで使ってみます。
標準出力が改行せず表示されるので、進行状況がわかりやすく表示できるようになります。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import time
# コンソールのテスト

def main():
    pass
    for i in range(1000):
        sys.stdout.write( "\r+%3d" % i )
        sys.stdout.flush()
        time.sleep(0.1)

    print("\n")

if __name__ == '__main__':
    main()

pythonで外部コマンドを実行するにはsubprocessを使う

このところラズパイで色々遊んでますが、完成まで至っていないので記事にするほどのまとまりがないのが困りごとかな。

簡単ですが、メモとして、pythonで外部コマンドを実行するには subprocess を使う。をまとめます。

res = subprocess.call(cmd,shell=True,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)


shell=Trueで、ストリング形式で動いた、将来的には使わない方がいいみたい。
ffmpegを実行させる際、Trueじゃないとうまく動かなかった。

stdout=subprocess.DEVNULLstderr=subprocess.DEVNULLを設定すれば標準出力が出なくなり、詳細を表示したくない場合は、これを設定。


2018年2月9日金曜日

Rapberry Pi3 のMPEG-2 ライセンスキーを買ってみた。

MPEG-2ライセンスの入手と設定は、グーグル先生で適当に


価格は2ポンド
TTSは160.12円(2018.2.3)
PAYPALで直接支払ったので327円 

3時間後にメールでコードが届きconfig.txtにコピペ

さっそくffmpegで変換。

ts => mp4 へ変換だけだと0.9倍速、
サイズ変更とインターレス解除を行うと0.35倍速。

決して早くはないけど、バッチ処理するんで問題なし。
変換中でも問題なく録画されていたので、予想以上に使える期待。

----------

インストールは、ここを参考にした。



wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar jxvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure --enable-static --enable-omx-rpi --enable-mmal
make -j4
sudo make install

2018年2月8日木曜日

Raspberry Pi3で、コマンドをバックグラウンドで実行

ここを参考にした。

# バックグラウンドで実行
sleep 10 &


末尾に&をつけて実行すればOK
でも、ログアウトするとプロセスがkillされる。

# プロセスを確認
ps u


ログアウトしてプロセスを実行させるには

# バックグラウンドで実行
nohup sleep 10 &

sshでログインして、これで実行させて放置です。

2018年2月3日土曜日

cronでシェルスクリプトが動作しなかった

めちゃくちゃ苦労しました。
シェルスクリプトが動作しないのは、なぜ!?がわからず1週間かかりました。

取り急ぎcronが動いているか確認します。

ps aux | grep cron

動いているようなら下記を追記してログを確認

crontab -e
#追記
* * * * * hogehoge >>log.txt 2>>error.txt

パスが通っていないか、権限の設定が適切でないか、そんなところが原因でした。

Amazonのサイバーマンデーで、買い物を。。。

と一瞬考えてみましたが、現在 特に欲しいものがないので、 見合わせることにしました。