IT-LIFEブログ

主にIT系のことや時事ネタや、たまに雑記

PayPay使ってみた!

f:id:nok-0930-ss:20181204220958p:plain

PayPay

こんにちは。

最近バーコード決済がなにかと話題ですね。

日本ではPayPay, LINE Pay, 楽天 Payなどが普及してきており、バーコード決済戦国時代に突入している感じがします。

今回はその中でも100億円あげちゃうキャンペーンで有名なPayPayを使ってみたので使用感や感想を皆さんに紹介してみようと思います。

 

12月4日からファミリーマートでPayPayを使用することが可能になったので、早速ファミマで使用してみました!

ラーメンを食べ終わったあとだったので口直しにアイスを購入。。。

f:id:nok-0930-ss:20181204222158j:plain

レジにて、

自分「PayPayでお願いします」」

といいながらPayPayアプリを開き、以下の画面のバーコードを店員さんに提示。

f:id:nok-0930-ss:20181204222624p:plainそしたら、いつものようにバーコードリーダーで読み取られ決済は完了!

感想として、早!楽!ですね。

ちなみに決済の仕方は2通りあります。

①PayPayアプリで自分のバーコードを店側に提示し読み取ってもらう方法

②店側が用意したバーコードを自分のPayPayアプリでスキャンし支払う方法

今回は①で決済をしました。

購入履歴は以下のようにすぐ反映されます。

f:id:nok-0930-ss:20181204223028p:plain


ファミリーマートに支払い -198円”がアイスを購入した履歴です。

ん?おや?一つ上に+39円という謎の収入がありますね〜〜。

これは、あれです。100億円あげちゃうキャンペーンの一環で2018年12月4日9:00~2019年3月31日23:59の間は常に購入金額の20%が返金されます。

さらに詳しいキャンペーン内容は下記HPに書いてあります。

paypay.ne.jp

これはシンプルに最高ですね。

PayPay株式会社は顧客獲得のために最初は赤字なんて当たり前!ってスタンスで顧客還元してますねー!!!!!頑張ってらっしゃる。

消費者からしたら最高なキャンペーンですよね。。。

バーコード決済戦国時代の日本では、PayPayが一歩先に進んでいる感じなのかな?

 

今後に期待です。

pythonでgoogleトレンドの情報を取得する方法

こんにちは。あつかんです。

今回はpythongoogleトレンドの情報を取得する方法を紹介しようと思います。

googleトレンドの情報をわざわざ取得しようと思ったきっかけは、googleトレンドは時系列の情報しか表示しておらず、その時系列情報に対して様々な分析を行いと思ったからです。

 

早速ソースコードを紹介と言いたいところなのですが、まずはプログラムを実行するために必要なpytrendsというモジュールを下記コマンドでインストールしてください。

pip install pytrends

またJSON形式でデータを取り扱うので、出力結果を見やすくしてくれるpprintモジュールもインストールしておきましょう。

pip install pprint

今回は"Java","Python","Ruby","Javascript"のトレンドデータを2014-01-01〜2018-09-30の範囲で取得しようと思います!

下記のソースコードを実行すれば、実行ディレクトリにトレンドデータが入ったoutput.jsonファイルが作成されるはずです!


import matplotlib.pyplot as plt
from pytrends.request import TrendReq
import json
from datetime import datetime
import pprint

tValue = []
array = []
list = []
bbb = 0

pytrends = TrendReq(hl='ja-JP', tz=360)
kw_list = ["Java","Python","Ruby","Javascript"]
for i in range(len(kw_list)):
    list.append([])

pytrends.build_payload(kw_list, timeframe='2014-01-01 2018-09-30', geo='JP')
df = pytrends.interest_over_time()

for i in range(len(df[kw_list[0]])):
    for i in range(len(kw_list)):
        list[i].append(int(df[kw_list[i]].values[i]))

for t in df.index.values:
    tValue.append(str(t)[0:10])
    dict = {'time': tValue[bbb]}
    for i in range(len(kw_list)):
        dict[str(kw_list[i])] = list[i][bbb]
    bbb += 1
    array.append(dict)
trend = { 'data': array } pprint.pprint(trend) f = open('output.json', 'w') json.dump(trend, f)

実行すると下記の画像のようなjson形式のデータがoutput.jsonとしてファイルが作成されていると思います!

f:id:nok-0930-ss:20181203230621p:plain

上記の画像はpprintを使って整形して出力しているので、output.jsonファイルの中のデータと同一の構造です。

 

あとはこのJSON形式のデータを自分の好きなように扱うだけですね!

もしエラーが発生したら、コメントでお問い合わせください!

次回はこの情報をグラフ化する方法について紹介しようと思います〜。

GASでGoogleカレンダーの当日の情報を定期的にGmailに送信する!

自分は毎日のgoogleカレンダーの情報を当日の朝にgmailにまとめて送付しています。

今回はその方法を説明しちゃいます!

ほとんどコピペで済むので、安心してください!笑

まずは以下の画像のようにスプレッドシートからツールを押してスクリプトエディタを開いてください。

f:id:nok-0930-ss:20180825132143p:plain

 
そして以下のソースコードをコピペして貼り付けてください

function sendScheduleToGmail() {
  var myCals=CalendarApp.getCalendarById('カレンダーID'); //特定のIDのカレンダーを取得
  var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得
  var strBody = "";

  /* 当日予定の数だけ繰り返し回す */
  for(var i=0;i<myEvents.length;i++){
    var strTitle=myEvents[i].getTitle(); //予定のタイトルをゲット
    var strDesc=myEvents[i].getDescription(); //予定の詳細をゲット
    strBody=strBody +strTitle + '\n' + strDesc + '\n'; //Gmailに送る文字列に予定のタイトルと説明を追加
  }
 
  //Gmailに送信
  MailApp.sendEmail({
    to: '送りたいメールアドレス',
    subject: '今日の予定一覧',
    body: strBody
  });
 
}

ここで、ちょっとだけ編集。
このソースコードに自分のgoogleカレンダーのカレンダーIDと送りたいメールアドレスを貼り付けましょう。
カレンダーIDの取得方法は以下のリンクから。
Googleカレンダーで各カレンダーのカレンダーIDを知る方法 | スキコミ


そして、実行するとgmailに予定の一覧が届いていると思います!

あとは毎日定期的に送信する方法ですね。

以下の画像のように編集から現在のプロジェクトのトリガーを選択しましょう。
f:id:nok-0930-ss:20180825133011p:plain

そして以下の画像のように設定してみてください。
時間帯は自分の好きな時間でも大丈夫です。

f:id:nok-0930-ss:20180825133332p:plain


もし、送信したい時間を詳細に設定したい場合は以下のリンクを参照してみてください!
Google Apps Script で毎日決まった時間にスクリプトを実行するトリガー設定


以上が、GASでGoogleカレンダーの当日の情報を毎日定期的にGmailに送信する方法!でした〜。
お疲れ様です。

【Apache】Raspberry pi 3でWebサーバを構築する方法【ラズパイ】

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2016/10/Apache.png

 

ラズパイ買って何しよう?

Webサーバーでも立ち上げるか!と思っている方へ。

そのためにはApacheを入れなければなりません。

その方法は以下のコマンドをターミナルで入力するだけ。

sudo apt-get install apache2

 

念のため本当に入っているか確認するためにバージョンもみておきましょう。

apache2 -v

バージョンの情報が出力されて入れば完了です。

次にChromeなどのブラウザを立ち上げて、URL欄に

http://localhost

と入力してみてください。

 

It works!

が出てきたら勝ちです。

 

htmlファイルの場所は以下の場所にあります。

/var/www/html/index.htm

ここにあるindex.htmlを編集し、http://localhostと入力するとその編集されたhtmlに対する出力が表示されるはずです。

 

以上が、ApacheでWebサーバー化する方法でした〜!

参考になれば幸いです!

【Java】サーブレットで訪問回数カウントプログラムを作ってみた!

https://c.s-microsoft.com/en-ie/CMSImages/tools-for-java-1.png?version=4bd8ce88-1f2d-4890-c7b3-b1218e0fde2e


こんにちは、あつかんです。
最近、javaを猛烈に勉強していたので習った知識をブログで共有しておこうと思います。
今回は、Webページを訪問した時によく目にする訪問回数をカウントするプログラムを作成してみました!

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CounterServlet")
public class CounterServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	public void init(ServletConfig config) throws ServletException{
		super.init(config);
		Integer count = 0;
		ServletContext application = config.getServletContext();
		application.setAttribute("count", count);
		System.out.println("ini()が実行されました");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		ServletContext application = this.getServletContext();
		Integer count = (Integer)application.getAttribute("count");
		count++;
		application.setAttribute("count", count);

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>訪問回数を表示</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<p>訪問回数:" + count + "</p>");
		out.println("<a href=\"/example/CounterServlet\">更新</a>");
		out.println("</body>");
		out.println("</html>");

	}

	public void destroy() {
		System.out.println("destroy()が実行されました");
	}

}


まずinitメソッドから始まり、ここではcount=0の値を
application.setAttribute("count", count);
を使用してcount変数に入っている値0を"count"にアプリケーションスコープとして保存しています。
次にdoGetメソッドが実行されます。
application.getAttribute("count");
で"count"に入っている値を取り出して、その値に+1をしています。
そのあとに
application.setAttribute("count", count);
でcount変数に入っている値を"count"にアプリケーションスコープとして保存しています。
そして、ページが更新されるとアプリケーションスコープに入っている"count"の中身を
application.getAttribute("count");
で取り出します。
更新されるとinitメソッドの特性(1回目しか実行されない特性)により、initメソッドは処理されずにdoGetメソッドからプログラムが始まります。
つまり更新されるたびに1が足されていくため、訪問回数がカウントできるわけですね!


プログラムをコピペして、Tomcatサーバーで実行してみると動くと思います!
わからないことがありましたら質問受付ます!
ではでは〜

公開鍵暗号方式と共通鍵暗号方式の分かりやすい説明

この記事では公開鍵暗号方式共通鍵暗号方式について、わかりやすく説明していきます。

そもそもなぜそのような技術が必要かというと、メールなどを送る際にメールの中身を見る「盗聴」やメールの内容を第三者に変えられてしまう「改ざん」や「なりすまし」などを防止するためです。

公開鍵暗号方式共通鍵暗号方式がないと、「盗聴」「改ざん」「なりすまし」をいとも簡単に行なえていしまうので、現代社会において必須な技術になっています。

たとえば、最近話題の仮想通貨には公開鍵暗号方式が使われています。

 

それでは、まずは先に共通鍵暗号方式について説明していきます!

 

 

 

共通鍵暗号方式

共通鍵暗号方式は以下の図のような流れで行われています。

f:id:nok-0930-ss:20180305152819p:plain

このように、送り手側と受け手側であらかじめ秘密鍵を共有します。

そして、送り手側は秘密鍵で暗号化し受け手側は同じ秘密鍵で復号化します。

つまりこの方式は双方とも同じ鍵を用いるということが特徴です。

しかし問題点として、そもそも秘密鍵はどうやって安全に受け渡せばよいのか?という問題もあったります。

 

 

公開鍵暗号方式

共通鍵暗号方式は、「お互い同じ鍵を共有する」ので通信相手の数が増えるとその分だけ秘密鍵も増えてしまいます。

例えば以下の図のような感じ。

f:id:nok-0930-ss:20180305153635p:plain

すると鍵の管理が大変になりますね。。。

そこで、鍵の管理を簡単にするために公開鍵暗号方式というものが出てきました。

この方式は暗号化に使う鍵と復号化に使う鍵が別物になっています。

公開鍵暗号方式の特徴を以下の図でまとめます。

f:id:nok-0930-ss:20180305154536p:plain

 

公開鍵暗号方式では、受信者側が秘密鍵と公開鍵のペアを用意します。

そして、公開鍵を世界中に配布して「自分に送るときは、私の公開鍵で暗号化してください」とします。

つまり、以下の図のような感じ。

f:id:nok-0930-ss:20180305154842p:plain

受け手の公開鍵で暗号化されたデータは、受け手の秘密鍵でしか復号できないので公開鍵をいくらばらまいても、公開鍵だけでは暗号化しかできないので、データを「盗聴」されることはありません。

公開鍵暗号方式では、自分用の公開鍵と秘密鍵を以下の図のように1セット用意しておくだけで、複数の人とやり取りすることができるので、共通鍵暗号方式のように「鍵の数が増えて管理するのが大変だ!!」というようなことは起こりません。

f:id:nok-0930-ss:20180305155610p:plain

 ただし、共通鍵暗号方式に比べて、公開鍵暗号方式は暗号化や復号に処理時間がかかるそうなので、利用形態に応じて使い分ける必要があります。

 

まとめ

共通鍵暗号方式は秘密鍵のみで暗号化と復号をする。

公開鍵暗号方式は公開鍵で暗号化、秘密鍵で復号化をする。

 

以上です!最後まで読んでくれてありがとうございました!

 

OSI基本参照モデルの装置まとめ

この記事では初心者向けにOSI参照モデルの説明をしていきます。

なるべくわかりやすく書いていきます!

ちなみにこの本を参考にして書きました。

キタミ式イラストIT塾 応用情報技術者 平成30年度 (情報処理技術者試験)

とても分かりやすい本なのでオススメです。

 

それではいきます。

 

OSI参照モデルとは

 

パソコンが他のパソコンと通信するためには通信機器が必要です。

OSI参照モデルとは、その通信をする際に必要な通信機器の機能を第1層から第7層までに分割したモデルのことです。

なぜこのようのなモデルが必要かというと、全ての端末で共通する通信のルール(規格)を定義し、それに沿った通信が行われれば端末の仕様が異なっていても問題なく通信が行えるようにしたいためです。

 

このモデルは国際標準化機構(ISO)によって定義されました。

 

第1層から第7層までの具体的な中身を見ていきましょう!

 

f:id:nok-0930-ss:20180224002317p:plain

 

こんなのを一気にみせられても大変ですよね 。

それでは、各層にある各装置はどんなことをやっているのかを図を交えて説明をしていきます!

 

第1層(物理層)

第1層にはNIC、リピータ、LANケーブルなどがあります。

それでは上記の三つを紹介していきます!

NICについて

まずはNIC(Network Interface Card)について。

NICの役割は”データ”を”電気信号”に変換してケーブル上に流すこと、受け取ることです。

具体的には以下の図のような感じです!

 

f:id:nok-0930-ss:20180224003700p:plain

要するに、コンピュータがネットワークでやりとりしようと思ったら、欠かすことのできない部品がNICというわけです。

NICは通常、パソコンの中に入っています。

 

リピータ

次はリピータについて。

リピータは流れる電気信号を増幅します。

なぜ、増幅しなければならないかというと、以下の図のようにLANケーブルが長くなるとそこを流れる信号が歪んでしまう場合があります。

f:id:nok-0930-ss:20180224010506p:plain

そのため、受取手のパソコンさんはどんな信号が送られているのか理解することがむず開始です。そこで中間地点に信号を増幅するためのリピータを介入させます。

f:id:nok-0930-ss:20180224010610p:plain

すると、画像のように減衰する前に信号を増幅(整形)して再送出してくれるので信号の歪みを解消することができます。

 

LANケーブル

LANケーブルは、イーサネットで使用する配線用のケーブルのことで、主にコンピュータとその周辺機器を接続するためのケーブル。

                                                    f:id:nok-0930-ss:20180224011646p:plain

ちなみにイーサネットとは簡単に言えば、コンピュータネットワークの規格のひとつで、世界中のオフィスや家庭で一般的に使用されているLAN(Local Area Network)で最も使用されている技術規格です。

 

以上が、第1層(物理層)でした。

物理的にネットワークをどう繋ぐかは上記の装置を使って決めていきます。

 

第2層(データリンク層

この層は、一つのネットワーク媒体に接続され複数のコンピュータの間でデータをどのように伝送するのかの機能が提供されています。

データリンク層には、ブリッジという装置があります。

それではこの装置の説明をしていきます。

ブリッジ

ブリッジは以下の図のようなことをしています。

f:id:nok-0930-ss:20180224152812p:plain

流れてきたパケットにはMACアドレスという次の送付先を示す情報があるため、ブリッジはその情報をみて異なる送付先にパケットが流れ込まないように制御します。

ちなみに、MACアドレスIPアドレスの違いを明確に説明しとくと、IPアドレスは最終的な送付先を示していて、MACアドレスは次の送付先を示しています。

ブリッジによるパケットの交通整理を行うことによって、パケットの衝突が起きにくくなり回線の利用効率が下がることを回避できます。

 

スイッチングハブ

ブリッジを複数束ねたもの。

図で表すと以下のような感じ。

f:id:nok-0930-ss:20180224155151p:plain

 

 

 

第3層(ネットワーク層

この層は、異なるネットワーク同士をどのように中継するかの役割があります。

その中継機能を提供する装置がルータです。

ルータ

ブリッジが行う転送はあくまでもMACアドレスが確認できる範囲のみで有効なので、外部のネットワーク宛への転送を行うことはできません。

外部へパケットを転送するためにはルータが必要です。

以下の図のような役割をしています。

f:id:nok-0930-ss:20180224160531p:plain

IPアドレスは"どのネットワークに属する何番目のコンピュータか"という情報なのでこれを確認することで、外部ネットワークへ送付することが可能です。

 

第4層以上

第4層以上にはゲートウェイという装置があります。

ゲートウェイを簡単に説明すると、ネットワークの翻訳家さんみたいなものです。

難しく言うと、ネットワーク双方で使っているプロトコルの差異をなくす役割をもっています。

そのようなプロトコルの差異はゲートウェイという装置を使って吸収します。

f:id:nok-0930-ss:20180224162816p:plain

例えば、携帯のメールとインターネットのメールは使用しているプロトコルが異なっているので通信できません。

そこでゲートウェイを使用すると以下のように変換することが可能なので、我々はなに不自由なく携帯とパソコン間でやり取りができるわけです。

f:id:nok-0930-ss:20180224164017p:plain

 

まとめ

今回はOSI参照モデルで使用される代表的な装置の機能を説明してきました。

次のブログでは、各層の具体的な内容やプロトコルについて説明していこうと思います。