文字を*で伏せるsmartyプラグイン

該当文字と同じ長さの*で伏せるsmartyプラグイン

以下のファイル名で保存して。
smarty/plugins/modifier.hide_taboo.php

<?php
function smarty_modifier_hide_taboo($string) {
    $tabooRegexp = '/(ごはん|めんどくさい)/ie';
    $string = preg_replace($tabooRegexp, "str_repeat('●', mb_strlen('\${1}'))", $string);
    }
    return $string;
}

?>

$tabooRegexpの書き方は文字列と配列でどっちが早いんだろう。


使用例。テンプレート側。

{'ごはん食べるのめんどくさい'|hide_taboo} // ●●●食べるの●●●●●●

なんなのこの例文。すごく無気力な感じ。


プラグイン名のhide_tabooはしっくり来てない。
うまく「伏せる」っていうニュアンスを出せる英語が分かんない。
blind_tabooの方がいいのかな。


あとこんなもの作っておいてなんだけど、しっかり伏せたいなら何書いてるか分からないように「●●●」固定の方がいいな。
"fuck you"が"●●●● you"になっても何書いてるか分かるから。


関係ないけどこれ作ってるときにstr_repeatって関数を知った。

スレッドとAsyncTask

androidで通信待ちしてる間、ProgressDialog出しといて、通信完了したらダイアログ消す。


ということを実装してるときにhandlerやらlooperやら使ってスレッド処理してたんだけどAsncTaskとかいうクラスを使えばできるらしい。
(Looper使わないといけないような実装についてはAsyncTaskで出来るか知らない)

こっちは別処理とくればスレッド処理を自前で書かないといけない、と思い込んでるからそんなこと調べなかったんだけど、
AsyncTaskだとProgressDialog出しながら後ろで実行する枠組みがきれいにそろってるからそっちの方が全然楽そう。


正直ここら辺のことはあんまりよくわかってないので単語の使い方が間違ってるかもしれないけどなんとなく分かるよね。


こういう罠が怖い。
罠じゃないんだけど勝手におれの経験がありもしない道を作って、その道でも一応目的地にいけるから気づかないまま来てた。
もっと歩きやすい道があったのにね、という感じ。

言語設定を英語にしたらeclipseで開いたときに文字化けした

macbookの言語設定を英語にした。
スポットライト検索対象名とFinderのフォルダ名を英語にした方が楽なのでそうした。

以下の様に表示されるので書類フォルダに行くには"D"をキーボードで押せばよくなる。

書類 -> Document

手順はシステム環境設定>言語とテキスト>言語でEnglishをトップに変更。


設定を反映すべく再起動した。
なんとびっくり、eclipseで作業しようとしたらプログラム中に書いてた日本語が文字化けてる。


それはもう焦った。
日本語いちいち打ち直すなんてやってられん、と。
いまのところ2011年で一番焦った。


で言語設定を戻したら直った。
eclipseで表示のときに言語設定しなおさないといけないのだろうか。


これは誰が悪いのか。
eclipseのボケか、macか、おれか。


一番疑うべきは、、、そうか、おれか。

Matcherのfindとmatches

http://magpad.jugem.jp/?eid=127

findは部分一致でも真だけど、matchesは全体一致じゃないと真にならないそうで。
知らんかった。


こんなんもあったな、忘れてた。

String str = "hogehogeho";
if (str.startsWith("hoge")) {
  ...
}

PS3でビデオチャットできなかったけどUPnPをオフにしたらチャットできた[8002B711]

PlayStation3ビデオチャットをしようとして、相手に招待されて繋ぎに行くと8002B711というエラーコードが画面右上に表示された。(こちらからチャットを招待した場合にエラーコードは表示されなかった)

UPnPをオフにしたら繋がるよ、という書き込みがあったのでとりあえず両方のマシンでUPnPをオフにして試してみたらうまくいった。


このエラーコードがどういうものか分からないけど一つのケースとしてUPnPをオフにするとうまく行きました、という話。

シングルユーザモードでUSBのマウント

macbookproが起動しなくなって焦ってたけどシングルユーザモードでは立ち上がった。
急ぎで取っておきたいデータは取っておこうということで、USBをマウントしてデータを取り出すことにした。


が、よくわからない。

mount -t msdos /dev/sda1 /mnt/usb

おおむねこんな感じでいけるらしいんだけど/dev/以下にそれらしきものが無い。
dmesgコマンドでもよくわかんないし。


しょうがないのでUSBを抜いてるときの/dev以下のファイル(デバイス?)とUSBを差したときの/dev以下のファイルを見比べてそれっぽいのを見つけた。


そうしたところ以下の4つが該当。

  • /dev/disk1
  • /dev/disk1s1
  • /dev/rdisk1
  • /dev/rdisk1s1
fdisk /dev/disk1

として、disk1s1がそれっぽいので適当にマウントしてみたらうまくいった。

mount -t msdos /dev/disk1s1 /mnt/usb

ちなみに/mnt/usbなどというディレクトリは無かったので作ろう(mkdir)と思ったけど作れなかった。Read-onlyとかなんとか。


なので、既存の消えてもいいディレクトリにマウントした。
例えば /Users/mikans/Documents/hoge とか。
マウントしたら元あったディレクトリの中のファイルたちは見えなくなってUSBの中身が見えてた(そうじゃないと困る)ので/Users/mikans/Documents/hogeの中身はなくなったかと思ったけど、umountしたら以前のものがあった。

umount /dev/disk1s1

データが取り出せるということはその部分についてはデータが壊れてないってことだと思う。よくわかんないけど。

めでたしめでたし。


ちなみに故障の原因はハード的な損傷ではなくて、パーティションの区切りが壊れてファイルにうまくアクセスできなくなってるらしい。
なのでOSの再インストールで直るとのこと。


すべてのデータ取り出したい場合は3万円で取り出してくれるらしい。
アップルにお願いしてください。

大きな画面サイズに対応する

Google グループ
galaxy tabエミュレータ入れて実行したらずいぶん余白ができるので何事かと思ったらマニフェストに大きい画面サイズに対応する旨を書くらしい。(↑Yahelさんの質問とその回答)


Screen compatibility overview  |  Android Developers

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  ...
  <supports-screens
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:anyDensity="true" />
  ...
</manifest>

アンドロイドのページにある通り対応画面サイズをAndroidManifest.xmlに追加して対応。

すぱしーば、Kostya Vasilyevさん。


Dev Guide読まないといけないな。
Developer Guides  |  Android Developers