【スパム?】WordPressブログへの英語の応援コメント

最近英語でコメントがされていることが多い。

engcomment

 

内容を見るとブログの指摘だったり応援だったりする。

Eメールアドレスは個人のものに見えるし、よくあるような怪しいリンク先もないので一見するとスパムっぽくない。

けどやっぱりおかしい点がある。

 

  • 日本語ブログに英語コメ
  • 零細ブログに複数人名義から連投されている
  • ホームページは入力必須でないのにヤフー(米)のアドレスが入力されている
  • コメントでググると同じコメントがヒットする
  • ブログの内容には触れない(どんな投稿に対してもそれっぽく読めるコメント)

 

マルチポストだということはすぐにわかるけど、目的がわからないので混乱した。

広告もサイト誘導もなくSEOにかかわりそうな内容でもない。

ほいほい承認したら追加でスパムがきたりするのかもしれない。

新アプリ「漢字図鑑」をリリース

新規アプリをリリースしました。

第一水準漢字2965文字を一覧で見ることができるアプリです。

かなりニッチ。

それぞれの漢字をタップするとその漢字の画数、読み、意味を見ることができます。

また、気になった漢字はお気に入りに登録をすることができます。

 

私のスマホが古いだけの可能性はあるけど、ちょっと起動が遅いです。

割とチューニングがんばったけど起動後数秒とまる感じ。

あと検索機能つけたかったけど、設計レベルで変えないとできなそうなのでつけられなかったのが少し心残り。

漢字図鑑スクショ1漢字図鑑スクショ2

MVNOを使って通信環境を見直す

少し前の話だけれどPC用の固定回線とスマホ用の携帯回線をまとめた。

元々は固定回線とイーモバイル(現Ymobile)とDocomoの掛け持ちをしていたところ、料金が馬鹿にならないのでDMM mobileで一本化。

結果として月額13,000円から6,000円に減らせた。

回線をあわせるメリット

  • 契約管理が楽、引越しで契約更新する必要がない
  • 外出先でもいつもどおりPCを使える
  • 合計金額は安くしやすい

回線を分けるメリット

  • 固定回線の方は基本的に通信量・通信速度を気にしなくていい
  • 固定回線の使いすぎで携帯回線が使えないようなことがない
  • どちらかがトラブってももう一方で通信可能

DMM mobileとは

いわゆるMVNOのひとつ。

SIMカードを3枚までもらえるので通話SIM(スマホ用)とデータSIM(PC、タブレット用)で分けることができる。

今日時点で通話1枚データ2枚が容量20Gで月額5,980円、追加も1G480円と格安。

PCでも使っているが通信速度で困ったことはない。

毎月DMMポイントがもらえるので艦これとかに課金できる。

感想

回線を合わせるかどうかはともかくとして、3大キャリアからMVNOに変えたのは正解だった。

電話もキャリアメールも基本LINEかGmailで代替できるし、多少割高だけど普通の電話もできるので個人的にはデメリットが1つもなかった。

 

 

追記

固定回線にしました。

Twitter上でWordPress記事の要約を表示する

WordPressの記事投稿をTwitterでつぶやいたときの表示がなんか味気ない。

twbef

そこから連携できそうな部分を設定してタイムライン上で以下のような表示になるようにしたので、その手順を忘れないうちにメモ。

twaft

ちなみにこのアイコンはうちの猫で内容にはまったく関係がない。

ステップ1:Twitterの設定

プロフィールの編集を押してホームページのところにルートURLを設定する。

tw0

tw1

コレだけでOK。

ステップ2:WordPressの設定

All in One SEOプラグインの機能管理からソーシャルメディアを有効化。

その後ソーシャルメディアからTwitter設定を見つけてTwitter情報を書き込む。

tw3

ユーザーの設定にもTwitterアカウント(@ほにゃらら)を入れる場所があるので入れておく。

Twitter上で表示される内容は投稿画面の下のほうにあるAll in One SEO Packのソーシャル設定で変えることができる。

tw4

ステップ3:確認

以上で完了!

Twitterのタイムラインだと多少ラグがあるけどCard validatorを使うとすぐに確認ができる。

どこかで失敗している場合にはその情報も出るみたい。

tw5

 

AWSを使って欲しい情報を自動取得する

やりたいことの概要

技術的にはクローリングとかスクレイピングとか呼ばれている。

クローリングはWebを自動で徘徊する技術で、スクレイピングはさらに欲しいものだけ抽出するような感じ。

例えばポータルのほうで技術ニュースリンクをまとめてるのはこの技術を使っている。

方法は色々あるけどAWSで簡単にできそうなものを2つ実装している。

けどいまいちしっくりこないので現状をまとめつつ、どう運用するのが一番いいか考えてみる。

1つ目の方法はEC2にヘッドレスブラウザを入れてJenkinsで管理するやり方。

2つ目の方法はLambdaで起動してCloudWatchで管理するやり方。

どっちもスクレイピング自体はjavascriptを中心にした方法で実現している。

方法1

概要

■EC2+phantomjs+casperjs+Jenkins

EC2インスタンスを立ち上げてその中で好きなようにしようというスタンス。

phantomjsはヘッドレスブラウザでcasperjsはそのユーティリティ。

javascriptで実行できる画面描写のないブラウザを利用して情報を集める。

Jenkinsのジョブで収集スクリプトを起動したり、データを格納したりする。

メリット

インスタンス内でできることは何でもできるので拡張性が高い。

デメリット

インスタンスのメンテナンスが必要。EC2インスタンスは起動時間課金なのですでに運用しているインスタンスに相乗りしたり、必要に応じて起動/停止をしないとお金がかかる。

スクレイピング実行部分のサンプル

ブラウザとして巡回するので広告ページを待ったりしている。

ヘッダをいい感じに設定すれば特に待つ必要はないかもしれない。

方法2

概要

■Lambda+nodejs+cheerio-httpcli+CloudWatch

インスタンスを保持せずサービスとして使おうというスタンス。

cheerio-httpcliはnodejsのスクレイピング用モジュール。

LambdaにZIPを置いてevent sourceでCloudWatch Events – Scheduleを設定する。

メンテ不要でAWSの他サービスが使いやすい利点がある反面、Lambdaの制限がある。

特にマックス300秒の制約を気にしないといけないかも。

起動以外は取得、整形、格納なんかは全部Lambdaの中で行う。

メリット

実行時間のみ課金されるので使わないときのメンテが不要。

AWSの他サービスを使いやすい(IAM ロールの設定などが簡単)。

デメリット

Lambdaの制約内でやる必要があるので拡張性は低め。

スクレイピング実行部分のサンプル

書き方は色々あるけど一番簡単そうなPromise数珠繋ぎで書いている。

cheerio-httpcliに関しては作者さんがかなり丁寧に解説しているので使いやすかった。

まとめと感想

どちらも多少ニッチな知識が必要だけどjavascriptを多少知っていれば難しいとこはないし、ググればすぐに情報が手に入るので実装は簡単だった。

クライアントアプリケーションを途中でかませたりするような場合にはEC2内でやって、AWS内だけで済む処理なら基本Lambdaにするのがいいかなと思う。

今回の組み合わせの他にもEC2でnodejs動かしたり、Lambdaでphamtomjs動かしたりする例も見かけたけど特にそうする理由はなさそう。

kimonoみたいな専用サービスを使うとスクレイピング実施部分はほぼノータイムでできるんだろうけど、利用するサービスが増えると色々と面倒見ないといけなくなりそうなのでしばらくはAWSに依存してみようと思う。

 

新アプリ「マイルーレット」をリリース

数日前にAndroidアプリをリリースしました。

このアプリはサイコロを作っていたときに面の数とか内容を自由に変えたいなーと思ったのがきっかけで作り始めた。

文を表示させるならサイコロよりルーレットかなー、ルーレットっていうとディーラーが回すやつとかスロットで回ってるアレみたいな感じかなーと思ったのでどっちもできるようにした。

技術的に難しいことはしなかったけど、ぐるぐる回す処理は演算しながら再描画するよりも設定変更毎に画像化してまわしたほうが負荷が小さかったかもしれない。

 

このアプリで浮き彫りになったのは絶望的な画像センスのなさ。

アイコンはコレだし

myricon

バナーはコレ

myrbanner

まじめに作ってるんだけどね。

どうやってもイイネってなるものを作れそうになかったので妥協した感じがある。

勉強すれば改善できるものなのか、何を勉強すればいいものなのか。

いずれ差し替えよう。いずれ。。

引越し完了

引っ越しました

会社の寮に入っていたので退職に伴って引越ししました。

今週はほとんど引っ越しに費やしたけどようやくひと段落。

荷解きも大体終わった。

最初は集合寮住まいだったので大ダンボール3箱で上京してそのまま個別寮に入ったけど、今回は大7つ小8つにもなっていた。

ここを出るときには大3つくらいに収まるようにミニマリストを参考にしてみようと思う。

急な引越しでどたばたしたのでタイムスケージュールを残しておく。

1ヶ月前

物件を探す

まず引越し先が見つからないと何もできない。

一ヶ月前くらいには抑えたいが人気物件だったり繁忙期などでもっと直近で契約しなくてはいけない場合がある。

閑散期であれば余裕を持って契約できたり、フリーレントの条件がつきやすいと聞いた(今回は1ヶ月のフリーレントをもらえた)。

引越し屋を探す

安くても評判の悪いところは使わないほうがいい。

一人暮らしなら最安と2番目の違いはほとんどない。

不動産屋とつながっているところだと多少融通が利く。

各種切り替え連絡をする

ガス、電気、水道、郵便など最近はネットでできるようになっている。

粗大ゴミを捨てる

市や区の回収サービスを使うのであれば予約が埋まっているかもしれないので早めに申し込みする必要がある。

自分で持ち込んだり、引越し屋に回収してもらう方法もある。

1週間前

荷造りをはじめる

量によってはもっと前から計画的に片付けたほうがいいが、ダンボール置き場を用意しておく必要がある。

当日

引越し

引越し屋が来る前に忘れ物がないか確認する。

旧物件引渡し

一通り掃除して旧物件を大家さんに引き渡しする。

室内点検や鍵の返却をするけど、大体は自然消耗として扱われるので基本清掃料だけですむはず。

荷下ろし

新居に荷物を下ろす。

複数の引越しを並列してやる引越し業者なら数の確認をきちんとする。

あとダンボールの回収の有無など確認しておく。

ガスの立会い

電気、水は連絡するだけでいいけど、ガスだけは引越し先で立会いが必要な場合が多い。

引越し後

住民票の変更

必要書類を持って転居届けを出す。

(市区町村が変わる場合には転出届と転入届が必要)

免許とか銀行とかもろもろ住所変更

面倒でもちゃんとしておかないと後々面倒なことになる。

 

AWSのDynamoDBをAPIでCRUD操作する

概要

DynamoDBをAPIで使えるようにした。

次にAPIを通じてCRUD操作する方法を記録しておく。

基本的に公式ガイドを参照したけどわかりにくかったので他も色々見ながら試行錯誤した。

検索するといろんな情報(古い書き方、非推奨の書き方や別の言語での書き方)が入り混じっていて結構わかりにくかった。

create レコードを新規作成

payload.TableNameで指定したテーブルにpayload.Item内のJSONを新規登録する。

テーブル作成時にプライマリーキーに設定した属性は必須。

それ以外はJSONであれば自由。

また、プライマリーキーの値がすでにあるものであった場合はレコードそのものを上書きする。

read レコード1件取得

payload.TableNameで指定したテーブルにpayload.Keyにプライマリーキーを指定して1レコードを取得する。

 

update レコード1件更新

createで同一プライマリキーを指定したときとは違って、レコードの一部を変更できる。

payload.Keyで指定したレコードの更新を行う。

プライマリキー属性は更新できないので、その場合はdeleteしてcreateしなおす必要がある。

また、AttributeUpdatesで処理を定義することもできるが現在は非推奨とされている。

まずUpdateExpressionに式を記入する。

以下の4つの式が使えるがSET, REMOVEの他は基本使わない。

  • SET – 属性の追加、更新
  • REMOVE – 1 つ以上の属性を項目から削除
  • ADD – 数値とセットデータのみサポートするが、通常はADD ではなく SET が推奨される
  • DELETE – セットデータ(HashSet)からString配列で指定したものを削除

次にExpressionAttributeNamesに属性名を定義。直接UpdateExpressionで指定してもいいが予約語とかぶらないように注意する。

同様にExpressionAttributeValuesに代入する値を定義。

ReturnValuesは以下から選ぶ。

  • ALL_OLD – 更新の発生前に表示されたように、項目全体が返される。
  • ALL_NEW – 更新後に表示されるように、項目全体が返される。
  • UPDATED_OLD – 更新の発生前に表示されたように、更新した値のみが返される。
  • UPDATED_NEW – 更新後に表示されるように、更新した値のみが返される。

 

DELETEは今回の例だと使えないため割愛。

書き方 : DELETE HashSet [“a”,”b”,…]

delete レコード1件削除

プライマリキーを指定してレコードを削除する。

list レコード一覧取得

テーブルを指定してレコード一覧を取得する。

 

HTTP RequestでDynamoDBを操作する

何をするか

外からAPIを叩いてデータをDBに保存してみたかったので試してみた。
プラットフォームはAWSオンリー。
以下のサービスを使って連携をしてみる。

  • API Gateway
  • Lambda
  • DynamoDB

DynamoDBの用意

まずAWSでNoSQL DBサービスのDynamoDBの準備をする。
AWSのサービスはそれぞれテスト機能があるので一番深いところから用意していくとトントン進む気がする。

  1. サービス一覧からDynamoDBを選択する
  2. テーブルの作成ボタンを押す
  3. 好きなテーブル名、プライマリーキーを設定する。今回はtestテーブル、キーをidにした。

以上でDBの準備完了。簡単!

Lambda, APIの作成

LambdaはAWSで用意されているコードの実行サービス。
Java,Nodejs,Pythonコードを実行可能(今回はNodejs)。
なのでここには処理の実行部分を書く。
今後処理の内容を弄るときには基本的にここをでロジックを書く必要がある。
今回やりたいことはBlueprint(色々セットで作ってくれるテンプレートのようなもの)で用意されているのでそれを使う。

  1. サービス一覧からLambdaを選択
  2. Create lambda functionボタンを押す
  3. Select blueprintからmicroservice-http-endpointを選択
  4. Nameは好きな名前を入れる(今回はtestLambda)
  5. RoleでBasic with DynamoDBを選ぶと新規ページが開く
  6. そのまま右下の許可を押す
  7. Roleの選択肢にlambda_dynamoが追加されているの選択(今後は直接これを選ぶ)
  8. 右下のNextボタンを押す
  9. microservice-http-endpointで作成した場合にはそのままAPIが作成できるのでmethodをPOST,SecurityをOpenに変えてNext
  10.  確認画面でOKなら完了

これで準備完了なのでテストしてみる。

Lambdaのテスト機能を使う

Lambdaの左上のTestボタンを押すとeventの中身を直接入力してテストできる。

以下のJSONを入力してテストすると実際にレコードが登録される。

DynamoDBのtestテーブルを見るとレコードが追加されているのが確認できる。

RESTクライアントを使ったテスト

ブラウザの拡張でREST APIテスト用のアドオンがあるのでそれで実際の動作を確かめる。

restclient

URL:APIエンドポイント
Method:POST
Body:

結果

Dynamoのtestテーブルを見ると2つのテストで入れたレコードが確認できる。

dynamo

このままだとURLをたたけば誰でもデータベース操作できてしまうのでLambdaの処理を絞ったり、APIに認証を設定したりする必要がある。

Qiitaのタグ別フォロー数と記事数で技術動向をつかむ

お手軽に技術動向をつかみたい。

気になった分野はさらっと試してみたい。

 

技術屋にとってはすでに英語は必須になっているとはいえ、いちいち英語の仕様書や掲示板を読むのはしんどいので日本語リファレンスの多さは重要だと思う。

 

最近はよくQiitaにお世話になってます。

デモやサンプルを動かす際の注意点なんかも多く記事になっており、何かしら新しく手をつけるときに非常に役立っている。

 

ちょっと思いついたのでQiitaのタグ別フォロワー数、記事数一覧でランキングを作ってみた。

 

Qitta傾向分析

 

最近データを取り始めたので、もう少したまってきたら可視化(グラフ化)してみたい。