Windows10でスリープさせる為のショートカットキー

WIndows10を使用している場合、下記のショートカットキーにて素早くPCのスリープが行えます。

Win+X → U → S

各アルファベットの意味は、”eXecute -> shUtdown/sleep -> Sleep”です。

ちなみにシャットダウンの時は、以下の通りです。

Win+X → U → U

ファイアーエムブレムヒーローズはCocos2d-x製? 使用ライブラリの一覧

任天堂より2/2にファイアーエムブレムヒーローズがリリースされました。

このアプリで使用されているオープンソースライブラリの一覧を紹介します。

ファイアーエムブレムヒーローズの使用ライブラリ一覧

WebP
PicoJSON
uripaser - RFC3986 URI parsing library
SS5Player For Cocos2d-x
liboff
libogg
Tremor
Cocos2d-x
POCO C++ Libraries
Protocol Buffer
OpenSSL
sysutsname.h
GTMNSData+zlib.h
GTMDefines.h
Cricket Audio
Android related

上記の、使用オープンソースライブラリの一覧はアプリを起動してフッタメニューから下記の遷移で確認できます。
その他->FAQ等->このアプリについて->権利表記

この一覧を見ると、キャラクターアニメーションは、SpriteStudioを使用して作られているようです。また、音声制御はCricket Audioを使っていて、このライブラリは他にも、消滅都市、ユニゾンリーグ、LINEタワーライジング等のアプリでも使われています。




ファイアーエムブレム MUSIC COLLECTION ピアノバージョン


ファイアーエムブレムの名曲たちが、ピアノバージョンで2月22日に発売予定です。


FIRE EMBLEM MUSIC COLLECTION : PIANO 〜Faith & Engagement〜

【収録曲】
「戦闘マップ1 プレイヤー側の攻撃」“暗黒竜と光の剣"より
「あなたへ続く道」“if"より
「はるかなる理想郷」“封印の剣"より
「Victory is Near」“蒼炎の軌跡"より
「全体マップ3章(解放戦争:それぞれの道)」“外伝"より
「出逢い」“外伝"より
「Father's Back」“蒼炎の軌跡"より
「セリスのテーマ/巡る想い」“聖戦の系譜"より
「リーフ軍、勝利を求めて リーフ」“トラキア776"より
「「I」~安」“覚醒"より
「神竜伝説(A)」“紋章の謎"より
「混沌の落とし子ユンヌ」“暁の女神"より
「貴様らが…姉さんの言葉を語るな! 」“覚醒"より
「光射す彼方へ」“if"より
「過甚の神」“暁の女神"より
「if~ひとり思う~」“if"より

収録曲の視聴はこちらから↓



FIRE EMBLEM MUSIC COLLECTION : PIANO

[WordPress]動画ヘッダーの自動再生を止める方法

WordPressではver.4.7から動画ヘッダーというカスタムビデオヘッダの機能があります。
これを使用すると、記事設置された動画に対する機能ですが、動画が自動で再生開始されていまします。

これを自動再生させたくない場合は、以下のJavaScriptコードをページに記述しておけばよいです。
仕組みとしては、ページがロードされたときにwp-custom-header-videoのidがあるタグを探し、autoplay=”false”に設定を差し替えています。

$( document ).ready( function() {
    $( document ).on( 'wp-custom-header-video-loaded', function() {
        $("#wp-custom-header-video").attr('autoplay',false);
    });
});

this post is licensed under cc by-sa 3.0 http://wordpress.stackexchange.com/questions/254234/

Windows開発PCのセットアップ手順メモ

choco.exeのインストール


  • admin権限で実行が必要

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https:/ /chocolatey.org/install.ps1'))"
SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

chocoから各種ツールのインストール


choco install lauchey -y
choco install cmder -y
choco install visualstudiocode -y

choco install pandoc
choco install php
choco install sourcetree
choco install tortoisegit
choco install virtualbox
rem choco install awscli
rem choco install mp3tag
rem choco install chrome

VisualStudio Codeの設定変更


configの設定変更


{
    "window.zoomLevel": 1,
    "editor.renderIndentGuides": true
}

extensionのインストール


ext install html-snippets
ext install html-css-class-completion

[WordPress]ダッシュボードへリンク集を出すプラグインを自作する

WordPressを使っているとダッシュボードにちょっとした情報を表示したくなる場合があります。

そこで、WordPressにログインした直後に表示される管理画面へリンク集を設置できるプラグインを作成しました。実際は、指定されたHtmlを表示しているだけなので、リンク集に限らず好きな情報を出力できます。

「プラグインの自作」と書くと敷居が高そうですが、function.phpに2つ処理を書くだけなので割と簡単に作成できます。phpのプログラムを書いた人であればすぐわかるレベルですし、プログラムの経験がなくてもhtmlさえ分かれば本記事を元に好きな内容を表示させるようなカスタマイズも簡単です。

Widgetプラグインの作成方法


プラグインのプログラムを準備する


まずは下記の内容でfunction.phpを作成します。

プログラム中にある、$htmlStr = <<<EOTの後に出てくるHtmlがダッシュボードに出力されます。
サンプルで用意したHtmlはGoogleアナリティクスや、アフィリエイトサイトへのリンク集になっています。

<?php
/*
Plugin Name: 0001_nano-admin-dashboardWidget
Copyright: nano
Description: ダッシュボードにリンク集を出力します
Version: 1.0.0
*/

// プラグインを登録
add_action('wp_dashboard_setup', 'nano_dashboard_widgets');
function nano_dashboard_widgets() {
    wp_add_dashboard_widget('nano_dashboard_widgets', 'リンク集',  'nano_dashboard_widget_linkList');
}

// リンク集を表示するウィジット
function nano_dashboard_widget_linkList() {
    $htmlStr = <<<EOT
        <ul style="line-height:1.5rem">
            <li>
                <a href="https://www.google.com/analytics/web">Googleアナリティクス</a>
            </li><li>
                <a href="https://affiliate.amazon.co.jp/">Amazonアソシエイト</a>
            </li><li>
                <a href="https://affiliate.rakuten.co.jp/reports/">楽天アフィリエイト</a>
            </li><li>
                <a href="http://pub.a8.net/a8v2/asResultReportAction.do?action=ud">A8.net</a>
            </li><li>
                <a href="https://www.valuecommerce.ne.jp/">バリューコマース</a>
            </li><li>
                <a href="http://admax.shinobi.jp/">忍者AdMax</a>
            </li>
        </ul>
EOT;

    echo $htmlStr;
}

これをWordPressをインストールしたフォルダの、wp-content\plugins\0001_nano-admin-dashboardWidgetにコピーします。

作ったプラグインを有効化する


WordPressログインし、プラグインページに移動します。一覧にプラグイン0001_nano-admin-dashboardWidgetが追加されているので、これを有効化します。
プラグインの有効化 ここで表示されるプラグイン名や、説明文、バージョン番号は先ほど作ったfunction.phpの先頭にコメントとして記載されています。

<?php
/*
Plugin Name: 0001_nano-admin-dashboardWidget
Copyright: nano
Description: ダッシュボードにリンク集を出力します
Version: 1.0.0
*/

ダッシュボードに表示されていることを確認する


有効化が完了したらダッシュボードページに遷移します。以下のように作成したプラグインが表示されていれば成功です。
プラグインの有効化
単なるリンク集ですが、これでも正式なプラグインですので表示オプションでウィジットの表示ON/OFF制御なども行えます。
表示オプション

ダッシュボードに複数のウィジットを表示させたい時は?


以下のような形でfunction.phpを書き換えると、1つのプラグインに複数のウィジット定義を行えます。
これで、ダッシュボードに表示させるウィジットの数をいくつでも増やせます。

<?php
/*
Plugin Name: 0001_nano-admin-dashboardWidget
Copyright: nano
Description: ダッシュボードにリンク集を出力します
Version: 1.0.0
*/

// プラグインを登録
add_action('wp_dashboard_setup', 'nano_dashboard_widgets');
function nano_dashboard_widgets() {
    wp_add_dashboard_widget('nano_dashboard_widgets',  'リンク集(分析系)',   'nano_dashboard_widget_linkList');
    wp_add_dashboard_widget('nano_dashboard_widgets2', 'リンク集(アフィリエイト系)',  'nano_dashboard_widget_linkList2');
}

// 分析系リンク集を表示するウィジット
function nano_dashboard_widget_linkList() {
    $htmlStr = <<<EOT
        <ul style="line-height:1.5rem">
            <li>
                <a href="https://www.google.com/analytics/web">Googleアナリティクス</a>
            </li>
        </ul>
EOT;

    echo $htmlStr;
}

// アフィリエイト系リンク集を表示するウィジット2
function nano_dashboard_widget_linkList2() {
    $htmlStr = <<<EOT
        <ul style="line-height:1.5rem">
            <li>
                <a href="https://affiliate.amazon.co.jp/">Amazonアソシエイト</a>
            </li><li>
                <a href="https://affiliate.rakuten.co.jp/reports/">楽天アフィリエイト</a>
            </li><li>
                <a href="http://pub.a8.net/a8v2/asResultReportAction.do?action=ud">A8.net</a>
            </li><li>
                <a href="https://www.valuecommerce.ne.jp/">バリューコマース</a>
            </li><li>
                <a href="http://admax.shinobi.jp/">忍者AdMax</a>
            </li>
        </ul>
EOT;

    echo $htmlStr;
}

参考リンク


今回のプログラムでは、WordPressに用意されているAPIの中で、wp_add_dashboard_widget()メソッドを利用しています。wp_add_dashboard_widgetの仕様は下記のページを参考にしてください。

Markdown中級者を目指す人が知っておくべき27の知識

工学社から出ている書籍、はじめてのMarkdown―軽量マークアップ言語の記法と使い方を読了しました。


正直Markdownの書式くらいならネットで十分だと思っていたのですが、改めて知識を整理でき意外と良い本でした。「Markdownを普段何となく使っているけど、時々、改行などが思ったように反映されない…」みたいな人は一度読んでみると色々気づきがあるかと思います。

markdownエディタについて


本書では、エディタとしてMarkdown#Editorというソフトがお勧めしている。

…この本はちょっと前の出版なので、現在ならVisual Studio Codeが便利。
Visual Studio Codeだと、拡張子を*.mdでファイルを作り、”Ctrl+K V”でプレビュー画面を表示できる。ショートカットキーを忘れたときは、F1キーを押して”markdown”と入力すればリストとショートカットキーが表示される。

本文の段落分けについて


  • 本文は通常pタグで囲まれる
  • 文章を別の段落にしたい(2つのpタグに分けたい)場合は、markdownファイル内で改行を2連続で入れ、空行をはさむ
  • brタグを入れたい場合は、行末に半角スペースを2つ入れて改行する
    複数回改行したい場合は、”半角スペース”2つ+改行文字”の行を作る

引用文について(blockquoteタグ)


  • インデントをつけるか、行頭に”>”文字を入れる
  • blockquoteの中で改行したい場合は、”半角スペース”2つ+改行文字”
  • “>>”でblockquoteをネストできる

  • 二重にネストしたblockquoteから戻るには、”>”だけの行が必要


以下のようにすれば…

> 1行目
>> 1.1行目
>> 1.2行目
>
> 2行目

こう表示される

1行目

1.1行目
1.2行目


2行目


箇条書きについて(liタグ)


  • 行頭に”* “を入れればリストを作れる
  • “*”記号の後ろには半角スペースが必要
  • 本文とリストの間(リストを始める手前)には空行が必要
    (本文のすぐ下の行に “* xxxx”を書いてもリストとみなされない)

箇条書きについて(olタグ)


  • 数字+ピリオド+半角スペース”で、連番付きの箇条書きを作ることができる
  • 一覧の列挙中に空行を入れると、連番が最初に戻る
  • 一覧の途中で改行したいときは、行末に半角スペースを2つ入れる
  • 箇条書き以外で行頭に、”1. “を持ってきたい場合は、”1\. “でエスケープできる
  • さらに、”\”マーク自体を表示させたいときは、”\\”と2回重ねる
  • 箇条書きに見出しと本文を書く際に、見出しだけ装飾したい場合は下記のように書く

1. **見出しの1つ目**  
    1つ目の内容説明  
    1つ目の内容説明2行目

1. **見出しの2つ目**  
    2つ目の内容説明  
        
    2つ目の内容説明2行目  

1. **見出しの3つ目**  


1. 見出しの1つ目

1つ目の内容説明

1つ目の内容説明2行目

  1. 見出しの2つ目

    2つ目の内容説明

    2つ目の内容説明2行目

  2. 見出しの3つ目


強調、イタリック、下線について


  • 2段落またいで、強調させることはmarkdown上ではできない
    行いたい場合はhtmlタグを直接書くしかない

  • “1*2*3=6″など、数式で掛け算記号を使いたいときに、誤って強調のマークとみなされる場合がある
    このような場合は、アスタリスクの前に円マークを入れて”\*”とすればよい


画像について(imgタグ)


  • ![altのタイトル](image_url_filename) の形式で、画像を埋め込める
  • !,[,],(,)の各記号の前後に空白を入れると正しく認識しないので注意
  • “altのタイトル”の部分は省略してもよい
  • 手前に文章があると、同じ行に表示される。改行したい場合は、文章の最後に半角スペース2個を入れるとよい

ソースコードの埋め込みについて(codeタグ)


  • 埋め込むコードブロック全体をインデントするのが最も簡単
  • インデントする際に、タブとスペース4つを混ぜないように注意
  • コードブロックを終わらせるには、インデントのない改行を入れる
  • 文章中へecho "hello<br />";のような形でコードを埋め込む場合は、逆クォートで囲む
  • 逆クォートで囲んだコード中に、export STIME=``date``のような形で逆クォートを出したい場合は、逆クォートを2回書く


はじめてのMarkdown―軽量マークアップ言語の記法と使い方 (I・O BOOKS)

[WordPress]REST APIを使って記事の取得を行う

WordPress4.7から取り込まれたREST API v2を使った、記事へのアクセス方法です

記事の検索


直近の記事10件を取得


http://example.com/wp-json/wp/v2/posts

  • トップページのの末尾に”/wp-json/wp/v2/posts”を付ければ、記事がjson形式で取得できます

2ページ目を取得(11~20件目)


http://example.com/wp-json/wp/v2/posts?page=2

  • page=nパラメータを付ければnページ目の値が取得できます

1度に20件取得する(最大100まで指定可能)


http://example.com/wp-json/wp/v2/posts?per_page=20

  • 1ページ当たりの件数も指定可能ですが、指定できるのは1~20の値のみです

記事取得の開始位置オフセットを指定


http://example.com/wp-json/wp/v2/posts?offset=6

  • この為、?per_page=5&page=4と、?per_page=5&offset=15は同じ意味です
    (16件目から5件分のデータを取得します)

トータルで何ページ分あるか


トータルで何ページ分あるかは、jsonの応答データを見ても分からないが、HTTPヘッダで把握できる。

  • X-WP-Total: Postが全部で何件あるか
  • X-WP-TotalPages: 何ページあるか(1ページの件数はper_pageで指定)

[WordPress] Rest APIに関する情報サイト一覧

[WordPress] Rest APIに関する情報サイト一覧

オフィシャルのドキュメント


REST API Handbook

予備知識


WP REST API のドキュメント内の用語集を簡単に翻訳する
基本的な用語の説明

WP REST API ドキュメント Discovery
既に存在するREST API対応のWordPressで、何のAPIが使えるかの調べ方。

WordPress 4.7リリースでの仕様変更


wordpress 4.7でREST-APIの仕様が変更になったので合わせる

WordPress 4.7リリース前の記事


WP REST APIをいろいろ触ってみるハンズオン@WordBench東京のメモ書き
WordBench東京による勉強会のまとめ

WordBench東京 3月ハンズオン
上の勉強会のスライド
導入事例がある

WordPress REST APIで投稿の取得から新規投稿を行う
REST APIの基本的な導入と、認証・投稿処理までの説明

WordPressの新着記事をJSON形式で取得し外部サイトで表示する方法
RESTによる基本的な記事の取得と、PHPによるjsonデータの加工処理

WordPress REST APIにOAuth1.0aで認証して投稿する – KayaMemo
PHPからOAuth認証を行う方法

WordPress REST API で、カスタム投稿タイプなどの情報を取得する

WP REST API v2 でデータを取得して新着情報をjqueryで表示する方法

WORDPRESS REST APIを使った投稿と更新
REST APIを使って記事を投稿する方法

WP REST APIで投稿を追加する

古い情報(WP REST API v1を元にしたドキュメント)


WP REST API を使ってみる(前編)

JSON REST API (WP API) プラグインを利用して ブログを API 化したり、そこから情報を取得して表示したり
2014年の記事なので古い

[WordPress]Lightningテーマでパンくずリストに記事名を出さない

WordPressのBootstrapベースのテーマである、Lightningでパンくずリストのカスタマイズを行います。

個別記事ページにを表示させた場合、パンくずリストの末尾に記事タイトルが表示されます。PCで表示したばあいは違和感がないのですが、スマホで表示させたときにタイトルをパンくずリストにタイトルが表示されているとファーストビューに表示される情報量が少なくなってしまいます。またパン屑リストのすぐ下に、h1タグの記事名が出るため、同じ情報が連続表示されてしまい違和感があります。

このため、パンくずリストに記事名を出さないよう修正してみます。

Lightningテーマでパンくずリストから記事タイトルを消す方法

今回改造するファイルは、module_panList.phpです。Lightningテーマでは、このファイルでパンくずリストの表示を制御しています。このファイルでは、全てのページのパンくずリスト表示をコントロールしていますが、今回回収したいのは個別記事なので、「 if ( is_single() ) 」の分岐部分を修正します。この分岐内を見ると、最後にget_the_title()で記事タイトルを取得しているため、この行をコメントアウトしてしまえばOKです。

具体的には、以下のような形でコメントアウトを行います。

変更前:

/* Post type
/*-------------------------------*/
if ( ... ) {
   ...
} else if ( is_single() ) {
   ...
   $panListHtml .= '<li><span>' . get_the_title() . '</span></li>';
} else if ...



変更後:

/* Post type
/*-------------------------------*/
if ( is_archive() || ( is_single() && !is_attachment()) ) {
   ...
} else if ( is_single() ) {
   ...
   // $panListHtml .= '<li><span>' . get_the_title() . '</span></li>';
} else if ...




Lightningテーマで個別ページからカテゴリ名を消す方法

また、上記以外に個別ページではカテゴリ名の表示が、タイトル直下とパンくずリストの両方に出てしまい、ファーストビューの表示エリアを無駄遣いしています。タイトル直下のカテゴリ名の表示についてはWordPressのフィルタでフックできるようになっているため、function.phpに下記のフィルタを追加すれば消すことができます。

下記の例では、個別ぺーじが表示されたときに限って表示を抑制させています。

// 個別記事のヘッダで、サイト名の直下にカテゴリ名を出さない
add_filter( 'lightning_pageTitHtml', 'my_lightning_pageTitHtml' );
function my_lightning_pageTitHtml( $titleHtml ) {
    if ( is_single() ) {
        return "";
    }
    return $titleHtml;
}


[WordPress]All in one SEO packでカスタムフィードからTwitterカード画像をセットする方法

WordPressでSEO対策や、Facebook/Twitterなどのソーシャルサイト向けのタグを一括設定できるプラグインとしてAll in one SEO packがあります。

このプラグインでは、OGPという記事の要約や画像などをSNSサイトへ正しく伝えるためのメタタグを容易に設定することができます。WordPressでECサイトなどを管理している場合、Twitterカードに商品の画像を表示できるためページへのアクセスアップが期待できます。OGPの仕様では「meta property=”og:image…」というメタタグでページのメイン画像を指定できます。Twitterカードの場合は、「meta name=”twitter:image”…」での管理になります。

ですが、商品の紹介ページなどでカスタムフィールドに商品画像を管理している場合、All in one SEO packプラグインのデフォルト設定ではカスタムフィールドにセットした画像が使用されません。

今回は、カスタムフィールドに設定された画像ファイル名を、All in one SEO packプラグインを使用時にog:imageやtwitter:imageに指定する方法を説明します。

All in one SEO packでog:imageにカスタムフィールドを指定する

WordPressの管理画面にログインし、左メニューの「All in one SEO -> ソーシャルメディア」をクリックします。
170102_2_1


画像設定のOG:Imageソースを選択欄を、”Image From Custom Field”に変更します。
また、「画像にはカスタムフィールドを利用する」の欄に、使用したいカスタムフィードのフィールド名を指定します。設定を行ったらページ上部にある「設定を更新」ボタンを忘れずに押してください。
170102_2_2


設定の更新が終わったら、下記のサイトでOG:Imageが正しく設定されているかを確認できます。
Twitter Card validator



また、Twitterカードは効果測定が行える分析ページが存在します。設定が終わったら、翌日に下記のページにアクセスするとツイートがどの程度拡散されたかや、クリックされた回数などを確認することができます。
https://analytics.twitter.com/

[WordPress]Jetpackの関連記事表示で3カラム表示を1カラム表示に変更する方法(Related Posts)

WordPressで多くの人が利用しているプラグインのJetpackには、関連記事を表示させる機能が用意されています。この関連記事は、特に設定をしなくても精度の高いお勧め記事を出してくれるのが便利なので利用している方も多いかと思います。

デフォルトでは3カラム表示されるのですが、これを1カラムで表示したい場合は、下記のcssを追加で記載すればよいです。2カラムで出したい場合はwidthを50%にして下さい。

#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
    width:100%;
}



また、上部の余白を削りたい場合は、下記のcssで変更できます。

#jp-relatedposts {
    margin:0;
}



関連記事に表示させる記事数を変更したい場合はfunction.phpにjetpack_relatedposts_filter_optionsフィルタ関数を記述します。下記のサンプルコードでは、記事数を4記事に増やしています。

function jetpackme_more_related_posts( $options ) {
    $options['size'] = 4;
    return $options;
}
add_filter( 'jetpack_relatedposts_filter_options', 'jetpackme_more_related_posts' );


[WinSCP]エラー対処法:”WinSCPはドラッグされたファイルがどのフォルダにドロップされたか解決できませんでした…”

WinSCPで、リモートのファイルをデスクトップなどにドラックした場合、下記のエラーがでることがあります。これは、WinSCPの設定で「一時フォルダを使用」が有効化されていないためです。
170102_0

---------------------------
エラー
---------------------------
WinSCPはドラッグされたファイルがどのフォルダにドロップされたか解決できませんでした。
通常のフォルダにドロップしていないか、シェルドラッグ拡張がインストールされていないかの
どちらかが原因です。拡張をインストールするか互換ドラッグアンドドロップモードに変更し、
ダウンロードには一時領域を使用してください。
そうすることで、どの場所にもファイルをドロップすることができます。
---------------------------



ドラックドロップによるファイルコピーを行えるようにするには、「一時フォルダを使用」を有効化すれば良いです。

WinSCPで「一時フォルダを使用」を有効にする方法


メニューより”オプション -> 環境選択”を選択します。
170102_1


左側のメニューより転送 -> ドラッグ&ドラッグを選択します。
その後、右側にある”一時ファイルを使用”にチェックを入れます。
170102_2


設定後に再度、リモートのファイルをドラッグ&ドラッグすると、下記のダイアログが表示されるので、そのまま”コピー”ボタンをクリックすればデスクトップなどへのドラッグが行えます。
170102_3

[WordPress]Ligithingテーマの記事ヘッダをカスタマイズする

WordPress向けのシンプルな、BootStrap使用テーマにLigithingがあります。今回は、Ligithingで記事ヘッダのレイアウトをカスタマイズする方法を説明します。

今回カスタマイズするヘッダは、下記画像の赤枠の部分です
170101_1


記事ヘッダのレイアウトは、個別記事/記事一覧ともに、module_loop_post_meta.phpファイルで制御しているので、このファイルを変更します。実際にカスタマイズする場合は、Ligithingテーマを直接編集するのではなく子テーマを作成してから修正してください。


記事の公開日を消す

module_loop_post_meta.phpを開き、下記の行を削除する

<span class="published entry-meta_items"><?php echo esc_html( get_the_date() ); ?></span>




最終更新日の表示を消す

module_loop_post_meta.phpを開き、下記の行を削除する

<?php    
// Post update
$meta_hidden_update = ( isset($lightning_theme_options['postUpdate_hidden']) && $lightning_theme_options['postUpdate_hidden'] ) ? ' entry-meta_hidden' : ''; ?>
 
<span class="entry-meta_items entry-meta_updated<?php echo $meta_hidden_update;?>">/ <?php _e('Last updated','lightning'); ?> : <span class="updated"><?php the_modified_date('') ?></span></span>




投稿者の表示を消す

module_loop_post_meta.phpを開き、下記の行を削除する

// Post author
<?php    
$meta_hidden_author = ( isset($lightning_theme_options['postAuthor_hidden']) && $lightning_theme_options['postAuthor_hidden'] ) ? ' entry-meta_hidden' : ''; ?>
 
<span class="vcard author entry-meta_items entry-meta_items_author<?php echo $meta_hidden_author;?>"><span class="fn"><?php the_author(); ?></span></span>




記事のカテゴリを複数設定している時、すべてのカテゴリを出す

以下のロジックを変更する

変更前:

<?php    
    $taxonomies = get_the_taxonomies();
    if ($taxonomies):
        // get $taxonomy name
        $taxonomy = key( $taxonomies );
        $terms  = get_the_terms( get_the_ID(),$taxonomy );
        $term_url	= esc_url(get_term_link( $terms[0]->term_id,$taxonomy));
        $term_name	= esc_html($terms[0]->name);
        echo '<span class="entry-meta_items entry-meta_items_term"><a href="'.$term_url.'" class="btn btn-xs btn-primary">'.$term_name.'</a></span>';
    endif;
?>



変更後:

<?php    
    $taxonomies = get_the_taxonomies();
    if ($taxonomies):
        // get $taxonomy name
        $taxonomy = key( $taxonomies );
        $terms  = get_the_terms( get_the_ID(),$taxonomy );
        foreach( $terms as $term ) {
            $term_url	= esc_url(get_term_link( $term->term_id,$taxonomy));
            $term_name	= esc_html($term->name);
            echo '<span class="entry-meta_items entry-meta_items_term"><a href="'.$term_url.'" class="btn btn-xs btn-primary">'.$term_name.'</a></span>';
        }
        echo '<br />';
    endif;
?>

[WordPress]shortcodeで記事タイトルや、カスタムフィードの内容を取得する方法

shortcodeで記事のタイトルを取得する

WordPressでは、ショートコードを使用することで、phpプログラムの出力結果を記事中に埋め込むことができます。ショートコードを提供するプラグインのメソッド内で記事のタイトルを取得したい場合、get_the_title()を使用します。

function.php

function func_showTitle() {
    return "この記事のタイトルは[" . get_the_title() . "]です";
}
 
add_shortcode('showtitle', 'func_showTitle');



記事中で[showtitle]と記載することで、記事のタイトルを表示できます。

shortcodeで記事IDやカスタムフィードの情報を取得する

shortcodeの処理内で、記事のIDを取得したい場合は、get_the_ID()メソッドを使用することで取得可能です。また、カスタムフィードの情報(wp_postmetaテーブルの内容)を取得したい場合は、get_the_ID()で取得したpost_idを引数にget_post_meta()メソッドを呼び出せば取得可能です。

下記のサンプルでは、カスタムフィードとして設定された商品名(item_name)を表示するコードです。

function func_showItem() {
    $postMeta= get_post_meta( get_the_ID() );
    $name = $postMeta["item_name"];
    return "商品名: {$name}";
}
add_shortcode('showItem', 'func_showItem');


PeaZipを使ってファイルの展開をcliからバッチ実行する

PeaZipをコマンドラインを使用してcliで展開する方法です。圧縮ファイルのフォーマットは自動で認識してくれるようです。

圧縮ファイルの情報を表示する
peazip32.exe -ext2list filename.tgz
 
圧縮ファイルを、カレントディレクトリに展開する
peazip32.exe -ext2here filename.tgz



バッチファイルにする場合は、以下のような形にしておくと、圧縮ファイルをbatファイルにドラックするだけで展開が行えます。

peazip32.exe -ext2list %1
pause
peazip32.exe -ext2here %1



また、PeaZipはポータブル版がportableapps.comから入手できます。USBメモリなどに用意しておくと便利かもしれません。

WordPressの更新で”別の更新が現在進行中です。”エラーが出るときにすべき事

「別の更新が現在進行中です」エラーが出る理由

WordPressの更新を行った際に、下記のような”別の更新が現在進行中です。”エラーが出る場合があります。
161230_2


これは、直前にWordPressの更新を行いエラーが出たとき、直後に再実行すると発生するものです。二重で更新処理が行われないようWordPressの内部でロック処理が行われています。

通常であれば、15分放置した後に再実行すれば問題なく更新が行えます。

「別の更新が現在進行中です」ロックを今すぐ解除する方法

直ぐに再実行したい場合で、MySQLのデータベースにアクセスできる場合は下記の手順でこのロックを強制的に解除できます。

まずDBにアクセスし、下記のSQLを実行してみてください。

SELECT * FROM wp_options WHERE option_name LIKE 'core_updater%';


この時、下記のようにデータが出力されれば二重実行防止のロック用データが存在します。

161230_1


このデータを削除するために、下記のSQLを実行します。

DELETE FROM wp_options WHERE option_name LIKE 'core_updater%';



データ削除後に再度WordPressの管理画面から更新を行えば、エラーが表示されずに更新が行えます。



WordPress上におけるロック処理の実装

WordPressのプログラム上、このロック処理は下記のwp-admin/class-wp-updater.phpにあるcreate_lock()で実装されています。

create_lockの呼び元はclass-core-update.phpにあり、第二引数のrelease_timeoutパラメータに”15 * MINUTE_IN_SECONDS”を指定しているので、15分のロック時間が設定されています。

// Lock to prevent multiple Core Updates occurring
$lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS );
if ( ! $lock ) {
    return new WP_Error( 'locked', $this->strings['locked'] );
}



create_lock()自体の実装は以下のような感じです。optionsテーブルに”core_updater.lock”をキーにしてロック用のレコードをinsertしていることが分かります。
ちなみにこのキーはWordPress4.5までは”core_updater.lock”ではなく”core_updater”となってるため、使用しているWordPressのバージョンによってパラメータのoption_nameは異なります。

/**
    * Creates a lock using WordPress options.
    *
    * @since 4.5.0
    * @access public
    * @static
    *
    * @param string $lock_name       The name of this unique lock.
    * @param int    $release_timeout Optional. The duration in seconds to respect an existing lock.
    *                                Default: 1 hour.
    * @return bool False if a lock couldn't be created or if the lock is no longer valid. True otherwise.
    */
public static function create_lock( $lock_name, $release_timeout = null ) {
    global $wpdb;
    if ( ! $release_timeout ) {
        $release_timeout = HOUR_IN_SECONDS;
    }
    $lock_option = $lock_name . '.lock';
 
    // Try to lock.
    $lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() ) );
 
    if ( ! $lock_result ) {
        $lock_result = get_option( $lock_option );
 
        // If a lock couldn't be created, and there isn't a lock, bail.
        if ( ! $lock_result ) {
            return false;
        }
 
        // Check to see if the lock is still valid. If not, bail.
        if ( $lock_result > ( time() - $release_timeout ) ) {
            return false;
        }
 
        // There must exist an expired lock, clear it and re-gain it.
        WP_Upgrader::release_lock( $lock_name );
 
        return WP_Upgrader::create_lock( $lock_name, $release_timeout );
    }
 
    // Update the lock, as by this point we've definitely got a lock, just need to fire the actions.
    update_option( $lock_option, time() );
 
    return true;
}

WordPressの更新で”Maximum execution time of 30 seconds exceeded “エラーが出たときにすべき事

WordPressの更新を行うときに、”Maximum execution time of 30 seconds exceeded”エラーが出る場合があります。

これは、WordPressが使っているphpの設定で、プログラムの実行時間の上限が30秒に制限されているためです。WordPressの更新では大きなファイルサイズのダウンロードが発生するため、30秒の制限に引っかかっています。

php.iniを更新して、制限時間を延ばす

このような場合、php.iniを変更可能な場合は、設定を変えることで対応可能です。xamppを使っている場合、ファイルははC:\xampp\php\php.iniにあります。

下記の設定だと、上限を30秒から無制限に変更しています。

max_execution_time = 30
↓
max_execution_time = 0



ファイルを保存後に再度WordPressの更新を行い、成功するか確認してみてください。

php.iniが変更できない場合は、wp-config.phpを書き換える

環境によっては、php.iniを変更できない場合があります。
このような場合は、代わりにwp-config.phpを変更することで制限時間を変更できる場合があります。下記の1行を追記してみてください。

set_time_limit(3600);



設定変更後に「別の更新が現在進行中です」エラーが出る場合

再度更新を行った時に、”別の更新が現在進行中です。”エラーが出るときには、こちらの記事を参考にしてください。

Google Cloud Platformのセミナー(CP100A)に行ってきた

先月、Googleのセミナーに行ってきたのでその時に取ったメモです。

行ってきたのはGoogle Cloud Platform(gcp)のCP100Aというセミナーで、沢山あるGoogleのクラウドサービスの概要を1日で教えてもらえる講座でした。
全機能を浅く広く全体的に紹介するセミナーなのですが、gcpを初めて使う人や、BigQueryやAppEngineなど一部の機能は使っているけど概要はあまり理解できてない人にはお勧めな内容でした。

項目によって細かく書いている部分と、雑な部分がありますが、セミナーの説明が雑だったわけではなくメモが取り切れなかった(集中して聞きたいor興味がない項目)為です。

Google Cloud Platformの基本について


gcpのアカウントについて

billingアカウントと、プロジェクトアカウントがある
billingアカウントは課金のもので、プロジェクトを跨げる

プロジェクトIdについて

プロジェクトIDは変更できず、世界中でユニークである
コマンドラインで操作する場合は、通常プロジェクトIDを使う

プロジェクトの権限について


権限は大きく分けて4つある

Owner: プロジェクトの作成者がデフォルトでOwnerになる
       なんでもできる
       インスタンスの追加・削除
       ユーザの招待
       他ユーザへの権限追加
    など
 
Editor: リソースの操作が可能
        他のユーザへの権限や、プロジェクトの削除はできない
 
Viewer: 参照専用のユーザ 
 
Billing: 課金を管理するもの
         プロジェクトをまたいで所属可能な権限
         経理の人とかを入れておくとよいかもしれない


通常、1つのアカウントにOwner権限のユーザは2人以上いた方が良い

Billingを除いて、プロジェクト単位の権限となる。


IAMについて

プロジェクト単位ではなく、もう少し細かめに権限管理したい場合にはIAMを利用する
(たとえばgcpは操作できないが、bigqueryはアクセス可能など)

IAMはリソース単位で権限を指定可能となる
例えば、gcpのインスタンスを削除、一覧取得したい場合は下記の権限を与えるといったことが可能

compute.instances.delete
compute.instances.list



IAMはGoogleアカウントや、Google Groupに紐づけることができる
部署単位で権限管理する場合はGoogle Groupで管理すると便利

IAMのリソース階層

1つの案件に関して、複数の(gcp上の)プロジェクトを作ることができる
例えば、1つの案件に対して、開発環境・ステージング・本番環境で3つgcpのプロジェクトを作るなど
“案件”の事をgcpではOrganaizationと呼んでいる


サービスアカウント

gcpのリソースは、人がGUI経由で操作するだけでなく、プログラムからAPI経由でアクセスすることも多い
このような場合のために、サービスアカウントというものがあります

リソースを作ったときに自動的にサービスアカウントが作られてたりする

サービスアカウントは、メールアドレスの形式になっていて、下記のようなルールになっている
project_number@developer.gserviceaccount.com
project_id@developer.gserviceaccount.com

プロジェクトを作ると、自動で”Compute Engine default service account”というサービスアカウントが1つ作られる
このアカウントは、gcpコンソールのIAMと管理->サービスアカウントから確認することができる

権限は、すでにあるサービスアカウントに付与することもできるし、”特定のバッチだけ限られた権限を付与したいので専用のサービスアカウントを作る”といった使い方も可能

また、サービスアカウントを利用することで、プロジェクトを跨いで権限付与することができる


gcpへのアクセス

gcpへのアクセスには大きく3つある

- webのgcpコンソールからGUIで操作する
 
- cloud sdk利用したコマンドライン操作
  cloud sdkが手元のPCにインストールされていない場合は、cloud shellを使うとweb画面からアクセス可能
 
- RESTベースのAPI経由でアクセスする


ユーザからみると3つありますが、最初の2つは裏でREST APIを実行している
REST APIを各種言語から使いやすくしたSDKも、もちろん用意されている

注意点としては、プロジェクトの追加・削除はguiからしかできない
また、細かな操作は、慣れるとコマンドラインから実行すると便利

cliのテストとして、例えばcloud shellから以下のコマンドを実行してみると、VMの一覧やクラウドストレージのバケット一覧を確認できたりする

gcloud compute instances list
gsutil ls


オプションなしでglcoudコマンドだけ打って実行すればヘルプが出るので、オプションは暗記しなくても大丈夫


Rest API

JSONベースでやり取りができる

API Explorer

簡単にRest APIをテストできる
https://developers.google.com/apis-explorer/#p/

Rest APIベースで開発中の場合はかなり便利

クライアントライブラリ

認証処理を簡単に実装できる
プログラムからアクセスする場合は、このライブラリを使うと便利

Google Cloud Client Libraries
    コミュニティ主導で、手作業で作られているライブラリ
    使いやすさはこちらが多少よいが、対応が遅い
 
Google APIs Client Libraries
    REST APIから機械的に生成されているライブラリ
    ちょっと使いづらいが、複数の言語が用意されている
    新しい機能は、こちらの方が速く対応される
    最初はちょっと面倒だが、慣れるとこちらの方が良い





AppEngineとデータの保存について


Google App Engine とデータストア


Google App EngineはPaaSサービス
サーバ構築やスケーリングの管理を行う手間がない
最近では、モバイルアプリのバックエンドとしても使われている

1日の無料枠があり、延べで28時間分までのCPUリソースであれば無料で利用可能
なので、VMが1台で収まるような小さなサービスなら無料で運用可能


AppEngineの環境


AppEngineの環境には大きく以下の2つがある
Google App Engine Standard Environment
Google App Engine Flexible Environment


Standard Environmentとは

開発、テストが可能なSDKがある
コマンド1つで本番にデプロイできる
ローカルなファイルに保存できない
リクエストは60秒以内に返す必要がある

関連する知識
タスクキュー
    重い処理を非同期で実行できる

スケジュールドタスク
    Cronのようなバッチ処理ができる


Flexible Environmentとは

現在ベータ版として提供されている
Node.jsなど、任意の言語で開発でき、環境の制限を取っ払える
Standard EnvironmentはBogueというコンテナサービスをベースにしているが、Flexible EnvironmentはDockerコンテナベースで動作する
1VMあたり1コンテナになるため、Standard Environmentほどは費用的に効率が良くない


Google Cloud Endpoints

APIの自動生成などを行ってくれるサービス
デフォルトでOAuth2.0ベースの認証がサポートされている
API単体でのテストが行いやすく、問題がある場合にも切り分けが行いやすい

Google Cloud Datastore

KVSベースのストレージ
スケールアウトは自動で行ってくれる



ストレージについて

Cloud Storage

ファイルのアップ・ダウンロードができる
実際はファイルシステムではないので、Windowsの共有フォルダのような使い方はできない

※Cloud strage Fuseを使うとLinuxならFileSystemとしてマウントは可能
インターネット越しのストレージなので、当然ながらローカルのストレージよりは遅い
Cloud strage Fuseはまだ実験的な実装なので、実用レベルではない

データの可用性は高いので、ハードウェア故障に備えたバックアップは不要(操作ミス対策のバックアップはもちろん必要)

マルチリージョンタイプの保存エリア(バケット)を作成すると、データセンターが1つ丸ごとダウンしても大丈夫なレベルでバックアップが取られる
Cloud Storageは、信頼性・パフォーマンス・費用に応じて複数の選択肢がある
Standard Storage
    本番環境で使えるレベルのもの

DRA
    少しパフォーマンスが悪いが、安い

Nearline strage
    バックアップ向け
    月に1回しかアクセスされないようなデータに向いている

非常にアクセスが多い場合は後述するCDNサービスも併用花王

Bigtable

get/putが高速に行える、KeyValueベースのストレージ
マネージドサービスとして利用できる
SQLのような形での検索処理は行えない
ApacheのHBaseはこのBigTableを元にしている

APIもHBaseと互換性があるので、HBaseクライアントも使用可能
ストリーミングインサートもがおこなえ、バッチ処理でデータ登録も可能

他のサービス(DatafrowやDataprocなど)と連携できる

Croud SQL

MySQLサービスのGoogle cloud版
マネージドサービスなので、パッチ当てなどの面倒な管理は不要
第一世代と第二世代があり、第一世代の時は遅かった(100Query/sec程度しか出ず、ストレージ容量も500Gぐらいまで)
第一世代のCroud SQLでも、規模なWordpressの運用程度なら問題なく利用できるレベルではある
MySQL WorkbenchやNavicatのようなクライアントツールも使用可能

第二世代の場合は下記のメリットがある
MySQL5.5ベース
速度が7~20倍速い
ストレージをオートスケール可能
大抵の場合で第一世代より安く利用できる
なので、特別な理由がなければ第二世代を使えばよい


コンテナエンジンについて



前置き:そもそもコンテナとは


なぜコンテナを使うのか
最近、1つのサービスを1つの環境で用意し、保守性を向上させようという考え方が広まってきた
サービスごとにサーバを立てているとコストがかかるため、仮想環境を用意すると効率が良い
Dockerなどの環境だと、起動が速いので必要な時のみ、サーバ台数を増やすといったスケールアウトが行いやすい
また、Dockerだとイメージを簡単に作れるので、開発と本番で同じ環境を簡単に作ることも可能

Kubernetes

Kubernetesというのは、Dockerイメージの管理ツール
オープンソースで提供されていて、Google内部で10年以上の利用実績がある
GoogleはDockerが出るよりかなり前より、Borgというコンテナサービスの研究を行っていた

コンテナエンジン

コンテナエンジンとは、Kubernetesをgcpで効率よく利用できるようにしたマネージドサービスで、gkeと略される
VMが異常終了したとき、自動で別のサーバに移動させる、ログの管理、VMのモニタリングなどを簡単に行える
gkeでは、Google Container Registryという、Dockerイメージのストレージも用意しています
通常Dockerだとイメージをダウンロードするのに時間がかかりますが、Google Container Registryだとイメージを非常に速く取得できます

Google App Engine Flexible Environmentと似ているサービスですが、Flexible Environmentは1VMあたり1コンテナなのに対して、gkeだと1VMあたり複数コンテナが動作できます


コンピューティングサービス(IaaS)とネットワーク


Google Compute Engine

IaaSでVMを提供するサービスで、AWSのEC2に相当する
インスタンスを起動したまま、ディスクを変更することができる
インスタンスのライブマイグレーション機能があるため、メンテナンス時にサーバを止めなくてよい
課金は1分単位で行われるので、バッチでの計算処理などで30分だけ動作させるといったことも可能
同じVMを使い続ける場合、自動で割引が適用されるので、1日のうちでほとんどの時間稼働させたい場合は、こまめに停止させなくてもよい
Google側に強制終了されてよいようなVMであれば、70%引きで利用できる



ネットワーク

インターネット経由でのアクセス以外に、Googleのデータセンターへ専用線で接続するという選択肢がある

Googleとの回線

Carrier Interconnectを利用
回線提供会社の専用線を利用してGoogleのサービスに接続できる

Cloud VPN

安全性を確保するために社内LANとVPN経由で接続できる

Google Cloud DNS

自分で取得したドメインに対するDNSサービス

ロードバランサ

HTTPベースで負荷分散を行える
スケール可能で、ウォームアップ不要で利用できる
TCPやUDPでもロードバランスできるが、リージョンは同じである必要がある




オペレーションとツール


Stackdriver

モニタリング、ロギング、診断用のサービス
gcpだけでなく、awsも監視できる
オープンソースのエージェントをインストールする
エラーが発生したときは、アラートを出してくれる
アプリログを転送して、検索を行える

Google Cloud Deployment Manager

yamlファイルのテンプレートを用意することで、プロジェクトのひな型を用意できる

Google Cloud Source Repositories Beta

privateなgitリポジトリや、デバッグ機能が用意されている

Google Cloud Functions

AWSのLambdaに相当するサービで、Node.js上で動作するJavascriptを実行可能



ビッグデータと機械学習


BigQuery

大量のデータを高速にオンラインで検索できるようにしたサービス
Googleのの中では人気がある
SQLを使ったクエリが実行可能(RDBでは無い)
ローコストで検索できる
課金額の上限を、アカウント・日別で指定可能で、コスト管理が容易

パフォーマンスが良く、indexを作るなどのパフォーマンスに関するオペレーションが不要

Pub/Sub

メッセージングのサービス
デフォルトで10,000メッセージ/秒のメッセージ送信が可能
Cloud Dataflowなどと組み合わせて使い、データ蓄積のパイプラインの1つとして利用できる

Dataflow

ETL処理など大量のデータを処理するためのサービス
BigQueryは、SQL一回で取得可能な検索は得意だか、手続き的な処理が必要な処理は不得意
このような場合、Pub/Sub経由で送られたデータをDataflowで処理して、データ保存するといったことが可能
バッチ処理、ストリーミングの両方が行える
Java/PythonのSDKが用意されており、これらの言語でプログラミングできる

Google Cloud Dataproc

Googleクラウドの中でMapReduce処理をgcpを利用して行いたい場合のサービス
Haddopクラスタ構築を行う必要がなく、簡単に安価で環境を構築できる
1分単位での課金で、クラスタのノードは高速(90秒以内)に起動できる
データ量に合わせて、何ノードのクラスタが必要かなどのキャパシティプランニングは自分で行う必要がある

Google Cloud Datalab

大量データの可視化をサポートするgcpのサービス
BigQueryや、Compute Engineのデータ,Cloud Strageなどをデータソースで使える
Datalab自体はOpen Sourceで提供されている

Machine Learning


学習のアルゴリズムをTensorFlowで構築する

Cloud MLを利用して学習処理を分散環境で高速に行える
Googleによって既に学習済みのパラメータを使って認識だけを使いたい場合は、Vision API、Speech API, Translate APIなどを利用できる


Speech API

話した文章を文字起こしできるサービス
80の言語を認識でき、リアルタイムで変換できる

Translate API

文章の翻訳を行ってくれるサービス

開発中、ChromeでERR_UNSAFE_PORTエラーが出たときにチェックすべきこと(312エラー)

開発中にローカルPCでWebサーバを立ててテストしようとしたところ、ERR_UNSAFE_PORTエラーが発生したので、そのときに調べたことと、対処方法のメモです。

ERR_UNSAFE_PORTは、STATUS CODE=312で、文字通り安全ではないポートにアクセスしようとしているというエラーです。

テストでチェックしていたのは、87番のポートでした。telnetで87番Portへ直接アクセスしたり、IEからアクセスすると接続できますが、なぜかChromeからのみ接続できません。また、Port87を88など別のポートに変更すると問題なくアクセスできました。


調べてみると、Chromeのセキュリティ機能で、Chromeが危険だと判断しているポートには接続できなくなっており、この条件に該当するときはchromeがERR_UNSAFE_PORTエラーを提示するようです。”危険”というのは、セキュリティホールがあるという意味ではなく、他の目的で使っていることが多いポートをさすようです。


ちなみに、ERR_UNSAFE_PORTエラーの対象となるポートは87番以外にも下記のポートが該当するようです。かなり多いですね。

  1,    // tcpmux
  7,    // echo
  9,    // discard
  11,   // systat
  13,   // daytime
  15,   // netstat
  17,   // qotd
  19,   // chargen
  20,   // ftp data
  21,   // ftp access
  22,   // ssh
  23,   // telnet
  25,   // smtp
  37,   // time
  42,   // name
  43,   // nicname
  53,   // domain
  77,   // priv-rjs
  79,   // finger
  87,   // ttylink
  95,   // supdup
  101,  // hostriame
  102,  // iso-tsap
  103,  // gppitnp
  104,  // acr-nema
  109,  // pop2
  110,  // pop3
  111,  // sunrpc
  113,  // auth
  115,  // sftp
  117,  // uucp-path
  119,  // nntp
  123,  // NTP
  135,  // loc-srv /epmap
  139,  // netbios
  143,  // imap2
  179,  // BGP
  389,  // ldap
  465,  // smtp+ssl
  512,  // print / exec
  513,  // login
  514,  // shell
  515,  // printer
  526,  // tempo
  530,  // courier
  531,  // chat
  532,  // netnews
  540,  // uucp
  556,  // remotefs
  563,  // nntp+ssl
  587,  // stmp?
  601,  // ??
  636,  // ldap+ssl
  993,  // ldap+ssl
  995,  // pop3+ssl
  2049, // nfs
  3659, // apple-sasl / PasswordServer
  4045, // lockd
  6000, // X11
  6665, // Alternate IRC [Apple addition]
  6666, // Alternate IRC [Apple addition]
  6667, // Standard IRC [Apple addition]
  6668, // Alternate IRC [Apple addition]
  6669, // Alternate IRC [Apple addition]



開発で使用するポートを変更できる場合は、変更してしまったほうが手っ取り早いです。

もしポートを変更できない場合は、chromeのコマンドライン引数で–explicitly-allowed-portsを指定することで、ERR_UNSAFE_PORTエラーのチェックを回避できます。下記の例は87番ポートへのチェックを回避しています。

chrome.exe --explicitly-allowed-ports=87



複数指定する場合は、下記のようにカンマでつなぎます

chrome.exe --explicitly-allowed-ports=87,95


[MySQL]mysqlコマンドで、日本語の出力が文字化けするときに行う事

まずは、show variablesコマンドで、SQLの結果出力を行う文字コードが何になっているか確認する。
下記の場合だとcharacter_set_resultsがlatin1になってしまっている。

> mysql -h localhost -u root -ppass SampleDB
 
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)




DBの設定を変更可能な場合は、変えてしまえばよいが、変えたくない(or 変えられない)場合は、setコマンドで現在のセッションだけ変更することができる。下記の例では3つとも変更しているが、出力結果を変えたいだけなら、character_set_resultsだけ変更すればよい。

mysql> set character_set_results='utf8';
Query OK, 0 rows affected (2.27 sec)
 
mysql> set character_set_client='utf8';
Query OK, 0 rows affected (2.27 sec)
 
mysql> set character_set_connection='utf8';
Query OK, 0 rows affected (2.27 sec)




変更できたかは、再度show variablesを実行すれば確認できる。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+



この後、再度SQLを実行すれば、期待した文字コードで出力できるはず。