まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2018/07

以前に express-ipfilter ライブラリを使って、Node.js アプリの IP アドレスフィルタリングを行うサンプルを紹介しました:
http://dotnsf.blog.jp/archives/1066182158.html

↑ここで紹介したサンプルは一応動くものですが、アプリケーションを IBM Cloud の Cloud Foundry アプリとしてデプロイすると( IP アドレスフィルタリングが)正しく動かないことがわかりました。原因は Cloud Foundry 内のルーティングで x-forwarded-for ヘッダの情報が変わってしまい、正しい IP アドレスを取得できなくなってしまうようでした。

IBM Cloud の Cloud Foundry 環境でもこの IP アドレスフィルタリングを有効にするには、フィルタリングを行う前に Express() の use メソッドを使って、
app.use( 'trust proxy', true );

を呼び出してからフィルタリングを行う必要があります。

(解説)
http://expressjs.com/ja/api.html



 

スタバとか、デニーズとか、マクドナルドとか、最近は(特定のキャリアと契約している前提なしで一定時間使える)無料の公衆無線 LAN が使える場所が増えてきました。

これらを使う場合、まずは無線 LAN をその SSID で普通に接続します。この時点で無線 LAN としては接続できて(IP アドレスが取得できて)いますが、まだインターネットを自由に使える状態ではありません:
2018072203


この状態でウェブブラウザを開くと、「ネットワークのログインページ」を開くボタンが表示されたり、ブラウザの種類によってはどこかのページを開こうとした際にログインページにリダイレクトされて、もう1段階の認証を行うことになります:
2018072200


スタバであればこんな感じのログインページが表示され、ここから処理を進めてインターネットに接続します(場合によってはメールアドレスやパスワードを登録する必要があるかもしれません):
2018072204



この仕組を使う中で気付いたことがあります。自分は主に2種類のノート PC を持ち歩いていて、うち1台ではこの公衆無線 LAN を問題なく使えるのですが、もう1台では「ネットワークのログインページ」へ移動するためのボタンが表示されず、かといって、そのままインターネットを使おうとしても使えない、という現象が発生するのでした:
2018072201


この現象は起こったり起こらなかったり・・・ではなく、問題ない PC では発生せず、問題のある PC では 100% 再現しました。要は「PC の設定の違い」が原因と思われる挙動の違いでした。その原因と対処法を調べたので、その備忘録を兼ねた報告です。

この現象が発生する原因が1つだけとは限らないのですが、自分のケースでの原因は「DNS 設定」でした。問題なく接続できる(ログインページが表示される)方の PC では DNS サーバーのアドレスを自動取得する設定になっていました:
2018072202


一方、接続できない方の PC ではこの部分が特定の DNS サーバーを使うよう指定されていました。具体的には 1.1.1.1 や 8.8.8.8 などの名前解決が早いことで定評のある公衆 DNS サーバーのアドレスを指定していました。自宅や会社で使うぶんにはこの設定でも問題なかったのですが、今回紹介しているような公衆無線 LAN ではこれらの IP アドレスへの接続が(ログインページを経由して認証する前には)許可されていないらしく、ゲートウェイのファイアウォールを超えることができず、結果として名前解決ができずに接続ができない、という状況になっているようでした。

したがって、この場合であれば DNS サーバーを上記のように「自動的に取得」するように設定し直します。すると、再度ウェブブラウザを起動した際にログインページへのリダイレクトボタンが表示されて、改めて認証ページを経由することでインターネットが利用できるようになりました。

1.1.1.1 や 8.8.8.8 にこんな落とし穴があったとは・・・

 

業務の中でワードドキュメント(.docx)でレポートを書く必要がありました。

個人的にワードはあまり得意ではありません。フリーレイアウトで書きにくいし、読みやすいとも思えないし(こっちはワードでよこせと言ってくる側の責任だけど)、もう少しましなツールはいくらでもあるし、、、 僕自身はどうしても.doc/.docx 形式のファイルを開かなければならない時にだけ(ファイルをダブルクリックした結果として)ワードを使っていて、自分からワードで書くことはほとんどないのでした。

でも年に一度くらい、今回のように「ワード」指定でドキュメントを請求されることがあります。そんな時に便利かも、と思えるツール pandoc に出会ったので、その紹介をします。

pandocドキュメントのフォーマット変換ツールです。マークダウンをはじめとするテキストドキュメントを別の各種フォーマットに変換してくれます。この pandoc がマークダウン(.md) -> ワードドキュメント(.docx) の変換に対応していることを知り、早速使ってみました。


インストール

pandoc は多くのシステムの一般的な方法で導入できます。Ubuntu であれば apt-get コマンドを実行します:
$ sudo apt-get install pandoc

他システムの場合は適当にググって調べてください。


使い方

シンプルな使い方は以下のように(出力ファイルフォーマットを拡張子で指定して)実行します:
$ pandoc xxx.md -o xxx.docx  (マークダウン方式の xxx.md を、ワード形式である xxx.docx に変換)

試しに先日のブログを書いた際に作成した Github のリポジトリREADME.md をこのツールでワード変換してみました:
$ pandoc README.md -o README.docx

結果、こんな感じ↓のマークダウンファイルが・・・
2018071801

2018071802

↓こんな感じのワードファイルに変換されてました:
2018071803

2018071804


テーブルとかもちゃんと再現されてますね。細かく変換スタイルを指定することも可能なようですが、ワードのためにそこまで時間を使いたくないあまりこだわるわけではないので、これで充分。


しばらくはマークダウンで編集して、マークダウンでレビューとかもして、最後の最後にワードに変換して仕上げ、みたいな感じで使うことになりそうです。

 

テキスト中心のシンプルなプレゼンテーションを作って公開する場合の選択肢の1つとして GitPitch がいいかなあ、と最近思うようになりました:
2018071700


GitPitch は以下の特徴を持った、プレゼンテーション公開の仕組みです:
- マークダウン記法を使って記述・作成する
- Github.com のアカウントを持っていれば、簡単に公開できる(GitLab なども対応しているらしいが未確認)

具体的には Github のリポジトリ内の特定ファイルに特定ルール(ほぼマークダウン)でプレゼン内容を記述するだけ、です。その内容を Github を通してプレゼンテーション化して公開します。

具体的には、公開したいプレゼンテーションを PITCHME.md というファイル名で、マークダウン記法で記述します。スライドとスライドの間には以下のどちらかのページセパレータを挿入します:
(1) --- (現在のスライドの右に新しいスライドを作成する場合)
(2) +++ (現在のスライドの下に新しいスライドを作成する場合)

試しにこんな内容の PITCHME.md を作ってみました:
I love you.

+++

愛してます。

---

Je t'aime.

+++

我爱你。

---

사랑해.

+++

أحبك.

この PITCHME.md ファイルが含まれるリポジトリを Github で公開します:
https://github.com/dotnsf/gitpitch


準備はこれだけ、後は https://gitpitch.com/(ユーザー名)/(リポジトリ名) にアクセスすると、スライド化された PITCHME.md の内容が参照できます:
https://gitpitch.com/dotnsf/gitpitch


(最初のスライドページ)
2018071701

(↓を選ぶと、2番目のスライドページ)
2018071702

(→を選ぶか、または最初のスライドページで→を選ぶと3番目のスライドページ)
2018071703


なお、このプレゼンテーション参照中に、矢印キー以外に以下のショートカットキーを利用することができます:
キー効果
HOME最初のスライド
END最後のスライド
N次のスライド
スペースNと同じ
H左矢印と同じ
J下矢印と同じ
K上矢印と同じ
L右矢印と同じ
Mメニュー
Fフルスクリーン
ESCフルスクリーン解除
Oスライド一覧
B画面ブラックアウトの ON/OFF トグル
Sスピーカーノート
?ショートカットキーのヘルプ



パワーポイントのように、図やチャートに凝ったプレゼンを作るには向いてませんが、逆にテキスト中心の内容であればマークダウンで簡単に装飾テキストも作れるし、Github アカウントさえあれば普通にリポジトリを公開するだけでプレゼンテーションを公開できるという点が便利だと思っています。


IBM ワトソン対応の CMS である BlueCMS を公開しました。IBM Cloud を使ったセットアップ手順はこちらをご覧ください:
ワトソン対応の IBM Cloud 向き CMS "BlueCMS" を公開しました(セットアップ手順)


今回は初期セットアップ後の、実際の使い方を紹介します。


コンテンツタイトル等

初期セットアップの中で管理者権限を持った最初のユーザーを作っているので、このユーザーの ID とパスワードでログインします:
2018071001


管理コンソール画面が表示されます。管理コンソールにはコンテンツタイトルなどコンテンツ全体に関係する設定項目に続き、現在までに登録されている文書の一覧テーブルと、添付ファイルの一覧テーブルが表示されますが、ログインユーザーが管理者権限を持っている場合はコンテンツの設定項目の下にユーザー一覧テーブルも表示されます:
2018071101
(↑上からコンテンツ設定、ユーザー一覧)

2018071102
(↑上から文書一覧、添付ファイル一覧)

コンテンツ設定は以下のようになっています:
2018071103


これらは OGP(Open Graph Protocol) と言われる設定項目になっており、有名どころでは facebook で BlueCMS のトップページや各記事を共有した場合に表示される内容を定義します。

また title と desc は BlueCMS トップ画面の jumbotron の中で表示される内容でもあります。自分のブログのタイトルとその説明を記述するようにしてください。url はブログの URL、image_url は OGP イメージ画像の URL を指定します(指定していない場合は無視します)。

なお、現時点(2018/Jul/12)では個別ページの OGP を設定する機能がなく、個別ページをシェアするとトップページと同じ OGP が表示されます(リンク先の URL だけは個別ページになります)。この辺りは今後の機能拡張で対応したいと思っています。


ユーザー追加/管理

管理者権限を持ったユーザーはユーザー一覧テーブルで登録済みユーザーの一覧を確認したり、編集したり、削除したり、新規にユーザーを追加することができます:
2018071104


新規作成は一番下の編集行の各フィールドに入力して "update"、既存ユーザーの変更は右にある "edit" をクリックすると編集行に値がコピーされるので、ここで変更して "update"、ユーザーの削除は右にある "delete" をクリックします。

なおユーザー編集時には role の値に注意してください。この値が 0 のユーザーは管理者、1 のユーザーは編集者として扱われます。name は画面表示用の名称で、email はメールアドレスですが、これらは現時点では特に利用していません。


文書追加/管理

管理コンソールには現在までに登録されている文書の一覧も表示されます:
2018071105


新規作成は一番下の編集行の各フィールドに入力して "update"、既存文書の変更は右にある "edit" をクリックすると編集行に値がコピーされるので、ここで変更して "update"、文書の削除は右にある "delete" をクリックします。

なお文書の status は 1 のものが公開、0 のものは非公開(ドラフト)となります。body は nicEdit を使ったリッチテキスト編集が可能です。category はカテゴリー文字列を直接指定して入力します(category と body の値は IBM ワトソン連携時に利用する値となります)。

body の入力が狭い nicEdit を使っている点が不便であると理解しています。この辺りも今後も機能拡張の対象と考えています。


添付ファイル追加/管理

管理コンソールには現在までに登録されている添付の一覧も表示されます:
2018071106


添付ファイルの新規作成はファイルを選択後、一番下の編集行の name フィールドに入力して "update"、添付ファイルの削除は右にある "delete" をクリックします。添付ファイルには編集機能はありません。


ワトソン連携

セットアップ時に IBM ワトソンの NLC(Natural Language Classifier) 連携も含めて行っている場合は、BlueCMS 内のコンテンツを NLC に学習させたり、学習結果を使って問い合わせを行うことができます:
2018071107


文書一覧の下に NLC 関連のボタンが3つあります。それぞれ以下のように使います:

- "update NLC" : 現在までに BlueCMS に格納された全文書を NLC のトレーニングデータとして学習を初期化&再学習します。学習時には各文書の body 値と category 値だけを取り出して、body 値の内容を category 値として学習します。これを全ての文書に対して行います。

- "NLC status" : 上記学習命令を発生した後の、ワトソンのトレーニングステータスを確認します。この実行結果が "Available" となれば学習準備は完了していて、後述の "classify" で問い合わせが可能になります。一方、実行結果が "Training" であればまだ学習中なので、いましばらくお待ち下さい。

- "classify" : 学習が済んだ後に問い合わせを実行します。具体的には編集行の body に何か文章を入力した後にこのボタンをクリックすると、上述で学習させたコーパスに対してこの body 内容を問い合わせ、「今までの学習データから、どのカテゴリーがふさわしいか」の結果を取得し、category フィールドを更新します。いわば「ワトソンがその内容に相応しいカテゴリーを自動的に決めてくれる」機能です。


現時点での制限事項等

このブログエントリを編集している 2018/Jul/12 時点での BlueCMS の機能と使い方を紹介しました。上述のように CMS として足りない機能や使いにくい部分も多くあり、ワードプレスなどと比較するとまだまだだと思っています。

一方で新しくスクラッチで開発したからこそできた挑戦的な機能もあります。特に標準で IBM ワトソンと連動する機能については BlueCMS の特徴の1つだと思っています。

自分でも少しずつ使っていきながら感じた機能を拡張させていく予定ですが、もしお試し程度でも使ってみていただける場合は、感想や希望を伝えていただければと思っています。


このページのトップヘ