Inside Frontend #1 参加レポート #insideFE

Inside Frontend という「Web フロントエンドの現場とこれからをつなぐカンファレンス」に参加してきました。

以下、聴講したセッションと所感です。セッション聴いてるときに他の方がよいツイートをしていたのをメモ代わりに「いいね」していたので、それも貼って備忘録としています。

Web over ServiceWorker @jxck_

ServiceWorker についてよく知らなかったので勉強になったという感想です。実務で使われている事例がもっと増えてくるといいなと思ってます。

Progressive Web Apps by @jxck_

Polyfills are part of the web – FT & Nikkei @triblondon

フロントエンドの課題を啓蒙する方法 by @yhassy

アメブロ2016: 実録、アメブロフロントリニューアル275日 – CyberAgent @herablog

karmaを使ったSPA向けのE2Eテスト技法 @kyo_ago

まとめ

フロントエンドの知見をいくつか得られて、満足度が高かったです。

あと、スタバのコーヒー、終わり際までほぼ無限に飲めたのは幸せでした。

FRESH! での配信もされていて、動画も残ってるので気になるセッションはまた観てみます。いい時代になったなー。

Inside Frontend の運営スタッフ、登壇者のみなさま、ありがとうございました!

[Mongoose] timestamp options で createdAt だけ使う

Mongoose の timestamp options で createdAt だけ使う方法を調べたけど、自分で pre hook に実装するしかなかったというお話です。

options.timestamps では createdAt, updatedAt どちらも有効になる

まず、Mongoose version 4.8.5 時点では、ソースコードを読んだ限りでは options.timestamps には createdAt, updatedAt のどちらかだけ使うという option はありませんでした。

以下、Mongoose のソースコードを一部抜粋しました。

/**
 * Setup updatedAt and createdAt timestamps to documents if enabled
 *
 * @param {Boolean|Object} timestamps timestamps options
 * @api private
 */
Schema.prototype.setupTimestamp = function(timestamps) {
  if (timestamps) {
    var createdAt = timestamps.createdAt || 'createdAt';
    var updatedAt = timestamps.updatedAt || 'updatedAt';
// ...
  }
};

createdAt だけ有効にするサンプルコード

というわけで .pre(“save”) .pre(“findOneAndUpdate”) .pre(“update”) とかに options.timestamps 的な hook を追加するサンプルコードをご紹介します。

var yourSchema = new Schema({
  createdAt: {
    type: Date
  }
});
 
yourSchema.pre("save", function(next) {
  var now = new Date;
  if (this.isNew) {
    this.createdAt = now;
  }
  return next();
});
 
yourSchema.pre("findOneAndUpdate", function(next) {
  var now = new Date;
  this.findOneAndUpdate({}, {
    $setOnInsert: {
      createdAt: now
    }
  });
  return next();
});
 
yourSchema.pre("update", function(next) {
  var now = new Date;
  this.update({}, {
    $setOnInsert: {
      createdAt: now
    }
  });
  return next();
});

最後に、小ネタですが timestamp options を削除するという issue があるので確認してみると version 4.11 のマイルストーンで削除されるかもしれません。

Proxy サーバー構築 – squid 編

squid 3.x を使って Proxy サーバーを構築しました。

squid のインストール

まず squid をインストールします。

sudo apt-get update
sudo apt-get install squid

squid のバージョンを確認してインストールされていることを確認します。

$ squid -v
Squid Cache: Version 3.5.12
Service Name: squid
Ubuntu linux
configure options:  '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' 'BUILDCXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-build-info=Ubuntu linux' '--enable-linux-netfilter' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'

squid インストール後に status を確認するともう起動してました。squid せっかち。

$ service squid status
● squid.service - LSB: Squid HTTP Proxy version 3.x
   Loaded: loaded (/etc/init.d/squid; bad; vendor preset: enabled)
   Active: active (running) since Sat 2017-02-18 13:39:01 UTC; 28min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 4
   Memory: 18.3M
      CPU: 461ms
   CGroup: /system.slice/squid.service
           ├─2831 /usr/sbin/squid -YC -f /etc/squid/squid.conf
           ├─2838 (squid-1) -YC -f /etc/squid/squid.conf
           ├─2841 (logfile-daemon) /var/log/squid/access.log
           └─2866 (pinger)
 
Feb 18 13:39:01 proxy1 systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x...
Feb 18 13:39:01 proxy1 squid[2788]:  * Starting Squid HTTP Proxy squid
Feb 18 13:39:01 proxy1 squid[2788]:    ...done.
Feb 18 13:39:01 proxy1 systemd[1]: Started LSB: Squid HTTP Proxy version 3.x.
Feb 18 13:39:01 proxy1 squid[2831]: Squid Parent: will start 1 kids
Feb 18 13:39:01 proxy1 squid[2831]: Squid Parent: (squid-1) process 2838 started

Proxy サーバー構築のために squid.conf を編集する

まず、デフォルトの squid.conf ファイルをバックアップします。

sudo cp /etc/squid/squid.conf /etc/squid/squid-origin.conf

次に、設定ファイル squid.conf を以下のように編集、追記します。

#http_access deny all
 
forwarded_for off
 
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
 
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all

diff は以下のとおりです。

$ diff /etc/squid/squid-origin.conf /etc/squid/squid.conf
1188a1189,1192
> # Alow my server's host
> acl myhost src xxx.xxx.xxx.xxx/255.255.255.255
> http_access allow myhost
> 
1599c1603
< http_port 3128
---
> http_port 13128
5156a5161,5163
> request_header_access X-Forwarded-For deny all
> request_header_access Via deny all
> request_header_access Cache-Control deny all
5507a5515
> visible_hostname myhostname.com
7621a7630
> forwarded_for off

squid.conf ファイルの編集が完了したら、squid リロードして設定を反映させれば完了です。

service squid reload

あとは、なんかしらの方法で Proxy サーバー経由でアクセスできてることを確認しましょう。

よき Proxy ライフをお過ごしください!

参考情報

検索順位チェックツール Serposcope で使える CAPTCHA 突破サービス価格比較

検索順位チェックツール Serposcope で使える CAPTCHA 突破サービスの価格を比較しました。

Serposcope

CAPTCHA 突破サービス価格比較

de-captcher.com

de-captcher.com

The price is $2 for 1000 images. We accept payments from $10.

ということで、CAPTCHA 画像 1000 枚を突破するのに $2 かかるようです。

deathbycaptcha.com

deathbycaptcha.com

Starting from an incredible low price of $1.39 ($0.99 for Gold Members !) for 1000 solved CAPTCHAs.

ということで、CAPTCHA 画像 1000 枚を突破するのに $1.39 かかるようです。

anti-captcha.com

anti-captcha.com

Starting from 0.7USD per 1000 images, depending on your daily upload volume

ということで、CAPTCHA 画像 1000 枚を突破するのに $0.7 かかるようです。

CAPTCHA 突破サービスの費用試算

約 3000 キーワードを Desktop/Mobile の2デバイスで、毎日検索順位をチェックすることを考えて試算すると、

3000 keywords * 2 devices * 30 days = 180000
180000 / 1000 images = 180
$0.7 * 180 = $126 (per 1month)

毎月 $126 かかる計算になりました。実際には毎回 CAPTCHA が表示されるわけではないので、こんなに費用かからないはずですけど。

CAPTCHA 突破サービス比較まとめ

どのサイトも胡散臭さ満載ですね(笑)

手始めに少ロットで最安値だった anti-captcha.com を使ってみたところ、ちゃんと CAPTCHA を突破してくれました。

突破する CAPTCHA 数が多い場合は、ボリュームディスカウントもあるみたいなので使用量によってもっとも安いサービスを利用したいですね。

ポモドーロテクニックを Toggl アプリで実践してる

ポモドーロテクニック、ずっと食わず嫌いしていたんですが「SOFT SKILLS ソフトウェア開発者の人生マニュアル」という本でオススメされていたので、実践してます。

ポモドーロタイマーアプリは Toggl がオススメ

ポモドーロテクニックを試すには何かしらアプリが必要でいろいろと使ってみました。色んなアプリがあるんですが、使いやすいアプリがほとんどなくて諦めかけていたところ、時間管理ツール「Toggl」の公式アプリの設定を変更すると、ポモドーロテクニックを導入することができることを知り、試してみました。

元々、Toggl を利用していたのでそのままポモドーロテクニックを導入できるのは嬉しい限りです。

Toggl Mac アプリの設定

Chrome ブラウザからなら chrome://extensions/?options=oejgccbfbmkkpaidnkphaiaecficdnfn にアクセスすると設定画面を開くことができます。

Toggl ChromeExtension

もしくは、Chrome メニューに Toggl アイコンを表示させていれば、そこから歯車アイコンをクリックして設定画面を開くこともできます。

PomodoroTimer Toggl ChromeExtension

Toggl Mac アプリの設定

TogglDesktop Preferences

ショートカットキー Command + , もしくは「Preferences…」をクリックして、設定画面を開きます。

PomodoroTimer TogglDesktop Preferences

Preferences にて、以下の2つの項目を設定します。

  • Pomodoro timer: タスクに取り組む時間です。デフォルトは 25 分です。
  • Pomodoro break: 休憩時間を設定できます。デフォルトは 5 分です。

結論: ポモドーロテクニックはメリットが多そう

ポモドーロテクニック、よいです。思ってた以上に作業が捗ります。

今までは、一気に集中して仕事して夕方に疲弊してるということがあったんですが、それが無くなり、疲れにくくなりました。

使い慣れた Toggl アプリでポモドーロテクニックを実践できてるってのも個人的にはプラスに働いてます。

検索順位チェックツール Serposcope で無料 Proxy を利用してみたけどダメだった

検索順位チェックツール Serposcope で無料 Proxy を利用してみましたが CAPTCHA が頻出しまくって全く使いものになりませんでした。

Serposcope

ログファイル /var/log/serposcope/*.log に以下のような CAPTCHA を検知したログが大量にでてました。

[google-0] INFO  c.s.s.s.g.s.GoogleScraper - GOT status=[302] exception=[none]
[google-0] DEBUG c.s.s.s.g.s.GoogleScraper - captcha form detected via proxy:http://144.217.158.153:3128/

無料プロキシは似たような使い方をされているサーバーがほとんどだと思うので、該当 IP アドレスは Google から警戒されているのかもしれませんね。

検索順位チェックツール Serposcope を Ubuntu にインストールする手順

検索順位チェックツール Serposcope を Ubuntu にインストールしたので手順をご紹介します。

Java のインストール

事前に Java をインストールしておきましょう。

Serposcope のダウンロード

まず、DOWNLOAD Ubuntu / Debian serposcope の URL をコピーして wget でインストールファイルをダウンロードします。

wget https://serposcope.serphacker.com/download/2.6.0/serposcope_2.6.0_all.deb

Serposcope のインストール

dpkg -i で Serposcope の deb パッケージをインストールします。

sudo dpkg -i serposcope_2.6.0_all.deb

Serposcope のインストール確認

service コマンドでインストールされているか確認しておきます。

service serposcope
Usage: /etc/init.d/serposcope {start|stop|restart|status}

Serposcope の起動

service コマンドで Serposcope を起動します。

service serposcope start

念のため service status で起動してるか確認しておきます。

service serposcope status
● serposcope.service - LSB: serposcope rank checker
   Loaded: loaded (/etc/init.d/serposcope; bad; vendor preset: enabled)
   Active: active (running) since Wed 2017-02-15 10:52:09 UTC; 52s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 8785 ExecStart=/etc/init.d/serposcope start (code=exited, status=0/SUCCESS)
    Tasks: 24
   Memory: 158.0M
      CPU: 8.843s
   CGroup: /system.slice/serposcope.service
           └─8809 /usr/lib/jvm/java-8-oracle/bin/java -Dserposcope.conf=/etc/serposcope.conf -jar /usr/share/serposcope/serposcope.jar
 
Feb 15 10:52:07 serposcope systemd[1]: Starting LSB: serposcope rank checker...
Feb 15 10:52:09 serposcope serposcope[8785]: Starting : serposcope...  - Success
Feb 15 10:52:09 serposcope systemd[1]: Started LSB: serposcope rank checker.

http://your_ip_address:7134/ にアクセスして、アカウント作成、ログインできれば serposcope のインストールは完了です。

参考情報

Ubuntu 16 に Java 8 をインストールする方法

Ubuntu 16.04.1 x64 に Java 1.8.0_121 をインストールしたので、手順をご紹介します。

以下のコマンドを実行すれば Java のインストールまで完了できます。

sudo apt-get -y install software-properties-common
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer

Java のバージョンを確認して、インストールされたことを確認して完了です。

java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

ちなみに、今回 Ubuntu に Java をインストールした目的は serposcope を設置するためです。

参考情報

無料で使える WordPress キャッシュプラグイン比較

WordPress のキャッシュプラグインを無料で使えるものに絞って比較してみました。

キャッシュプラグインを選ぶ前提

当サイトは Nginx, PHP-FPM の構成で WordPress を運用しています。

WordPress, Nginx, PHP-FPM などの設定を自分でカスタマイズできるエンジニア目線で、キャッシュプラグインを選定しました。

比較したプラグイン

  • W3 Total Cache
  • WP Fastest Cache
  • WP Super Cache

W3 Total Cache

結論としては、W3 Total Cache 一択だと考えてます。

メリットは、PC・モバイルのそれぞれ別のテーマでキャッシュできるところです。

デメリットは、Nginx の設定をちゃんと理解しておかないと扱えないところです。

WP Fastest Cache

WP Fastest Cache は初心者に人気なキャッシュプラグインとして取り上げているサイトが多いみたいです。

メリットは、取り扱いが簡単なところです。

デメリットは、機能が一部有料なところです。その一部有料の機能に、モバイル版をキャッシュする機能が含まれています。

WP Super Cache

僕は以前 WP Super Cache を利用していました。

メリットは、老舗のキャッシュプラグインなのでネット上に情報がたくさんある点でしょうか。

デメリットは、モバイル対応がプラグイン任せで好きなテーマが利用できない点ですね。

Google がモバイルファーストインデックスの導入予定を発表して、モバイル対応をしないといけないなと思ったタイミングで、モバイル対応の機能が乏しいことが気になり W3 Total Cache に移行しました。

まとめ

W3 Total Cache が管理画面も使いやすく、PC・モバイルのどちらも好きなテーマを設定できるのでオススメです。W3 Total Cache の設定方法については近々、公開予定です。

キャッシュプラグインについて一言いっておきたい WordPress ユーザの方、質問や異論反論はコメント欄にてお願いします。

iftop を Mac にインストール

iftop を Mac にインストールする手順をご紹介します。

$ brew install iftop

なぜか brew install しただけでは iftop コマンドへの path が通ってないので、/usr/local/bin/ 以下にシンボリックリンクを作成します。

$ ln -s /usr/local/Cellar/iftop/1.0pre4/sbin/iftop /usr/local/bin/iftop
$ which iftop
/usr/local/bin/iftop
$ iftop -h
iftop: display bandwidth usage on an interface by host
 
Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
                               [-F net/mask] [-G net6/mask6]
 
   -h                  display this message
   -n                  don't do hostname lookups
   -N                  don't convert port numbers to services
   -p                  run in promiscuous mode (show traffic between other
                       hosts on the same network segment)
   -b                  don't display a bar graph of traffic
   -B                  Display bandwidth in bytes
   -i interface        listen on named interface
   -f filter code      use filter code to select packets to count
                       (default: none, but only IP packets are counted)
   -F net/mask         show traffic flows in/out of IPv4 network
   -G net6/mask6       show traffic flows in/out of IPv6 network
   -l                  display and count link-local IPv6 traffic (default: off)
   -P                  show ports as well as hosts
   -m limit            sets the upper limit for the bandwidth scale
   -c config file      specifies an alternative configuration file
   -t                  use text interface without ncurses
 
   Sorting orders:
   -o 2s                Sort by first column (2s traffic average)
   -o 10s               Sort by second column (10s traffic average) [default]
   -o 40s               Sort by third column (40s traffic average)
   -o source            Sort by source address
   -o destination       Sort by destination address
 
   The following options are only available in combination with -t
   -s num              print one single text output afer num seconds, then quit
   -L num              number of lines to print
 
iftop, version 1.0pre4
copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors

以上です。