Quantcast
Channel: Lancork
Viewing all 686 articles
Browse latest View live

無料でAlexaのトラフィックデータを取得できるAPI(ドキュメント無し)

$
0
0

Alexaというサイトでは自分のドメインが世界で何番目のトラフィック(アクセス量)であるかを調べることができます。しかし毎回Webサイトで調べるのは手間がかかり、公式APIは用意されているものの残念ながら有料です。

そこで無料でトラフィックランクが取得できないか調べてみたところ、ドキュメントに載っていないAPIがあるようなのでメモします。

Alexaとは

AlexaはAmazon傘下のアメリカのインターネット関連企業です。世界中のウェブサイトのトラフィックを調査しており、公式サイトでは調べたいURLを打ち込むと、毎日のトラフィックランクや直帰率、訪問別PV数等を表示してくれます。

参考までに以下は当サイト(ドメイン)のトラフィックランク情報です。ランクは世界で約45万番目のようです。
Lancork Alexa Overview

以下はWikipediaから引用したAlexaの概要です。

事業内容は、ウェブ巡回技術を使ってウェブサイト情報や利用状況に関するデータを集め、ウェブサイトがどれだけの人に見られているかを調査すること。alexa.comでは、ドメインのアクセス量(トラフィック)や訪問者数、1回の訪問あたりの閲覧ページ数などを表示できる。また、Alexa InternetはWayback Machineのデータ提供元でもある。

有料のAlexa公式API

公式APIはAWS(Amazon Web Service)でAlexa Web Information Service(AWIS)という名前で提供されています。

しかし無料では使えず、非常に安い金額ですが1リクエストごとに$0.00015かかります。2014年7月31日現在の値段だと1,000リクエストあたり約16円です。

無料で使えるAlexa API(ドキュメント無し)

無料でAlexaランクを取得する方法がないか調べてみたところ、Stack Overflowで同じ質問をしている人がいました。その回答に、無料APIはAlexa公式サイトで提供されているもののドキュメントがどこにも無い旨が記載されていました。

There is a free API (though I haven’t been able to find any documentation for it anywhere).
http://data.alexa.com/data?cli=10&url=%YOUR_URL%
You can also query for more data the following way:
http://data.alexa.com/data?cli=10&dat=snbamz&url=%YOUR_URL%

Alexaの無料APIの使い方

以下のURLの%YOUR_URL%の部分にAlexaデータを調べたいURLを入れます。

http://data.alexa.com/data?cli=10&url=%YOUR_URL%

例として当サイトwww.lancork.netを調べたい場合は以下の通りです。

http://data.alexa.com/data?cli=10&url=www.lancork.net

ブラウザで実行してみると以下のようなXMLのデータが返ってきます。POPULARITY要素のTEXT属性にAlexaランクと思われる数値が入っています。

<ALEXA VER="0.9" URL="lancork.net/" HOME="0" AID="kcASj1MNo000wv" IDN="lancork.net/">
<script/>
<SD>
<POPULARITY URL="lancork.net/" TEXT="458275" SOURCE="panel"/>
<REACH RANK="384966"/>
<RANK DELTA="-151449"/>
</SD>
</ALEXA>

国内ランクも出てくるときがあるのですが、大体25,000位以内でないと出てこないようです。

またパラメータに&dat=snbamzを追加した下記のURLでは、さらに詳細な情報を取得できます。

http://data.alexa.com/data?cli=10&dat=snbamz&url=%YOUR_URL%

おわりに

データはXMLで取得できるので、プログラムから値を取得するのは簡単にできそうです。公式APIが有料なのは残念ですが、APIを使うと提供元のサイトに負荷がかかるので仕方ありませんね。

他のサイトでも公開されていないAPIがあるかもしれないので調べてみたいと思いました。


あの人気サイトがどのレンタルサーバーを使っているかがわかる「Netcraft Site Report」

$
0
0

ブログやサイトをはじめるときや移転の際にどんなサーバーで運営するかは悩みどころで、他のサイトがどのサーバーを使っているかも気になるところです。

そこで他のサイトがどのサーバーを使っているかがわかるサービス「Netcraft Site Report」をご紹介します。

Netcraft Site Reportとは

WebサイトでURLを入力すると、該当のサイトがどこのサーバーを使っているか等の情報を表示してくれるサービスです。その他にもブログソフトウェアの名前など、どんなテクノロジーを使用してサイトが作られているかも調べることができます。

Netcraft Site Reportの使い方

Netcraft Site Reportを開きます。

調べたいサイトのURLを入力し、Enterキーを押します。(検索ボタンはありません)
netcraft site report URL入力

試しに当サイトwww.lancork.netを調べてみました。さくらインターネットを使っていることが表示されました。さらにウェブサーバーはApache/2.2.25を使っていることまでわかります。
netcraft site report Lancork結果

さらにホスティングサービスを移転したことがあるサイトは過去にどのホスティングを利用していたかの履歴(Hosting History)が表示されることがあります。当サイトは表示されなかったので、昨年の12月にAWSにお引っ越ししてサイトが爆速になったらしい永江氏のサイト(月間PV100万超えの超人気ブログ)を調べてみました。
netcraft site report ランダーブルー

以前はKagoyaのサーバー(おそらくマネージド専用サーバー)でウェブサーバーはApacheだったのが、AWSでNginxに変わったのが確認できます。爆速なのも納得の構成です。

おわりに

人気があるレンタルサーバーといえばエックスサーバーさくらのレンタルサーバロリポップ!が定番ですが、知らなかったホスティングサービスも見つけることができて面白いサイトでした。

ちなみに月間50,000PV程度の当サイトは、月500円のさくらのレンタルサーバで繋がりにくくなることもなく、快適に運用しています。

Google DomainsとAmazon Route53のドメイン登録料金を比較してみた

$
0
0

6月の後半にGoogleが「Google Domains」というサービスでドメイン登録事業に参入することが話題となりました。そして2014年8月1日、AmazonもAWSのサービスの一部である「Amazon Route53」でドメイン登録が可能となったことを発表しました。

本日ちょうど「Google Domains」のベータ版サービス招待がきたので、「Amazon Route53」とドメイン登録料金を比べてみたのでメモします。

Google Domainsで登録可能なドメイン(2014年8月1日時点)

2014年8月1日現在Google Domainsは招待制ベータ版です。さらに米国からしかドメイン登録できません。
Google Domains 招待制ベータ 米国オンリー
また現状以下のトップレベルドメインしかサポートされません。.jpは登録できず、新ドメインが多い割にccTLD(国別トップレベルドメイン)が少ないです。

Google Domains supports the following top level domains (TLDs):

  • .biz
  • .cc
  • .center
  • .com
  • .company
  • .email
  • .guru
  • .info
  • .net
  • .org
  • .photography
  • .solutions
  • .technology
  • .tips
  • .today
  • .us

Amazon Route53で登録可能なドメイン(2014年8月1日時点)

Amazon Route53ではGoogle Domainsと異なり、ccTLDを含むかなり多くのドメインが登録可能です。しかしGoogle Domainsで登録可能な.ccは登録できないようです。
Amazon Route53 ドメイン登録
ただ、既にドメイン登録を試された方によるとAmazonがレジストラになったのではなく、別のレジストラと提携しているようです。そのため取り扱いドメインの種類が多いのかもしれません。

※Registration is powered by: Gandi と書いてあるので、このドメインの登録はGandi.netがやってるみたいです。AWSがレジストラになったわけではなく複数のレジストラと連携したってことのようですね

Google DomainsとAmazon Route53のドメイン登録料金の比較(2014年8月1日時点)

Google DomainsとAmazon Route53両方で登録可能なドメインについての登録料金(一年分)の比較表です。

TLD Google Domains Amazon Route 53 比較
.com $12 $12 同じ
.net $12 $10 Amazonが2$安い
.org $12 $12 同じ
.info $12 $12 同じ
.biz $12 $12 同じ
.center $20 $21 Googleが1$安い
.company $20 $21 Googleが1$安い
.email $20 $25 Googleが5$安い
.guru $28 $25 Amazonが3$安い
.photography $20 $21 Googleが1$安い
.solutions $20 $25 Googleが5$安い
.technology $20 $49 Googleが29$安い
.tips $20 $21 Googleが1$安い
.today $20 $32 Googleが12$安い
.us $12 $30 Googleが18$安い

メジャーどころは.netがAmazonのほうが少し安いぐらいしか差がありません。しかしccTDLの.usはGoogleのほうが$18安く、新ドメインの.technologyに至ってはGoogleのほうが$29も安いです。

今後変動するものと思われますが、現時点ではGoogleのほうが全体的に安いイメージです。

おわりに

Google DomainsはGoogle AppsやGoogle App EngineなどのGoogleサービスと、Amazon Route53はAWSの他のサービスと親和性が高くなると思われるため、普段使っている別のサービスとも兼ね合いを考えたいですね。

しかしAmazonでは.jpドメインが1年$100であったり高額なものも目立つため、価格だけを考えるのであれば当分はお名前.comなどの国内のサービスを利用するのが良さそうです。

会話もできる!実用的なiOS/Android用の英語学習アプリ「本気で英会話!ペラペラ英語」

$
0
0

英語学習アプリは数多くありますが、日常では学習した英語を実際に読み書きすることはあっても話す機会はなかなかありません。

そこでマイクと音声認識を利用した会話もできる英語学習アプリ「本気で英会話!ペラペラ英語」を試してみました。実用的で日常英会話の練習に良さそうだと思ったので内容と特徴をご紹介します。

「本気で英会話!ペラペラ英語」とは

appArray株式会社が提供する、会話モード・リスニングモード・名言モードの3つのモードで英会話のスピーキング・リーディング・リスニングの練習が可能なiOS/Androidアプリです。
ペラペラ英語 タイトル画面

スマートフォンならではの音声認識技術を利用し、スピーキングの練習ができる会話モードが他のアプリでは見ない特徴で、英語の学習自体も単語+例文ではなく実践的な会話がメインとなっています。

アプリは100円の買い切りです。iOS版はAppStoreからダウンロード可能です。

Android版はGoogle Playからダウンロード可能です。

Studyplusに自動で勉強記録が可能

当サイトでも何度か紹介している勉強SNS「Studyplus」のアプリと連携してStudyplusに勉強記録を自動で投稿できる機能もついており、とくに意識しなくても勉強した時間の記録を付けることが可能となっています。

「本気で英会話!ペラペラ英語」の使い方

3つのモードで学習することが可能です。それぞれのモードについてご紹介します。

リアルな日常英会話が学べる「会話モード」

会話モードでは複数あるシチュエーションの中から会話を練習したい場面を選択します。「デートの誘い」などの気になる場面もあります。
ペラペラ英語 会話モード

全ての場面は2人での会話となるため、どちらか一方の人物を選択します。
ペラペラ英語 人物選択

人物を選択すると見覚えのあるチャットのような画面で会話が始まります。自分の番になったら「1.マイク入力」または「2.タイプ入力」をタップで選択します。マイク入力では画面の下部に表示されている例のうちどちらかをスマートフォンのマイクに話しかけることで回答します。タイプ入力ではソフトウェアキーボードで回答例のいずれかを打ち込んで回答します。
ペラペラ英語 会話モード 音声認識

マイク入力で回答した例です。音声認識によって回答が自動的に選択され、会話が進んでいきます。ちなみに回答の選択肢はどちらでもOKです。
ペラペラ英語 マイク入力で回答

うまく発音できると「Very Good」「Fantastic」「Perfect」などのエフェクトが表示され励みになります。
ペラペラ英語 Perfect

同じステージをクリアするごとに銅、銀、金のトロフィーをもらえます。トロフィーを集めることでロックが解除されるステージもあります。

動画から聴く練習ができる「リスニングモード」

リスニングモードでは名作映画や演説を選択し、その中で話されていることを聞き取ることでリスニングの練習ができます。
ペラペラ英語 動画モード

画面右上の「設定」より和訳の表示・非表示設定、自動スクロール設定、リピートの設定ができます。
ペラペラ英語 リスニングモード設定

青い英単語はタップすることで画面上部に意味を表示することもできます。
ペラペラ英語 単語の意味

偉人に元気づけられながら学べる「名言モード」

名言モードではジャンル別に世界の偉人の名言がまとめられており、画面上部の再生ボタンを押すと心に残る名言を英語で聞きながら学習ができます。
ペラペラ英語 名言モード

画面右上の「自動」をタップすると画面スクロールが自動で追従します。

「本気で英会話!ペラペラ英語」のここが素晴らしい

実践的にスピーキングの練習ができる

なんといっても実際に英語を発音することができるのが目玉機能です。頭では発音できるつもりでも声に出してみると全然発音できていないことがよくわかりました。また自分で発音したあとにネイティブ音声による模範回答があるため、読み方やイントネーションの違いがどのぐらいあるのかもわかります。

英語の発音記号を閲覧できるような機能もあるとより練習になるかもしれません。

Studyplusに自動で勉強記録を投稿できる

メインメニューの「ご紹介・ご連絡」→「勉強系SNS Studyplus連携機能」をONにすると、アプリ終了時に勉強記録を自動的に送信することができます。(別途Studyplusのアプリが必要です)
ペラペラ英語 Studyplus連携

Studyplusを開いて勉強時間を入力して・・・という手間を省いて勉強時間・内容を記録でき、勉強することに集中しつつ後からゆっくり結果を確認することができます。
ペラペラ英語 Studyplus投稿結果

名言に元気付けられる

名言モードは眺めているだけでもなんだか元気が湧いてきます。とくに資格試験などには以下の名言を忘れずにいたいものです。

It’s not whether you get knocked down, it’s whether you get up.
(倒されたかどうかが問題なのではない、立ち上がるかどうかが問題なのだ)

引用元:Vince Lombardi(本気で英会話!ペラペラ英語)

おわりに

発音と日常会話が練習できることもあり、どこか英語の教科書を思い出させるような英語学習アプリでした。英単語学習アプリと併用すると効果が高そうです。

会話モードのシチェーションは特に参考になるため、今後のコンテンツ追加にも期待したいです。

AWS SDK for PHP2を使ってAmazon DynamoDBのデータを読み書きするサンプル

$
0
0

NoSQLデータベースはリレーショナルデータベースと性質が異なるため敬遠していましたが、AWSには「Amazon DynamoDB」という従量課金制NoSQLデータベースサービスがあります。

PHPからSDKを利用して使ってみたところ手軽にデータの読み書きができたので、利用方法をメモします。

Amazon DynamoDBとは

Amazonが提供するフルマネージド型のNoSQL型データベースサービスです。データ保存にはSSDが使われておりデータ読み出し・書き込み速度が速く、自動で同一リージョン内の3つの施設にレプリケーションされるためデータの耐久性と可用性がとても高いサービスとなっています。

公式サイト:Amazon DynamoDB (フルマネージドNo SQLデータベースサービス)

従量課金制で課金はプロビジョニングされたスループットの容量とデータ保存容量に対して行われます。わかりにくい表現ですが、単位時間あたりに読み書きできる予約容量を増やすごとに料金が高くなっていくという意味です。

しかし保存容量100 MB と書き込み最大5 回/秒、読み込み最大10 回/秒のスループット容量(毎日最大432,000回の書き込みと864,000回の読み込みができるだけのリソース予約)は毎月無料で利用できるため、試用やちょっとしたアプリケーションであればほとんど無料で使うことができます。

事前準備

PHPからDynamoDBの読み書きを行うため、データベースのテーブルの作成とDynamoDBへのアクセス権をもったIAMユーザを作成し、シークレットキーとアクセスキーを取得しておきます。

DynamoDB データベースのテーブル作成

AWSマネジメントコンソールからDynamoDBの画面を開き、「Create Table」ボタンを押します。
DynamoDB マネジメントコンソール

Table Nameには任意のテーブル名を入力します。またPrimary Keyではテーブルのプライマリキーを「Hash」(ハッシュのみ)または「Hash and Range」(ハッシュおよび範囲)のタイプで指定します。「Hash」を指定した場合はテーブルのキーは1つの属性のみとなり、「Hash and Range」を指定した場合は2つの属性で複合キーとなります。

今回はプライマリキータイプを「Hash and Range」とし、Hash属性をString型の「Id」Range属性をString型の「CreateDate」としました。
DynamoDB テーブルの作成

オプションでテーブルインデックスを設定可能です。通常テーブルに対するクエリはプライマリキーにしか実行できませんが、インデックスを設定するとプライマリキー以外の属性にもクエリを実行できます。今回はインデックスを設定せずそのまま「Continue」で次に進みます。
DynamoDB インデックスの作成

プロビジョニングスループットの設定です。値を変更すると読み書き速度の性能を向上できますが、無料利用枠に収めたいので「Read Capacity Units」と「Write Capacity Units」それぞれ1のままとしておきます。
DynamoDB プロビジョニングスループットの設定

テーブルの読み書きスループットが一定量を超えるとアラーム送信する設定が可能です。アラーム設定する場合は通知先メールアドレスを入力します。
DynamoDB アラームの設定

設定を確認して問題なければ「Create」ボタンを押します。
DynamoDB 設定の確認

マネジメントコンソールに戻るとテーブルが作成されています。Statusが「ACTIVE」になったら利用可能です。
DynamoDB テーブル作成完了

DynamoDBへのアクセス権を持つIAMユーザの作成

PHPのAWS SDKからDynamoDBを操作するためのアクセスキー・シークレットキーを取得します。既にDynamoDBへアクセス可能なアクセスキー・シークレットキーがある場合は本手順はスキップ可能です。

AWSマネジメントコンソールからIAM(dentity and Access Management)を開きます。

左メニューの「Users」を選び、「Create New Users」ボタンを押します。
IAM 新規ユーザ作成

任意のユーザ名を入力します。画面下部の「Generate an access key for each user」のチェックを入れておき、画面右下の「Create」ボタンを押します。
IAM 新規ユーザアクセスキー作成

ユーザが作成され、「Show User Security Credentials」をクリックするとアクセスキーIDとシークレットキーが表示されるためメモしておきます。
IAM アクセスキーとシークレットキー

IAMのユーザー一覧画面に戻り、新規作成したユーザを選択します。詳細画面の「Permissions」で「Attach User Policy」ボタンを押します。
IAM パーミッションの適用

「Amazon DynamoDB Full Access」を「Select」し、次の画面で「Apply Policy」ボタンを押すと新規作成したユーザにDynamoDBの読み書きアクセス権が付与されます。
IAM DynamoDB フルアクセス

AWS SDK for PHP2を使ったAmazon DynamoDBのデータ読み書き

やっと本題です。AWS SDK for PHPaws.pharこちらのページからダウンロードしておき、プログラムからインクルード可能な状態としておきます。

最初にconfig.phpという名前でアクセスキー・シークレットキー・リージョンを指定した認証情報のファイルを作成しておきます。このファイルをAws::factoryメソッドの引数に指定することでPHPクライアントの認証が可能となります。

<?php
return array(
    'includes' => array('_aws'),
    'services' => array(
        'default_settings' => array(
            'params' => array(
                'key' => 'YOUR_ACCESS_KEY',    //アクセスキー
                'secret' => 'YOUR_SECRET_ACCESS_KEY',    //シークレットキー
                'region' => 'ap-northeast-1'    // リージョン          
            )
        )
    )
);

Amazon DynamoDBへのデータ書き込み(putItem)

DynamoDBへの書き込みはputItemメソッドを使います。

以下は先ほど作成したSampleTableテーブルのキーIdに”0001″を、CreateDateに現在時刻を、その他2つの属性StringAttributeNumberAttributeにそれぞれ100と”String”を書き込むサンプルです。

<?php
require_once './aws.phar';

date_default_timezone_set('Asia/Tokyo');

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

$aws = Aws::factory('./config.php');

try {
    $client = $aws->get('dynamodb');

    $result = $client->putItem(array(
        'TableName' => 'SampleTable',
        'Item' => $client->formatAttributes(array(
            'Id'        => '0001',
            'StringAttribute' => 'String',
            'NumberAttribute' => 100,
            'CreateDate' => date("Y-m-d H:i:s"),
        )),
    ));

} catch (DynamoDbException $e) {
    echo $e->getMessage();
}

実行後、DynamoDBのコンソールからテーブルを選択して詳細を見てみると確かに書き込みが実施されています。
DynamoDB putItem

Amazon DynamoDBのデータ読み出し(scan)

テーブルのデータ読み出しはscanメソッドで可能です。以下は先ほど作成したSampleTableテーブルの全てのレコードを取得するサンプルです。

<?php
require_once './aws.phar';

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

$aws = Aws::factory('./config.php');

try {
    $client = $aws->get('dynamodb');

    $result = $client->scan(array(
        'TableName' => 'SampleTable',
    ));

    echo "<pre>";
    print_r($result);
    echo "</pre>";

} catch (DynamoDbException $e) {
    echo $e->getMessage();
}

実行結果は以下の通りです。先ほど書き込んだ値が表示されています。
DynamoDB Scan

APIリファレンス

AWS SDK for PHPのDynamoDBクライアントのAPIリファレンスは以下のページから参照可能です。

Class Aws\DynamoDb\DynamoDbClient | AWS SDK for PHP

おわりに

DynamoDBは高負荷耐性やスケールアウトの簡単さからソーシャルゲーム等での利用事例が多いようですが、初期費用が無いため様々な場面で利用しやすいと思います。

今回はシンプルな読み書きのみ試してみましたが、自前でデータベースを用意しなくてもSDKを使えば簡単にデータを保存できることがわかりました。

ネットゲームでアカウントハックされた後に行った外国人ハッカーへの奇抜な対策

$
0
0

インターネットではユーザーIDとパスワードは本人を認証するとても重要な情報であるため、悪意のある攻撃者は常にこれらを狙っています。

今から12年ほど前(2002年)の出来事ですが、はじめてのネットゲームでアカウントハックされた後、海外のハッカーへの対策としてパスワードに奇抜な対策をしたことを思い出したのでメモします。

当時遊んでいたネットゲーム「Helbreath」について

2002年頃はリネージュ1やラグナロクオンラインが流行っていましたが、その影で密かに人気を集めていた「Helbreath」(ヘルブレス)というゲームにハマっていました。
Helbreath 概要図
プレーヤーは2つの国家にわかれ、平日はモンスターハントによるアイテム集めやレベル上げが主ですがレイドデーと呼ばれる土日は敵国に攻め込んでPvP(対人戦)を楽しむことができるゲームでした。

世界中のプレーヤーが同じサーバーでプレイしており日本人だけのゲームとは異なる世界観で、さらに2Dの馴染みやすい画面だったため今でも最高のゲームだったと思っています。

アカウントハックされた状況

アカウントハックされたのは他のプレーヤーとトレード(アイテム交換)をしたときでした。お互いにアイテムを出しあい、交換するためのボタンを押した途端にサーバーとの接続が切れ、再度ログインしようとしてもパスワードが異なる旨のエラーとなりログインが出来ないような状況になりました。
Helbreath トレード
一緒にプレイしていた友人から「自キャラがアイテムをばらまきながら歩いている」という連絡があり、アカウントが奪われてしまったことに気が付きました。どのような仕組みだったか不明ですが、トレードのときに自分のアカウント情報が相手にわかってしまう脆弱性がゲームにあったようです。

アカウントの取り戻し

すぐにゲームの運営にアカウントハックされた時の状況をスクリーンショット付きで連絡しました。幸い日本語がわかるゲームマスターの方が即座に対応してくれたため自分のアカウントは取り戻すことができ、ハッキングを行った相手プレーヤーはアカウント停止処分となりました。

しかしゲーム自体に脆弱性があるためいつまた同じ目にあうかわかりません。

パスワード変更の際に施した奇抜な対応

アカウント復旧後にパスワードを変更する際、日本人プレーヤーの中で「パスワードに日本語が使える」という情報が出回っていました。そのため新しいパスワードは日本語の文字列に変更しました。

当時パスワードに日本語を使う対策は効果があったのか

今思うと単純な対策だったとは思いますが、同ゲームでは日本人プレーヤーと海外プレーヤーには以下のような違いがありました。

  • ゲームのクライアントソフトは英語版と日本語版があった
  • 日本語版クライアントでは日本語の入力ができる
  • 英語版クライアントでは日本語の入力ができず、ペーストもできない
  • 英語版クライアントでは日本語が文字化けする

アカウントハックを仕掛けてくるのはほぼ100%海外プレーヤーであり、上記の通り仮にパスワードが漏れてしまっても英語版のクライアントソフトではログインする術が無かったため、効果はあったものと思われます。

その後はアカウントハックの被害に遭うことはありませんでしたが、トレード時に何らかの原因でパスワードが漏れる件は直ったのか不明です。

現在でも同じ対策が取れるか

残念ながら昨今のWebサービスやネットゲームではパスワードに記号は使えても日本語は使えないものがほとんどであるため、同じ対策は難しいと思われます。というよりパスワードに日本語が使えた「Helbreath」が特殊だったのかもしれません。

おわりに

いつもと違った感じのエントリでしたが、Gmailでメールアドレスに日本語など非アルファベット文字が利用可能になるというニュースを目にして、当時のことを思い出したため書きました。

多くのサービスで認証情報等に日本語が使えないのはそれなりの理由があると思われますが、日本語が使えれば長くて覚えやすい強固なパスワードが手軽に作成できて良いのではと思いました。

Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(事前準備編)

$
0
0

ウェブサイトを運営しているとGoogle Analyticsのアクセス解析を見るのは楽しみの1つです。その中でもリアルタイムで何人のユーザがサイトを閲覧しているかは常に気になりますが、常時Analyticsを見ている訳にもいきません。

そこでGoogle Analyticsのリアルタイムユーザー数をPHPからReal Time Reporting API(v3)で取得する方法を事前準備編・実践編に分けてメモします。

はじめに

本エントリではGoogle Analytics APIを使ってPHPからウェブサイトのリアルタイムアクティブユーザー数を取得するための事前準備について記載しています。

Google Analytics APIとは

Googleの数多くのサービスを各種プログラミング言語から利用可能にするAPIです。
APIを使用することでリアルタイムユーザー数、ページビュー数などの各種情報を、Google Analyticsの画面にわざわざログインしなくてもプログラムから取得することができます。

Google Analytics APIを使うための準備

APIを使うためにはGoogle Developers Consoleでプロジェクトと認証情報を作成する等の事前準備が必要となります。一つずつ準備していきます。

Google Developers Consoleの日本語化

デフォルトの状態ではDevelopers Consoleは英語となっています。設定内容をわかりやすくするため、まずは画面を日本語化しておきます。

Google Developers Consoleを開き、Googleアカウントでログインします。

画面左メニューのAccount Settingsを開きます。
Google Developers Console アカウント設定
「Language & Formats」→「LANGUAGE」より「日本語」を選択、「FORMATS」で「Japan」を選択します。
Google Developers Console 言語設定の変更
「Save」ボタンを押すと設定が保存され、Developers Consoleが日本語表記になります。
Google Developers Console  日本語化完了

プロジェクトの作成とAPIの有効化

画面左メニューの「プロジェクト」を開き、「プロジェクトの作成」ボタンを押します。
Google Developers Console プロジェクトの作成

任意のプロジェクト名・プロジェクトIDを入力します。プロジェクトIDは自動生成されますが任意のものに変更することも可能です。またテキストボックス右側のリロードボタンを押すと再度自動生成されます。入力が終わったら「作成」ボタンを押します。
Google Developers Console プロジェクト名とIDの入力
プロジェクトの作成がはじまり、数分でプロジェクトの作成が完了します。プロジェクトの作成が完了するとプロジェクトのダッシュボードが表示されます。
Google Developers Console プロジェクトダッシュボード
Google AnalyticsのAPIを有効化するため、左メニューの「APIと認証」→「API」を選択します。
Google Developers Console API

初期状態では「Analytics API」のステータスが「無効」となっているため、「無効」となっているボタンをクリックして有効化します。
Analytics APIの有効化
「Analytics API」が有効になるとステータスが「有効」となります。
Analytics APIの有効化完了

認証情報の作成

APIをプログラムから利用するために認証情報を作成します。

左メニューの「APIと認証」→「認証情報」を選択します。
Google Developers Console 認証情報

OAuthでの認証情報には以下の3種類があります。

ウェブ アプリケーション

PHP、Python、Java、RubyなどのWebアプリケーションからエンドユーザがGoogleアカウントにログインし、そのログイン情報を元にAPIを使うときに使用します。

サービス アカウント

エンドユーザによる操作無しで、バッチ等からAPIを使いたいときに使用します。

インストールされているアプリケーション

PCやiOS/AndroidなどにインストールされているアプリケーションからAPIを使うときに使用します。

今回は毎回認証せずにAPIを使用したいため、「サービス アカウント」でクライアントIDを作成します。「新しいクライアントIDを作成」ボタンを押します。
新しいクライアントIDを作成

「サービス アカウント」を選択肢、「クライアントIDを生成」ボタンを押します。
サービスアカウントの作成

認証情報の生成が完了すると以下の様な画面が表示され*.json形式のファイルがダウンロードされますが、JSONファイルは今回は使いません。
公開鍵/秘密鍵ペア作成(JSON)

プログラムからAPIを利用する際には*.p12形式の証明書ファイルが必要となるため、「新しいP12キーを生成」ボタンを押して*.p12証明書ファイルをダウンロードします。
新しいP12キーを生成

サービスアカウントのP12キー

*.p12キーファイルと画面に表示されている以下の情報はプログラムからAPIを使う際に必要になります。後編の実践編で紹介する方法ではクライアントIDは使用せず、メールアドレスのみ使用します。

クライアントID XXXXXXX.apps.googleusercontent.com
メールアドレス XXXXXXX@developer.gserviceaccount.com

Google Analytics管理画面で認証情報のメールアドレスにアクセス権を付与

APIの利用準備は整いましたが、まだAPIからAnalyticsの情報へアクセスすることはできません。そのためGoogle Analytics管理画面の「アナリティクス設定」で、APIのメールアドレスにAnalyticsビューへのアクセス権を与えます。

APIから参照したいGoogle Analyticsの「アナリティクス設定」を開き、「アカウント」→「ユーザー管理」を開きます。
Analytics ユーザー管理

「権限を付与するユーザー」に先ほど取得したクライアントIDの「EMAIL ADDRESS」を入力し、「追加」ボタンを押します。権限は「表示と分析」のみでOKです。
Analytics メールアドレスの追加

ユーザー一覧にメールアドレスが追加されていれば設定完了です。
Analytics メールアドレスの追加完了

Google AnalyticsビューIDを控えておく

APIからGoogle Analyticsの各種値を参照するにはGoogle AnalyticsのビューIDが必要です。

Google Analyticsの「アナリティクス設定」→「ビュー」→「ビュー設定」を開き、「ビュー ID」に表示されているIDを控えておきます。
google-analytics-04-confirm-view-id

以上でGoogle Analytics APIをプログラムから使う準備は完了です。

おわりに

今回の事前準備では以下のものを用意しました(後編の実践編で紹介する方法ではクライアントIDは使用しません)

用意したもの 値の一例
クライアントID XXXXXXX.apps.googleusercontent.com
メールアドレス XXXXXXX@developer.gserviceaccount.com
p12キーファイル Projectname-123456.p12
Google AnalyticsのビューID 1234567

次回の実践編では事前準備した情報を使って、実際にPHPからリアルタイムユーザー数を取得するプログラムを作成します。

続き:Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(実践編)

Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(実践編)

$
0
0

事前準備編ではGoogle Analytics APIを使うために必要な情報を準備しました。

実践編では実際にPHPからGoogle Analyticsのリアルタイムアクティブユーザー数を取得してみます。コピペで使えるコードもあります。

はじめに

本エントリではGoogle Analytics APIを使ってPHPからウェブサイトのリアルタイムアクティブユーザー数の取得をプログラムで実践します。事前準備編の準備ができていることが前提となります。

前回エントリ:Google Analytics API(v3)を使ってPHPでリアルタイムユーザー数を取得する方法(事前準備編)

Google APIs Client Library for PHPの準備

PHPからAPIを使うため、クライアントライブラリを準備します。ライブラリはComposerからインストールするか、GitHubからソースをダウンロードします。今回はGitHubからコピーする方法で準備します。

関連ページ:Installation – Google APIs Client Library for PHP — Google Developers

GitHubのプロジェクトページの下記の場所からダウンロードします。
Google APIs Client Library for PHP ダウンロード

または下記コマンドでgit cloneします。

git clone https://github.com/google/google-api-php-client.git

コピーしたファイルは以下のような構成になっています。実際に使用するのはsrcフォルダの中身だけです。
Google APIs Client Library for PHP 構成

Google Analyticsのリアルタイムユーザー数をPHPで取得するサンプル

ようやくプログラムの出番です。まずリアルタイムユーザ数取得用のPHPを任意の名前(fetchactiveuser.phpなど)で作成し、クライアントライブラリのsrcフォルダおよび準備編で準備した*.p12ファイルと同じ階層に配置します。階層はコード中で指定しているものと同じになれば変わってもOKです。
リアルタイム数取得プログラム配置

以下はリアルタイムユーザー数をPHPで取得し、JSON形式で返すサンプルコードです。サービスアカウント名、P12キーファイルのパス、アナリティクスビューIDは準備編で用意した自分のものに置き換えます。

<?php
/**
 * Google Analyticsのリアルタイムユーザ数を取得しJSONで返却
 */
set_include_path("./src/" . PATH_SEPARATOR . get_include_path());

require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';

// サービスアカウント名(メールアドレス)
$service_account_name = 'YOUR_MAIL_ADDRESS@developer.gserviceaccount.com';
// P12キーファイルのパス
$key_file_location = './YOUR_KEY_FILE.p12';
// アナリティクスのビューID 例)'ga:1234567'
$analytics_view_id = 'ga:1234567';

session_start();

if ( !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
}

$client = new Google_Client();

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}

$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/analytics'),
    $key
);
$client->setAssertionCredentials($cred);

if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}

$_SESSION['service_token'] = $client->getAccessToken();

// アナリティクスクライアントを生成
$analytics = new Google_Service_Analytics($client);

try {
	// リアルタイムデータを取得する
    $results = $analytics->data_realtime->get(
            $analytics_view_id, // アナリティクスのビューID(アナリティクス設定 -> ビュー -> ビュー設定から確認)
            'rt:activeUsers'  // リアルタイムアクティブユーザー数を取得
    );

    // 取得結果からリアルタイムアクティブユーザ数を取り出す
    $totals = $results->getTotalsForAllResults();
    // activeUsers:ユーザ数 の配列に加工
    $array = array("activeUsers" => $totals["rt:activeUsers"]);

    // JSONに変換して表示
    header("Content-Type: application/json; charset=utf-8");
    header('Access-Control-Allow-Origin: *');
    echo json_encode($array);
    
} catch (apiServiceException $e) {
    echo $e->getMessage();
}

プログラムを実行すると以下のようにJSON形式でリアルタイムアクティブユーザ数が返されます。

{"activeUsers":"10"}

ほぼ同時刻のGoogle AnalyticsのWeb画面とAPIを使ったプログラム実行結果の比較です。アクティブユーザ数が同じであることが確認できます。Analytics 画面とAPI利用結果の比較

コード中では認証情報をもとにGoogleアナリティクスのクライアントを生成し、ビューIDとメトリクスrt:activeUsersを指定してReal Time Reporting API(v3)のgetメソッドを使ってリアルタイムアクティブユーザ数を取得しています。メソッドの詳細な使い方は公式のAPIドキュメントが参考になります。

公式ドキュメント:Real Time Data: get – Google Analytics — Google Developers

おわりに

今回はリアルタイムユーザのみを取得しましたが、APIを使えばGoogle Analyticsの他の値も簡単にプログラムから取得することが可能です。

準備が少し大変ですが、JSONやXMLで値を返せるようにしておけば様々なシーンで利用ができそうです。


法廷バトルをスマホで楽しめるiPhone/iPad版「逆転裁判5」が面白い!

$
0
0

法廷バトルを楽しめるゲーム「逆転裁判」シリーズは1,2,3はGBAで、4はNintendo 3DSでプレイしましたが5は3DSを持っていないためプレイしていませんでした。しかし8/8に「逆転裁判5」のiPhone版が配信開始されました!

さっそく第1話とスペシャルコンテンツの「クイズ 逆転推理」をプレイしてみたところ期待通りの面白さだったのでご紹介します。

逆転裁判5とは?

弁護士となって依頼人を守りつつ、法廷で証人を尋問することで真実を明らかにしていく推理アドベンチャーゲームです。大体のパターンで弁護側が不利な状況からスタートするためいろいろな意味で「逆転」する必要があります。

逆転裁判5 クライマックス

シリーズ5作目となる本作はNintendo 3DSで2013年7月25日に発売され、2014年8月8日にiPhone/iPad用に移植されて配信がスタートしました。

メーカー公式サイト:CAPCOM:逆転裁判5 iOS

全部で5話の構成となっており、iPhone/iPad版では第1話とスペシャルコンテンツの「クイズ 逆転推理」の序章は完全無料で楽しむことができます。

逆転裁判5 1.00.01(無料)App
カテゴリ: ゲーム, アドベンチャー, ロールプレイング
販売元: CAPCOM – CAPCOM Co., Ltd

逆転裁判5 メインストーリーの遊び方

ゲーム第1話を簡単にご紹介します。ゲームは聞き込みや現場調査をする「探偵パート」と、法廷で証人を尋問して矛盾や嘘を指摘して真実を明らかにしていく「法廷パート」にわかれます。第1話はほとんどが「法廷パート」です。

いきなり法廷が爆破されてしまうムービーから始まります。今までにない展開です。
逆転裁判5 法廷爆破

第1話のはじまりです。
逆転裁判5 第一話

逆転裁判1~3ではメイン主人公で逆転裁判4ではサブキャラだった成歩堂龍一が主人公に復帰したようです。
逆転裁判5 成歩堂龍一

ムービーではない通常のプレイ画面では画面左側に時計とバッテリー残量が表示されます。ゲームに集中していると電池切れになりやすいのでこれは嬉しいですね。
逆転裁判5 探偵パート1

第1話の相手検事は各シリーズおなじみのアウチ検事です。ストーリーを進めるとわかりますがいつものアウチ検事とは違います。
逆転裁判5 アウチ検事

法廷記録は右上のボタンをタップすると見ることができます。
逆転裁判5 法廷記録

ストーリーが進むといよいよ尋問開始です。
逆転裁判5 尋問開始

証人の証言で詳しく知りたいものについては「ゆさぶる」でより詳しい話を引き出せることがあります。
逆転裁判5 尋問中

「ゆさぶる」の決めゼリフです。
逆転裁判5 待った

また法廷記録の証拠品と証言を照らしあわせて明らかな矛盾がある場合は「つきつける」で証拠品をつきつけます。
逆転裁判5 つきつける

「つきつける」の決めゼリフです。
逆転裁判5 くらえ!

基本的には「ゆさぶる」「つきつける」で少しずつ真実を明らかにしていくことでストーリーが進んでいきます。また本作では証言と矛盾した感情を見つける「ココロスコープ」という新要素が登場します。
逆転裁判5 ココロスコープ

状況と矛盾している感情を指摘するとさらなる証言を引き出すことができます。
逆転裁判5 ここだ!

セーブスロットは2つあり、ゲームはいつでも途中でセーブできます。
逆転裁判5 セーブ

真犯人を明らかにし、依頼人の無罪を証明することができれば第1話クリアーです。
逆転裁判5 第一話クリア

第2話以降は有料コンテンツのため、別途購入する必要があります。
逆転裁判5 第二話

逆転裁判5 クイズ 逆転推理の遊び方

スペシャルコンテンツとして「クイズ 逆転推理」というミニゲームも楽しめます。

一問目はある事件について容疑者の3人の事情聴取から嘘を見抜く問題です。
逆転裁判5 クイズ逆転推理1

クイズの答えとして最適なものを選択します。
逆転裁判5 クイズ逆転推理2

正解すると解説を読むことができます。
逆転裁判5 クイズ正解

おわりに

画面が一つしかないiPhone版はNintendo DSと比べて操作性はどうなのだろうと思いましたが、スマホでの操作に最適化されており全くストレスなく楽しめました。

推理ものが好きな方にとてもオススメです。第2話以降のシナリオセットも2,000円で購入できるようなので購入してみたいと思いました。

PHP製のモダンなオープンソースCMS「PageKit」(α版)をインストールしてみた

$
0
0

2014年7月21日に新しいPHP製のオープンソースCMS「PageKit」のパブリックアルファ版がローンチされたようで、一部界隈でニュースになっていました。

どんなものか気になったため早速仮想環境にインストールしてみたので、インストール方法と使ってみた画面をご紹介します。

PageKitとは

PageKit
2014年7月21日にアルファ版がリリースされたオープンソースのCMSです。ブログだけでなく企業サイトやWebサービスなど、あらゆる種類のウェブサイトを作成できます。

公式サイト:PageKit

公式ブログによると以下のような特徴があるようです。

  1. ブログやWebサービスを構築するためのモダンでエレガントなWebアプリケーションフレームワーク
  2. モジュール式で拡張可能なアーキテクチャを有していて、Symfonyコンポーネントとモダンなオープンソースライブラリ上に構築されている
  3. ブログなどの拡張機能はきれいで直感的かつ効率的なインターフェースを持っている
  4. ビルトインのマーケットプレースがあり、すぐに拡張機能やテーマを配布できる

また約2年の開発期間で5497回ものコミットと4回のリデザインがあったようです。

PageKitの動作環境

PageKitの動作には以下の環境が必要です。Vagrantで用意するのがお手軽かと思います。

  • Apache 2.2+ or nginx
  • MySQL Server 5.1+ or SQLite 3
  • PHP Version 5.4+

PageKitのインストール

インストールは公式サイトからzipでダウンロードするか、公式GitHubプロジェクトからコピーする方法があります。公式サイトからダウンロードする方法は会員登録が必要ですが、今回は公式サイトからダウンロードする方法でインストールしました。

まず公式サイトで会員登録します。
PageKit 会員登録

その後アクティベーションのURLがメールで送られてくるため、URLをクリックしてアクティベートします。
PageKit アクティベーション

会員登録した情報でログインすると、PageKitがダウンロードできます。2014/8/11時点のバージョンは0.8.4でした。
PageKit ダウンロード

ダウンロードしたzipファイルを解凍し、動作条件を満たすウェブサーバに配置します。

PageKitを置いたディレクトリ(今回はhttp://localhost:8888/pagekit/)をブラウザで開くと、自動的に/installerに飛び、インストール画面が現れます。
PageKit インストーラ

データベースドライバ(MySQLまたはSQLite)、ホスト名、データベースのユーザー名・パスワード、データベース名、データベースのテーブル接頭語などのデータベース接続情報を入力します。
PageKit データベース設定

管理者ユーザを作成します。デフォルトユーザ名はadminとなっていますが、セキュリティの理由から変えておいたほうが良さそうです。
PageKit アカウント作成

サイト名と説明文を入力します。
PageKit サイト設定

インストールが始まります。
PageKit インストール中

インストールはすぐに終わります。
PageKit インストール完了

いよいよログインです。ログインページはhttp://localhost:8888/pagekit/admin/loginのようなURLです。
PageKit ログイン

管理画面の各種ページとサイト表示

サイト表示と、ログイン後の管理画面の各種ページの一部です。

サイト表示

サイト表示は画面右上の「Visit Site」から可能です。
PageKit Visit Site

デフォルトテーマでのサイト表示です。(一部メニュー追加した状態)
PageKit ホーム

ダッシュボード

ログイン後はダッシュボードが表示されます。初期状態ではログイン中ユーザ、天気、PageKit公式ブログの最新情報が表示されます。
PageKit ダッシュボード

左上にカーソルを持って行くと各種管理画面へのアイコンが出現します。
PageKit メニューアイコン

固定ページ管理

固定ページを追加・編集することができます。
PageKit ページ管理

固定ページ投稿時にはMarkdown記法が使えます。
PageKit ページ投稿

プレビューも投稿画面から可能です。しかしWordPressのように実際のページを表示してのプレビューはできないようです。
PageKit ページ投稿プレビュー

メニュー管理

メニューを作成することができます。アイテムを追加することで固定ページやブログ一覧、ブログ個別投稿にリンクすることができます。
PageKit メニュー管理

ユーザー管理

ユーザ管理画面です。ロールは管理者と認証ユーザの2種類のみのようです。
PageKit ユーザ管理

ブログ投稿

ブログの投稿画面です。固定ページと同じくMarkdown記法が使えます。WordPressのように「続きを読む」の前後をタグで区切るのではなく、「EXCERPT」の部分に冒頭部分を、上のテキストエリアに本文の部分を書き込む形式です。また「STATUS」で下書きや公開などの投稿状態を選択できるため、うっかり公開してしまうミスを防げそうな作りです。
PageKit ブログ

上記の記入方法でブログ投稿してみると、実際の冒頭部分は以下のような表示になります。
PageKit ブログ冒頭

本文(記事個別ページ)の部分の実際の表示は以下の通りです。
PageKit ブログ本文

各種設定

Settingsページでは各種設定が行えます。残念ながら日本語ローカライズは未対応のようでした。
PageKit 設定

テーマはまだマーケットプレースに出ているものはありません。拡張機能はマーケットプレースに9個ありました。
PageKit 拡張機能

Infoからはサーバー環境の確認ができます。
PageKit 情報

おわりに

デフォルトでMarkdown記法が使えるのは良いのですが、やはりWordPressと比べると物足りなさを感じてしまいました。データベースにSQLiteが使えるため、手軽にサイトを作るのには良いかもしれません。

しかしまだまだα版のため、今後の機能追加に期待したいと思います。

Rainmeterを使ってGoogle Analyticsのアクセス解析データをデスクトップに表示してみた

$
0
0

Google Analyticsのアクセス解析データはサイト管理者やブロガーの方であれば常に気になると思います。私も暇さえあればAnalyticsを見ています。

そこでデスクトップカスタマイズツールのRainmeterとGoogle Analytics APIを使って、アクセス解析データをWindowsのデスクトップに表示してみたのでご紹介します。すぐ使えるサンプルプログラムもダウンロードできます。

こんなものを作りました

実際にGoogle Analyticsのデータをデスクトップ表示している画面は以下の通りです。画面右下あたりに表示されています。
Rainmeterを使ってGoogle Analyticsデータをデスクトップ表示

各種データはRainmeterのスキンで表示しています。リアルタイムアクティブユーザ数や当日のPV数などの情報を表示しており、数字は30秒毎に自動的に最新の情報に更新されます。気になるリアルタイムアクティブユーザ数も常に見ていることができます。

実現のために作ったのは以下のようなものです。

  • Google Analytics各種データをJSONで返すPHPスクリプト
  • JSONデータをRainmeterで表示するためのスキン

少し準備が必要ですが成果物を本エントリでダウンロード可能です。以下に導入方法を記載しますので興味のある方は使ってみてください。

前提条件

前提として以下の環境が必要です。

  • Windws Vista または 7 または 8のPC
  • デスクトップカスタマイズツールのRainmeterがインストール済みであること
  • PHPが動作するサーバー
  • Google Analytics APIをPHPから使える状態になっていること

Rainmeterはこちらのサイトからダウンロード可能です。今回使ったバージョンは3.1(r2290)です。またテーマはEnigma Basicを使用しました。(たぶん他のテーマでも動くと思いますが動作未確認です)

またGoogle AnalyticsのデータをAPIで取得する方法については事前準備とデータ取得それぞれについて、以下のエントリでご紹介していますので参考にしてみて下さい。

Google AnalyticsデータをJSONで返すスクリプトの準備

リアルタイムアクティブユーザ数だけでなくページビュー等のユーザーサマリー情報を全て取得するため、こちらのエントリでご紹介したサンプルプログラムを少し加工したものを作りました。

以下は今回使ったプログラムそのままです。サービスアカウント名、P12キーファイルのパス、アナリティクスのビューIDを自分のものに変更して下さい。

<?php
/**
 * Google Analyticsのリアルタイムユーザ数とユーザーサマリーを取得しJSONで返却
 */
set_include_path("./src/" . PATH_SEPARATOR . get_include_path());

require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';

date_default_timezone_set('Asia/Tokyo');

// サービスアカウント名(メールアドレス)
$service_account_name = 'YOUR_MAIL_ADDRESS@developer.gserviceaccount.com';
// P12キーファイルのパス
$key_file_location = './YOUR_KEY_FILE.p12';
// アナリティクスのビューID 例)'ga:1234567'
$analytics_view_id = 'ga:1234567';

session_start();

if ( !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
}

$client = new Google_Client();

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}

$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/analytics'),
    $key
);
$client->setAssertionCredentials($cred);

if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}

$_SESSION['service_token'] = $client->getAccessToken();

// アナリティクスクライアントを生成
$analytics = new Google_Service_Analytics($client);

try {
	//リアルタイムデータを取得
    $results_realtime = $analytics->data_realtime->get(
            $analytics_view_id, // アナリティクスのビューID(アナリティクス設定 -> ビュー -> ビュー設定から確認)
            'rt:activeUsers'  // リアルタイムアクティブユーザー数を取得
    );

    // リアルタイムアクティブユーザ数を取得
    $totals_realtime = $results_realtime->getTotalsForAllResults();
    
    $start_date = date("Y-m-d");	// 開始日付(YYYY-MM-DD)
    $end_date = date("Y-m-d");		// 終了日付(YYYY-MM-DD)
    // 取得するメトリクス(カンマ区切り)
    // ページビュー、ユーザ、セッション、平均セッション時間、直帰率、ページ/セッション、新規セッション率
    $metrics = 'ga:pageviews,ga:users,ga:sessions,ga:avgSessionDuration,ga:bounceRate,ga:pageviewsPerSession,ga:percentNewSessions';
    
    //ユーザーサマリーデータを取得
    $results_ga = $analytics->data_ga->get(
        $analytics_view_id, $start_date, $end_date, $metrics
    );
                
    $totals_ga = $results_ga->getTotalsForAllResults();
    
    // リアルタイムユーザ数とユーザーサマリーをKeyValue形式にする
    $array = array(
        "activeUsers" => $totals_realtime["rt:activeUsers"],
        "pageviews" => $totals_ga["ga:pageviews"],
        "users" => $totals_ga["ga:users"],
        "sessions" => $totals_ga["ga:sessions"],
        "avgSessionDuration" => gmdate("H:i:s", $totals_ga["ga:avgSessionDuration"]),
        "bounceRate" => number_format($totals_ga["ga:bounceRate"], 2)."%" ,
        "pageviewsPerSession" => strval(round($totals_ga["ga:pageviewsPerSession"], 2)),
        "percentNewSessions" => number_format($totals_ga["ga:percentNewSessions"], 2)."%" 
    );

    //JSONに変換
    header("Content-Type: application/json; charset=utf-8");
    header('Access-Control-Allow-Origin: *');
    echo json_encode($array);
    
} catch (apiServiceException $e) {
    echo $e->getMessage();
}

実行するとGoogle Analyticsの各種データが以下のようにJSON形式で返ってきます。

{
    "activeUsers": "6", 
    "avgSessionDuration": "00:01:21", 
    "bounceRate": "82.23%", 
    "pageviews": "1369", 
    "pageviewsPerSession": "1.35", 
    "percentNewSessions": "76.51%", 
    "sessions": "1013", 
    "users": "934"
}

JSONデータをRainmeterで表示するためのスキンの準備

Google AnalyticsデータをRainmeterで表示するためのスキンを準備します。今回作成したAnalyticsスキンはこちら Analytics_RainmeterSkin.zip(1.84KB) からダウンロード可能ですのでお使いください。

準備としてRainmeterのスキンディレクトリへの配置と、JSONデータを返すスクリプトのURL設定が必要です。

Rainmeterのスキンディレクトリへの配置

ダウンロードしたスキンをRainmeterのスキンディレクトリにコピーします。今回は作成したのはEnigmaテーマのサイドバーのウィジェットのため、以下のディレクトリに配置します。

C:\Users\[ユーザー名]\Documents\Rainmeter\Skins\Enigma\Sidebar

Rainmeter Analyticsスキン配置ディレクトリ

JSONデータを返すスクリプトのURL設定

Analyticsスキンフォルダの中のAnalytics.incをテキストエディタ等で開きます。

[MeasureJSON]セクションのURLの部分を、Google AnalyticsのデータをJSONで返すPHPスクリプトのURLに変更し、上書き保存します。
Rainmeter Analytics JSON URL設定

スキンの読み込み

設定完了したらスキンを読み込みます。

タスクバーのRainmeterアイコンを右クリック→管理ツールを開きます。
Rainmeter 管理ツール
管理ツールで左下の「すべて再読み込み」を押した後、「Enigma」→「Sidebar」→「Analytics」→「Analytics.ini」を選択し、「読み込む」ボタンを押します。
Rainmeter 管理ツールからの読み込み
スキンが読み込まれ、JSONで取得したGoogle Analyticsのデータが表示されます。
Rainmeter Analytics表示

もし表示されない場合はPHPスクリプトでJSONが正しく表示されるかや、APIの制限(50,000リクエスト/日、10リクエスト/秒)を超えていないかを確認してみてください。

ちなみにスキンで実施しているのは以下のような動作です。

  • 指定されたURLからJSONデータを取得する
  • 取得したJSONデータをRainmeterのWebParserプラグインでパースし、データを表示する
  • 30秒ごとに最新のデータを取得し、画面描画をリロードする

参考にした資料

Rainmeterスキン作成とGoogle Analytics各種データ取得にあたり以下の資料を参考にしました。

RainmeterでのJSONデータのパースが課題だったのですが、Rainmeter公式フォーラムに投稿されていた回答のおかげでWebParserプラグインと正規表現によりパースできることがわかったため実装できました。

おわりに

スキンを切り替えることで異なるJSONを読みに行くようにすれば異なる期間のデータを表示したり、現在アクティブなページ等の他の項目を表示することもできそうです。

様々なサービスで提供されているAPIとRainmeterを使うことで他にもあらゆるデータをデスクトップに表示できそうですね。

無料で指定したURLを定期的に自動実行できるサービス「cron-job.org」

$
0
0

一定の間隔で決まった処理を自動的に実行するにはCronやタスクスケジューラを使う方法がありますが、それだけを無料で提供してくれるサービスはあまりありません。

そこで指定したURLを定期的に実行できる「cron-job.org」が無料で手軽に使えたので、使い方をメモします。

cron-job.orgとは

cron-job.org タイトル
URLとスケジュールを設定しておくだけで、指定したURLに定期的にアクセスしてくれるドイツのサービスです。スケジュールは以下のように指定することが可能です。

  • n分毎に実行(最短1分毎)
  • 毎日指定した時間に実行
  • 毎月指定した日にち、時間に実行
  • カスタム設定(毎月の日にち、曜日、時間)

ジョブが失敗した時や、最後の失敗の後に成功した時にメールで通知することも可能です。

cron-job.orgの使い方

会員登録とジョブ設定をするだけで簡単に使うことができます。サイトの言語はドイツ語のみのため、Google翻訳経由でサイトを閲覧したほうがわかりやすいかもしれません。

会員登録

cron-job.orgのサイトを開き、メニューの「Registrieren」を開きます。
cron-job.org register
会員登録に必要な情報を入力します。項目の意味は下の画像に記載していますので参考にしてください。
cron-job.org 会員登録

「Kostenlosen Account erstellen」ボタンを押すと会員登録が完了しますが、その前に利用規約とプライバシーポリシーを確認しておく必要があります。特に注意が必要なのは以下の部分でしょうか。

  • 所有者/管理者など明示的な許可があるURLのみスケジュール登録できる
  • 事前通知なしにサービス終了またはアカウント削除するかもしれない

利用規約:cron-job.org – Bedingungen

ジョブの作成

会員登録が完了したらメニューの「Mitglieder」よりメールアドレスとパスワードを入力して会員画面にログインします。
cron-job.org ログイン
ログイン後画面では最初は何も表示されませんが、Cronジョブを設定していると直近の10回のジョブ実行結果が表示されます。

画面左上の「Cron-Jobs」ボタンからジョブ一覧画面を開きます。
cron-job.org ジョブ結果

ジョブ一覧画面で「Cron-Job erstellen」ボタンを押して新規ジョブを作成します。
cron-job.org ジョブ登録
ジョブ作成画面で定期実行したいURLや実行間隔、通知する条件を設定します。各項目の意味は画像を参考にしてください。
cron-job.org ジョブ登録画面
条件入力が完了したら「Cron-Job erstellen」ボタンでジョブを登録します。以降は条件指定した時間になったら自動的に設定したURLを実行してくれます。

ジョブの編集と有効化・無効化

設定したジョブは「Bearbeiten」ボタンから編集が可能です。
cron-job.org ジョブ編集
また編集画面の「Allgemein」ではジョブの有効化・無効化を切り替えることができます。チェックが入っているとジョブが有効な状態です。
cron-job.org ジョブ有効・無効化

おわりに

最低実行間隔は1分ですが、完全無料で指定したURLを定期実行できるのは嬉しいですね。ドイツ語なので最初は手間取りますが登録方法さえ覚えてしまえば様々なことに利用できそうです。

さくらのレンタルサーバ(スタンダード)からさくらのVPS(1G)へ引っ越した理由とメリット・デメリット

$
0
0

さくらのレンタルサーバ(スタンダード)の年間契約更新時期が近づいてきたこともあり、当ブログは以前から検討していたさくらのVPS(1G)にお引っ越ししました。

移転した理由と、さくらのレンタルサーバからさくらのVPSに引っ越したことによるメリット・デメリットをご紹介します。 ( icon by Jerry Low )

移転前後の環境

今回さくらのレンタルサーバからさくらのVPSに引っ越したことにより、サーバー環境および費用は以下のように変わりました。さくらのVPSのソフトウェア・バージョンは自分でインストールしたものです。

さくらのレンタルサーバ スタンダード さくらのVPS(1G)
月額費用
(年間一括払い)
429円 924円
ディスク容量 100GB 100GB
データ転送量 80GB/日 無制限
ウェブサーバ Apache/2.2.25 nginx/1.6.1
PHP 5.4.29 5.5.15
MySQL 5.5 5.5.39

さくらのVPSに移転した理由

移転した理由は大きく以下の3つです。

サーバソフトウェア「nginx(えんじんえっくす)」を使いたかったから

さくらのVPSではroot権限が与えられるため、サーバにはソフトウェアを自由にインストールすることができます。さくらのレンタルサーバのサーバソフトウェアはapacheですが、リバースプロキシキャッシュが使える「nginx」を使ってみたかったのが一つの理由です。

理由は後述しますが、これについては変更して本当によかったと思いました。

さくらのレンタルサーバではmod_deflateが使えないから

さくらのレンタルサーバではapacheのモジュールであるmod_deflateを使ったコンテンツのgzip圧縮を使うことができません。管理画面のphp.iniの設定より、以下のような記述をすればgzip圧縮を使うことは可能なのですが、PHPを介しての出力にしかgzip圧縮が適用されません。

zlib.output_compression=on
zlib.output_compression_level=2

CSSやJavaScriptなどのファイルにもgzip圧縮を適用し、ページの読み込み速度を上げたかったのが二つ目の理由です。

AWSよりも安価で転送量課金がないから

自分でサーバを管理することになるのでAWSのAmazon EC2にするかも悩んだのですが、最も安いEC2インスタンス(t2.micro)でもさくらのVPSと比べると月額費用が二倍以上になってしまいます。

さらにAWSではディスク容量をEBS(ブロックストレージ)で確保する必要があり別料金がかかります。また転送量(Out)も従量課金で、大体1GB/日ぐらいのトラフィックがある当サイトではなかなかの負担になってしまいます。

ほぼ同条件でのさくらのVPSとAmazon EC2(t2.micro)の一ヶ月の価格・機能比較は以下のとおりです。AWSが高く見えますが厳密にはリザーブドインスタンスを購入したり、EBSも最初は少ない容量にしておけばコストは削減可能なので、あくまで参考程度の比較です。

さくらのVPS(1G) Amazon EC2(t2.micro)
リージョン 石狩 / 東京 / 大阪 東京
月額費用(毎月払い) 1,008円 $28.47(約2,914円)
【内訳】
EC2 $14.64
ディスク容量 $8(100GB/月)
転送量 $5.83(30GB/月)
仮想CPUコア数 2 1(バーストあり)
メモリ 1G 1G
ディスク容量課金 なし あり
転送量課金 なし あり

AWSではWordPress+nginx用にチューニング済みのAMI(マシンイメージ)である網元やAuto Scalingなどの独自機能を使えるのは魅力ですが、個人サイトでは不要と判断したためさくらのVPSを選択しました。

さくらのVPSに移転したことによるメリット

ページの表示速度が圧倒的に速くなった

nginxでは一度表示したページをリバースプロキシに一定時間キャッシュする設定が可能で、キャッシュされたコンテンツはPHPの処理を待たずに静的HTMLのように表示できます。

以下はさくらのレンタルサーバ(apache)で当サイトのトップページを表示した時のネットワークタイムラインです。WordPressのPHPでのページ生成処理を待っているため、Waitingが501 msとなっています。
さくらのレンタルサーバ ネットワークタイムライン
それに対してさくらのVPS(nginx)でリバースプロキシキャッシュがある時にトップページを表示した時のネットワークタイムラインが以下です。PHPの処理を実施せずにキャッシュからページを表示しているため、Waitingが24 msにまで縮まっています。
さくらのVPS(nginx) ネットワークタイムライン

キャッシュされたページについては待ち時間が少なくなるため、体感・実測ともにページ表示速度が大幅に向上しました。ウェブサイトのスピードやパフォーマンスを計測するサイト「GTmetrix」のスコアも以下のように上がっています。

さくらのレンタルサーバ(apache) ページ表示 2.24s
GTmetrix さくらのレンタルサーバ
さくらのVPS(nginx)でリバースプロキシキャッシュがある時 ページ表示 0.93s
GTmetrix さくらのVPS(nginx)

gzip圧縮が*.css*.jsファイルにも効いているため、ページ全体の容量も約30 KBほど削減されています。

各種サーバ設定をひと通り覚えることができた

Webサーバ、PHP、MySQLなどを全て自分でインストール・設定しなければならないため、今までレンタルサーバやPaaSで何気なく使っていたものについて理解を深めることが出来ました。またroot権限のあるサーバーを外部から守るためのセキュリティ周りについても勉強になりました。

各種設定については他サイト様の記事を大いに参考にさせて頂きました。別のエントリに記載予定です。

さくらのVPSに移転したことによるデメリット

サーバ管理が全て自分の責任になった

自由度は高くなりましたが、もし外部から攻撃されたりサーバが落ちてしまったりしたら自分で対応しなければなりません。しかし基本的なセキュリティ設定については実施したため、それ以上のことは運用も勉強のうちと思って管理していきたいと思います。

おわりに

今まではアプリケーション部分のみしかさわることができませんでしたが、さくらのVPSに移転することで責任と引き換えに自由度が大幅に上がりました。

セキュリティや死活監視などは気にかけなければなりませんが自分のウェブサイトにより愛着が湧いたように思います。月額費用も924円とリーズナブルなので、サーバー移転先に迷っている方にはおすすめしたいサービスです。

ロジクールのマラソンマウス「M705r」が初の電池切れになるまでの日数が驚異的だった

$
0
0

マウスはパソコンを使う上で重要な周辺機器の一つだと思います。私は電池が長持ちすることから「マラソンマウス」と謳われているロジクールの「M705r」というワイヤレスマウスを長く使っていますが、本日ついに初の電池切れになりました。

Amazonで購入してから本日までの日数を数えてみたところ宣伝通りの驚異的な数字で、是非オススメしたいと思ったのでご紹介します。

ロジクールのマラソンマウス「M705r」とは

ワイヤレスマウスはコードの取り回しが無く自由に動かすことができますが、電池が切れると動かせないという弱点があります。そんな弱点を独自のつくりで克服した省エネなマウスです。その省エネ度合いはメーカーサイトで以下のように謳われています。

3年間。その高性能は、止まらない。

またホイール下のボタンをON・OFFすることで、一回のスクロールでホイールが回り続ける高速スクロール機能も搭載されています。この機能は縦に長いウェブサイトやPDFを読むときに意外と便利です。

他にも付属のソフトウェア「SetPoint」をインストールすると、以下のような機能も使うことができます。

  • 最大8つのボタンに自由に動作を割り当てることができる
  • 電池の残量(あと何日もつか)を知ることができる

私が使っている「M705r」は現在は販売終了していますが、後継機種の「M705t」というマウスが同様の特徴を持っています。

LOGICOOL マラソンマウス M705t
ロジクール (2013-08-02)
売り上げランキング: 128

Amazonを探したところ、「M705r」も定価より若干高値ですが購入できるようです。

LOGICOOL ワイヤレス レーザー式 8ボタン  M705r
ロジクール (2010-07-23)
売り上げランキング: 6,932

マラソンマウス「M705r」初の電池切れになるまでの日数

購入当時のAmazonの納品書が手元に残っていたため、使用開始から電池切れまでの日数をご紹介します。電池はマウスにはじめから付属していたものをずっと使用していました。

ちなみにマウスの使用頻度はそれなりに高く、以下の通りです。

  • 購入後、マウスのスイッチをOFFにしたことはほとんど無し
  • マウスを動かしている時間は一日約2~5時間ほど

それでは日数の計算です。当初Amazonで購入したのが2011年8月3日でした。
ロジクール マラソンマウス 納品書
そして電池切れになったのは今日(2014年8月3日)です。以下の画像の残量になった直後、電池が切れました。
ロジクール マラソンマウス 電池残量
結果として使用開始から電池切れまでの日数はなんと1111日でした。年数にすると3年と15日です。メーカーの謳い文句の通り本当に3年間、電池が持ったことになります。

電池入れ替え後の残り日数

電池を新品に入れ替えたところ、残り日数が991日まで回復しました。まだまだ活躍してもらえそうです。
ロジクール マラソンマウス 電池復活

おわりに

マラソンマウスの前は普通のコード付きマウスを使っていたためマウスの電池切れは初めての経験でしたが、電池交換が3年に1回程度であればほとんど電池切れを気にせずに使えます。

ほどよい大きさでボタンも多く高機能なので、マウス選びに迷っている方には是非おすすめしたいマウスです。

情報処理学会主催の新資格「認定情報技術者(CITP)」について調べて思ったこと

$
0
0

本日ITProで情報処理学会という組織が主催する新資格「認定情報技術者(CITP)」が取り上げられていました。

他の資格制度とは異なる「IT技術者の社会的地位の確立を図る」という目的を持つらしく、とても興味を持ったので特徴を調べてみました。簡単なまとめと認定制度について思ったことをメモします。

「認定情報技術者(CITP)」とは

情報処理学会という一般社団法人が主催する情報技術者を対象とする上級資格です。申請案内では資格制度の目的が以下のように定義されています。

高度の専門知識と豊富な業務実績を有する情報技術者を、認定情報技術者(Certified IT Professional、以下、CITPといいます)として可視化してその社会的地位の確立を図ること、および、CITPからなるプロフェッショナルコミュニティを構築し、コミュニティ活動を通じて社会および産業界のニーズに応えることを目的としています。

認定レベルはITスキル標準と連動しており、まずはレベル4の認定のみ開始するようです。IPA(情報処理推進機構)が主催する国家資格である情報処理技術者試験とは異なり、民間資格の位置付けです。また有効期限は3年間で、料金は申請に20,000円(税別)、認定時の登録料に10,000円(税別)が必要です。

第一回の申請受付は2014年11月4日(火)から開始されます。

公式サイト:認定情報技術者(CITP)個人認証の申請案内公開-情報処理学会

関連記事:News & Trend – 「IT技術者を社会から尊敬される職業に」、情報処理学会が新資格制度を始めた理由:ITpro

情報処理学会について

初めて耳にしましたが設立が1960年と古くからある組織のようです。公式ページの学会紹介では、目的に以下のように書かれていました。

コンピュータとコミュニケーションを中心とした情報処理に関する学術、技術の進歩発展と普及啓蒙を図り、会員相互間および関連学協会との連絡研修の場となり、もって学術、文化ならびに産業の発展に寄与する。(※「定款」より)

また賛助会員として学会をサポートしている企業にはGoogleやMicrosoft、NTTデータや楽天など数多くのIT関連の有名企業が名を連ねています。

ITスキル標準について

経済産業省が定める、個人のIT関連能力を職種や専門分野ごとに表したものです。IPAのサイトでは以下のように書かれています。

各種IT関連サービスの提供に必要とされる能力を明確化・体系化した指標であり、産学におけるITサービス・プロフェッショナルの教育・訓練等に有用な「ものさし」(共通枠組)を提供しようとするものです。

ITスキル標準V3 2011では共通キャリア・スキルフレームワークの7段階のレベルが以下のように表されています。最大のレベル7では「世界で通用するプレーヤー」と定義されています。

ITSSレベル 7段階

「認定情報技術者(CITP)」資格制度の特徴

公式サイトの申請案内や申請様式から調べてみた資格制度の特徴です

前提として情報処理技術者試験の高度試験合格が必要

前提としてIPA(情報処理推進機構)が主催する情報処理技術者試験の高度試験(レベル4)に合格していないと申請ができません。これはITスキル標準(ITSS)のレベル4以上に相当する知識とスキルを保有していることを証明するためのようです。2014年8月現在、高度試験には以下のものがあります。

  • ITストラテジスト試験
  • システムアーキテクト試験
  • プロジェクトマネージャ試験
  • ネットワークスペシャリスト試験
  • データベーススペシャリスト試験
  • エンベデッドシステムスペシャリスト試験
  • 情報セキュリティスペシャリスト試験
  • ITサービスマネージャ試験
  • システム監査技術者試験

しかしシステム監査は本制度の対象職種ではないため、「システム監査技術者試験」は対象の前提資格の中にありませんでした。また現行の試験制度だけでなく、テクニカルエンジニアやシステムアナリスト等の旧試験の合格でも良いようです。

スキルを保有しておりそれを業務で発揮していることが問われる制度のため、前提条件があるのは納得できます。

筆記試験がない

以下は公式の申請案内(PDF)に記載の「申請から認定までの流れ」の抜粋です。認定までの審査は申請書と推薦書の書類審査と、一部の申請者が対象となる面接審査となっており、筆記試験のようなものはありません。

認定情報技術者(CITP)個人認証申請フロー

申請書と推薦書様式は公式サイトでMicrosoft Wordドキュメントで配布されています。また申請書は職種と専門分野ごとに全19区分にわかれています。試しにITスペシャリスト-セキュリティの申請書様式を見てみたところ、以下のものを記入する形となっていました。

  • 主要業務・研修・資格・プロフェッショナル貢献の記録
  • 業務経歴書(プロジェクトの具体的な内容)
  • 達成度指標チェックシート
  • スキル熟達度チェックシート

認定情報技術者(CITP)個人認証申請書様式

業務経歴書では1つの業務に対して要求された年数(レベル4では2年以上)を満たす経歴を記入する必要があります。さらにカスタマサービスと IT サービスマネジメントの職種では「成功裡に」遂行した実績が要求されます。

ただしライン業務やサポート業務などであってもITスキル標準の内容に合致していれば業務として認められるようです。

企業の社内資格制度と連動する可能性がある

申請案内では以下の通り、社内資格制度を持つ企業と連動してのCITP資格認定の可能性が示唆されています。

(注)情報処理学会では、情報処理学会が個々の個人の認証を直接行う本方式のほかに、企業の社内資格制度がCITP資格制度と整合性があることを情報処理学会が認定し、社内資格を得た個人にCITP資格を与える方式も検討しています。

大手SIerの日本ユニシスなどでは社内技術認定制度があるため、それらが対象になるものと思われます。しかし社内資格者という外部からわかりづらいものに対してCITP資格を与えることで、個人認定者との公平性をどのように保つのかは不明です。

おわりに

前提条件を満たしているので興味を持って調べましたが、おそらく受験はしません。業務経歴やコミュニティ活動の貢献度が重視され、高度なスキルを「実際に発揮しているか」が重視される全く新しい資格制度のようですが、CITPのコミュニティ外でIT技術者としての社会的地位が確立されるのかは疑問です。

実績や経歴も大事だと思いますが、どちらかというと「実力のあるエンジニアをもっと評価する」というコンセプトをもとにエンジニアの実力を可視化するpaizaのような認定方法のほうがITエンジニアの現状には合っており、地位向上・底上げにも貢献できるのではないかと思いました。

賛助会員として多くの企業がサポートしている学会が主催であるため、IT技術者の端くれとしては今後に期待したいです。


【書評】「アカマイ―知られざるインターネットの巨人」を読んでよかったこと3つ

$
0
0

技術の仕組みや舞台裏を知ることは個人的に好きなのですが、8月11日に発売された「アカマイ 知られざるインターネットの巨人」はアカマイというあまり知られていない会社の凄さを紹介しつつインターネットの裏側やネットワークの仕組みも学べる良書でした。

ゆっくり読んだので読了まで数日かかりましたが、やさしい文章で面白い内容でした。読んでよかった点をご紹介します。

書籍「アカマイ 知られざるインターネットの巨人」について

インターネットの全通信量の1/3を運んでいながら世間にはあまり知られていないアカマイという会社について、成り立ちや同社が提供するサービスをインターネットを支えている技術の解説も含めて紹介している書籍です。

アカマイ―知られざるインターネットの巨人 (角川EPUB選書)
小川 晃通
KADOKAWA
売り上げランキング: 4,867

目次は以下の通りで、最終章ではインターネットのこれからについても触れられています。

  • 第1章 何をする会社なのか
  • 第2章 それはMITから始まった
  • 第3章 インターネットはどう動くか
  • 第4章 アカマイの技術とインターネット
  • 第5章 インターネットのカネと力
  • 第6章 インターネットとアカマイのこれから

アカマイ(Akamai)について

アカマイ ロゴ
世界最大のコンテンツデリバリネットワーク (CDN) 事業者で、他にも様々なネットワークサービスを手がけるアメリカの企業です。正式名称はアカマイ・テクノロジーズです。本書ではB2B(Business to Business)の企業で積極的な宣伝もしないため、世間にはあまり知られていない企業と書かれています。
アカマイ イメージ画像
実際私も「このサイトはどのレンタルサーバを使っているのかな」と調べたりしてたまに名前を見かけることがあった程度で気にも留めていない会社でした。私が普段見るサイトだとファッション系のECサイト(マルイ、株式会社ポイント)がAkamaiのサービスを使っているようです。

例としてマルイのオンラインショップ「voi」のアドレスvoi.0101.co.jpから正引きしたIP184.28.157.144を逆引きしてみるとa184-28-157-144.deploy.static.akamaitechnologies.comというホスト名が返ってきます。
マルイ Geo IP Address View
Geo IP Address Viewで見るとロケーションはアメリカになっていますが、実際にエンドユーザが見に行くキャッシュサーバは国内にあると思われます。日本国内からの同サイト表示速度は非常に速く、高品質なCDNであることがわかります。

筆者のあきみち(小川晃通)氏について

博士(政策メディア)かつ前職はSONYという経歴を持ち、現在は「Geekなぺーじ」というインターネットをテーマにしたブログを書かれている職業ブロガーの方です。ブログではネットワークやプログラミングなどの難しい技術をわかりやすく解説されていたり数多くのIT関連書籍の執筆や監訳にも携わっておられる等、多方面で活躍されています。

私は別の著書である「インターネットのカタチ – もろさが織り成す粘り強い世界 -」を偶然購入したことから同氏のことを知りました。本書と同じく平易な言葉でインターネットの仕組みが解説されている、ネットワークの入門書としておすすめしたい書籍です。

インターネットのカタチ―もろさが織り成す粘り強い世界―
あきみち 空閑 洋平
オーム社
売り上げランキング: 106,561

書籍「アカマイ 知られざるインターネットの巨人」の良かった点

本書の良かった点をご紹介します。

易しい文章でネットワークに詳しくない人、苦手な人でも読める

全体的に易しい文章で書かれており、ネットワークに詳しくなかったり苦手意識があっても苦なく読むことができます。例えばわかりやすいと思った表現には以下のようなものがありました。

  • 小包(パケット)を道路標識をたよりに車で配送することで例えたルーティング
  • ドラえもんの「どこでもドア」での移動に例えたTCPでの通信
  • 先生が生徒からのよくある質問を手元に置いておくことに例えたキャッシュ

また重要な語句はページの下の方に別に解説が付いているため、読んでいるうちによくわからなくなるということもありませんでした。

アカマイ CNAMEの解説

引用元:アカマイ―知られざるインターネットの巨人 p123

アカマイのサービスやネットワーク関連技術のイメージがつかみやすい

アカマイのことを知る上では外せないネットワーク技術や、アカマイのサービスそのものを解説する図が豊富にあります。文章に図解がプラスされることでよりイメージがつかみやすかったです。

例として下の図はユーザがWebサイトを閲覧するときのDNSキャッシュサーバ問い合わせからWebサイトコンテンツ取得を説明したものです。

アカマイ DNSの解説

引用元:アカマイ―知られざるインターネットの巨人 p104

アカマイの配信パフォーマンス向上技術「SureRoute」やキャッシュサーバの多段化「Tiered Distribution」のほか、各サービスについても図解での説明があります。

インターネットの裏側を知ることができる

第5章「インターネットのカネと力」ではAS(Autonomous System)間接続において、トラフィック(情報量)がそのままお金や力関係につながるという話が出てきました。

またAS間のトラフィックを減らせることからISPには強く出られるアカマイが、近年では安価で高品質なCDNサービス事業者(Amazon CloudFrontやCloudFlareなどを指すと思われます)が多く出てきたこともあり、顧客には弱いと考えられるという「強くて弱いアカマイ」というお話も出てきます。

裏側の力関係のようなものを垣間見ることで、いろいろな想像を働かせることができました。

おわりに

主なテーマはアカマイについてでしたが、それ以前のネットワーク技術を知る上でも有用な書籍でした。

また最終章の「インターネットはどこへ行くのか」にあった、IT系の技術者であってもインターネットの構造に興味を持たない人が多いように見受けられるという一文には少し考えさせられるものがありました。本書を読むことでモノの裏側を知ることの大事さも再認識できたと思います。

あなたのページもお早めに!Facebookのプラットフォームポリシーと当サイトFacebookページの変更点

$
0
0

既に多くのサイトで報じられていますが2014年11月5日からFacebookのプラットフォームポリシーが変更となり、いいね!しないと続きが見られないようなアプリが禁止となります。

当サイトもFacebookページでいいね!した人限定の壁紙を配布していましたが、誰でもダウンロードできるように変更しました。Facebookポリシーの変更箇所と当サイトFacebookページの変更点をお知らせします。

Facebookのプラットフォームポリシーの変更点

2014年11月5日からFacebookのプラットフォームポリシーが新しいものになる関係で、今までは良かったものが規約違反となります。具体的にはFacebookデベロッパーサイトのプラットフォームポリシーにある、「4. Encourage proper use」の 5 番目の項目が該当します。以下は該当箇所の引用です。

  1. Only incentivize a person to log into your app, like your app’s Page, enter a promotion on your app’s Page, or check-in at a place. Don’t incentivize other actions. Effective November 5th, 2014, you may no longer incentivize people to like your app’s Page.
引用元:Platform Policy

「Effective November 5th~」以降の部分が追加された内容のようですね。確かに「アプリのページにいいね!を奨励してはならない」とあります。

また同変更はFacebook開発者ブログでも言及されており、こちらのほうがよりわかりやすく具体例と目的まで書かれています。以下がブログの該当箇所の引用です。

You must not incentivize people to use social plugins or to like a Page. This includes offering rewards, or gating apps or app content based on whether or not a person has liked a Page. It remains acceptable to incentivize people to login to your app, checkin at a place or enter a promotion on your app’s Page. To ensure quality connections and help businesses reach the people who matter to them, we want people to like Pages because they want to connect and hear from the business, not because of artificial incentives. We believe this update will benefit people and advertisers alike.

翻訳サイトで日本語にしてみたところ「アプリの内容のゲート制御を含む」とあるので、ファンゲートなどのいいね!した人としていない人でページを振り分ける仕組みもアウトです。また、この変更を行う目的として以下の内容が挙げられています。

  • つながりの質を保証するため
  • 人工的な誘いではなく、ビジネスからのつながりによるページヘのいいね!をしてほしい
  • 人々と広告主の両方に役立てるため

ちなみにプラットフォームポリシーは日本語版もありますが2014年8月21日現在、英語版とは異なり内容は古いままとなっています。以下は日本語ページの同じ箇所の引用です。

  1. アプリへのログイン、アプリのFacebookページに対する[いいね!]、アプリのFacebookページへのプロモーション入力、スポットへのチェックインといった操作のみを利用者に促します。その他の操作を促さないようにします。

英語の機械翻訳では意味を汲み取るのが難しいため、日本語サイトも早く更新されることを期待したいです。

当サイトFacebookページもポリシーに適合する形に変更しました

当サイトのFacebookページでもいいね!を頂くのがなかなか難しかったため、いいね!された方限定のアプリを公開していました。「Facebook限定壁紙」というページがそれで、サイトでは配布していない壁紙がダウンロードできます。

しかし今回のプラットフォームポリシー変更を受け、まだ猶予期間はありますが早めにいいね!を強制する作りを止めたほうが良いと判断し、該当アプリを誰でも見られるように変更しました。変更前後の比較画像は以下の通りです。

Facebookページ ポリシー変更前

Facebookページ ポリシー変更後

まだFacebook限定壁紙ページを見たことが無い方は、この機会に見ていただけると嬉しいです。ついでにいいね!もいただけると喜びます。

おわりに

個人サイトではFacebookページのいいね!を集めるのはなかなか難しいのですが、数字だけにとらわれるのではなく「本当にいいね!」と思ってもらえるようなコンテンツを世の中に出すことを考えたほうが、結局のところ誰にとっても有益なのかもしれません。

Facebook限定壁紙は不定期更新ですが、今後も続けていく予定ですので宜しくお願いします。

グループウェア「サイボウズ ガルーン」への投稿を自由自在にレイアウトする方法3つ

$
0
0

多くの企業では社内への連絡やチーム内での情報共有のためにグループウェアを利用していると思います。私の勤務先でもサイボウズのガルーンというグループウェアを使用しています。

ガルーンではメッセージや掲示板への投稿は普通のテキスト入力とリッチテキスト入力が選択可能なのですが、さらに自由自在にレイアウトすることも可能です。私が普段使用している方法をメモします。

サイボウズ ガルーンについて

サイボウズ株式会社が販売しているグループウェアで、国内のエンタープライズ分野では多くのシェアを持つ製品です。公式サイトでは3000社、153万人が使用していると書かれています。

主な機能としてポータル、スケジュール、メッセージ、掲示板、ファイル管理、メールなどがあり、一般的な業務で必要なものはひと通り揃っています。またSOAP形式の連携APIも提供されており各種プログラミング言語からのデータ参照等も可能となっています。

ガルーン ポータル機能

同社ではサイボウズ式というワークスタイルやチームワークに関するブログ形式の情報サイトも公開しており人気を集めていることから、会社名を耳にしたことがある方は多いのではないでしょうか。

ガルーン公式:エンタープライズ グループウェア サイボウズ ガルーン 3
関連サイト:サイボウズ式 | 「新しい価値を生み出すチーム」のための、コラボレーションとITの情報サイト

サイボウズ ガルーンへのメッセージや掲示板の投稿を自在にレイアウトする方法

ガルーンでは通常、文章の入力は「テキスト」または「書式編集」が選択可能です。書式編集モードではリッチテキストエディタが使えるのである程度は自由にレイアウトが可能ですが、さらに自在にレイアウトする方法を3つご紹介します。

1. 好きな位置に画像を挿入

ガルーンでは画像ファイルを添付すると投稿文にプレビュー画像が表示されますが、位置は本文の後ろになってしまいます。しかし以下の方法で好きな位置に画像を表示することが可能です。

貼り付けたい画像をブラウザで開き、「右クリック」→「画像をコピー」します。
サイボウズ ガルーン 画像のコピー

ガルーンの投稿画面で「書式編集」モードを選択し、キーボードの「Ctrl+V」を押すとコピーしておいた画像を挿入することができます。
サイボウズ ガルーン 画像の貼り付け

ただし画像はコピー元への直リンクになるので自分のパソコンのローカルにある画像を貼り付けることはできません。社内のファイルサーバーなど、メッセージや掲示板の送信先の相手が閲覧できる画像で実施する必要があります。

2. Microsoft Excelからの表の貼り付け

Internet Explorer限定ですが、Microsoft Excelの表をそのまま貼リ付けることも可能です。

まずExcel側で貼り付けたい表の範囲を選択し、「右クリック」→「コピー」またはキーボードの「Ctrl+C」でクリップボードにコピーします。
サイボウズ ガルーン Excelのコピー

ガルーンの投稿画面で「書式編集」モードを選択し、キーボードの「Ctrl+V」を押すとExcelでコピーしておいた表を貼り付けることができます。
サイボウズ ガルーン Excelの貼り付け

添付ファイルを見なくてもちょっとした表であれば確認できるので便利です。ちなみにMicrosoft製品との相性の関係か、ChromeとFirefoxでは表を貼り付けても罫線や背景色がうまく反映されません。

3. HTMLの貼り付け

最後にHTMLを貼り付ける方法です。ほとんど自由なレイアウトが可能です。

まずは貼り付けたいHTMLを何らかの方法で作成します。HTMLへのエクスポート機能があるMarkdownエディタを使うのがお手軽かと思います。

HTMLファイルをブラウザで開きます。キーボードの「Ctrl+A」で要素を全て選択し、「Ctrl+C」でクリップボードにコピーします。CSSでマークアップしてあってもOKですが背景画像など一部コピー出来ないものもあります。
サイボウズ ガルーン HTMLのコピー

ガルーンの投稿画面で「書式編集」モードを選択し、キーボードの「Ctrl+V」を押すとスタイルシートが適用された状態のHTMLを貼り付けることができます。メイリオなど書式編集モードでは選択できないような書体を使うことも可能です。
サイボウズ ガルーン HTMLの貼り付け

使い慣れたMarkdownエディタで文章を書いておいてHTMLにエクスポートし、それをコピーしてガルーンに貼り付ければ他の人とは一味違った文章を投稿できます。

おわりに

普段グループウェアを使っていると同じ社内でもこれらの方法を積極的に使っている人、シンプルなテキストのみで投稿する人と様々です。

しかしどちらが正解というのは無いと思います。グループウェアでの連絡はあくまで手段の一つなので、メッセージや掲示板などを読んだ相手がわかりやすい方法を選択し、場合によっては電話や口頭での連絡をするなど最適なものを選択できるようにしたいですね。

ハンマーでの破壊が気持ちいい!iOS/Android用のアクションRPG「ハンマーズクエスト」

$
0
0

ハンマーでモンスターや障害物を叩き潰すのが爽快なiOS/Android用ゲーム「ハンマーズクエスト」を1週間ほどプレイしています。

単純なシステムのゲームですが面白すぎてかなりハマっています。ゲームの内容とプレイ動画をご紹介します。

ハンマーズクエストとは

ハンマーで敵を倒しながら進んでいく横スクロール型の無料アクションRPGです。ドット絵がレトロな雰囲気を出していて馴染みやすくシステムも単純でわかりやすいゲームです。さらにクオリティが高いのに個人で開発されているとのことです。
ハンマーズクエスト タイトル
iOS版はAppStoreでダウンロードできます。

ハンマーズクエスト 1.0.0(無料)App
カテゴリ: ゲーム, エンターテインメント, アクション, ロールプレイング
販売元: takuya ori – takuya ori

またAndroid版はGoogle Playからダウンロードできます。

ハンマーズクエストの遊び方

ゲームは主人公の父親が旅に出るところから始まります。父親は剣を持って旅に出ましたが主人公が成長しても帰ってきません。そこで主人公が家にあった木槌を持って父親を探す旅に出ます。
ハンマーズクエスト はじまり
プレイ方法は単純明快です。タップ一回でハンマーを振り下ろして攻撃、タップ長押しでタップを離すと範囲攻撃、タップをしない場合は敵からの攻撃をガードしてダメージを軽減できます。
ハンマーズクエスト プレイ方法

クエストをクリアすると経験値、GOLDをもらえます。また残りHPやタイムによって評価の星がもらえます。評価の星については後述します。
ハンマーズクエスト クエストクリア

範囲攻撃ははじめのうちは狭い範囲ですが、より強いハンマーを購入するごとに広くなっていきます。
ハンマーズクエスト 範囲攻撃1

ハンマーが強くなってくると画面全体に攻撃できるぐらい攻撃範囲が広くなります。
ハンマーズクエスト 範囲攻撃2

各ステージは5つのクエストで構成され、5面ではボスが出現します。またクエスト1回ごとにスタミナを1消費します。スタミナの最大数は5ですがすぐに回復するため、ゲームはサクサク進めることができます。
ハンマーズクエスト ステージ

「そうび」メニューではGOLDで新しいハンマーを購入できます。ハンマーはクエストで貰える評価の星を集めるごとに解禁されていきます。
ハンマーズクエスト そうび

「スキル」メニューではGOLDで主人公のステータスを鍛えることができます。各スキルとステータスの詳細については後述します。
ハンマーズクエスト スキル

1日一回もらえるダイヤは500Gと交換またはスタミナの全回復ができます。またダイヤはソーシャルでの共有でももらうことができます。この手のゲームでは珍しく課金での購入はできないようです。
ハンマーズクエスト ダイヤ交換

また、クエストの途中で力尽きても経験値とゴールドはもらえます。レベルが1上がるだけで体感の強さはかなり上がるので、一回でクリアできないクエストでも回数をこなせばクリアは可能です。

星の評価とスキル(ステータス)について

ゲームの紹介ページにある通り、星の評価とステータスは以下のような意味を持っています。

星の評価

クエストクリア時の星は以下の基準で決まります。ボス戦と通常クエストは基準が異なりますが、各クエストトータルで最大★5まであります。

  • クリアで星1つ
  • タイム残り90秒以内で星2つ、45秒以内で星1つ
    ボス:タイム残り75秒以内で星2つ、30以内で星1つ
  • HP残り90%以上で星2つ、50%以上で星1つ

スキル(ステータス)

ステータスはレベルアップでも上がりますが、GOLDでスキルレベルを上げることでも鍛えることができます。スキルと意味は以下のような関係です。どれも重要なのでバランス良く上げると攻略しやすいです。

スキル 内容
HP HPが上がります
こうげき 攻撃力が上がります
しゅび 守備力が上がります
すばやさ ハンマーを溜めるスピード、ハンマーを振るスピードが上がります
かいふく HPの回復量が上がります

ハンマーズクエストプレイ動画

プレイ動画をYouTubeにアップしてみました。動画は1面のため攻撃範囲が狭いですが、レベルやハンマーが強くなるごとに爽快になっていきます。

おわりに

AppStoreのアプリ説明を見たところ、さらに以下のようなアップデートも予定されているようです。

次回アップデートで、クエストの追加、ハンマーの追加を行います!
細かいところも、いろいろパワーアップするかもしれません!
9月頃を予定しています!お楽しみにー!

個人開発でここまで面白くてクオリティの高いゲームを無料で提供してもらえるのは嬉しいですね。今後のアップデートにも期待したいです!

LINEのアカウント乗っ取りを防げた設定と身に覚えのない通知が来た場合の対処法

$
0
0

昨日の話ですが朝起きるとiPhoneのLINEに「LINEウェブストアにログインできませんでした」というメッセージが来ていました。最近はLINEのアカウント乗っ取り事件が頻発しているのでついに自分にもきたか思いました。

調べたところセキュリティ強化のためのLINE運営アカウントからの通知のようです。幸いアカウントは無事だったので私のLINEのセキュリティ関係の設定と、このメッセージが来た場合の注意事項をメモします。

LINE運営アカウントからの通知

朝の7:25ごろ、「LINEウェブストアにログインできませんでした。心当たりがない場合はアカウント情報を変更してください。」という通知が来ていました。またメッセージにはIPアドレスとhttp://line.me/HelpPasswordのURLが記載されていました。

LINE 身に覚えのない通知

調べたところ2014年8月18日より、セキュリティ強化のためにPC版LINEやLINEウェブストアへ誰かがログインしたときやログイン失敗した時にスマホやガラケーのLINEにトークで通知が届くようになったようです。

通知が届くケース

  • PC版LINEへのログイン、またはログインの失敗が確認された場合
  • LINEウェブストアへのログイン、またはログインの失敗が確認された場合

上記の場合に、自分のスマートフォン、またはガラケー版のLINEに「LINE」という名前のアカウントからトーク(メッセージ)で以下のような通知が届きます。
*この「LINE」という名前のアカウントは、LINE株式会社がセキュリティ強化のために運営する特殊なアカウントのため、友だちに追加していなくてもログイン動作が確認され次第、自動的にメッセージが届きます。

通知に記載されていたIPアドレス「79.127.126.220」をGeo IP Address Viewで調べてみたところイランのIPアドレスのようです。犯人のIPなのかアドレスが偽装されているのかボットネット等の乗っ取られた端末なのかは不明ですが、攻撃とみて間違いなさそうです。
LINE イランからの攻撃
ためしに正規のアカウント情報でLINEウェブストアにログインしてみたところ、ログイン後すぐに通知がきました。もし乗っ取られた場合は早く気付けるので便利な機能ですね。

LINE 正規のアカウントでのログイン通知

通知が来た場合の対処法と注意点

通知が来るのは便利ですが注意しないといけない点もあります。また通知が来た場合は念のため以下の対応をしておいたほうが良さそうです。

URLが偽装されていないか確認する

通知されるURLは「http://line.me/HelpPassword」ですが、一見LINE公式アカウントからの通知のように見せかけたフィッシングメッセージが来る可能性もあります。思いつくのは以下のような偽URLでしょうか。

うっかりURLを踏む前に公式のものか確認するのが大事だと思います。

本当にLINE公式アカウントからの通知か確認する

公式ブログでも案内されていますが、通知が公式アカウントからのものであるか確認する必要があります。トーク画面からアイコンをタップして「おすすめ」や「ホーム」という表記があれば公式アカウントであると判断して良いようです。
line-06

公式アカウントかどうかを判別するためには、アカウントのプロフィール画面で「おすすめ」や「ホーム」のメニュー表示を確認してください。メニュー表示がない場合は、偽アカウントのため、ブロックまたは削除をしてください。

パスワードの変更

ログインに失敗した通知でもアカウントが狙われている可能性があるので念のためパスワードを変更しておいたほうが良いです。パスワードはLINEの設定から「アカウント」→「メールアドレス変更」→「パスワード変更」から変更できます。

現在のパスワードを忘れてしまった場合はパスワード変更画面の「パスワードを忘れた場合」というリンクをタップすると登録されているメールアドレスに再設定用のURLが届きます。
LINE パスワードを忘れた場合
実際、普段パスワード入力して使わないのでパスワードを忘れたため、上の機能を使いました。

LINEが乗っ取られなかった設定

スマホ版のLINEでは以下のような設定をしていました。

PINコードの設定

ログイン時に本人確認するための4桁の数字を設定できます。万が一アカウントが乗っ取られてもPINコードを設定しておけば時間稼ぎができるので設定しておいたほうが良いです。
LINE PINコード設定と他端末ログインオフ

他端末ログイン許可をオフ

LINEはスマホでしか使わないため、他端末ログイン許可をオフにしていました。PCでLINEを使わない場合はオフにしておいたほうが乗っ取られる可能性を下げることができます。

しかし他端末ログイン許可をオフにしていてもLINEウェブストアにはログインできるので注意が必要です。

パスワードを他サービスで使っていないものにする

パスワードは他サービスで使っていないものにしていました。(そのおかげでパスワードを忘れていましたが)

パスワードリスト攻撃(他サービスで流出したパスワードを使ってのログイン試行攻撃)を防ぐためにもオリジナルなパスワードに変更しておいたほうが良いと思われます。

おわりに

今回は幸いログイン失敗した通知だったのでアカウントは無事でしたが、少なくともメールアドレスはどこかから漏れているものと推測できます。

LINE乗っとり騒動は未だ原因が分かっていないため、ユーザ側でも出来る限りの対策をしておきたいと思いました。

Viewing all 686 articles
Browse latest View live