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 アプリでポモドーロテクニックを実践できてるってのも個人的にはプラスに働いてます。