uzullaがブログ

uzullaがブログです。

「dply」、最初二時間無料でVPSが使えます的サービス

https://dply.co/

一言でいって「二時間無料で手軽にVPSが使えます」サービスです。

「2時間制限を有料で延長出来ます」という方法で収益をめざしている模様。

二時間を超えると勝手に終了されるので、不意に課金されるとかはないし、最初の登録にクレカやデポジットも不要です。

つまり僕が好きなタダサーバーだ!やったね!

過去にもあった

過去instantserver.ioがこの収益手法をとっていた。ただ、あちらは潰れてしまった。

Instantserver.ioは、たしか30分+30分(一度目の延長が無料)だったので、2hというのは大分たすかるなという印象です。

f:id:uzulla:20161128181310p:plain

注意

素性のしれないよくわからんサーバーに、重要なデータをあげたりしてはいけないゾ!!

まずは見られている、そういう意識をもってつかいましょう!

使い方

Githubアカウントでサインアップ&ログインできます、メアドと公開鍵を読まれます。

公開鍵を見れる権限ってはじめて見た気がしないでもないんだけど、そもそも公開鍵ってhttps://github.com/username.keysで見れるしな??

サインアップしたらデプロイボタンを押して、ホスト名と、OSと、リージョンと鍵を選んで起動するだけです。

f:id:uzulla:20161128181454p:plain

最近多くなったけど、「入力欄が見えない問題」は罠ですね。Googleのマテリアルスタイルは本当にこれどうにかしてくれという印象しかないのですが、皆さまいかがお過ごしでしょうか。

リージョンはこのように、

f:id:uzulla:20161128181531p:plain

OSはこのように、

f:id:uzulla:20161128181544p:plain

使用感

1分もしないくらい?であがってきた、これは好印象ですね。

そういえばどこにもかいてなかった気がするけど、ユーザー名はrootでした。(とここまでかいてFAQみたら乗ってた)

f:id:uzulla:20161128181406p:plain

様子

シンガポールリージョンにあげてみました

f:id:uzulla:20161128181347p:plain

1 CPU 512MB RAM 20GB Disk メモリが少ないねー。

$ ping 128.199.72.46
PING 128.199.72.46 (128.199.72.46): 56 data bytes
64 bytes from 128.199.72.46: icmp_seq=0 ttl=52 time=72.890 ms
64 bytes from 128.199.72.46: icmp_seq=1 ttl=52 time=71.712 ms
64 bytes from 128.199.72.46: icmp_seq=2 ttl=52 time=72.014 ms
64 bytes from 128.199.72.46: icmp_seq=3 ttl=52 time=71.658 ms

日本リージョンではないので速くはないけど、レイテンシは作業できないってほどではない、というレベル

inetnum:        128.199.0.0 - 128.199.255.255
netname:        DOPI1
descr:          DigitalOcean Cloud

ふーん、DOかー。

繋がってる回線速度は少なくとも100Mbpsはありそう。ただ、なにかをアメリカから落とそうとするとシンガポールはちょっと遠いから、転送速度が十分にあがりきるまで(ウインドウが広がりきるまで)結構時間がかかります*1

CPU速度は遅め、php7のコンパイルくらいは普通にできるけど。(なつかしのinstantserver.ioだと、初期値の30分ではビルドがおわらなかったなw)

なお、APIはない。詳細はFAQにて。

その他

起動スクリプトはつくれる。bash でもできるっぽいのでおじさんでも安心

https://dply.co/help/cloud-init

たとえば以下みたいな…

#!/bin/sh
export DEBIAN_FRONTEND=noninteractive;
apt-get update;
apt-get -y upgrade;
apt install -y build-essential git gcc patch autoconf automake bison libssl-dev  libmysqlclient-dev libxml2-dev libreadline-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libpng-dev libxpm-dev libfreetype6-dev libgmp-dev libgmp-dev libmcrypt-dev libmysqlclient-dev libpspell-dev recode librecode-dev

なお、これを利用して、ボタンがつくれるそうです。

f:id:uzulla:20161128191130p:plain

https://dply.co/button

ただ、スクリプトガッツリいれても進捗がよーわからん、topをみてないといけない。 おわったらなんかキックするようなのをいれておかないといけないかも。

また、管理画面でサーバーの詳細(起動時の設定)を確認できないので、上げちゃった後に「あれ、どんな起動スクリプトであげたっけ…?」ってなってしまうのがちょっと不便

あと、メールは送信できないそうです(OP25B

まとめ

タダは最高だなあ!(本音)

今後にも期待です!

そして某カンファレンスの資料がかきあがらんなあ!

こちらからは以上です。

*1:カーネルパラメータでもうちょっと良くなるかもしれないが

Hachioji.pmのLINE BotをLINE Messaging APIでつくってみた

私はHachioji.pmという地域pm*1を毎月開催しているのですが、毎回(ほぼ)参加者全員がトークするので、それのネタの為にもとHachioji.pmむけのLINEのボットを作ってみました。

紹介

ざっとどういう物なのか紹介です。

f:id:uzulla:20161009051619p:plain

基本「ヒャッ!」と、下からでてくるボタンで操作するスタイルです。

次回詳細を表示、というよりATNDを開く

f:id:uzulla:20161009050518p:plain

毎回Hachioji.pmはATNDで募集をかけています。開催日時、場所情報がATNDのAPIで引けるので、それをパースして表示します。

日時をみれば次回がないとかも表示できて便利(?)

地図表示

f:id:uzulla:20161009050532p:plain

会場は八王子周辺ですが、毎回異なります。

ATNDには会場の名前やサイトなどのURLをはってありますが、Google MAPとかははっていません、これは手間の問題です。

ATNDは住所をいれるとAPIから緯度経度がとれます。

で、Messaging APIでは色々な種類のメッセージをおくれますが、ここでは位置情報をつかっています。

わりとこれ結構便利な気がする。

まあ、ATNDみたらええやん、リンクたどればええやん、まあそうなんですけどね、大体のサイトってPC向けだから、スマホでもスッと地図が立ち上がるのはストレスがない。

次回催促

f:id:uzulla:20161009050605p:plain

f:id:uzulla:20161009050658p:plain

hachiojipmは毎月一回くらい開催しているのですが、割と適当に主催が思い立ったらATNDをたてています。つまり、主催が忙しかったりすると、しばらく次回がたたないということがあります。

Hachioji.pmはSlackがあるので、それとかでツッコんでもらえばいいだけなんですが、まあ気軽に催促されるのもいいかなとおもい、ボタンをつけてみました。「次回はよ」と言うと(あるいはボタンをタップすると)、Slackに投稿して私が気付きます。

ビーコンでチェックイン

f:id:uzulla:20161009050718p:plain

主催がビーコンをもっていますので、主催の近くにいくだけで参加したことがログされるのがおもしろいかなと実装してみました。

まあ、「ログされます」といっても別になにがされるわけでもないです。「100回連続参加で賞品!」とかそういうのも特にない予定です。

Hachioji.pmは参加者が後から遅れてくる事が多いので(そういうスタイルなので)、しばしば「誰がきてるんだっけ?あと誰がきてないんだっけ?」という会話がなされる為、うまく突き合わせをすればその問題が解決できそうですね。

(とはいえ、全員がLINEやってるわけでもないので…?)

おしてはいけないボタン

おしてはいけません


と、いうことで以上です。

これは新しい何かを解決するイノベーションあるものではなく、トークと個人的な趣味のために1日くらいで作ったものです。正直SlackやATNDだけでできることであり、このBotの価値は特にないです、みんなもつかわない気がします。まあ、スマホで一発で地図をみれるのは便利な気がします…が、Hachioji.pmが開催される場所は割とローテーション気味なのでみんな道をおぼえている気もする。

まあ、お金がかかることでもないので、しばらく暇をみて育ててみようかとは思います。

参考になるとはおもえないんですけど、大変素朴なコードを公開しておきます。

github.com

作ってみた感想

とりあえず、使える(?)BOTを初めて作ってみて、何人かにつかってみてもらった感想なのですが…一言でいうと「なんか…ガラケーを思い出すな」という感じです。

あれも画像もつかいづらくて基本文字だし、セッションがないし(guid=ONなどw)、色々やりましたけど、あれを思い出します。

当時、ものすごい「絵文字を配置する」ことが得意な人がいましたけど、ああいう感じの…。なんていうか割り切れば割り切れる感じ。

実際にはLINEは画像をつかっていろいろできるんですけど、画像を作る工数であきらめられるし、諦めて文字だけでも(そこまでは)みすぼらしくないのがいいですね。

PHP SDKの感想

兎に角しっかりしており、他の言語で作る方でもexapmlesのKitchenSinkだけは見て損はないかと。

https://github.com/line/line-bot-sdk-php/tree/master/examples/KitchenSink

リッチメニューが便利

f:id:uzulla:20161009051735p:plain

チャットボットなのにチャットしねえのかよ!といわれそうですけど、実際リッチメニューは非常に便利ですね。

LINE@で管理する機能なので、なかなか「プログラマー向け」とはいいがたい概念や管理画面なんですが、とにかくこれはよい。

これ、ますますボットの意味なく、ウェブでええやん…という感じがいなめませんが、便利なものは便利だからええんや。

自動リンクが邪魔

f:id:uzulla:20161009051754p:plain

日付の数字を電話番号と認識したり、「hachioji.pm」という文字をURLとして認識したり誤爆するんですよね。ちょっとだるい。

まあ、工夫で回避するしかないかなとおもってますが…。

セッションとルーターが…

まだ困ってないんですけど、ボット用のルーターとセッション管理ってのはどうなっていくんですかね。まあ複数窓という概念はないとすればまさにガラケー時代を思い出すセッション機構をつくればいいのだろうか。

ボットは「リロード(とか、トップページをひらく)」の仕組みがないんで、「会話」をやるならセッション管理が必要で、なにかシーケンスをするならAbortする仕組みもなんか用意しないと、ものすごいかったるい(毎回最初からやりなおさせる)か、詰み(もどれない)そうですね。

あとはルーターですねー、PHP sdkだと、取れたeventのclass名と入力文字をみてルーティングしていく事になります。この設計は安全で気に入っていますが愚直にやっていくとコードがドンドンネストする。そして、他のchatでつかいまわしはきかない。

ボットにはURLのpathみたいなものはないし、将来的には自然言語解析して〜という感じだとおもうんですが大変そう。

たとえばこういう自然言語を解析するASP的なAPIがあるよとおしえてもらったので、面白いなとはおもっているのですが、

www.microsoft.com

qiita.com

こういうのをつかって、はたして見通しよく*2実装できるのだろうか…大変そう…もうボタンでいいんじゃないかなあ…w

非同期が…

今、BotはAzure App Service+PHPでうごかしてるんですが、無料枠でうごかしてるのでしばらくするとワーカーが停止します。 停止状態からアクセスすると自動的にスピンアップするんですけど体感2〜3秒位ボットが返事をくれないので、「あれ?」と、もう一度ボタンをおしちゃうことがありますね。勿論二回うごいちゃう。

これ、あまり体験としてよくないので、連続した重複は無視するとかやらないといけないかな。上にも書いたセッション(やスロットリング)とかと一緒に解決しなきゃいけなさそう。ボットのフレームワークってやつをつかったことがないんですけど、こういうのがあるのかな。

iOSはLINEのBeacon有効にするのに設定が必要なの?

私のメイン端末が今Androidなんで今日初めて気付いたんですけど、iOSってもしかしてBeaconがデフォルトオフなんでしょうか、結構ショックです。

今日ドヤ顔でみんなにやってもらおうとおもったら結構できなかったんですよね…、設定したつもりでも、うごいたりうごかなかったり、まあ設定がたりてないのでしょうが、きびしい。

これ、将来的にはデフォルト変わるのだろうか…iOS(というかApple)の都合でこうなってるとしたら渋い。

まとめ

BOT作成簡単ですね!

ただ、簡単だけどヒネりもなく何かを作っても「これ別にWebでええやん」となってしまうので、なかなかむずかしそうであります。

次は「チャットグループにボットを生息させると便利」という話を聞き、そうか、ならば普段一番LINEしている奥さんとのLINEをエンハンスしたりできないかなとおもってます。

こちらからは以上です。

*1:Perlのユーザーのmeet up

*2:コールバックヘルとかにならずに

How to use LINE Messaging API with PHP sdk in an hour.

this entry for beginner.

https://developers.line.me/messaging-api/overview

github.com

if you are expert, please see line-bot-sdk-php's examples. that is more better(more strict).

requirement

  • Public web server
  • need https
  • PHP version >= 5.6
  • curl extention
  • Composer

registration Developer trial

https://developers.line.me/

get tokens

You need to get channel token and channnel secret.

goto

https://developers.line.me/

and click channels at header right side.

you will see Channels basic infomation.

if you get wrong bot account?

if you try "TRIAL_BOT" before, open bellow url and click account list.

https://business.line.me/

then, open your developers trial bot account's Messaging API's LINE DEVELOPER button.

Okey, create your project

example file tree.

/project_root/
             /wwwroot/ # your httpd document root dir
                     /index.html # not require
                     /callback.php
             /vendor # will create by composer
             /composer.* # will create by composer

these are example. you can change wwwroot to htdocs,public and other as you like.

install sdk

$ mkdir project_root
$ cd project_root
$ wget https://getcomposer.org/composer.phar
$ php composer.phar require linecorp/line-bot-sdk

# will generate composer.json, composer.lock, vendor/

create callback.php at project_root/wwwroot/

this is sample echo bot.

<?php // callback.php
define("LINE_MESSAGING_API_CHANNEL_SECRET", 'your channel secret');
define("LINE_MESSAGING_API_CHANNEL_TOKEN", 'your channel token');

require __DIR__."/../vendor/autoload.php";

$bot = new \LINE\LINEBot(
    new \LINE\LINEBot\HTTPClient\CurlHTTPClient(LINE_MESSAGING_API_CHANNEL_TOKEN),
    ['channelSecret' => LINE_MESSAGING_API_CHANNEL_SECRET]
);

$signature = $_SERVER["HTTP_".\LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$body = file_get_contents("php://input");

$events = $bot->parseEventRequest($body, $signature);

foreach ($events as $event) {
    if ($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage) {
        $reply_token = $event->getReplyToken();
        $text = $event->getText();
        $bot->replyText($reply_token, $text);
    }
}

echo "OK";

please edit your channel secret, your channel token to your tokens.

register webhook URL(callback URL)

set your callback.php url to webhook URL.

you can edit webhook URL at Channels basic infomation.

open bellow url and click channnels (same as get token).

https://developers.line.me/

TEST!

follow your bot account, and send a text.

echo bot will echo back same text.

(sticker(and other) message is not normal text message, this echo bot will ignore.)

if you got any reply

at first, CHECK YOUR ACCESS_LOG and ERROR LOG! (IMPORTANT!!!)

You can not trust access from webhook from line?

this code will dump any request post body to /tmp/dump.txt.

<?php
ob_start();
$raw = file_get_contents('php://input');
var_dump(json_decode($raw,1));
$raw = ob_get_clean();
file_put_contents('/tmp/dump.txt', $raw."\n=====================================\n", FILE_APPEND);

echo "OK";

FYI: webhook access is not encoded by application/x-www form-urlencoded, so $_POST will blank.

SSL Error

SSL certificate problem: unable to get local issuer certificate

this is cause by YOUR php settings.

you need set curl ca certification

please google with 'curl.cainfo php.ini'.

done!

that's all. very simple.

see also

if you want to listen other messaging api events, plz see SDK example/KitchenSink.

enjoy!

for japanese

ここ数日のエントリをみてくれ。