カテゴリー : 2017年 2月

[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 | SEO 順位チェックツール

  • de-captcher.com
  • deathbycaptcha.com
  • anti-captcha.com

の3つの CAPTCHA 突破サービスについて価格比較した内容をご紹介します。

続きを読む

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

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

toggl

続きを読む

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

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

Serposcope | SEO 順位チェックツール

続きを読む

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

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

Serposcope | SEO 順位チェックツール

続きを読む

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

以上です。

ssh 公開鍵・秘密鍵を作成するとき ssh-keygen で使ってるオプション

ssh 公開鍵・秘密鍵を作成するときに ssh-keygen コマンドで使っているオプションをご紹介します。

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/example.com -C who@example.com
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/yourname/.ssh/example.com.
Your public key has been saved in /Users/yourname/.ssh/example.com.pub.
The key fingerprint is:
SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o.               |
|....o            |
|oEo=.o   .       |
|=.B.o.oo+        |
|=o.* *o.So       |
|=oo + =o.        |
|=... = .         |
|+*..o .          |
|+B*.             |
+----[SHA256]-----+

-t 鍵タイプを指定する(rsa/dsa)
-b 鍵の長さを指定する
-f 出力ファイルを指定する
-C 新しいコメントを追加する

$ ssh-keygen -l -f ~/.ssh/example.com
4096 SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com (RSA)

-l 公開鍵の情報(種別、指紋、コメントなど)を確認する

僕個人の判断としては、2048bit RSA鍵で2030年まで戦えるらしいので当分それでいいと思っています。

という意見があるので、これで良しとしてます。

参考情報