tohokuaikiのチラシの裏

技術的ネタとか。

PHPで検索キーワードを「”」みたいなクォート区切りを有効にしたGoogleみたいな感じで抜き出す方法

Google

なにか "PHP function" で検索

みたいにすると、"PHP function"っていう文字列で検索してくれるじゃないですか。あのキーワードの取り出し方を知りたいなと思って検索してみたんですが、正規表現一発で取れるものとかなくってしょうがないなーって感じでPHPで日和ってみた結果です。

<?php
function getSearchKeywords($text) 
{
    $keywords = array();
    while (preg_match('/"([^\"]+)"/', $text, $m)){
        $text = str_replace($m[0], '', $text);
        $keywords[] = $m[1];
    }
    return array_filter(array_merge($keywords, explode(" ", $text)));
}
$text = 'aaa "bbb ccc" ddd eee "fff" ggg "hhh iii jjj" kkk';
var_dump(getSearchKeywords($text)); 

 ↓

array(8) {
  [0]=>
  string(7) "bbb ccc"
  [1]=>
  string(3) "fff"
  [2]=>
  string(11) "hhh iii jjj"
  [3]=>
  string(3) "aaa"
  [5]=>
  string(3) "ddd"
  [6]=>
  string(3) "eee"
  [8]=>
  string(3) "ggg"
  [10]=>
  string(3) "kkk"
}

Confluence6.5をインストールした時にちょっと躓いたのでメモ

何気に6系は初めてだったりする。

いつものようにMySQLでデータベースを作成

mysql> create database confluence_demo_20171205 default character set utf8 ;
Query OK, 1 row affected (0.01 sec)

で、confluence/WEB-INF/classes/confluence-init.properties にconfluence.homeを設定してインストールWizardを走らせる。

MySQLを選択したら

Confluence needs a driver to connect to MySQL. You'll need to:
Download the MySQL driver
Drop the .jar file in /home/confluence/xxx/confluence/WEB-INF/lib
Restart Confluence and continue the setup process.

とか言われてしまった。しまったうっかりとお約束のMySQLJDBCを入れ忘れ。

Database JDBC Drivers - Atlassian Documentationに従って、MySQLJDBCドライバをOracleからいただきまして、/home/confluence/xxx/confluence/WEB-INF/libに入れてConfluenceの再起動

MySQLの設定

JDBCを入れて再度Wizardを進めると、Databaseのテスト接続で

Collation error
The database collation 'utf8_general_ci' is not supported by Confluence. You need to use 'utf8_bin'. Learn more

f:id:tohokuaiki:20171204161213p:plain

と言われてしまった。

https://confluence.atlassian.com/confkb/how-to-fix-the-collation-and-character-set-of-a-mysql-database-670958160.htmlによると、ちゃんとCollationまで気にして作らないとダメっぽい。

ということで、作り直し。

mysql> drop database confluence_demo_20171205;
Query OK, 0 rows affected (0.05 sec)

mysql> create database confluence_demo_20171205 default character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

まだだめっす

Incorrect isolation level
Your database must use 'READ-COMMITTED' as the default isolation level. Learn more

なんだこれは?

なんか、MySQL3.5からおかしかったらしいけど、なんか使えてたのがダメにされたっぽい。

詳細はConfluence fails to start and throws 'MySQL session isolation level 'REPEATABLE-READ' is no longer supported' error - Atlassian Documentationのあたりを読んでくれということで、結局my.cnfの[mysqld]セクションに

[mysqld]
transaction-isolation=READ-COMMITTED

という一行を付け加えてMySQLを再起動。

更にダメッす

これで一応最後まで行った…。とおもいきや。

なんか日本語が化けている。Confluenceのページ内は大丈夫だけどスペース名とかページタイトルが文字化けしてる。

んー、なんだこれはと思ったら、そういえば、以前のConfluenceのJDBCのDSNを決めるときって「useUnicode=true&characterEncoding=UTF8」とかつけてたよな…と思い出す。

一旦全部アンインストールして、DBのセットアップで「Setup type」を「By connection string」にしてさっきの文字を追加してやる。 f:id:tohokuaiki:20171204162206p:plain

jdbc:mysql://localhost/confluence_demo_20171205?useUnicode=true&characterEncoding=UTF8

ここまでやってようやく成功。

今更ながらPHP7でローカルにPEARを入れた話

今どきPEARって…という感じですが、HTTP_Request2とか意外と使い慣れてるので便利なんですよ。いい加減ComposerでGuzzle使ってくれって話なのですが、ことによってはHTTP_Requestの方がちょろっとPHPCLIスクリプト書く分には楽ですよね。と。

インストールは今どきは、go-pear.phpじゃない

インストールはgo-pearを取るんだったなと思いおもむろに

$ wget http://pear.php.net/go-pear
$ php go-pear

と打ち込んだところ

Sorry!  Your PHP version is too new (7.0.19-1) for this go-pear.
Instead use http://pear.php.net/go-pear.phar for a more stable and current
version of go-pear, more suited to your PHP version.

Thank you for your coopertion and sorry for the inconvenience!

ありゃりゃ。ということで、

$ wget http://pear.php.net/go-pear.phar
$ php go-pear.phar

としてインストール開始。

インストール場所の設定

どこにインストールするかを聞かれる。
ひっそりとこっそりとどこぞやの作業量ディレクトリに入れたいので

Below is a suggested file layout for your new PEAR installation.  To
change individual locations, type the number in front of the
directory.  Type 'all' to change all of them or simply press Enter to
accept these locations.

 1. Installation base ($prefix)                   : /home/tohokuaiki/pear
 2. Temporary directory for processing            : /tmp/pear/install
 3. Temporary directory for downloads             : /tmp/pear/install
 4. Binaries directory                            : /home/tohokuaiki/pear/bin
 5. PHP code directory ($php_dir)                 : /home/tohokuaiki/pear/share/pear
 6. Documentation directory                       : /home/tohokuaiki/pear/docs
 7. Data directory                                : /home/tohokuaiki/pear/data
 8. User-modifiable configuration files directory : /home/tohokuaiki/pear/cfg
 9. Public Web Files directory                    : /home/tohokuaiki/pear/www
10. System manual pages directory                 : /home/tohokuaiki/pear/man
11. Tests directory                               : /home/tohokuaiki/pear/tests
12. Name of configuration file                    : /home/tohokuaiki/.pearrc

と聞かれるけれども、「1」を選択してインストール先を変更

Installation base ($prefix) [/home/tohokuaiki/pear] : /home/tohokuaiki/test/hoge/lib/pear

で、4~11が変更される。ここで12の.pearrcも変更しておこう。

さて、おもむろにリターンを押下してインストール開始!!・・・と思いきや

1-12, 'all' or Enter to continue:
Beginning install...
XML Extension not found

あれれ?

$ php -m|grep xml
libxml

libxmlではダメなんだ。debianなので

$ sudo apt-get install -y php7.0-xml

でインストール後、再度go-pear.pharを実行する。今度は問題なく進行。途中で

Would you like to alter php.ini </etc/php/7.0/cli/php.ini>? [Y/n] : n

と聞かれるが、ひっそりとPEARを入れているのでそんなだいそれたことはするはずもなく、男は黙って「n」を押下。

すると、

I will add a workaround for this in the 'pear' command to make sure
the installer works, but please look over your php.ini or Apache
configuration to make sure /home/tohokuaiki/test/hoge/lib/pear/share/pear is in your include_path.

と「このディレクトリをinclude_pathにいれるんやで」と注意してくれた。

うーむ、/home/tohokuaiki/test/hoge/lib/pear/share/pearpearが被ってしまったな。

PEARパッケージのインストール

/home/tohokuaiki/test/hoge/lib/pear/share/pear/bin/pearPEARコマンドである。

HTTP_Request2を入れたいので

$ /home/tohokuaiki/test/hoge/lib/pear/bin/pear install HTTP_Request2

とすると、

WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
Cannot install, php_dir for channel "pear.php.net" is not writeable by the current user

と出る。んー、php_dirが書き込みできない…ということで、そういえば、さっきのPEAR環境設定ファイル.pearrcを指定してコマンドを打ち直す。

こんな感じ。このコマンドの長さがひっそり感を醸し出していて非常に素晴らしい。

念のためchannel-updateをした後で

$ /home/tohokuaiki/test/hoge/lib/pear/bin/pear -c /home/tohokuaiki/test/hoge/lib/pear/.pearrc channel-update pear.php.net

パッケージのインストール

$ /home/tohokuaiki/test/hoge/lib/pear/bin/pear -c /home/tohokuaiki/test/hoge/lib/pear/.pearrc install HTTP_Request2

これで無事完了。

「生きがい」という言葉は日本語だけに存在する?

この記事でwithnews.jp

「以前、テレビの取材を受けた時、ちょっと意地悪な気持ちになって『生きがいって言葉は外国にはないし、言いませんよね。生きがいがなくても人間、ハッピーに生きていけるんじゃないですか』って答えたんです」

ってあって、Google翻訳で調べてみた。

言語 翻訳 日本語に再翻訳 Bingで再翻訳
英語 reason to live 生きる理由 生きる理由
フランス語 Je souhaite vivre 私は生きたい 私は生きたい
ロシア語 Я хочу жить 私は生きたい 行きたいです
スペイン語 Deseo vivir 私は生きたい 行きたいです
イタリア語 Voglio vivere 私は生きたい 行きたいです
ドイツ語 Ich möchte leben 私は生きたい 行きたいです
中国語 我想住 私は生きたい 行きたいです
韓国語 보람 やりがい やりがいのある
タイ語 ฉันต้องการที่จะมีชีวิตอยู่ 私は生きたい 生き続けたい
トルコ語 Yaşamak istiyorum 私は生きたい 住みたい
タガログ語 Nais kong mabuhay 私は生きたい 行きたいです
インドネシア語 Aku ingin hidup 私は生きたい 行きたいです
マレー語 Saya ingin hidup 私は生きたい 行きたいです
クメール語 ខ្ញុំចង់រស់នៅ 私は生きたい -
ハワイ語 Makemake au e ola 私は生き残りたい -
ギリシャ Θέλω να ζήσω 私は生きたい 行きたいです
スワヒリ語 Napenda kuishi 私は生きたい 生きていきたいと思います
サモア Ou te fia ola 私は生きたい -
マオリ E hiahia ana ahau ki te ora 私は救われたい -
ネパール語 म बाँच्न चाहन्छु 私は生きたい -
ヒンドゥ語 मैं जीना चाहता हूँ 私は生きたい 行きたいです
ヘブライ語 אני רוצה לחיות 私は生きたい 行きたいです

機械翻訳がどこまで正しいとかは言うつもりもないし検証する気力もないが、確かにそれにぴったり該当するような言葉は無いように思える。唯一韓国が近いものを感じさせるだけだ。

ちなみに、唯一韓国語であたった「やりがい」という言葉を翻訳してみると、

言語 翻訳 日本語に再翻訳 Bingで再翻訳
英語 Rewarding 報酬 やりがい
ドイツ語 Belohnung 報酬 報酬
中国語 奖励 報酬 報酬

と、これもどうもあまりありそうにない。行為に対する代償は、精神的なものでは無く有形なものであるということ。

言葉が無いということは概念も無いか非常に希薄であるということで、「人生は何かを成し遂げるために存在する」という考え方自体が日本人独特のものであるという証左であるかもしれない。何かを為すのが目的では無く、ただ生きるために生きるということ。

この言葉には「生きがい」というものは存在しない。