WordPressをお客様に納品する場合など、最初に仮ドメインで設置をして、公開のタイミングで本ドメインに切り替えるという作業をよく行います。

それ以外にも、WordPressが動いているサーバーのドメインを変更しなくてはならなかったり、ステージングサーバーから公開サーバーにデータコピーをしたりと、WordPressを移設して動かすタイミングって、割と多かったりします。

移設の問題点

移設を行う場合の一番の問題点は、公開URLが変更になることです。

  1. テーマファイルのCSSやJavaScriptが読み込まれないためデザインが崩れる
  2. 公開URLが正しくないとWordPressの管理画面にログインができない
  3. 記事中に設定したリンクや、メディア(画像やファイル)が全てリンクが切れてしまう

1. 2. については公開URLの設定さえ元に変更してしまえば問題無いのですが、一番の問題は 3. で、記事中に設定した内部リンクやら、画像やら添付ファイルやらが全てリンク切れを起こしてしまうことです。

Search Regexという正規表現などで記事を検索してURLを置換できるツールなどが、まず考えつく1つの方法です。

しかしこのSearch Regexは、通常の投稿や固定ページの内容は置換できますが、カスタム投稿は検索できません。(カスタマイズすれば可能ですが)

またなにより大きな問題として、このプラグインではカスタムフィールドに入力された内容は対象外となってしまうため、カスタムフィールドに画像のURLや記事のURLなどが入っている場合、こちらを修正することができません。

CONTINUE READING

スクリーンショット 2013-10-07 2.37.08

Logicoolから発売されているゲーミングマウスG700sは通常のマウスと違い副ボタンが7つも存在しており、デザインにさえ目をつぶってしまえば(笑)、大変に便利なマウスです。

この副ボタンにはアプリケーション毎に各種ショートカットや、メディアキーなどの機能を割り当てることができます。

例えばブラウザを利用しているときには「ボタン4で履歴を戻り、ボタン5で履歴を進む動作を行う」。
PHPStormを使っている時には「ボタン4で切り取り、ボタン5で貼り付け、ボタン6でファイル検索ウィンドウを立ち上げ、ボタン7でクラス検索を立ち上げる」といった使い方ができます。
CONTINUE READING

SublimeTextは一度使い始めたら手放せなくなるほど軽くて使い安く、プログラマーだったら絶対に入れておいて損は無いテキストエディタです。

僕は普段はPHPStormでプログラミングをしますが、CSSやJavaScript、PHPなどをちょこっと編集する際はほとんどコレを利用しています。

しかしながらこのエディタ、起動時に前回開いたファイルがそのままタブとして開かれてしまい、何となく気持ち悪い。

そういうときは Preferences > Settings - User を開き、設定値として下記を追加します。

{
	"hot_exit": false,
	"remember_open_files": false,
}

ポイントなのは hot_exit も合わせて false にすることで、remember_open_files のみを false にしただけでは、動作に変わりがありません。

どちらも false とすることで、次回から起動した際にブランクの状態で開かれるようになります。

MacでのテキストエディタといえばSublime Textを利用なさっている方も多いのでは無いでしょうか?

Sublime Textはバージョン2が主流ですが、最近になってバージョン3がパブリックベータとしてリリースされ、その動作の軽さに惹かれて早速インストールをしました。

Sublime Text – Download

Sublime Textは非常に軽くて使い安い便利なテキストエディタですが、唯一の欠点としてShitf JISやEUCなどの日本語のエンコーディングに対応していません。
昨今のWeb開発では滅多にお目にかかりませんが、CSVファイルや古いHTMLデータを開く場合などにはどうしても必要になります。

Sublime TextではConvertToUTF8というプラグインがリリースされており、こちらを利用することでShiftJISなどのエンコードが利用できるようになります。

seanliang/ConvertToUTF8 · GitHub

MacOS版のSublime Text 3で発生する問題

しかしながらMacOS版とLinux版に限り、Sublime Text 3ではConvertToUTF8プラグインが正しく動作しません。

これはプラグインの作者も注意事項として記載していて、こちらを解決するには別途プラグインをインストールする必要があります。

** For Linux users: ConvertToUTF8 relies on several dynamic libraries which are missing in embedded version of Python of Sublime Text 2 and 3. This plugin can not work fully until you install them manully.

** For OS X users: Sublime Text 3 uses an embedded Python which is facing the same problem as Linux version.

** I’ve reported this problem to Jon but did not get any response yet, so I will create extra plugins to solve it. If you are eager to use this plugin before they are released, please contact me for more information.

解決するためのプラグイン

Codecs33というプラグインを下記のリポジトリからダウンロードして解凍し、手動でPackagesディレクトリに設置します。

seanliang/Codecs33 · GitHub

設置方法

Sublime Text 3のPreferencesから、Browse Packagesを選択すると、ファインダーでPackagesディレクトリが開きます。
その直下に、Codecs33という名前で解凍したディレクトリを設置します。

解決

これで、Sublime Text 3でも正しくConvertToUTF8プラグインが利用可能になります!

スクリーンショット 2013-08-13 17.15.49

HTML5のVideoプレイヤーとFlashのビデオプレイヤーを併用し、いろいろな環境に合わせて動画再生を行える非常に便利なスクリプト「Video-js」。

私も多々利用させて頂いて居るのですが、ここにきてタイトル通りのバグ「ループ再生の2回目以降で、再生ボタンが表示されっぱなしになる」に遭遇し、解決したのでその方法を記載します。

まず、バグが発生する環境は下記の通り。

  • Video-jsのFlashプレイヤーで再生をしている
  • autoplayオプションをON
  • loopオプションをON
  • controlsオプションをON

HTML5のプレイヤーでも発生するかは未検証です。

原因

Video.jsでは動画の再生・停止などに合わせイベントを発行しており、内部の動作についてもそのイベントに依存して制御を行っているようです。

今回の問題はループ再生の場合にのみ発生するのですが、その発生機序としては下記のようなものでした。

  1. 1回目の動画再生が開始:playイベントが発生
  2. playコールバックの処理(1):「再生ボタン」が「display:none」になる
  3. 1回目の動画再生が終了:endedイベントが発生
  4. endedコールバックの処理(1):「ループ再生なら、再度最初から再生」という処理が実行される
  5. 2回目の動画再生が開始:playイベントが発生
  6. playコールバックの処理(1):「再生ボタン」が「display:none」になる
  7. endedイベントに登録された2つめ以降のコールバックが発生
  8. endedコールバックの処理(2):「再生ボタン」を再表示させる

要はコールバックの登録の順番が悪いというもので、endedイベントの最初のコールバックで再生処理を行ってしまっているものだから、endedイベントに登録された2個目以降のコールバックが、なぜかplayイベントの次に実行されるという訳のわからない状態に。

というわけで、このあたりのコードをさくっと修正すればバグも解消します。

コード修正

video.js(version 3.2.0現在)の926行目付近:

  init: function(player, options){
    this._super(player, options);

    player.addEvent("play", _V_.proxy(this, this.hide));
    player.addEvent("ended", _V_.proxy(this, this.show));
  },

下記のように改善します。

  init: function(player, options){
    this._super(player, options);

    player.addEvent("play", _V_.proxy(this, this.hide));
    
    if (!player.options.loop) {
      player.addEvent("ended", _V_.proxy(this, this.show));
    }
  },

要は「ループ指定がされていない場合のみ、再生終了時にボタンを再表示してねん」という処理に変更をかけます。

これで晴れて2回目以降の再生でも、再生ボタンがしっかり消えたままになります。