「aaa」を含む日記 RSS

はてなキーワード: aaaとは

2011-10-19

docomoがIMEIを送出!のどこが問題なのか。素人が考えてみた。

今年冬以降に発売されるandroid端末のメディアプレイヤーHTTPヘッダのUser-Agentおよび拡張ヘッダにIMEI番号が含まれるということが分かり、騒動となった。

カレログapplogに続きNTTドコモが参戦? - http://togetter.com/li/202490

NTT docomo IMEI垂れ流し問題 http://togetter.com/li/202536

まず、

(1)IMEI送出のソース

音楽動画 | サービス機能 | NTTドコモ

http://www.nttdocomo.co.jp/service/developer/smart_phone/service_lineup/music_movie/index.html

魚拓http://megalodon.jp/2011-1019-1834-56/www.nttdocomo.co.jp/service/developer/smart_phone/service_lineup/music_movie/index.html

こう記述されている。

Android端末の一部機種では、音楽動画コンテンツ再生するためのメディアプレイヤードコモプリインストールします。

メディアプレイヤープリインストールされる機種は2011年度下期モデル以降の主なAndroid端末となります

ユーザエージェント

メディアプレイヤーHTTP通信を行う際のUser-Agentヘッダは以下となります



User-Agent:<SPDOCOMO/2.0SP>[AAA](MP;[BBB];Android;[CCC];[DDD]);imei:[xxxxxxxxxxxxxxx];networkoperator:[yyyzz]<CR><LF



SP>:半角スペース

CR><LF>:改行コード


[]以外は固定値

AAA:機種名

BBB:メディアプレイヤーバージョン

CCCOSバージョン

DDDビルド番号

xxxxxxxxxxxxxxx[15桁]:IMEI

yyy[3桁]:Mobile Country Code

zz[2桁]:Mobile Network Code

HTTP通信時の拡張ヘッダ付加情報

メディアプレイヤーHTTP通信を行う際は、以下の拡張ヘッダが付与されます



x-dcmstore-imei:<SP>xxxxxxxxxxxxxxx<CR><LF

SP>:半角スペース

CR><LF>:改行コード

xxxxxxxxxxxxxxx[15桁]:IMEI


(2)IMEI番号とは何か

ケータイ用語の基礎知識http://k-tai.impress.co.jp/cda/article/keyword/43518.html

によれば、

携帯電話データ通信カードが1台ずつ持っている識別番号です。原則として、各端末は1台1台、異なる番号になっています

IMEIは、1台ずつに違う番号が割り振られていて、USIMカードなどを差し替えても変わることはありません。

とある

端末に固有の番号であるという認識でよいだろう。パソコンで言うMACアドレスのようなものだ。


問題の切り分け

重複する部分もあるが、いくつかの問題が含まれているように思える。

twitterで見られた反応をいくつか整理してみた。

(a)共通・不変のIDであること

これが最も大きい問題。twitterでIMEIってつぶやいている人の大半はこれを問題視している。



IMEI番号をそのまま送信している。

すなわち、コンテンツプロバイダ(CP)Aにも、CP-Bにも同じ番号が送信されている。

まり空間的に広く使われている。

CP-AとCP-BでIMEI番号を突き合せて、収集した情報リンクさせることができてしまう。



IMEI番号は端末に紐付けられている。

したがって端末を買い替えない限り番号は変わらない。

まり長い時間、追跡され続けるということだ。



時間軸にも空間軸にも広く共通のIDが使われ続ける。

これが問題。

(a-1)過去の事例

10年以上前から同じことが繰り返されているため、空間時間的に広い共通IDを使うことの「何が問題か」知りたいなら過去の事例を参照するとよい。

高木浩光氏による行動トラッキング歴史と境界線についての備忘録 http://togetter.com/li/197732

インターネットにおけるIDトレーサビリティ(2003年)高木浩光http://www.nic.ad.jp/ja/materials/iw/2003/main/ipmeeting/panel-takagi.pdf

Tracking Cookie - Symantec http://www.symantec.com/ja/jp/security_response/writeup.jsp?docid=2006-080217-3524-99

(b)機種変更中古端末での不安

まだIMEI送信機能付きandroid端末が発売されていないので、どういう実装か不明のため、これは想像上の懸念だ。



このIMEI番号送信機能は、おそらくDRMに利用することが目的の一つだろう。

特定の機種でのみ購入した音楽再生できる機能が組み込まれている可能性がある。

その場合機種変更をするとIMEI番号が変わるために購入したコンテンツを利用できなくなる可能性がある。

あるいは一人で二台以上の端末を所有する場合、どちらか一方の端末でしかコンテンツが利用できない可能性もある。

実際、iPhoneにおいて似た事例が発生していた。認証にUDID(端末固有ID)を用いていたアプリ機種変更ののちに使えなくなる事例があった。



また、それまで利用していた端末をオークション等で販売する可能性もある。

その場合、端末の新しい所有者が、古い所有者の購入したコンテンツを利用できてしまう可能性もある。

ただしこれらは想像上の懸念だ。

(c)セキュリティの問題

UserAgentまたは拡張ヘッダに記述されたIMEI番号をもとに認証を行うサイトの出現が懸念される。

参考:かんたんログインの事例 http://www.atmarkit.co.jp/fsecurity/rensai/keitaiweb02/keitaiweb01.html

そもそもIMEI番号の取得はかんたんだ。

友達不用意にその辺に放置した端末で「*#06#」と入力すれば取得できてしまう。



あるいは、動画の置いた罠サイトを用意して

ユーザアクセスさせればドコモがIMEIを送信してくれる。

送信される番号はどのサイトに対しても共通なので、他のサイトで使うことができる。



そしてなりすましも容易だ。

とか。


ここまでしてIMEI番号を送りたいドコモの狙い

恐らくDRMへの活用と広告への活用ではないか

ぼくよくわかんない><

終わりに。

プライバシに関する専門家でもないので、補足訂正おねがいしまーす。



あと、この問題を扱うに当たって、何を「個人情報」だとするのかとらえ方が人によって違うことに注意したほうが余計な労力を使わなくて済む、と思いまーす。



# 増田でははてな記法が一部使えますって。

# 非対応大杉イライラするわ♡

# 来年インターンシップ生で改善してよ。

2011-09-29

[][]windows7 関連付けができない場合

レジストリを起動する

レジストリの内容を参照/編集するには[スタートボタンクリックして検索ボックスに「regedit」と入力

HKEY_CLASSES_ROOT\Applications\********.exeまでいく (applicationという似た名前があるので混同に注意)

(規定)を右クリック

値のデータ のパスを削除して「OK」

その後再起動する


パーティション分割してファイルをDドライブに移動させたりすると関連付けできなくなる。


http://menushowdelay.blog13.fc2.com/blog-entry-302.html

関連付けを設定できません

※' 09年4月追記 以下はVistaにも有効。

WindowsXPsSP2を使用しています

以前は問題なく動作していたアプリケーションなのですが、ファイル右クリックから、このアプリケーションで開くことだけができなくなりました。

アプリケーションを開いた後で、ファイルウインドウ内にドラッグ&ドロップすることならできます

ファイル右クリックプロパティ→全般→プログラム:変更→ファイルを開くプログラムの選択→参照→プログラムから開く

で実行ファイルを選択することで、普通は「ファイルを開くプログラムの選択」ダイアログに戻って一覧に選んだプログラムが表示されるはずなのですが、このプログラムけが表示されなくて困ってます

テンプレ突撃は @@A200622819@@ /3

ひょっとして、導入後にフォルダごと移動したりしませんでしたか

レジストリを一切いじらずにインストールが可能なアプリケーションでも、実はこの「プログラムから開く」の「プログラムの選択」で参照してしまった場合Windows2000/XPでは

HKEY_USERS\(ユーザー識別子)\Software\Classes\Applications

以下に登録されます。別の見方をすると、こうして登録された後で「レジストリを一切いじらないアプリから」 という理由でフォルダごとどこかに移動したり、フォルダ名をリネームしてしまうと、先のレジストリ記述に不整合が発生し、以降はその不整合を直接編集によって書き換えたり値のデータを削除したりしない限り、永遠にそのプログラムで開くことができなくなるという不具合を生みます。「ファイルを開くプログラムの選択」ダイアログの「参照」ボタンをたどって移動先やリネーム後のアプリケーションを指定しても、エントリは正常に書き換えられることはありません。直接編集以外に道はないのです

スタートボタン→「ファイル名を指定して実行」→ regedit と半角で入力してEnterキーを押下します。

開くレジストリエディタで、下記のサブキーをたどります

HKEY_USERS\(ユーザー識別子)\Software\Classes\Applications

以下に該当アプリケーション名のキー存在したら、とりあえずバックアップをとってからキーを丸ごと削除します。

再起動して現象が解消されているかどうかを確認します。

解消されないようでしたら、バックアップを書き戻します。

バックアップとその書き戻しについてですが、今回の事象場合はreg saveコマンドを利用する必要はなく、該当キーを選択した状態で、右クリックエクスポートを選択し、名前適当に「aaa.reg」とでもつけて、デスクトップあたりにでも保存すればよろしいかと思われます

該当キーを削除しても、OSが起動しなくなったり、デスクトップ画面までたどり着かないようなことは一切ありません。

Vista場合レジストリエントリ

HKEY_CLASSES_ROOT\Applications\********.exe

だったという例あり。併せて確認されたし。

2011-08-18

小学校読書感想文教育上、たいへん有害である

 なぜ、読書感想文有害であるかを説明しよう。

AAA. 読書感想文は 作文能力 の訓練である

BBB. 読書は 知識吸収と読解能力 の訓練である

この2つの能力比較した場合

どちらが人間にとって、より重要であるか考えてもらいたい。

答えは、

読解能力 >>>>>> 作文能力 である

なぜかというと、

一度も作文をせずに人生80年を過ごす事は可能であるが、

一度も文章読解をせずに人生80年を過ごす事は不可能だからである

(極端な話、市役所郵便局手続きでさえ、

読解能力がなければ説明書きを読めないので一人で手際よく進められない。)

 さて、話を戻そう。読書感想文によって、

読書が嫌いな子供が増えているという事実を思い返してもらいたい。

読書感想文という、作文能力を高める訓練を行えば行うほど、

子供読書が嫌いになってしまうのである

「作文能力を高める訓練」を行えば行うほどに、

「読解能力を高める訓練」から不幸にも子供がどんどん遠ざかっているのである

まったく本末転倒、これでは何もしない方がマシだ。

 読書を嫌いにさせてまで、

すなわち、読解能力を下げてまでして、子供の作文能力を高める必要などあるのだろうか?

(いや、ありはしない!)

 文部省の人、この記事、見てますか?

作文能力よりも読解能力の方が絶対的に重要であるのだから

まず 「読書を嫌いにさせない」 というのが最優先事項じゃないでしょうか。

ちなみに神戸卒TOEIC700です。 ( '‘ω‘`)

2011-05-10

モテる音ゲー女子力を磨くための4つの心得「初音ミクを知らない女をアピールせよ」等

こんにちは音ゲー恋愛マネジメントを専攻しているマリー・アントワネット(黒)です。私は学歴も知識もありませんし七段ですが、机上の音ゲーマーの恋愛論に関してはプロフェッショナル。今回は、モテる音ゲー女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

1. あえて2~3世代の音ゲーゲーセンで遊ぶ

あえて2~3世代前の音ゲーを遊ぶようにしましょう。ミクやユビはプレイヤー層が比較的若くリア充度が高めなので、十分なルックスがないとただ音ゲー女子であるというだけでは相手にされないためお勧めできません。っていうかあんなヌルい音ゲーよりもデラを遊べ。音ゲーの至高も究極もデラにこそ存在する。デラを遊ぶんだ。

そしてゲーセンで今どきデラで遊んでる時代遅れの男がいたら話しかけ、わざとらしく自分もデラにコインを入れて遊んでみましょう。そして「あ~ん!八段って本当にマジで最後ゲーなんですけどぉぉお~!」と言いながら華麗にギガデリを繋いでSP八段を100%クリアして、男に「なにそれすげえ」と言わせましょう。言わせたらもう大成功。「音ゲーとか詳しくなくてぇ~! ずっとIIDXだけ遊んでるんですけどぉ~! 難しいですぅ~! ワッツアップオール(顎)」と言いましょう。だいたいの時代遅れ音ゲーマー男は最新のゲームを遊びたがる最近の世代に引け目を感じる習性があるので、最近音ゲーとしてもせいぜいハローポップンミュージックあたりを遊んでいるはずです

そこで時代遅れ男が「新しい音ゲーを遊ばないの?」と言ってくるはず(言ってこない空気が読めない音ゲーマーは実は一緒にミクで遊べる可愛くて年下の彼女が居る可能性が高いのでその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ~! 最近ビジュアル重視の音ゲーが人気なんでしょー!? あれってどうなんですかぁ? ニコ動系遊びたいけど操作方法わかんなぁぁああい!! 私かわいそーなコ★」と返します。すると男は「ミュージックガンガンでしょ? チュートリアルを使えばいいよ。本当に良くわからないみたいだね。どんな曲が選びたいの?」という話になって、次の休みの日にふたりでHeyに行けるというわけですミューガンだけにね)。あなた女子力が高ければ、男が(そろそろ中古市場にダブついてくるであろう)筐体買ってくれるかも。

2. GAMBOLでAAAを出すとモテる

「キャー!(家庭用ANOTHERトラウマ脳内に再来)」とか「恐ろしい!(判定が)」などを表現する「GAMBOL」と戦うと、ギャラリー男性プレイヤーが「ズズタン ズズタン」や「ワォワォワォワォ(GOOD 1)」と思ってくれますギャラリー男性プレイヤーは自力で「GAMBOL(A)」に辿り着くことができないので、男性あなたを人力リズムマシンのようなすばらしい女の子勘違いしてくれるのです。そういうキャラクターにするとニコニコ動画で「人外」のようなタグを付けられますが、気にしないようにしましょう。

3. とりあえず男には「えー! なにそれ!? 知りたい知りたーい♪ま、なにはともあれBUCHIAGEってコトで。It's so fabulous!!」と言っておく

飲み会などで音ゲーマー男が女性に話すことといえば20,Novemberを初めてクリアしたときの自慢話や大昔のあるあるネタ「人のプレイ中に2P側で知らない子ども勝手に練習を始めがち」の話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「山笠があるけん、」とか「博多ったい!」と返してしまうと、さすがの男も上から目線で話されていることに気がついてしまいます。自分も「バックスピンスクラッチを見るとフリーゾーン勘違いするよね」とか話したいくらいの古参だとバレたら終わりです。そこは無意味テンションをあげて「we can fly...」と言っておくのが正解。たとえ興味がない話題でも天空脳番長危機十六連打とか昭和企業戦士荒山課長の話題でその場を乗り切りましょう。小難しそうな漢字の羅列に男は弱いのです

いろいろと話を聞いたあと、「IIDX日本語版で、DDR英語版なんですね!覚えたぞぉ!INJECTION OF LOVE!」とコメントすればパーフェクト。続けて野菜を摂りながら「干物でこらしめろ!干物でこらしめろ!」と言って、男に腹筋背筋させるのもアリ。そこで「私のカルロスも泣かなきゃでありますっ☆」と言えば女子力アップ!そこでまた男は「この子おもしろくてカワイイかも!?」と思ってくれます。私は学歴も知識もありませんし改変もとっくに飽きてますが、こういうテクニックを使えば女子音ゲーマーはモテたりするのです

4. 即売会では初音ミクPROJECT DIVAを知らない女をアピールせよ

男と即売会に行ったら、真っ先にボカロブースを探して「あ~ん!私これよくわからないんですよねぇ~(悲)」といいましょう。するとほぼ100パーセント「どうして?ニコニコ動画見てないの?」と聞かれるので「見てるし遊びたいけど遊べないんです><」と返答しましょう。ここでまた100パーセントニコニコ動画見てるのにどうして遊べないの?」と聞かれるので、うつむいて3~5秒ほど間をおいてからボソッとこう言います。「……だって、……だって、あの人たちDTMもしてないのにゲームしてるじゃないですかぁっ!クリプトンがかわいそうですぅ!まだパッケージずっと見つめてもいないのにぃぃ~(悲)。みっくみくとすら言えないんですよ……」と身を震わせて言うのです

その瞬間、あなた女子力がアップします。きっと男は「なんて気高いガチ音ゲーマーなのだろう!絶対にゲットしてやるぞ!コイツは俺の女だ!」と心の中で誓い、あなたに惚れ込むはずです。意中の音ゲーマーと付き合うことになったら、そんなことは忘れて好きなだけボカロCDを買って大丈夫です。「ボカロからないんじゃなかったっけ?」と言われたら「ニコニコ動画勉強した」とか「歌ってみたデビューした」、「っていうか今度CD出すし」と言っておけばOKです

(文=弐寺原理主義音ゲーナビゲーターマリー・アントワネット(黒))

2011-03-20

より良いPHPerにならないための20Tips

http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/

良いPHPerだって?そんなものは丸めゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。

つまり俺たちがしなくちゃならないことは「より良いPHPerにならないため」に何ができるかってことなのさ。

それじゃ、始めよう。

1. ?>を使うな

?>なんて使っちゃいけない。そう俺たちはBAD PHPer。

無駄ホワイトスペースの出力に悩まされるくらいなら対称性なんて丸めゴミ箱にでも捨てた方がまだマシだ。非対称性こそが賛美。

2. 設定ファイルPHPで書くな

require_once("config.php");

未だにこんなことやってるやつがいるのかいベイベー。絶対にダメだ。この一行を見たら俺は悶絶する。

ダメだ、早く何とかしないと。

大抵このconfig.phpの中身はこうなっている。見て絶望だ。

$hoge_path = '';
if (!LOCAL) {
    define('FOO_FLAG', 1);
    if (HONBAN) {
        define('HOGE_FLAG', 1);
    }
    else if (TEST) {
        define('HOGE_FLAG', 2);
    }
}
else {
    $hoge_path = '/local';
    define('FOO_FLAG', 2);
    define('HOGE_FLAG', 3);
}

define('HOGE_URL', $hoge_path.'/hoge/');

こういうのが延々と続くわけだ。もういやだ。もう見たくない。

本番環境テスト環境でどういう値の違いがあるのか、ローカル環境だとどうなるのか、まったく把握できる気がしない。

なまじPHPな設定ファイルのせいで処理をついつい書いてしまう。そしてどんどん複雑になってしまう。

やはり設定データは基本的にYAML等のデータしか定義できない形式のもので用意すべきだ。そして環境ごとに設定ファイルを分けるべきである

そうすることで何にどういう違いがあるのかすぐにわかるし、diffすれば一度にすべて把握することができる。

# 本番環境設定ファイル
foo_flag: 1
hoge_flag: 1
hoge_url: '/hoge/'
# テスト環境設定ファイル
foo_flag: 1
hoge_flag: 2
hoge_url: '/hoge/'
# ローカル環境設定ファイル
foo_flag: 2
hoge_flag: 3
hoge_url: '/local/hoge/'

3. コメントを信用するな

そう、あなたはこんな状況に遭遇したことがあるんじゃ?

// ここで後の処理のためにhogeメソッドを呼び出しておく
$q->foo();

// $a['foo']はここに来る時点で真のはず
// 2010-03-10 判定がおかしいので修正
// 2010-06-21 やっぱり値が入ってる方が正しい
if ( !isset($hoge[0]) ) {
}

コメント保守されない。そう、それは真実。こんなコメント発見したら即効削除しよう。コメントは基本信じるな。

俺たちにちょっとしたヒントと大きな損害を与えてくれる、それがコメントの役割なのだ。

4. タブとうまく付き合うしかない

わかる。いいたいはとてもわかる。俺たちはしばしばインデントにスペースを使うはずだ。一方でIDEのしっかりした言語ではタブも使うことがある。しかし悪いことに、両者を混同しているプログラマも一定数いるのだ。

タブを画面上で認識しにくいエディタが世の中には存在する(何とは言わないが)

そして画面上で認識しにくいことを理由にタブを気にしないプログラマがいる。

この二つの条件が重なると、タブとスペースの交じり合ったインデントが完成する。もうぐちゃぐちゃだ。これは永遠に続く戦いだ。

私たちが勝利を掴むためにできることなどせいぜい、常にスペースしか使わない。タブを見つけたらその都度スペースに変換する。そういった地道な活動が明日へとつながるのだ。

5. 変数名に時間をかけるな

われわれがプログラムをするとき、何に一番時間がかかってるか。実は変数の命名なのである。ここで拘り過ぎて時間をかけ過ぎては何も進まない。

御託はイイからさっさと書け、だ。しかしとはいっても変数名は重要。日頃からどういうときにどんな名前を使うかを決めておくといい。

そして変数名に型はまったく必要ない。型宣言のないPHPにおいて、型の変数名をつけること自体ナンセンスだ。

コンパイラ様に保証されてない状態での

$iNumber = 'aaa';

になんの意味もない。コメントを信じるなでも言ったが、これはプログラマを混乱させるだけの害悪なものだ。

6. 変数初期化場所

変数を使う前に初期化するのは、警告を出さないという意味でも良い癖だ。しかし具体的にどこでやるかが問題だ。

$foo = null;
$foo = $q->foo();

こんな初期化意味はない。よくあるのはやはり、if文で値を振り分けるケースだろう

$foo = null;
if ( $hoge ) {
    $foo = 1;
}
else if ( $bar ) {
    $foo = 2;
}

このとき初期化はとても有効だ。もしnullの初期化を忘れたまま$fooを使うと警告が出るが、ちゃんと初期化してるので出ない。基本中の基本だ。

7. 不正なら常に死ね

function getStatus() {
    $bReturn = false;
    if ($i == 2) $bReturn = true;
    return $bReturn;
}

(中略)

もし、何かしらの理由で、あなたの書いたif文が間違っていたら?

この書き方をしていれば、間違った値に対して、常にfalseが返る。

私たちが、PHPでsensitiveなデータを取り扱うなら、正しいデータ入力されるまでは、動かないコードを書くべきだ。

trueとfalseの条件がいまいち明確ではないが、本当に動かないコードを書けというのであれば以下のようにすべきだ

function getStatus() {
    $bReturn = false;
    if ($i == 2) $bReturn = true;
    else if ($i == 1) $bReturn = false;
    else throw new Exception("bad status! $i");
    return $bReturn;
}

中途半端にfalseを返して生存させる必要性はまったくない。今すぐ死ね

8. 連想配列キーアクセスする場合

単なる配列に対して数値をクオートで囲う必要はない。

連想配列キーを指定する場合だけ定数と間違わないようにクオートで囲まなければならない。そして逆に定数を使いたい場合はクオートで囲ってはいけない。

更に後世のプログラマ処理を見たときに、定数が使いたかったのか、文字列が使いたかったのかを明確にした場合はconstantを使うと良い。

// 定数のFOOを使うよということが明確になる
print $a[constant('FOO')];

9. echoよりもprintfを使え

もし、文字列変数の値と一緒に出力するときPHPではコンマの代わりにprintfを使うことが使える。

なぜ?コンマを使うよりも可読性がグッとあがるから

printf( “Hello, my name is %s“, $sName);

以下の代わりに上記のコードを使う。

echoHello, my name is “, $sName;

出力すべき変数が増えれば増えるほど、有効になっていく。とにかく迷ったならば、printfを使え、だ。

10. 三項演算子は一回まで

三項演算子はとても有効だ。しか優先順位に難があるせいで三項演算子ネストしようとすると以下のようなコードになってしま

$n = (($i == 1) ? 2 : (($i == 2) ? 3 :$i));

括弧だらけで読みにくいったらありゃしない。三項演算子を使うなら一回まで。約束守れないやつは丸めゴミ箱にでも捨てちまえ。

11. 真偽値のチェックは生でいけ

if ( $flag ) {
}

仕様をちゃんと把握しているなら真偽値のチェックなどこれで十分。

もし事前にbool型だというのが確定してるのなら「$flag === true」を使えばいい。

12. ++と--の演算子を見極めろ

インクリメント、デクリメント演算子は前に付くか後ろに付くかで意味が変わるので慣れるまでは非常にややこしい

けがからなくなるくらいなら初めから使わないほうが良い。見極められないなら使うな。それがPHPerなのだ。

13. 代入演算子を使え

文句なしだ。これは文句がない。

他にも色々あるので覚えておこう

$a %=  1;
$a &=  1;
$a |=  1;
$a ^=  1;
$a <<= 1;
$a >>= 1;

14. 変数dump関数はより便利に

てっとり早く画面に表示する際にpreはよく使うが、デザインの関係上画面の文字が見えないときがある。

なのでdivを使って以下のようにしとくと便利だろう。

function p($var) {
    echo "<div align='left' style='background-color:white;color:black;'><pre>";
    print_r($var);
    echo "</pre></div>";
}

15. 定数から手を洗え

君らが通常作るアプリケーションなんぞに、定数なんぞ必要ない。いいか、もう一度言う、お前ら程度のもんが、定数使おう何ぞ、おこがましいわ!

大丈夫。なんでもかんでも定数にする必要はない。結局設定ファイルに定数をずらずら作りまくってわけがからなくなってるパターンが多い。

貴様たいなもんに、定数は制御できん。いいか設定ファイルYAML等のデータで持つようにし、その連想配列データ構造を一つ持ってるだけで定数の変わりになる。

このメリットに比べれば、定数だと書き換えられなくて良いという利点などこの歯のカスほどのものだ。そんなものは丸めゴミ箱へ捨ててしまうといい。

認識を改めろ。俺たちはより良いPHPerにならないために努力している。

16. $_GETと$_POSTを生で使うな

できれば何かしら簡単なクラスでもいいのでラップしろ。

class Request {
    private $parameters;
    private $method;
    function __construct () {
        $this->method = $_SERVER['REQUEST_METHOD'];
        if ( strtoupper($this->method) === 'POST' ) {
            $this->parameters = $_POST;
        }
        else {
            $this->parameters = $_GET;
        }
    }
    function param ($key) {
        return isset($this->parameters[$key]) ? $this->parameters[$key] : null;
    }
}

これだけでもいい。たったこれだけでもとても便利だ。ここから拡張してGETやPOSTを明示的に取るメソッドとかも作ってみるといい。自分の手を動かすのだ!

17. 関数だのオブジェクトだのの問題ではな

例が良くない。こんなのは引数20個ある関数からset20回呼ぶオブジェクトに変わっただけではないか

そもそもこの20個の引数はなんなのか。何かのデータ構造なんであれば連想配列にして引数一つとして渡すべきだし、それぞれまったく異なる用途の変数なのであればWindowsプログラミングじゃあるまいし20個も引数取る時点設計が間違えている。

何がいいたいか。別に関数でもオブジェクトでもどっちでもいいということだ。

そんなことで悩んでる暇があったら設計を見直せ。

18. メソッドチェインを愛用せよ

スキあらば自分自身を返せ。スキあらばオブジェクトを返せ。配列はArrayObjectのARRAY_AS_PROPSで返せ。

ひたすらメソッドチェイン。来る日も来る日もメソッドチェイン。とにかくメソッドチェインを使い続けろ。そこに未来はある。

19. コードの汎用化は慎重に

どんなコードも繰り返すな。もし、少しでも同じコードを書いていたなら、それは関数に置き換えてしまえ。

・・・と、いうのはやめなさい。

一見同じように見えた処理でも前後の流れでまったく違うものということが往々にしてある。

まとめ方にも問題があるケースもある。何でもかんでも関数化すると、関数が膨大に増えていく。君は見たことがあるだろうか。common.phpやfunction.phpの恐ろしさを。

かに細かく関数化はされているが、適切に関数化していないのである。結合度が非常に高い。なんでもかんでも盲目的にまとめれば良いという話ではないのだ!

20. 結合度は適切に減らし、適切に結合せよ

あまりに極度に意識しすぎると、プログラムそのものができなくなる。そういう状態に陥る。

気を抜いて。そう気を抜いて。所詮あなたコードなんてすぐに消えてなくなるよ。きっともっと偉い人が作り直すよ。だからまずは思うが侭にやるといい。

結合度を減らすというのは非常に難しい何度何度も失敗し続けて、ようやくここは分けた方が良かったんだなと気付く。次に活かそうと心に決める。そしてまた同じ過ちを繰り返していくわけだ。

まずは実装することだ。これが一番の早道だ。まずはがっつり結合した関数をあえて作るといい。何も考えずに作ろう。

そしてその後に、一部分使いましたいとおもうことがあるはずだ。その時に関数に切り出そう。それを繰り返すといい。そのうち初めから分けた方が良いと気付く。

何事も経験が必要である経験を積まないプログラマ丸めゴミ箱に捨ててしまえ。

さて、先の例で言うならば、私ならadd_result_outputという関数を作ってしまうだろう。だってaddとresultを連続して呼ぶのはめんどくさいんだもん。一連の流れをいつも使うのなら、その流れをやってくれる関数を作ればいいじゃないか

function add_result_output ($iVar, $iVar2) {
    $r = add($iVar, $iVar2);
    echo result($r);
}

もっと言えばクラス化してしまってもいいかもしれない。どんな感じになるかは君の手を動かして確認しよう!


最後

このTipsはとてもわかりにくく、ニッチ過ぎる部分も多いかもしれない。

しかしもう一度タイトルを確認してほしい

あくまでも「より良いPHPerにならないための20Tips」なのだ。

君はこの記事を鵜呑みにしてはならない。PHPPHPと見抜けないPHPerはPHPを使うのは難しい


おまけ

もし、あなたPHPプログラマなら、公式のPHPドキュメントあなたのケツの穴を拭くための紙になるだろう。

私は、それぞれのセクションを眺めて、各関数でどんなことが出来るかなんぞ、歯クソのゴミ程に役に立たないとおもっている。動けばいい。はは。

あなたは、PHPで用意された既製関数で多くのことが実現できることに、(俺の仕事を減らすなと)驚くはずだ。

この記事があなたの役に立たない事を。

どんなコメントでも待ってます

ふざけんな!


個人的な感想

この記事に書かれている内容は、丸めゴミ箱に捨てた方が良いレベルです

もしここまで読んでしまったら、丸めゴミ箱に捨てましょう。



プログラ増田のあなぐら

2010-12-22

タイアップから見た、2010紅白歌合戦の曲目

これで何が分かるっていうものでもないけど

民放

出演者 曲目 タイアップ 備考
EXILE I Wish For You TBS系「2010世界バレー  
AAA 逢いたい理由 NTV二匹目のどじょう 小室哲哉復帰作としても
コブクロ 流星 CX流れ星  
徳永英明 時の流れに身をまかせ CXウチくる!?」 テレサ・テンカバー
福山雅治 道標 NTVNEWS ZERO 本人が大河ドラマ龍馬伝」に主演
FUNKY MONKEY BABYS 「あとひとつ ABC夏の高校野球」「熱闘甲子園  

映画

出演者 曲目 タイアップ 備考
aiko 向かいあわせ ダーリンは外国人  
flumpool 君に届け 君に届け  
水樹奈々 PHANTOM MINDS 魔法少女リリカルなのは The MOVIE 1st 声優シングルオリコン1位としても

CM

出演者 曲目 タイアップ 備考
DREAMS COME TRUE 生きてゆくのです♡」 大塚製薬ポカリスエット  
西野カナ Best Friend NTTドコモガンバレ受験生NTV音楽戦士 MUSIC FIGHTER」  
Perfume 「ねぇ」 サンエー・インターナショナルNATURAL BEAUTY BASIC  
浜崎あゆみ 「Virgin Road」 エムティーアイ「music.jp  
SMAP This is love '10 SPメドレー」 ロッテグリーンガム」/CXSMAP×SMAP  
TOKIO advance ヤマト運輸「新!宅急便  
坂本冬美 また君に恋してる 三和酒類いいちこ日田全麹」 ビリー・バンバンカバー

NHKゆかりのある曲として】

出演者 曲目 タイアップ 備考
アンジェラ・アキ 輝く人 こころ遺伝子  
いきものがかり 「ありがとう」 ゲゲゲの女房  
HY 「時をこえ」 ドキュメント「僕らが伝えなきゃ ~HY沖縄から“命”を歌う~」 この曲が該当するのかは未確認
平原綾香 「Voyagers」 ダーウィンが来た!生きもの新伝説  
L'Arc-en-Ciel 「BLESS」 オリンピック バンクーバー2010  

タイアップ無さそうな曲】

出演者 曲目 備考
植村花菜 トイレの神様 有線とかで話題になった曲
クミコ 「INORI~祈り~」 有線とかで話題になった曲
ポルノグラフィティ 「君は100%」  
遊助 「ひと」 ソニーの公式には「マルコメTVCM」とあるけど、この曲じゃなくね?

【メドレーなので割愛】

出演者 曲目 備考
AKB48 紅白2010 AKB48神曲SP  
倖田來未 「KODA KUMI 2010 Special Medley」  
和田アキ子 AKKOイイッ! 紅白2010スペシャル  
「2010紅白オリジナルメドレー」  
NYC よく遊びよく学べ 100%NYC  
加山雄三 若大将50年スペシャルメドレー」  
郷ひろみ GO! GO!イヤー紅白スペシャルメドレー」  

演歌(今期の新作として)】

出演者 曲目
五木ひろし 「おしろい花」
小林幸子 「母ちゃんのひとり言」
天童よしみ 人生みちづれ」
氷川きよし 虹色のバイヨン
水森かおり 松島紀行」

演歌(定番曲として)】

出演者 曲目
石川さゆり 天城越え
川中美幸 「二輪草」
伍代夏子 「ひとり酒」
中村美律子 河内おとこ節」
北島三郎 風雪ながれ旅
細川たかし 浪花節だよ人生は」
森進一 襟裳岬

2010-08-24

http://anond.hatelabo.jp/20100824213136

(今は見たことも無いという人もいるとはおもいますが)

最近電話帳(都内)を見ましたら「AAA」から始まってました。興信所とか引っ越し業者だとかの人の、みたいです。

2010-06-19

間違ってたらごめん

ブラジャーのサイズに見られる、B75などの記号についてのお話しをしようじゃないか

このアルファベット部分は一般にカップ数と呼ばれ、トップバストとアンダーバストの差を表す

基本的に10cm差のAから始まり(AAAAAなども存在はしているが)、2.5cm刻みでサイズが大きくなっていく

Dカップは17.5cm、Eカップは20cmほど、トップとアンダーに差があることになる



アンダーバストとは、おっぱいの下側、一番細い部分の外周。アルファベットの後ろについている数字がそれだ

そしてトップバストとは、おっぱいの頂点部分、一番出っ張っている部分の外周だ

たまにここら辺を混同したキャラ設定で、F100の巨乳ちゃんなどというキャラを見かけるが、

いくらDやEやFカップでも、アンダー100越えなど基本的にドラえもん体型であり、見目麗しい状態ではない

それどころか痩せた際、著しく目減りする可能性を考慮すべきである



さて、ここで変態紳士諸兄に質問してみようか

C80とD75ではどちらのおっぱいが大きいか。答えは簡単だな。「どちらも同じ」だ

下着はアンダーサイズに応じて収容量が増える仕組みで、サイズをひとつプラスした場合、アンダーをひとつ下げると大体容量が釣り合う

一般的なおっぱいサイズをB75と定義した場合(私調べ)、それはA80、C70、D65なんかと容量的に同じなのだ



ではB75とB80ならどうか。もうわかるな? 正解はB80の方が大きい、だ

ただしアンダーバストが大きいということは、体型に違いがあるわけで、一概にどちらがよいおっぱいかということは言えん

故に紳士諸兄がお好みのおっぱいこそが正義であり、最上至高のおっぱいであると言えよう



ちなみに増田C75である。揉めよ増やせよ。

最後に一言だけいいか。キレイな下着は高いし、お前のために頑張って選んでいるので、引ん剥く前に少しは愛でろ!

2010-03-17

日本社会ってどういうもの?」っていうお題でネットアンケートとってみた

以下は回答結果。客観性を担保するために雑音や変な回答も保存し量を確保した。ここから適当真実を読みとろう。しかし悲惨なものだね。





途中集計へ [ 前の 件 ] ~ 件目の回答 [ 次の 件 ] [ 全件表示 ]

unu ない わかんなぃ 税金でほとんどとられる あ a あ gg か a あ 奴隷社会 たいよう 頑張っても成果は比例しない

わからん 荒波 今北産業 a 色々大変 裏金 給料 すぐに死ねる ヴァンアレン帯 あ 学歴社会 セクハラ うんこ a 安月給

大人の嘘 学歴主義 d 収入が少ない事 zurui やなたまやは 学生より楽 なし ああああ あ ヤフー なし a ぱんつ

メデューサ a 不正 忙しい ない 大人もバカだ 本サイトは無償提供のため、アンケートにご協力ください 格差社会

KY j ブラック企業 ? あ 特にない   理想現実は違う 付き合い ? sirann . ki ww 不合理 うんこ ko a aaa 裏金

意外と黒い トイレの場所 そーか >< 知りません 適当不倫が横行 労です 自給はうそっぱち 汚い 別にない

aaa 賄賂 あ 軽い 大変 おk unko k 世の中は平等に不平等 夢がない z 分からない 適当さ。 あ 男尊女卑 お金

給料が安い a d ない 出会いがない。 e 大人は汚い にゃー あ a 理想はあくまで理想 サービス残業 わからない r

ない kuso 矛盾 整形が多い あほ ? サービス残業 デスマーチ 学歴社会 sfd 一場 ニート a asda

残業代出ない lg abc 偽装 khb r l まだ学生だから不明 まだ学生 嘘 m 胃痛 / だんどり力 ? n ちんこ 不正

nani 学生 特になし 格差社会 上司がいやだ \(^o^)/ test A 意外に童貞が多いwww s 有給 ラクしてる人は

してる 要領一番 官僚が一番 コネ は 裏口 SIRAN 仕事ができる人が出世できるわけでは無い。大人は意外と子供

cc な   縦社会 しらん p 賄賂 現実 ない 談合の多いことに、びっくり 世の中馬鹿が多すぎる くだらん okane

社会主義 力 k 就職してない I don't know 東大が神 ? 学歴ってホントものいうね 学歴社会キチガイクレーマー

特に無い わかりません 女性蔑視 fusianasan 本音と建て前 秘密 全て 裏事情 医療行為と称した虐待 区別

つつつつつ ? \(^o^)/オワタ   ? ? いろいろ 縦社会 zeikinn uso なべやかん ちんぴょろすぽーん ビールうまい

そうか 本当の社会 アンケートに正確に答えてください 談合 接待 さあ 知らない 裏の社会 ゆうせい民営化で得する

のはあめりかだけ かけひき q jkkkk あ ひとによる   kane   m g opoj わからない 税金の行方 ない ; 税金の正しい

使われ方 あ おまん学生には答えられないのでは? チンコは硬くてうまい >< aaa あ 消費活動は恐怖の植え付

けから生じる free sex 詐欺 乾季値 f ぷるぷる q お客様は神様です 学歴社会 ディズニーランドキャラクターの中

には人が・・・ わかりません おまんこ あ 知らん ・・・ 分かりません unko うんこ コナン=新一 a z うぇr , , 知らん sya

innhatukaisuterareru 完全週休二日を信じるな わかりません s わからない a l わからない 人を殺しても死刑にはなら

ない あああ lo 努力は必ずしも実らない ま○こ属性 ・・・ 分かりません。 学校プログラムが国の思惑どおりな事

ない sex don know 福利厚生 bb 主張が出来る奴が勝つ 不明 学歴序列 ytふぃytふぉ この世は亀の背中に乗ってい

る。 高学歴じゃないとクズ fcxv   教師 社会に夢を持ってはいけない ぇ じつは年功序列 不倫 ? この世に夢はない

え dont know 。 i しらないっす かいらく しらね   菅井きん妊娠 なし 不条理 bbb a 辛い ? 仕事の厳しさ ??

就業時間 no しりません^^ 年収は低い r 人生は辛い お年玉 さあ 整形 a o セックスの神秘 あ すごい 学生なり。

知らん。 赤ちゃんコウノトリが運んでくる 搾取システム あほ ・・・・ 知らない うん \ わかんない 裏取引

学歴での採用基準の序列 わからん 巨乳はうそ aq 分かりません。 大人って意外と子供 ? ? しらね

SEXは都市伝説 y l 秘密 授業の情報操作お金を稼ぐのは大変 a ats e   わかりません おおおおおおおおおお

おおおお あ 生涯年収は入社時に決まる 精勤   サンタは実在しない わからない a あ a 人間 kane 学費が高い 努力

しても夢はほぼかなわない 学歴 ない 自殺 特にない あ   天下りが酷い ? 学歴がすべて とくにない このページをみ

感想を書いて下さい dsa ない 知らん 社会人いじめをやる 交際費 hdhd 学生 わからない なし e ? 雇用機会均等

は実はない souka souka. ◇未来自分の夢の素晴らしさを信じる人のものである。 F・ルーズベルト マスゴミ 特にな

資本主義社会 税金無駄遣い 勉強マジでやっておいたほうがいいが、そんなもんあるか? 政治の問題 アホは

ゴミ 時間 特になし からだ巡り茶 わからない uso ない ないよ 店内のトイレは絶対に利用しない 。 ゆy」 学閥 a 学生

ですから。 あべしの心理 れろれろ a セックス都市伝説 メンタルマネージメント重要さ あ まんこ z 学校プログ

ムは国の思惑通り gじゅ」@lmn aaa あばば 学生だからしらねぇよw うんちがおいしいという事実 nl 王労 い aaaa

aaaa 警察暴力団は蜜の関係 wwww 初任給 金金金 ひんこかゆい 格差 ? しね」 を支配しているかが コチニール

デーヴィットロックフェラー 格差 ドラゴンボールは存在しない vguj あ w 酒が飲める A qkあj 道路を舗装すると平米

あたり万円以下がでできる。

2009-11-29

つむぎ!Tsumugi!Tsumugi!Tsumugiuuuuuuwaaaaaaaaaaaaaaaaaaaaaaaaaaaah!ahaaaaaaaa

ああ、うん、ahaaaaaa! つむぎ!つむぎ!つむぎ!ああ、whinewhine!uuwaaaaaa!

whinewhine!whinewhine!は良いにおいです…おやを愚痴ってください!髪はあやふやであって、柔らかいです!

tsumugikotobuktani!whinewhineの金色ブロンドの髪のにおいのにおいをかぎたいと思う、ああ、!間違ってください、!

あやふやであって、柔らかい状態で欲しい、綿毛で柔らかい、!綿毛で柔らかい、むしばんでください、

あやふやである、柔らかい、… げらげら笑い、げらげら笑い、げらげら笑い!

1ComicのMugichanはすてきでした!ahaaaa…aaa… ああ、aaaaaa!

Mugichan!がすてきであるということであることは、良かったです!決められて、

Mugichananimation用語ahaaaaaa!はすてきです!yeahaaaaah!ahyesh!

アニメーションの2番目の量を市場…noooooooooに置きます!

mewwwwwwww!gyaaaaaaaaaaaaa!ughhhhhhhhhhh!実際、コミックで!おお… アニメーションは良い…

Is牟岐実際--のmewwwwwwwwwwwwwwwwwwwwwwwwwwhであると考えられています!

ughhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh! NOOOOOOOOOO!eeeeeeeeeeeeeeeek!mugiiii!HUWAHUWA!

これ、芳香族縮合炭化水素!停止!et.R.をほんとうは止めてください。

trus!は見ます…カバーの絵のTsumugiが私を見ているというing

カバーの絵の牟岐は私を見ています!牟岐は私を見ています!カバーの絵の牟岐は私を見ています!

アニメーション牟岐は私に話しています!良かったです…世界はまだあきらめられていません!

Yesssssssssss!私はMugiiiiiiiiiを持っています!利益wiiでしたか?!それが単独でできます!

うん、comiiiiiiiicsのTsumugi!geeeeeeeeeeeeeeeeeeeeeeeeeeeeee!

Yuiiiiiiii!Miooooooo!Ritsuuuuuuuuuuu!Nodokaaaaaaaa!

Hummmmmm!私の考えはTsumugiへのレポートです!それはsakuragaoka highscoolのTsumugiへのレポートです!

Tsumugi!Tsumugi!Tsumugi!Tsumugiuuuuuuwaaaaaaaaaaaaaaaaaaaaaaaaaaaah!!!

ahaaaaaa...aa..ah!yeah! ahaaaaaa!!! Tsumugi!!Tsumugi!!Tsumugi!!uuwaaaaaa!!!

aah!whinewhine!whinewhine!whinewhine!is a good smell...whine

gosh!i want to smell the smell of the hair of the gold color blond of tsumugikotobuktani!whinewhine!ah!!!

mistook!want fluffy and soft!fluffy and soft!fluffy and soft!hair is fluffy and soft!gnaw,fluffy and soft…haw-haw haw-haw haw-haw!!

Mugichan of 1 Comic was lovely!!ahaaaaaaaaha aaaaaa!!yeahaaaaah!!

it was good to be decided the Mugichananimation term!ahaaaaaa!lovely!Mugichan!lovely!ahyesh!

i am glad to put the 2nd volume of a animation on the market…nooooooooo!!!mewwwwwwww!!gyaaaaaaaaaaaaa!!

ughhhhhhhhhhh!!!actual in a comic!!!!oh… animation is considered well…

Is Mugi actual?mewwwwwwwwwwwwwwwwwwwwwwwwwwh!!ughhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh!!!

NOOOOOOOOOO!!eeeeeeeeeeeeeeeek!!mugiiii!!HUWAHUWA!!

This!pah!stops!!Stop in reality et.R..trus!?look...ing?Tsumugi of a cover picture is looking at me?

Mugi of a cover picture is looking at me!!!Mugi is looking at me!Mugi of a cover picture is looking at me!!

Mugi of animation is speaking to me!!!was good...world is not given up yet!!!

Yesssssssssss!!!I have Mugiiiiiiiii!!was good wii!!it can do alone!!!

Yeah!Tsumugi of a comiiiiiiiics!!geeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!

Yuiiiiiiii!!Miooooooo!!Ritsuuuuuuuuuuu!!!Nodokaaaaaaaa!!

Hummmmmm!!My thought is a report to Tsumugi!!It is a report to Tsumugi of sakuragaoka highscool!!

2009-10-05

http://www41.tok2.com/home/unkoumaka/

music : vestige

Rank : AAA

Score : 198336

Max Combo : 187

Complete : 30

Solve : 0

Miss : 11

Minus Score : -1665

Corrected Character : 655/666

Corrected Percent : 98%

Typespeed/min : 323/min

Typespeed/sec : 5.38/sec

Correct / Miss : 655/666

Corrected Percent (Solve Cut) : 98%

2009-10-04

http://www41.tok2.com/home/unkoumaka/

Music : memories

Rank : AAA

Score : 197285

Max Combo : 120

Complete : 11

Solve : 0

Miss : 6

Minus Score : -2715

Corrected Character : 219/225

Corrected Percent : 97%

Typespeed/min : 305/min

Typespeed/sec : 5.08/sec

Correct / Miss : 219/225

Corrected Percent (Solve Cut) : 97%

やっぱりこういうの苦手だわ。

http://speedtest.10-fast-fingers.com/ とかの方が得意。

2009-10-03

http://www41.tok2.com/home/unkoumaka/

Music : vestige

Rank : AAA

Score : 194251

Max Combo : 79

Complete : 30

Solve : 0

Miss : 38

Minus Score : -5749

Corrected Character : 655/693

Corrected Percent : 94%

Typespeed/min : 285/min

Typespeed/sec : 4.75/sec

Correct / Miss : 655/693

Corrected Percent (Solve Cut) : 94%

2009-07-30

アンタッチャブル山崎は全盛期のビートたけしより凄い

ロンドンハーツ実名アンケート! 芸人リアル好感度調査」(前編,後編)は今が旬のブラマヨアンタッチャブル山崎が活躍して非常に面白かった。

番組はこんな感じ : http://www.tv-asahi.co.jp/londonhearts/contents/backnumber/cur/img/1_6.JPG

カメラは「アメトーーク」と同じロケ手法を使ったのかな。同じテレ朝の加持さんの番組だし。芸人のガヤや動きが漏らさず収められているので、実力のある芸人にとっては非常にやりやすそうだった。

その中で山崎がすっごいカブせまくってて、、すごい、もの凄い才能があるわ。。

まず他の芸人カブせ方はいろいろあって、こんな感じ。

ダウンタウン明石家、紳助

AAA → BBB、って何でやねん」 (やや乗り突っ込み気味)


とんねるず

AAAでBBB、みたいな」 (バブル期は「AAA、みたいな」のみ)


ホリケン

(前に出てくる)「AAA! → BBB! → CCC! → DDD! → EEE!」(後ろに下がる)


ビートたけしの全盛期

AAA → BBB → CCCだ、この野郎!(肩をヒクっとさせる) / DDD → EEE → FFFだって、ふざけんな馬鹿!(肩をヒクっとさせる)/


■今回のロンハーでのアンタッチャブル山崎

AAA(笑) → BBB(爆笑) → CCC(淳振る) → DDD(笑) → EEE(DDDの被せ) → FFF(笑) → GGGHHH(爆笑) → III → JJJ(笑) → KKK(笑) → LLL(笑) → MMM(LLLの被せ)(笑)


司会のロンブー淳がCCC以降に絡みながら話を引き出していく感じ。(笑)は笑いが起こり、(爆笑)は爆笑が起こった地点。

全盛期のたけしでも/の部分で一息入れてる感じがあるんだけど、山崎は「ブルドーザーみたいに持ってっちゃう(by東野)」。

東野は「さんまさんタイプ」って言ってたけど、こういうカブせ方を見てるとたけしタイプなのかも。

最近までのレッドカーペット的な短いお笑い流行りが終わった今このタイミング山崎に注目が集まってるってのが非常に面白い。そんでそれを迷わずすくい上げて放送してくれる番組もありがたい。

2009-05-30

http://anond.hatelabo.jp/20090530025151

C言語ならエラー処理はgoto使った方がスマートだとおもうよ。

GOTOなし


	AAA *a = NULL;
	BBB *b = NULL;
	CCC *c = NULL;
	
	if (mallocA() == error) { 
		return RC_ERROR1; 
	} 
	if (mallocB() == error) { 
		free(a);
		return RC_ERROR2; 
	} 
	if (mallocC() == error) { 
		free(a);
		free(b);
		return RC_ERROR3; 
	}
	return RC_SSUCCESS;

GOTOあり


	AAA *a = NULL;
	BBB *b = NULL;
	CCC *c = NULL;
	int rc = RC_SUCCESS;
	if (mallocA() == error) { 
		rc = RC_ERROR1; 
		goto END_FUNC;
	} 
	if (mallocB() == error) { 
		rc = RC_ERROR2; 
		goto END_FUNC;
	} 
	if (mallocC() == error) { 
		rc = RC_ERROR3; 
		goto END_FUNC;
	}


END_FUNC:
	free(a);
	free(b);
	free(c);
	return rc;

ちなみにNULLのC言語使用で許容されているよ。

2009-05-26

SASのdescendingが破綻してる件

/* なんとなく思いついたので試してみたら破綻してたよ */
data aaa ;
    do descending=1 to 2 ;
      do a=1 to 2 ;
        output ;
      end ;
    end ;
run ;
proc print ;
run ;
proc sort ;
 by descending a ;
run ;
proc print ;
run ;
proc sort ;
 by descending descending a ;
run ;
proc print ;
run ;
proc sort ;
 by descending descending descending a ;
run ;
proc print ;
run ;
/* そもそもこんなコード書くなって意見は勿論正しい */

2009-02-24

エクセルの書式で曜日はいつも忘れる

aaa」で一文字「aaaa」で"曜日"が付く、というのをいつも忘れる。

チートシートでも探すか。

2009-01-29

http://anond.hatelabo.jp/20090129003750

むしろ私は大学SUGEEEE!って思ってるけどね。

学問も、出会う人も、遊びも、追っても追っても次々に新しい発見があるし。

まぁ環境の違いじゃないかな?

大学を一くくりにするのは良くないかな。集まっている人間の層があまりにも異なる。

それに一つの大学の中でも行動の選択の仕方で、出会える人間が変わってくるものだからね。

お勧めなのは、自分の考え方や生き方を見つめなおして、少しずつ変えることかな。

環境を変える運動を始める人もいるけど、難易度AAAだから。

2008-12-17

SP

javascript:(function(){var t={0:"No Play",1:"Failed",2:"Assist Clear",3:"Easy Clear",4:"Clear",5:"Hard Clear",6:"Full Combo"};var f={0:"f0",1:"f1",2:"f2",3:"f3",4:"f4",5:"f5",6:"f6"};var l={AAA:"aaa",AA:"aa",A:"a",B:"b",C:"c",D:"d",E:"e",F:"f"};new frames[0].Ajax.Request('../data/getMusicList.do?'+frames[0].Music.tags,{method:'get',onComplete:function(r){eval("var m="+r.responseText);new frames[0].Ajax.Request('../data/getMusicData.do?'+frames[0].MusicScore.tags,{method:'get',onComplete:function(r){eval("var s="+r.responseText);var h=window.open("about:blank");var d=h.document;d.open();d.write("<title>csv</title><pre>Ver,Title,Difficulty,NRank,NScore,NClear,HRank,HScore,HClear,ARank,AScore,AClear");var r=s.rivalsscore.score.sp;for(var i=0;i<r.length;i++){d.write(","+s.rivalsscore.name.sp[i]+",N/H/A,Score(Clear),,,");}d.write("\n");for(var i in m.music_list){var x=s.myscore[m.music_list[i].mid];d.write(m.version[m.music_list[i].version].name+",\""+m.music_list[i].name+"\",["+m.music_list[i].diff[0]+"|"+m.music_list[i].diff[1]+"|"+m.music_list[i].diff[2]+"],"+x.level[0]+","+x.score[0]+","+t[x.flag[0]]+","+x.level[1]+","+x.score[1]+","+t[x.flag[1]]+","+x.level[2]+","+x.score[2]+","+t[x.flag[2]]);for(var j=0;j<r.length;j++){var z=r[j][m.music_list[i].mid];if(!z){continue;}d.write(","+z.score[0]+","+t[z.flag[0]]+","+z.score[1]+","+t[z.flag[1]]+","+z.score[2]+","+t[z.flag[2]]);}d.write("\n");}d.write("</pre>");d.close();}});}});})();

(たぶん)DP用

javascript:(function(){var t={0:"No Play",1:"Failed",2:"Assist Clear",3:"Easy Clear",4:"Clear",5:"Hard Clear",6:"Full Combo"};var f={0:"f0",1:"f1",2:"f2",3:"f3",4:"f4",5:"f5",6:"f6"};var l={AAA:"aaa",AA:"aa",A:"a",B:"b",C:"c",D:"d",E:"e",F:"f"};new frames[0].Ajax.Request('../data/getMusicList.do?'+frames[0].Music.tags,{method:'get',onComplete:function(r){eval("var m="+r.responseText);new frames[0].Ajax.Request('../data/getMusicData.do?'+frames[0].MusicScore.tags,{method:'get',onComplete:function(r){eval("var s="+r.responseText);var h=window.open("about:blank");var d=h.document;d.open();d.write("<title>csv</title><pre>Ver,Title,Difficulty,NRank,NScore,NClear,HRank,HScore,HClear,ARank,AScore,AClear");var r=s.rivalsscore.score.dp;for(var i=0;i<r.length;i++){d.write(","+s.rivalsscore.name.dp[i]+",N/H/A,Score(Clear),,,");}d.write("\n");for(var i in m.music_list){var x=s.myscore[m.music_list[i].mid];d.write(m.version[m.music_list[i].version].name+",\""+m.music_list[i].name+"\",["+m.music_list[i].diff[3]+"|"+m.music_list[i].diff[4]+"|"+m.music_list[i].diff[5]+"],"+x.level[3]+","+x.score[3]+","+t[x.flag[3]]+","+x.level[4]+","+x.score[4]+","+t[x.flag[4]]+","+x.level[5]+","+x.score[5]+","+t[x.flag[5]]);for(var j=0;j<r.length;j++){var z=r[j][m.music_list[i].mid];if(!z){continue;}d.write(","+z.score[0]+","+t[z.flag[0]]+","+z.score[1]+","+t[z.flag[1]]+","+z.score[2]+","+t[z.flag[2]]);}d.write("\n");}d.write("</pre>");d.close();}});}});})();

2008-11-29

http://anond.hatelabo.jp/20081129014942

マジレスすると、fromのメール送信サーバアクセスしなくてもメールは送れる。

fromがaaa.comで、aaa.comのSMTPサーバアクセスできない状態でも、

bbb.comのSMTPサーバアクセスできるならば、メールは送れる。

やったことない? 転送メールアドレスとって、fromをそのアドレスにしておいて、

SMTPサーバプロバイダサーバを指定したりする。

(まっとうなプロバイダPOP before SMTPを使って制限をかけています)

2008-09-23

正規表現の機能の覚書き

はじめに

「はじめての正規表現」ホッテントリ入りしていますが、

導入としては、何に使うのかがわかりやすくて良いのではないかと思います。


あれを見て、基本機能をまとめてみたくなったので、正規表現の基本的な機能について書いてみます。

正規表現が初めてという人は「はじめての正規表現」を先に見たほうがいいと思います。)


例では「検索」か「置換」をするものとして話を進めていきます。

「はじめての正規表現」が実例を中心にしたのに対して、こちらは機能を中心に書きます)


正規表現は、プログラミング言語やその他のツールなど、それぞれで微妙な違い(方言)があるので、その点には注意が必要です。

(表記法が違ったり、ここに紹介する機能がサポートされていなかったり、逆に紹介していない機能をサポートしていたりする場合があります)



メタ文字とリテラル文字

正規表現には、メタ文字とリテラル文字というものがあります。

メタ文字とは機能を持つ文字で、『.』『*』『*?』といったものが当てはまります。

リテラル文字は「文字それ自体」と解釈される文字で、『 』『a』『<』といったものです。


アルファベットや数字はリテラル文字なので、

「検索する文字列:『egg』 置換する文字列:『chicken』」

などとすれば、正規表現を使わない置換と同じ効果になります。


なお、検索して検索文字列が当てはまることを「マッチする」と言います。


メタ文字に使われている文字を検索したい場合は、直前に『\』を置きます。(これを「エスケープ」と呼びます。)

.*?^$()[]{}』などがメタ文字です。

$100』を検索したければ、『\$100』とすればいいということになります。

(『\』は環境によって、半角の『¥』『\』のどちらかになります。)


言語、ツール、モードなどによっては『@/#』もエスケープが必要です。

また、『\』自体は常にエスケープが必要です。



繰り返しについて

メタ文字 意味
? 直前の文字を0回または1回繰り返す
* 直前の文字を0回以上繰り返す
+ 直前の文字を1回以上繰り返す
{n} 直前の文字をn回繰り返す
{n,} 直前の文字をn回以上繰り返す
{n,m} 直前の文字をn〜m回繰り返す

これらのメタ文字は「量指定子」といって、直前の文字の繰り返しを意味します。

*』は「任意の文字を0回以上繰り返す」とありますが、

「0回以上繰り返す」とは、「全く何もなくてもいいし、いくらあってもいい」という意味です。

よって、『?』は「あってもなくてもいい」、『+』は「1つ以上あればいい」と解釈できます。

colou?r』は『u』があってもなくてもいいので「colorかcolour」ということになります。


{n}』は、たとえば『-{15}』なら、「ハイフン(-)が15個続くもの」となります。

-{10,}』なら「ハイフン(-)が少なくともは10個続くもの(多いのはいくらでも)」、

-{10,15}』なら「ハイフン(-)が10〜15個続くもの」となります。


また、複数の文字を繰り返したい場合は括弧で囲みます。

(Gang){2}Dance』は『GangGangDance』と同じ意味になります。



欲張りと非欲張り

メタ文字 意味
? 直前の文字を0回または1回繰り返す(欲張り)
* 直前の文字を0回以上繰り返す(欲張り)
+ 直前の文字を1回以上繰り返す(欲張り)
?? 直前の文字を0回または1回繰り返す(非欲張り)
*? 直前の文字を0回以上繰り返す(非欲張り)
+? 直前の文字を1回以上繰り返す(非欲張り)

「欲張り」とは、「なるべく多くの文字に適用しようとする」、

「非欲張り」とは、「なるべく少ない文字に適用しようとする」という意味です。


対象文字列が『aaa bbb ccc』だとします。

すると、検索する文字列が『a+』なら『aaa bbb ccc』、

検索する文字列が『a+?』なら『aaa bbb ccc』が置換対象となります。

(「すべてを検索/置換」する場合は当てはまりません)

「『a』を1回以上繰り返す」ということは、『a』でも『aa』でも『aaa』でもマッチすることになりますが、

「欲張り」かそうでないかで実際のマッチは変わってくるわけです。



文字クラス

文字クラス 意味
[abc] a、b、cのいずれか
[a-z] a〜zのいずれか
[^a] a以外の文字(改行文字を含めaを除いた全て)
[^a-z] a〜z以外の文字(改行文字を含めa〜zを除いた全て)

文字クラスは『a』や『<』などの代わりに文字の種類を指定するものです。

a〜eのどれかの1文字という指定をしたい場合に『[abcde]』や『[a-e]』といった指定ができます。


また、文字クラス内の最初に『^』をつけて『[^abc]』などとすれば、

「a、b、c以外の何の文字でもいい」とすることができます。

間違いやすいのが「そこにaもbもcも存在しなければいい」という意味ではないということです。

文字クラスは「なんらかの1文字の身代わり」なので、それは何か1文字を表しています。


-』は範囲を表すのに使用します。そのため、『[;-%]』で「; - %のどれか」を表現することはできません。

-』を含める場合は必ず最初に持ってきます。すると『[-;%]』という風になります。

「; - %以外の文字」としたいならば『[^-;%]』とします。


[』や『]』、『\』を文字クラスに含めたい場合は直前に『\』を置いてエスケープします。

「『[』または『]』」であれば『[\[\]]』となります。

^』やその他の記号は先頭に置かなければいいので、エスケープの必要はありません。


.』は「改行以外のすべての文字」を表しています。

改行は『\n』で表されるため、『.』は『[^\n]』と等価です。

(ただし、正規表現モードによっては「改行も含めすべての文字」を表す場合もあります)


文字クラスにはいくつかの略記法があります。


文字クラス 意味 同等の表記
\w 記号や空白ではない文字すべて [a-zA-Z0-9_]
\W 記号や空白ではない文字以外 [^a-zA-Z0-9_]
\d 数字 [0-9]
\D 数字以外 [^0-9]
\s タブや改行など、空白類とされる文字 [ \t\n\r\f\v]
\S タブや改行など、空白類とされる文字以外 [^ \t\n\r\f\v]

(*間違って『\s』の同等の表記にも『^』がついていたのを修正しました)

(『\t』はタブ、『\v』は垂直タブ、『\r』はキャリッジリターン(CR、改行の一種)、『\f』は改ページ)


これらは『[a-fA-F\d]』のようにすることで、文字クラスブラケット角括弧)内に含めることができます。


「同等の表記」と書きましたが、文字をユニコードして扱うツールの場合は、上記が同等の表記にはならず、

たとえば『\d』であれば漢数字が含まれてしまったりするので注意が必要です。



選択

(A|B)』は「AまたはB」という意味です。(これを「選択」と呼びます)

(A|B|C)』なら「A、B、Cのどれか」という意味になります。

(gray|grey)』は『gr[ae]y』とほぼ等価となります。

[ae]』は「1文字のaまたはb」という意味になるので結果的に、ほぼ同じ効果が得られるわけです。

(ただし、これはgrayとgreyの違いが1文字だけだったためで、そうでない場合はこうはなりません)


気をつけなければならないのは、その順番です。

(Java|JavaScript)』で検索すると、対象文字列内に存在する『Java』と『JavaScript』すべてマッチするように思えますが、

JavaScript』は選択肢の前(左)のほうにある『Java』が当てはまってしまうため、

Script』部分にはマッチせず、『JavaScript』というマッチになってしまいます。

選択では左側が優先されるので、『(JavaScript|Java)』とすることでこの問題は防げます。

言語、ツールによっては、この問題が起こらない=順番関係なく長いほうを適用しようとするものもあります)



アンカー

メタ文字 意味
^ 行頭
$ 行末
\b 単語境界
\B 単語境界以外

リテラル文字や文字クラスが「文字自体」にマッチするのと違い、アンカーは「位置」にマッチします。

検索する文字列が『^』、置換する文字列が『>』なら、「行頭に『>』を挿入する」という意味になります。


単語境界とは、「単語を構成する文字=『\w』に相当する文字」と「単語を構成しない文字=『\W』に相当する文字」の間の位置のことです。

regular expression.』なら『^regular^ ^expression^.』の4ヶ所に当てはまります。

\b.*?\b』とすれば単語すべてにマッチさせることができます。

しかし、「単語構成文字」が基準なので、『JavaScript』は1単語でも、『L?K?O』は1単語とは見なされません。


アンカーは位置にマッチするので、文字クラス内に含めることはできません。

^』や『$』を文字クラスに含めても、その文字自体という意味になります。

つまり、『[^$]』なら「行頭または行末」ではなくて、「『$』文字以外」ということになります。


また、『\b』は文字クラス内のみ、バックスペース文字を表す場合が多いようです。



大文字と小文字

正規表現には、大抵「大文字と小文字を無視する」というオプションがあります。

これが入っていないと「『to:』で検索しても『To:』にマッチしない」といったことが起こります。


言語、ツールによっては、正規表現の一部にのみ大文字と小文字を無視する機能があるものもあります。

例えばRubyでは『(?i:foo)』という形式を使用できます。

(?i:Ruby) Python』という表現なら、『ruby Python』や『RuBy Python』にはマッチしますが、

RUBY PYTHON』にはマッチしない、ということになります。




キャプチャと後方参照

括弧内に入れた文字列は、ある場所に記憶されます。(「キャプチャ」と呼びます)

これは『\n』という表記を使って呼び出すことができます。(nは数字)


同じ単語が2連続で出てくるもの(『merry merry』みたいなもの)を探すという場合、

\b(\w+)\b \1』とすることができます。(ここで使った『\1』を「後方参照」と呼びます)

こうすると、『\1』の部分は、『(\w+)』を使ってマッチしたものと同じものがあるものとして解釈されることになります。


括弧を何個も使う場合は、左の括弧から順に『\1』、『\2』、『\3』となります。


また、後方参照は置換文字列にも使うことができます。

つまり置換文字列内に『\1』と書けば1番目の括弧、

\2』と書けば2番目の括弧でキャプチャされたものがそこに入ることになります。

この場合、言語、ツールによっては『\n』ではなく『$n』を使う場合もあるようです。


括弧は『(foo|bar)』という選択や、『(humbert){2}』というグループ化など、キャプチャ以外にも使われます。

そのため、キャプチャに使われた数字をわかりやすくするために、キャプチャしない括弧もあります。

それには『(?:foo)』という表記を使います。

前の例であれば『(?:foo|bar)』と『(?:humbert){2}』になります。



先読みと否定先読み

「その位置の続くものを確認する」というのが「先読み」です。

対象文字列を『JavaScript Java Applet』として考えてみましょう。

Java(?=Script)』は「『Script』が後に続く『Java』」にマッチします。


(?=Script)』の部分が、「『Script』が後に続くかどうか」をチェックしているので、

後ろに『Script』が続かない単なる『Java』にはマッチしません。

(?=Script)』の部分は「後に『Script』が続く位置」にマッチしていることになります。

この例のマッチは『JavaScript Java Applet』となります。


逆に、『Java(?!Script)』とすれば、「『Script』が後に続かないかどうか」をチェックするので、

後ろに『Script』が続かない単なる『Java』にマッチさせることができます。

こちらは「否定先読み」と呼びます。

この例のマッチは『JavaScript Java Applet』となります。


言語、ツールによっては、「その位置の前にあるものを確認する」という「戻り読み」「否定戻り読み」がサポートされているものもあります。

(これは『(?<=foo)』『(?<!=bar)』という形で使います)


先読みや否定先読み、戻り読みなどをまとめて「前後読み」と呼びますが、

前後読みは位置にマッチするため、戻り読みは先読みとは通常書くべき位置が逆になります。

(?<Mozilla )Firefox』とすれば、『Mozilla 』に続く『Firefox』のみにマッチします。


強欲な量指定子とアトミックなグループ

メタ文字 意味
?+ 直前の文字を0回または1回繰り返す(強欲)
*+ 直前の文字を0回以上繰り返す(強欲)
++ 直前の文字を1回以上繰り返す(強欲)

上のほうで?、*、+は「欲張り」だと書きましたが、「欲張り」な量指定子も“ゆずる”ことがあります。

対象文字列が『"something"』だとして、検索文字列".*"』はこれにマッチします。

しかし、強欲な量指定子*+』に置き換えて『".*+"』とするとマッチしません。


これはなぜかというと、「欲張り」な量指定子を使った『.*』の部分は、

最後の『"がなければ『something"』にマッチすることになりますが、

正規表現の最後に『"』があるために、対象文字列の最後の『"』をゆずっているのです。


しかし、強欲な量指定子*+』はゆずることがないため、

.*+』の部分が『something"』にマッチしてしまい、

正規表現の最後の『"』にはマッチできなくなるのです。


強欲な量指定子サポートしていない言語、ツールでも、「アトミックなグループ」というものが使える場合があります。

アトミックなグループでは『(?>foo)』という表記を使います。

\w?+』なら『(?>w+)』、『\w*+』なら『(?>w*)』、『\w++』なら『(?>w+)』で代替できます。



意図しないマッチに気をつける

*』の「直前の文字の0回以上の繰り返し」はよく気をつけないと、間違ったものにまでマッチしてしまいます。

リテラル文字と文字クラスは「文字自体」にマッチすると書きましたが、

-*』というような表現は、『-』や『--------』だけでなく、

『』つまり、空文字列にもマッチしてしまうのです。

なぜそうなるかというと、「0回以上」ということは「なくてもいい」ということだからです。

文字列へのマッチは、実質上「位置」へのマッチと似たようなものになります。


検索文字列を『-*』として一括置換すると、

-』や『--------』が置換されるだけでなく、

-』が存在しないすべての場所に置換文字列が挿入されてしまうことになります。


正しい正規表現を書くためには、「どう書けばマッチするか」だけでなく、

「どういう場合にマッチしなければいいか」についても考えてみる必要があります。



ワイルドカードの『*』≒正規表現の『.*

「はじめての正規表現」で、

ワイルドカードの『*』=正規表現の『.*

とありますが、これは厳密には微妙に違います。


ファイルグロブでは《*》は「任意の文字を1回以上繰り返す」

つまり、1文字以上あればなんでもいいということになります。

この意味だと、《*.*》は "foo." や ".bar" は当てはまりません。

しかし、「0回以上」であればマッチすることになります。


正規表現では「1回以上繰り返す」は、《+》なので、

「任意の文字を1回以上繰り返す」は『.+』となります。

よって、《*.*》とほぼ等価な表現は『.+\..+』となります。


これは私の勘違いでした。miauさんご指摘ありがとうございます。


「*.*」は foo. にマッチするはずだし、.barマッチしないのは、「*」がドットファイルマッチしないっていう特殊ルールがあるから・・・ですよね?

ワイルドカード(ファイルグロブ)の「*」って - miau's blog


ファイルグロブの《*》は、「0回以上繰り返す(ただし例外として、一番最初のドットは表せない)」ということのようです。

*.*》とほぼ等価な表現は、正しくは『(?!\.).*\..*』となります。




最後に

正規表現を使うにあたっては、検索対象がどのようなものか知っておくことが重要です。

\d{4}[-/]\d{1,2}[-/]\d{1,2}』で日付と思われる文字列を検索することができますが、

これは『00-0000-00-00』というものにもマッチしてしまいます。(『00-0000-00-00』)

かしこれを厳密にしようと思えばかなり複雑な正規表現になってしまうので、

どの程度の厳密さが必要かを把握しておくことが肝要と言えるでしょう。


冒頭にも書きましたが、正規表現は、言語やツールによって微妙な違いがあるので、

その辺りについては各言語、ツールの説明を参照してください。


本格的に学びたい場合はオライリー「詳説 正規表現」おすすめです。

(ただ、この本はプログラミングのことを多少は知らないと難しいかもしれません)


また、PHP正規表現チェッカーですぐに試せるようです。



関連リンク



反応への応答

b:id:K-Onoさんの

なぜ増田? これでidデビューしてもいいんじゃないのか?

について。

実ははてなダイアリーもある(d:id:sleepwlk)んですが、長いこと書いてなかったので、

匿名ダイアリーのほうが多くの人に見てもらえるのではないかと思ってこちらに書いてみました。


*2008-09-23 誤記の修正と、一部加筆しました。

*2008-09-24 ワイルドカード記述を修正しました。

*2008-09-24 文字クラス記述の間違いを修正しました。b:id:FunnyBunnyDizzyさんご指摘ありがとうございます。

*2008-09-24 「意図しないマッチに気をつける」を追加しました。

- 転職ならen
- 派遣ならen
2ページ中1ページ目を表示(合計:45件)