deep in printf

計算機において偉大と表現できる発明の一つに、printfがある。さまざまな処理系に実装され、現代においても誰も捨てたがらない関数。C++でiostreamとかいう劣化版(性能も悪いし使いにくい!)を推奨する変人がいたが、みんな見向きもしなかったよね。printfえらい。printf考えた人えらい。えらすぎる。

私は以前、printf(“%#x”, 0)がどう出力されるべきか悩んだことがある。前の会社にいた頃の話。%#xは0xつきで16進の文字列にする、と考えていたため、0x0と出力するのが正しいのではないかと思っていた。今でも使い勝手から考えて0x0のほうがありがたい。しかし、GNU libcや多くの処理系では0の場合は0xをつけずに出力するという挙動をしている。Linuxではdietlibcだと確か0x0だった気がする(いま手元にMacしかないのでよく分からない)。

私が調べただけでも、0x0派はPythonやGolangなどがあり、0派はPerlやRubyなどがある。

まだ調査途中だが、githubのここに置いてある(→ wtnb75/printf)。このリポジトリはいろんな言語のprintfをどう呼び出すのか、printf版のHello World集としても使えるかもしれないな。普通のHelloWorldはみんなputsみたいな感じでフォーマット文字列を使わない書き方にしちゃうから役に立たないと思うこともあり。

0x0派で問題なのは、では8進数のprintf(“%#o”, 0)は00と表示されるべきか否か、ということになるんじゃないかな。さすがに00は不自然…しかし0x0に対応すると思えば00にするのが正しいよな…というわけで、0x0派は00と出力する処理系が多いが、稀に0x0派なのに0という出力をする処理系もあったり、あるいは0o0という珍しい処理系もあった(0以外の数も0oがつき、0o12みたいになる。これはこれで理にかなっている。今のところRustのみ)。

参考情報としては、IEEEがprintfの仕様を書いていて、そこにはこうある。太字は筆者。

#   Specifies that the value is to be converted to an alternative form. For o conversion, it increases the precision (if necessary) to force the first digit of the result to be zero. For x or X conversion specifiers, a non-zero result shall have 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g , and G conversion specifiers, the result shall always contain a radix character, even if no digits follow the radix character. Without this flag, a radix character appears in the result of these conversions only if a digit follows it. For g and G conversion specifiers, trailing zeros shall not be removed from the result as they normally are. For other conversion specifiers, the behavior is undefined.

つまり、%#oは最初の文字が0であれば良く(00でも0でも構わない)、%#xは0以外の数値には0xをつける(つまり0の場合はつけなくてもつけても良い)、ということが書いてあるようだ。表現的にはif neccessaryとかshall haveとか気になるけど…まあこんな文書に絶対的な権威があるわけではないが。

個人的に0x0のほうが良いと思うのは、そのほうが他の出力と揃うし、逆変換(出力された文字列からフォーマット文字列と引数の形に戻す)したくなることを考えてしまうため。逆変換したいですよね皆さん。たまに思い立って書いちゃいますよね、そういうくだらないスクリプト。

マリノス1-2川崎 (久々のアウェイ、久々の三ツ沢)

年に1度くらいアウェイも行かないとな、と思ってはや何年経つだろう。

行ってきました、横浜。横浜駅なんていつ以来かな。もはや2015年だもんな。5年は行ってない気がする。横浜駅の工事が終わったとか何とか。実際に行ってみたら、確かにオレが知ってる10年前は工事中だったはずの場所も工事してないのよね。JRで東京から東海道線で横浜へ。相鉄のほうに向かって歩いていても、構内は工事してない。バスターミナルのとこは工事っぽいフェンスがあるような気も…そして帰りに東横線に向かっても、工事はしていなかった。してないのはいいんだけど、この距離で動く歩道もないのはどうかと…と思える通路もあったのは事実。

しかしビブレの方にぞろぞろ歩いて行きましたが、この喧騒、なつかしいね。小杉が栄えたって言っても、横浜の底知れなさには近づけない気がする。これが新横浜とかだったらまだ計画された都市だなという感じで余裕を持って歩けるのだが。あれ、これって東急ハンズがなくなってる? まじかよ、オレが枕を買った(そして今でも代替わりして同じ機種を使っている)ハンズが…20代の頃はそこそこ愛用してた店だったんだが。

そして、久しぶりに昔行ってた本場の家系ラーメンをしたためて(これも何年ぶりなんだろう…)、あの坂を登る。ひたすら登る。上り坂の疲労の感覚で、積み重ねてきた自分の年齢を感じる。着いたと思ってもアウェイ側は遠回りをして、やっと中にたどり着いてみるとそこは紛れもなく三ツ沢だった。上り坂と遠回りの後のビールが心地良い。俺たちの三ツ沢。

試合は、普通に実力差が出たかな。決勝トーナメント進出の可能性が薄いチーム同士、メンバーを変え合って、それが実力差につながったかなと。結果、神戸が負けたので勝ち点が並んでしまいました。これ最終節も行きたくなりますね。私は仕事で行けない予定なんだけど。

試合のほうはエウシーニョのシュートが向こう側で入ったみたいで、後半CKから入ったみたいで、あー今日は全部あっちがわなのか…と思っていたところ、このところ絶好調の健勇がCKでニアに飛び込んで決めてくれました。CKにしたプレーで押し込んで欲しかったんですけどね。ゴールキックだと思っていたら主審がCKを指して、そのCKが決勝点につながった。前半は小宮山がどフリーになって形を作る場面が多かったが、小林祐三を入れて小宮山のところをケアしてからマリノスペースになっていく。

今日は三好も伸び伸びプレーしてたように思います。前半の超絶ロングシュートは半分入ってましたな。ルーキーであれができる、しかも先っぽは入ってたってのが今後に大きな期待を持たせる。あとは船山か。まずは1点取ってノッて欲しい。

川崎3-2鳥栖 (健勇)

19時キックオフだと、Tシャツ1枚ではかなり肌寒かったです。

この試合は1点目を生み出した車屋が怪我で交代とか、GKのスローを受けた谷口彰悟のトラップミス(?)を見逃されずにオウンゴールとかいろいろありましたが、両GKも活躍しつつ、スコアも適切で良かったんじゃないでしょうか。序盤にいきなり角田のゴールポスト直撃シュートが出たりして、派手な試合になるだろうという感じは現れていました。終わってみれば杉本2点、大久保1点、豊田1点と代表FWが結果を出したという試合だったと言える。

鳥栖のアウェイユニの背番号は見にくかった。谷口博之は相変わらず29番で、DFで出てました。4バックの中央左だったかな。彼は川崎にとっては功労者。谷口なくして川崎がJ1上位に居続けることはできなかったろう。その流れが今に至っているわけですから。貢献度が非常に高い一人。私が無理やり順位をつければ貢献度1位からジュニーニョ・憲剛・谷口という並びになるだろう。で、ジュニーニョは鹿島を経てブラジルの不動産屋、憲剛はずっと川崎で、谷口はマリノスや柏を経て今は鳥栖に。川崎にいる頃はボランチで憲剛と組んで得点を取りまくってましたけどね。

そんなこんなを思い出しながらの観戦。入場者数は1万4千台と下がってきました。ここまでリーグ戦ホームでは2万人以上入るのが通例だったのに…。これホームでふがいない試合が多かった結果とも言えますし、夜開催の悪影響もあったでしょうし、近隣小学校何校かで昼に運動会もあったので、疲れきって来れなかった家族も多かったのでは。私のとこも家族は疲れて家で休んでて、今日は一人でした。ゴール裏とかでは足が持ちそうにないので、アウェイ寄りの2階でのんびり。あー、アップグレードでメインを試しても良かったな。今度似たような機会があったらやってみよう。

川崎1-1山形 (涼風)

PANO_20150520_174437~2

水曜夜のナビスコ予選。閑散とした等々力の日常が戻ってきたかのよう。コアタイム終了を合図に颯爽と職場を抜け出してきて、逆に早く着きすぎた私はのんびりと爽やかな風を楽しみ、まだ慣れないアウェイ側のオーロラビジョンを横目に和幸のトンカツを頬張るのだった。

新井の歌は歌詞を見たときはウィザード(仮面ライダー)の歌だろうなと思いましたが、そんなこともなく…

山形のアウェーユニは赤。激しい違和感。

今日は2階でのんびり見ました。2階に来ると視力の衰えを感じる。この距離で背番号の判別に苦労するとは…オーロラビジョンの文字も読めたり読めなかったり。寄る年波には勝てぬな。ウォーミングアップで船山のキックが好調そうだったので期待したんですが、前半は周りと合わずにブレーキになるシーンも目立ったかな。後半は絶好機があって、決まる…と確信したんですがGK山岸に止められるという予想外の展開に。しかしそこに詰めたエウシーニョがゴールにぶち込んでくれた。あれを軽く決めるとブラジル人って感じがしますよね。谷口のプレーは安心できますね。どうしても井川のプレーと比べてしまう。井川は凄いコースでパスを通したりもするので見ていて「さすが俺達の井川!」と思ってしまうことも多いんだけど、安心できるかというとまた別の話で。

試合としてはまあサブ組ではこうなるだろうという良くない内容。カウンターで失点して中村憲剛、大久保嘉人、レナトまで投入する羽目に。まあ序盤を見て今日は三好を使う展開にはなりそうにないなと思いましたが…

最終的には1万人越えて、けっこう集まったんだなと。今となっては1万人で狭いと感じることはなくなりました。

あとは…とりあえず香川、アジアツアーが終わるまでは移籍してくれるなよ、と願う。いつかのボルトン戦(中田英寿が移籍する前のプレミアリーグのボルトンがアジアツアーに来て等々力で川崎とプレシーズンマッチして閑古鳥が鳴いていたという事件)みたいになっちゃうからね。しかしあれで懲りたと思ってたのに、落ち目のドルトムントのあぶく銭稼ぎに引っ掛けられるんだからなぁ。

維新の冒険が終わった

先日、一発勝負の住民投票で都構想が敗北し、維新の冒険が終わりました。我々は今後どうしたらいいのかな。大阪での話なので対岸の火事(?)でしたが、こういう制度設計による改革って私は好きなんですよね。テクノロジーに通じるものがある。隣接自治体を取り込めなかったのは残念ではあったが、かなり良い案だったと思います。対する批判は論理的なものではないのばかりだったし。なんでこれが負けるかな…

これって川崎市にとって実は他人ごとではない、と言いたいところだけど、大阪とは事情が違う、むしろもっと難しいところがある。大阪府は大阪市とそれ以外と2種類に分類できるだけで、大阪といえば大阪なんだから、なんで住所に大阪2回も書かせるのよ、という単純な話なのですね。で、2回くらい書くよ、という選択をした。府と市の両方を制していた維新が抜けて、数年もあれば逆戻りになるのは目に見えている。悪い設計を実装でカバーすることはできない。

神奈川県の場合は、横浜市と川崎市と相模原市とそれ以外、という分類になる。問題は神奈川だ。神奈川を意識している県民がどれほどいるんだろうか。少なくとも私は普段、神奈川県民であると思うことはありません。県庁がどこにあるかも知らないのだ。川崎市内になさそうな雰囲気と、規模の大きさを考えると、横浜市のどっかにありそう、という気持ちはあるのだが、横浜市も山奥があったりしてでかいから、地理的な見当がつかない。名前から言ったら神奈川区のどっかかな。

そもそも神奈川県という名前の成り立ちも呪われてますよね。ペリーがはるばるやって来て、開国を迫った。当時そこそこ栄えていた神奈川が開港リストに含まれていた。で、日本側がガイジンを騙したんですね。実際に開港したのは横浜とかいうクソ田舎の寒村だったという…150年以上前の話です。で、横浜も神奈川なんですよ、一心同体なんですよと強弁するために神奈川という行政区画を広げて、神奈川府を経て、まあ今は神奈川県横浜市神奈川区と。東京都西東京市みたいな? まあでも得失を考えると開港したほうが栄えるのは自明。で、本来は横浜県になるべきところ、名残で神奈川県という名前が残っちゃった。

東京都の誕生(東京市の廃止)も、戦時という非常時に強引に作られたものらしく、行政区画をいじるのは、そういう非常時でもないと難しいのかもしれない。まあでも非常時に切羽詰まってやっただけあって、制度としては妥当で、東京はうまく行ってるほうだと思います。東京市なんて、ないほうがいい。

私は東京で生まれて岩手で育ち、また東京で成長してから川崎にやってきました。東京とは言っても三多摩地区なんですが、不思議と自分が東京の端っこくらいの感覚で思ってるわけですよ。でも神奈川県の人は違う。川崎の人は「東京のとなり」「横浜の近く」「川崎(苦笑)」とは思いますが神奈川の一部だとは思ってない。「どっから来たの?」「川崎」「川崎ってどこ?」「東京と横浜の間なんだけど」「うーん、わかんない」「まあ関東のどっかですよアハハ」みたいなね。横浜の人は「Yokohama! Yokohama!」と思っているだけ。箱根の人は「第三東京市」。小田原や横須賀や藤沢の人もその点では大差ありません。誰も自分が住んでるのが神奈川だなんて思ってないんだよね。

だから神奈川の場合は県が消えるしかないんですけど、県を消すというのは市を消すよりも大きな作業になるだろう。神奈川単独では成功するイメージが全くない。道州制にするときに関東州の区割りを決めてもらうしかなかろう。

大阪の人にとっても、次のチャンスは全国的な道州制というより高いハードルまで持ち越しになってしまった。前途多難だな。

一方、現実的の脅威としては、維新はもうダメっぽいよコレ、という事実がある。野党第一党が崩壊って…またか。次なんてだれか出てきてくれんのかな…

空気清浄機

ついに空気清浄機を手に入れたぞー!

空気清浄機は凄い。なんてったって空気を清浄にする機械だ。清浄にするんだよ。すごいだろ。えっへん。

というわけで、ダイキンのやつを買ってみました。思ったよりもサイズがでかいので買うときは躊躇しました。しばらく使ってますが、まあ常識的に使えてます。3月あたりのひどい花粉にかなりやられて参っていたので、ライフの跡地にできたノジマで購入。

空気清浄機でほとんどの人が経験あることとしては、フィルタがビニールで包装されたまま使ってしまうという失敗ね。当然やりましたけど。

先日外側のフィルタを開けてみたらけっこうホコリがたまってました。そこそこ役に立ってたのね。

川崎0-1広島 (うんこーうんこーうんこー)

この試合のあとで語る言葉があるのだろうか…見せ場のない淡々とした試合進行。

アップ中の小林悠の負傷、出だしのミスで失点と、幸先の悪すぎるスタート。今日はこのまま終わったら最悪だな、という予感みたいな何かが現実のものに。なんかずーっと攻撃してるふうではあるが相手を慌てさせるシーンはほとんどなかった。その後の長い時間で作った決定機は大久保のヘッドくらいしかなく、それもGK正面。あと最後の数分は点取ろうとはしてたかな。遅すぎと思ったけど、相手が時間稼ぎをしなかったので何度かチャンスを作ることはできた。

あんだけボールを保持して、しかもシュートに持ち込めないのは何か問題がありますよね。つまらない。ワーストゲーム更新? いや、もっと悪くなる予感すらもあるんだが。

サッカーを見ている気がしなかった。今季はダメかもしれない。日に日に弱くなってる実感があるし、ここまで凄く弱い状態の相手にしか勝ててない。

留守番の家族に帰宅してひとこと「良かったな、こんなうんこ試合見ずに済んで」

うんこと言えば、ゴール裏のトイレは洋式がいまだに1つしかありません。ありえん。早くなんとかしないと…バックスタンドのGゾーン裏のトイレは洋式の数がだいぶ増えたので、ゴール裏民がうんこするときはあっちまで行ったほうがいいです。等々力2015のうんこtipsでした。おしっこはゴール裏の方が数が多くて混雑も少ないんですけどね。試合中にホームAのひとがメインスタンドに入れないのはうんこしたくてもダメなのだろうか…ここ数試合連続で子供が試合中うんこしてますが、実際メイン突入を試すだけの余裕は子供の肛門にはなさげなのだった。(続く?)

最近のwp-config.phpメモ

WordPressはメジャーになってしまって、プラグインはあまりセキュアではない傾向がある。WordPressのDBの接続情報等が入っているファイルがwp-config.phpというファイルで、これを盗もうとするリクエストが来るんですよね。

うちの場合、DBは同じホストでlocalhostしかlistenしてないから、別に盗られてもにわかに問題になることはないような気もするが。

最近来ているのをメモしておくと、、、

  • wp-admin/admin-ajax.php パターン
    • wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
    • wp-admin/admin-ajax.php?action=getfile&/../../wp-config.php
    • wp-admin/admin-ajax.php?action=kbslider_show_image&img=../wp-config.php
    • wp-admin/admin-ajax.php?action=revolution-slider_show_image&img=../wp-config.php
  • wp-content/force-download.php パターン
    • wp-content/force-download.php?file=../wp-config.php
  • plugin パターン
    • wp-content/plugins/db-backup/download.php?file=../../../wp-config.php
    • wp-content/plugins/dukapress/lib/dp_image.php?src=../../../../wp-config.php
    • wp-content/plugins/google-mp3-audio-player/direct_download.php?file=../../../wp-config.php
    • wp-content/plugins/pica-photo-gallery/picadownload.php?imgname=../../../wp-config.php
    • wp-content/plugins/plugin-newsletter/preview.php?data=../../../../wp-config.php
    • wp-content/plugins/simple-download-button-shortcode/simple-download-button_dl.php?file=../../../../wp-config.php
    • wp-content/plugins/tinymce-thumbnail-gallery/php/download-image.php?href=../../../../wp-config.php
    • wp-content/plugins/wp-filemanager/incl/libfile.php?&path=../../&filename=wp-config.php&action=download
    • wp-content/plugins/wp-filemanager/incl/libfile.php?path=../../&filename=wp-config.php&action=download
  • themeのdownload.phpパターン
    • wp-content/themes/<theme名>/download/download.php?file=../../../../wp-config.php
    • theme名は…NativeChurch, antioch, authentic, epic, linenity, lote27, trinity, urbancity
    • file=ではなくimgurl=だったりするものもある
    • たぶんあるテーマでdownload/download.phpを用意したものがあってそれでファイルを読めてしまうセキュリティホールがあり、派生テーマが全部ダメだったんだと思います。
  • themeのgetfile.phpパターン
    • download.phpと似ている
    • wp-content/themes/<theme名>/framework/utilities/download/getfile.php?file=../../../../../../wp-config.php
    • theme名はparallelus-mingleとかparallelus-salutation
  • refererがwp-content/themes/<theme名>/lib/scripts/dl-skin.php だったり、リクエストがdl-skin.phpでリファラがプラグインやthemeだったりすることもある

wp-admin以下にパスワード認証でもかけてしまおうかとも思ったが、いろいろググってみると、wp-admin/admin-ajax.phpにパスワードがかかると不具合を起こすことがあるみたいだったりもする。実際wp-admin以下で狙われるのはその、制限をかけられないらしいadmin-ajax.phpなので、あまり意味がないようにも思える。

wp-config.phpが最も狙われやすい&直接このファイルにアクセスが来ることはないのであるとすれば、URLのパターンで、wp-config.phpが入ってるのを全部denyにすればいいんじゃないかと思った。mod_rewriteか、あるいはLocationMatchでも引っかかるのかな?? POSTの場合は引っかかれないか。

川崎1-4柏 (タイトルとかは遠いな)

やはり甲府が弱かっただけだったか。

今日はいいところなし。もしや、あの藁科とかいう馬の骨は疫病神かなんかでは? とすら思ったよ。せっかくのオスモウが…

それはともかく、この日はとても暖かい、いい日和でした。こんな日に青空の下でビールを飲んで、たのしかったです。