IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Windows環境にpcre-lightをインストールで嵌る

Windows環境のHaskell正規表現ライブラリを利用したかったので、prce-lightをインストールしようとしたら、嵌ってしまいました。

まさに、このRedditで書かれていることと同じエラーでした。

Configuring pcre-light-0.4.0.4...Cabal-simple_Z6RU0evB_2.4.0.1_ghc-8.6.5.exe: The pkg-config package 'libpcre'is required but it could not be found.

www.reddit.com

このRedditの記事によると、prceがインストールされているパスに環境変数を通せば解決したとのこと。しかし、私の環境ではうまくいきませんでした。

試行錯誤して、最終的たどり着いたのは、本家のGithubリポジトリのこのissueでした。

github.com

msys2のpacmanの情報を最新化して、pcrepkg-configを最新化することでした。

問題に出会った時の、情報の検索の仕方として、やみくもにキーワードで検索するのではなく、本家情報を確認する必要がありますね。

蛇足ですが、pacmanのアップデートで失敗しましたが、エラーログに書かれていたファイルを直接削除して、再度アップデートしたらうまくいきました。(この時のログは取り忘れ)

WordPressを触ってみた

WordPressの本家サイト。

wordpress.org

参考書籍

1章が簡単に歴史がまとまっていて参考になります。4章にPHPプログラミングがあって、入門書のようにも思えますが、5章はAWSでスケーラブルなWordPressと、6章にWordPressユーザのためのNgnix入門などのインフラ面の解説が充実しています。

WordPressプロフェッショナル養成読本 [Webサイト運用の現場で役立つ知識が満載! ] (Software Design plus)

WordPressプロフェッショナル養成読本 [Webサイト運用の現場で役立つ知識が満載! ] (Software Design plus)

WordPressやるなら定番の書籍なのでしょうか。追加していくコードとサイトの画像が対比されていて読みやすいように思えました。

本格ビジネスサイトを作りながら学ぶ WordPressの教科書

本格ビジネスサイトを作りながら学ぶ WordPressの教科書

こちらは上記のスマフォ版です。1ソースでPCとSP両方対応する内容かと思ったのですが、ざっと読んだところ、PCとSPでファイルを分ける(実際はフォルダごとわかれている)ようでした。

WordPressを触ってみた感想です。

コミュニティを育てる姿勢が素晴らしい

管理画面のデフォルトに直近のイベントが表示されていて、コミュニティを盛り上げていく姿勢が感じられました。最近11/1, 11/2にWardCampというイベントが日本であったようです。

f:id:naotoogawa:20191103155107p:plain
イベントとニュース

カスタマイズが柔軟

テーマがたくさん公開されていて、それらのテーマを「外観」->「テーマエディタ」からさらにカスタマイズができます。functions.phpが直接管理画面で改竄変更できるので、基本的には何でもありなような気がします。

f:id:naotoogawa:20191103161840p:plain
テーマエディタでcss, jsが修正可能

PHPコード上にて、JavaScriptをインラインで仕込めば、応用が広がります。

function hoge_enqueue_scripts() {
    $script = <<<SCRIPT
jQuery(function($) {
  $(document).ready(function() {
    // ここにJavaScriptコードを書く
  });
});
SCRIPT;
    wp_add_inline_script( 'jquery-core', $script, 'after' );
}

add_action( 'wp_enqueue_scripts', 'hoge_enqueue_scripts' );
メンテナンスが大変そう

管理画面上から様々な設定ができるのがWordPressの一番のメリットですが、開発スピードはなかなか上がらないかなと感じました。

また、本番リリース後のメンテナンスが大変なような気がしました。開発(or 検証)環境で確認して、本番環境に反映させる標準的な方法があるかと検索してみると、問題はあるようです。(とういうかWordPressの問題というよりは、CMS自体の宿命のような気もしますが、どうなんでしょう。)誰かが作成したWordPressサイトを後からメンテするのは相当大変なんじゃないかなと思いました。

WordPressのデプロイが辛すぎる問題を考える | 東京上野のWeb制作会社LIG

Developing and Deploying WordPress  •  Beanstalk Guides

jsiiの仕組みの確認

github.com

Node.Js上でサーバが立ち上がり、クライアントのJavaと、JSONを用いたプロセス間通信をする。

Client : Java

Server : javascript
> node jsii-runtime.js


JsiiRuntimet.java <-- STDIN/STDOUT protocol --> jsii-runtime.js --> jsii-kernel.js
                       ------ JSON ------

jsiiのjavaライブラリを使う側は、JssObjectを継承したクラスを作成する。

* Class Dependency

JsiiObject --> JsiiEngine --> JsiiRuntime <--> JsiiClient
                                 |
                              ProcessBuilder (Java API)

* Java object method call

JsiiObject#jsiiCall -...-> JsiiClient#callMethod -> JsiiRuntime#reqestResponse

* Library Dependency

Jsii -> Jackson

Yoneda Lemma

A Neighborhood of Infinity: Reverse Engineering Machines with the Yoneda Lemma

Yoneda Intuition from Humble Beginnings · GitHub

Understanding Yoneda | Bartosz Milewski's Programming Cafe

米田の補題と自然変換 | math_pdf

米田の補題をリストで - oto-oto-oto’s diary

設定ファイルを読み込むstack ghciの起動

いつもstack ghciで起動した後に手で``:set prompt " > "をしていました。これを起動時に自動的に実行したかったのですが、やり方がわかりませんでした。

PS C:\Users\User\haskell\> stack ghci
Using main module: 1. Package `RS' component exe:RS-exe with main-is file: C:\Users\User\haskell\Main.hs
...
[2 of 2] Compiling Main             ( C:\Users\User\haskell\app\Main.hs, interpreted )
Ok, two modules loaded.
Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script
*Main Lib>
*Main Lib> :set prompt " > "
 >

確かに

Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script

のログが出ていて、ここに起動時に実行されるスクリプトがあります。

中身は

:add Lib C:\Users\User\haskell\app\Main.hs
:module + Lib

となっています。 ここに書けば実行されるはずですが、stackが自動的に作成するTemp内にあるので、ここには書きたくありません。

マニュアルには、起動時に実行するスクリプトの配置場所が3か所書いてあります。

4. Using GHCi — Glasgow Haskell Compiler 8.8.1 User's Guide

なので、ここにスクリプトを配置すればよいのですが、stack ghciで起動したときの.appdata$HOMEの場所がわかりませんでした。 あれこれ悩みましたが、答えは単純で、System.Directoryにある関数を使えば、これらの場所がわかります。

*Main Lib> import System.Directory
*Main Lib System.Directory> getCurrentDirectory
"C:\\Users\\User\\haskell\\"
*Main Lib System.Directory> getAppUserDataDirectory ""
"C:\\Users\\User\\AppData\\Roaming\\"
*Main Lib System.Directory> getHomeDirectory
"C:\\Users\\User"
*Main Lib System.Directory>

自分の環境の場合は

"C:\Users\User\haskell\"

.ghciファイルを作成しました。

:set prompt " > "
:set +t

これで、stack ghci時に自動的にスクリプトが実行されます。

型の情報も欲しいので:set +tも入れています。