タグ

ブックマーク / hnw.hatenablog.com (14)

  • ユニットバスの天井裏に備え付けのL2スイッチを発見した話 - hnwの日記

    (2021/06/23追記: この記事を書いてしばらくして引っ越しました。原状復帰済みです。念のため。) 私は同じ賃貸住宅に10年ほど済んでいるのですが、ごく最近になって自宅内に備え付けのL2スイッチが存在することに気づきました。ソイツはなんとユニットバスの天井裏にいたのです。 このスイッチをGbEスイッチにリプレースしたところ、自宅のコンピューティング環境を改善することができました。稿ではその顛末を紹介します。皆様のお風呂場探検の参考になれば幸いです。 謎の情報コンセント 読者の皆さんは情報コンセントというものをご存じでしょうか。下の写真のようにイーサネットケーブルを差すコンセントのことを言うそうです。 我が家の情報コンセント これがない家もあると思いますが、私が今住んでいるマンションには情報コンセントが部屋ごとについています。 この説明は入居時に一切受けていないのですが、試しにイーサ

    ユニットバスの天井裏に備え付けのL2スイッチを発見した話 - hnwの日記
    t-murachi
    t-murachi 2020/09/21
    少なくとも9年間問題なく動き続けるとか全然ダメルコじゃ無かった…(´・ω・`)
  • PHP勉強会10年の歴史をふりかえる - hnwの日記

    PHP勉強会@東京が今月で10周年の節目ということで、大変めでたいですね。僕にとっては初めて参加・発表した社外勉強会だったこともあり、不思議な感慨があったりします。 そこで、ふと思いついてPHP勉強会の10年を表形式でまとめてみました。古参の人が懐古する以外の用途はほぼ無いと思いますが、現在の参加者の方や他の勉強会の運営をしている方の参考になる部分が1%くらいはあるかもしれません。 (企業名などは全て当時の名前です) 2005年 開催日 募集ページ 募集人数 会場提供 幹事 2005-06-18 (土) 第1回PHP勉強会 in Tokyo 24 株式会社HDE ELF 2005-07-23 (土) 第2回PHP勉強会 in Tokyo ? 株式会社HDE ELF 2005-08-28 (日) 第3回PHP勉強会 in Tokyo ? 株式会社ぷらっとホーム ELF 2005-09-18

    PHP勉強会10年の歴史をふりかえる - hnwの日記
    t-murachi
    t-murachi 2015/06/26
    開催頻度が高いのは純粋に羨ましい。
  • PHPでAPC/APCuのCAS機能を使うときの注意点 - hnwの日記

    PHPのAPC/APCuエクステンションをKVSとして使うときの話題です。 APC/APCuにはCAS(楽観ロックに基づくアトミックな値の書き換え)の関数として次の3つが用意されています。 apc_cas ― 古い値を新しい値に更新する apc_inc ― 保存した数値を増やす apc_dec ― 保存した数値を減らす memcachedにも同様の機能があるので一見すると悩まず使えそうですが、実は罠があります。APC/APCu自体は全ての型の変数値をストアできるのですが、これらの関数については整数しか扱えないため、この機能を使う場合に限っては最初にストアする値を整数型にしておく必要があります。整数型以外の値がストアされていた場合、型エラーとして扱われて失敗します。 これの何が罠かというと、これらの関数がfalseを返したときに、ロック競合だったのか型エラーだったのかの区別が付かないという点

    PHPでAPC/APCuのCAS機能を使うときの注意点 - hnwの日記
    t-murachi
    t-murachi 2014/10/08
    エラーの内容を取得する方法が提供されていないのか…。
  • PHP 5.4.4から==の挙動が一段と難しくなりました - hnwの日記

    PHPの==は両辺を適当に型キャストしてから比較するような演算子です。この型キャストの規則は難解すぎる上にドキュメントも不十分なため、PHPプログラマでも完璧に理解している人はほとんど居ないくらいの印象です。バグの原因になりかねないため、なるべく==を使わないようにしているPHPプログラマも多いはずです。 ところで、この==演算子の挙動がPHP 5.4.4から変更されていることはあまり知られていません。稿ではこの内容を紹介します。 Bug #54547 の騒動 まずはこの仕様変更の経緯を紹介します。 2年ほど昔、Hacker Newsで2^63付近の整数に対応する文字列をPHPで比較したときの挙動がおかしいというスレッドが盛り上がったことがありました。具体的には、PHPでは「'9223372036854775807' == '9223372036854775808'」がtrueになるとい

    PHP 5.4.4から==の挙動が一段と難しくなりました - hnwの日記
    t-murachi
    t-murachi 2014/08/25
    たのしいPHP。つか、PHPがヒドイというより、この手の混乱を避けるために最初から数値比較と文字列比較とで演算子を分けていたPerlのLarry Wallがむしろハイセンス過ぎるんだと思ってる。
  • GitHubユーザーのSSH鍵6万個を調べてみた - hnwの日記

    (2015/1/30 追記)時期は不明ですが、現時点のgithub.comはEd25519鍵にも対応しています。 (2016/5/31 追記)「GitHubにバグ報告して賞金$500を頂いた話」で紹介した通り、既に弱い鍵はGitHubから削除され、新規登録もできなくなっています。 GitHub APIを利用して、GitHubの31661アカウントに登録されているSSH公開鍵64404個を取得してみました。抽出方法*1が適当すぎて偏りがあるような気もしますが、面白い結果が得られたと思うのでまとめてみます。 SSH鍵の種類 鍵の種類 個数 割合 RSA鍵 61749 (95.88%) DSA鍵 2647 (4.11%) ECDSA鍵 8 (0.01%) 約6万個の鍵のうち、8個だけECDSA(楕円DSA)鍵が見つかりました!常用しているのか試しに登録してみただけなのかはわかりませんが、何にせよ

    GitHubユーザーのSSH鍵6万個を調べてみた - hnwの日記
    t-murachi
    t-murachi 2014/07/05
    oops... 鍵作りなおさないとなぁ…。
  • PHPのロケールに関するまとめ - hnwの日記

    5/3 17:45追記:t_komuraさんに指摘いただいた関数と、さらに僕が調べ直したものを含め、「ロケール設定に従う関数一覧」に25個ほど追加しました。かなり見落としがありましたね…。 PHPのロケール*1まわりについて調査したので、これをまとめてみます。 この記事は「ロケールの影響を受ける関数 - Sarabande.jp」を掘り下げたものです。masakielasticさん、ナイスな記事をありがとうございます。 PHPの文字列型と文字エンコーディング 他のモダンなLL言語と異なり、PHPは文字列の文字エンコーディングに関して何も仮定せず、単なるバイト列として管理しています。つまり、文字エンコーディングの取り扱いは各関数の実装に委ねられています。 下記の通り、これはマニュアルにも記述があるのですが、実に残念なことです。 残念ながら、PHP の各関数が文字列のエンコーディングを判断する

    PHPのロケールに関するまとめ - hnwの日記
    t-murachi
    t-murachi 2012/05/02
    環境のロケール設定に依存する関数を列挙。 / …まぁ、ぴちぱーは大変ですよね。ぴちぱーとそれ以外のプログラマーとで胃薬の平均消費量の統計取ったら結構な有意差が出そうな気がする。
  • MySQLの自前strtod実装がタコすぎる - hnwの日記

    MySQL5.1のソースコードを確認していたところ、浮動小数点数の10進表記から浮動小数点数への変換処理に実装上の問題点を見つけました。浮動小数点数処理の典型的な落とし穴にはまっていて、計算の途中で精度を落としてしまっています。 これは古くから知られているバグのようで、下記URLから判断すると2007年末頃には修正コードが開発系ブランチに入っていたようです。しかし、その後のんびりしていたのか、2010年4月のMySQL5.5.3で初めて安定版としてリリースされました。また、今のところ5.1系へのバックポートは出来ていないようです。 Worklog :: WL#2934 >> Make/find library for doing float/double to string conversions and vice versa MySQL Lists: commits: bk commit

    MySQLの自前strtod実装がタコすぎる - hnwの日記
    t-murachi
    t-murachi 2012/04/09
    そも浮動小数点数同士の比較の信頼性が低かったというお話。 5.5.3 で修正済み…。
  • MySQLには1足せない数値リテラルがある - hnwの日記

    MySQLの数値リテラルに+1すると怒られたり、オーバーフローしたりすることがあります。下記は僕の手元のMySQL5.5.22での実行結果です。 mysql> select 9223372036854775807+1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)' もう足せないよ、と怒られてしまいました。しかし、それより1大きい数は+1しても怒られません。 mysql> select 9223372036854775808+1; +-----------------------+ | 9223372036854775808+1 | +-----------------------+ | 9223372036854775809 | +-----------------------

    MySQLには1足せない数値リテラルがある - hnwの日記
    t-murachi
    t-murachi 2012/04/05
    なんつーか、 PHP と MySQL は笑いの宝庫でつな…
  • MySQLの文字列型から数値型への自動型変換が意味不明すぎる - hnwの日記

    SQLでは違う型同士の演算で暗黙の型変換が起こります。この挙動はDBMSごとにバラバラであるため、混乱の元になることがあります。これについては徳丸さんが「SQLの暗黙の型変換はワナがいっぱい - 徳丸浩の日記」などで指摘されているので、一読をお勧めします。 徳丸さんの記事に関連してMySQLの自動型変換について調べてみたところ、予想外の実験結果が得られました。稿ではこれを紹介します。 先に結論を書いておくと、僕にはMySQLの気持ちがサッパリわからんということがわかりました。 マニュアルによれば、文字列を数値に型変換すると浮動小数点数になるらしい 先日の記事「MySQL5.1以降の小数の扱いがキモい」で、僕は「文字列から小数へキャストする場合には浮動小数点数になります。」と書きました。これはMySQLマニュアルに次のような記述があったためです。 比較の演算の両方の引数がストリングの場合、

    MySQLの文字列型から数値型への自動型変換が意味不明すぎる - hnwの日記
    t-murachi
    t-murachi 2012/04/05
    ふつーに bug のような気もする (^_^;) 。 こういうの見ちゃうとそも BIGINT 同士、 DECIMAL 同士の比較も信用できなくなってくるなぁ…。
  • MySQL5.1以降の小数の扱いがキモい - hnwの日記

    穏やかな昼下がりにMySQLで小数の足し算をしていたところ、不思議な現象を見つけました。 mysql> select 0.8=0.7+0.1; +-------------+ | 0.8=0.7+0.1 | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> select 0.8=0.7+0.1e0; +---------------+ | 0.8=0.7+0.1e0 | +---------------+ | 0 | +---------------+ 1 row in set (0.00 sec) mysql> select 0.8=0.7+'0.1'; +---------------+ | 0.8=0.7+'0.1' | +---------------+ | 0 | +-------------

    MySQL5.1以降の小数の扱いがキモい - hnwの日記
    t-murachi
    t-murachi 2012/04/02
    「文字列から小数へキャストする場合には浮動小数点数」<ここが一番キモイ。互換性重視? / 固定小数点数がサポートされたこと自体は歓迎なんだけどね。
  • PHPの新しいround関数を読み解く (2)pre-roundingの意味 - hnwの日記

    (2011/10/18 01:50)「他の言語で試してみる」「誰が正しいのか?」を追記しました。また、初心者への対策と強調しすぎて誤解を招いた気がしたため、少し表現を変更しました。 前回記事「PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合」に引き続きPHPのround関数の処理を解説していきます。今回は、PHP5.3のround関数で最も特徴的なpre-rounding処理を追いかけていきましょう。 pre-roundingとは pre-roundingとは、与えられた数の丸め処理を行う前に、与えられた数をいったん10^n倍して10^14以上10^15未満の数にして整数への丸めを行うことです。pre-rounding処理のあとで、改めて来の丸め処理を行います。 ちなみに、pre-roundingという単語は一般的な単語ではありません。少なくとも僕はPHPのro

    PHPの新しいround関数を読み解く (2)pre-roundingの意味 - hnwの日記
    t-murachi
    t-murachi 2011/10/17
    如何にも PHP らしいお話… ここまでやるなら普通に文字列に変換して処理すればいいのにって思えてくる罠。
  • unixtimeを求めるワンライナー - hnwの日記

    特定の日時のunixtimeが知りたくなった時って皆さんどうしてますか?例えば2009/09/26 23:00:00 JSTであれば次のワンライナーで求められます。 $ php -r 'echo mktime(23,0,0,9,26,2009);' 1253973600 いやいや、ワンライナーって言ったらPerlだろうとも思ったんですが、Perlだとタイプ数的に頑張ってる感があります。 $ perl -MTime::Local -e 'print timelocal(0,0,23,26,8,2009);' 1253973600 というか、引数の順番が違うわ、月は0から11で指定するので1引かないといけないわ*1で超混乱しました。昔は自然に使ってたはずなんですけどね…。PHPに慣れすぎている自分に少しショックを受けました。 *1:年は1900を引いた数という罠も思い出しましたが、timelo

    unixtimeを求めるワンライナー - hnwの日記
    t-murachi
    t-murachi 2009/09/26
    perl -MDateTime -e 'print DateTime->new(qw(year 2009 month 9 day 26 hour 23 time_zone Japan))->epoch' # かえって長くなった (^_^;
  • PHPで時刻の計算が異常に遅い例 - hnwの日記

    追記(2009/06/25):件、PHP Bugs #46926でバグ報告しまして、PHP 5.2.10以降で修正されています。 PHPの日付/時刻関数にmktime関数というのがあります。年月日時分秒の6引数からいわゆるunix timeを求める関数ですが、これがPHPの最近のバージョンで並外れて遅いことがあるという話題です。毎度おなじみのパターンですが、今回もかなりのレアケースです(レアケースじゃなかったら既に誰か気づいているはずです)。 mktime - 日付を Unix のタイムスタンプとして取得する 説明 int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] ) 与えられた引数に従って UNIX のタイ

    PHPで時刻の計算が異常に遅い例 - hnwの日記
    t-murachi
    t-murachi 2008/04/29
    2秒…
  • PHPのround関数の謎が少し解けた - hnwの日記

    2週間以上前の記事「PHPの奇妙なround関数」がすごいことになっていますね。最近書き始めたばかりの日記にこんなに人が来るなんて、有名人の集客力は流石だなあ、などと感心しています。 その集客力のおかげかもしれませんが、FreeBSDとMac OS Xだと挙動が違うよ、というコメントを頂きました。実際にFreeBSDで試してみたところ、確かにLinuxと異なる、いわばマトモな挙動です。その原因がわかりました、というのが稿の概要です。僕がモタモタ記事を書いている間に理由がわかっちゃった人も居るかとは思いますし、より詳細なところまで把握した人も居そうですが、僕なりに現時点でわかったことを書いてみます。 前回の記事で、PHP_ROUND_FUZZという定数が「少なくとも僕の手元の環境では」0.50000000001と定義されている、と書きました。この詳細を説明すると、configureスクリプ

    PHPのround関数の謎が少し解けた - hnwの日記
    t-murachi
    t-murachi 2007/06/05
    原因は configure の bug 、というお話。まだ続きがある模様。。。wktk
  • 1