Mac OS X ファイル名の濁点を変換 (PHP)

OSによってファイル名の正規化が行われる.

UAX15-NormFig3

Unicode正規化 - Wikipedia

Linux / Windows
NFC: Normalization Form Canonical Compression

OS X
NFD: Normalization Form Canonical Decompression

異なる「正規化」間で問題となる.

PHPで認識して変換できるのか.

ファイルを OSX上でつくる.

$ ls
KONBU.txt        こんふ.txt       こんぶ.txt

これに対してPHPコード.

<?php
$files = glob('*.txt');
foreach ($files as $key => $file) {
    $raw = pathinfo($file, PATHINFO_FILENAME);
    $nfc_iconv = iconv('UTF-8-MAC', 'UTF-8', $raw);
  //$nfc_normalizer = Normalizer::normalize($raw, Normalizer::FORM_C);
    echo $raw                                  . "\t" .
         mb_strlen($raw, 'UTF-8')              . "\t" . 
       //mb_strlen($raw, 'UTF-8-MAC')          . "\t" . 
         iconv_strlen($raw, 'UTF-8-MAC')       . "\t" .
         urlencode($raw)                       . "\n";
    echo $nfc_iconv                            . "\t" .
         mb_strlen($nfc_iconv, 'UTF-8')        . "\t" . 
         iconv_strlen($nfc_iconv, 'UTF-8-MAC') . "\t" .
         urlencode($nfc_iconv)                 . "\n";
  //echo $nfc_normalizer                       . "\n";
}

実行.

$ php test.php 
KONBU	5	5	KONBU
KONBU	5	5	KONBU
こんふ	3	3	%E3%81%93%E3%82%93%E3%81%B5
こんふ	3	3	%E3%81%93%E3%82%93%E3%81%B5
こんぶ	4	3	%E3%81%93%E3%82%93%E3%81%B5%E3%82%99
こんぶ	3	3	%E3%81%93%E3%82%93%E3%81%B6

よって, NFDからNFCに変換する場合.

iconv('UTF-8-MAC', 'UTF-8', $raw)

PHP関数 iconv*( ) は「UTF-8-MAC」を知っている.


【2015-10-14 公開!!】Google I/O 2015 のソースコードに見るディレクトリ構成

d2f9b090-727a-11e5-96aa-b92347fe83f2

半年くらい遅れていましたが公開されている.

Oct 14, 2015, 5:41 PM GMT+9
Initial source posted. We'll be iterating on it a bit going forward. As always we welcome contributions.

PaulRashidi

I/O 2015 Source Code · Issue #139 · google/iosched

google_iosched

google/iosched

Androidアプリコード部分の基本的なディレクトリ/ファイル (モジュール/クラス) の構成をみる.

iosched/android/src/main/java/com/google/samples/apps/iosched/

機能別 (供用)

AppApplication.java
Config.java

provider/*Contract.java
provider/*Enum.java
provider/*Provider.java
provider/*Database.java (extends SQLOpenHelper)

receiver/*Receiver.java
service/*Service.java
util/*Utils.java

io/model/*.java
io/*Handler.java (extends JSONHandler)
io/JSONHandler.java

ui/BaseActivity.java

画面別

*/*Constants.java

*/*Activity.java
*/*Fragment.java
*/*View.java

*/*Adapter.java

*/*Helper.java
*/*Utils.java

*/data/*Data.java
*/*Model.java (interface)

直感的に分かりやすく整理されています.

ソースディレクトリの構成時にもっておくべき「会社別」のイメージ


消してしまった不要な通知を2度とこないように「通知履歴」から非表示設定する

朝起きたら

ふと気がついたら

どうでもいい通知が通知バーに満載.

screenshot-1445071325811

通知バーを開いてこれらを削除.

「通知をさせないように設定できる」ことはなんとなく知っているけど, なんだか面倒くさい.

などと思いつつ今日も何回も通知たちを削除する.

screenshot-1445071325811

なんだろうな, この毎度の無駄な動作.

通知の設定画面はいくつもある

設定が複雑な雰囲気がしてなんとなく設定することがおっくうになる.

例えば Twitter アプリからの通知表示を設定する場合, 以下の3つの画面から設定非表示にできる.

1. アプリの設定画面

通知を表示しているアプリを開いてそのアプリ内の詳細な設定画面で非表示にする.

20151017-100353

2. 設定の「アプリの通知」

Android(OS)自体の「設定」から.

「設定」-「通知」-「アプリの通知」-(通知しているアプリを選択)

20151017-100546

3. アプリ情報の画面

これも Android(OS)自体の「設定」.

「設定」-「アプリ」- (通知しているアプリを選択)

20151017-100635

それぞれの画面を見比べてみると, 「通知の設定」内の項目はいくつもあって, 画面によって項目が違う.

どのアプリが通知を表示していたのかわからない

通知のメッセージやアイコンを見てもどのアプリか分からないことがある.

タップするとPlayストアの見たこともないアプリのインストール画面が開くというインストールの勧誘. ブラウザが開いてサイトへの誘導もあったり.

普通にタップすると通知は消えてしまう.

通知を表示しているアプリ の特定ができないと通知の非表示設定はできない.

表示されている通知を長押しすると

表示されている通知を長押しで表示される i ボタンをタップでも 2.設定の「アプリの通知画面」を表示できる.

20151017-101731 3

ベルマークをタップすると 「通知のフィルタリング」画面へ記録されてアプリ名と通知の内容は残すことができる.

「設定」-「通知」-「通知のフィルタリング」

20151017-101731 2

が, めんどくさいのか, イラッとしてなのか, すぐに通知を消してしまう.

そして, また表示されることになる.

設定ウィジェットの「通知ログ」を使う

アプリをインストールする必要はありません.

設定項目別の「通知ログウィジェット」をホームに置いておきます.

20151017-100000

20151017-100027

20151017-100055

20151017-100109

タップすると, 通知を表示したアプリの履歴を最近順に見ることができます.

20151017-103438

消したい通知を見つけてタップすれば 3.アプリ情報の画面 が表示されるので「通知を表示」のチェックボックスをOFFにします.

20151017-100635

これなら通知を消したあとでも, かんたんに「アプリの特定」と「通知をOFF」を行うことができます.

通知が表示されない とかどうせブロックの設定だろ! → 原因「フィルター」