タグ

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

  • ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記

    ECMAScriptの浮動小数点数の丸め関数である Number.prototype.toFixed() について調べてみたところ、浮動小数点数をわかっている人が作った硬派な仕様だと感じたので、解説してみます。 浮動小数点数の丸めの善し悪しについて 私はプログラミング言語の浮動小数点数の丸め処理に興味があり、過去に関連記事を30以上書いています。こうした活動から得られた知見として、良い丸め関数には次のような性質があると考えています。 仕様がシンプルで直感的であること 仕様が抜け漏れなく文書化されていること バグを作り込みにくい仕様であること どれも良い関数の一般論のような話ですが、丸め処理に限って言えば簡単な話ではありません。そもそも浮動小数点数の性質が人の直感に反するため利用者にとっても実装者にとっても罠が多く、結果として上の条件を満たせないことが多いのです(私が面白いと感じるポイント

    ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記
    Kiske
    Kiske 2019/02/26
  • Karabiner-Elements で日本語キーボードを英語キーボードとして使う設定 - hnwの日記

    直前の記事「Mac mini 2018を買っての感想」の通りですが、私は約3年ぶりにmacOSのマシンを買い換えまして、macOSのバージョンがEl CapitanからMojaveまで一気に3バージョン上がりました。 そこで悩んだのがキーボード配置変更ソフトです。それまでは Karabiner という有名ソフトを愛用していましたが、最近のmacOSでは別実装である Karabiner-Elements しか動きません。設定などは一からやり直しになってしまいます。 実際に Karabiner-Elements を試してみると、大半の機能についてはスムーズに移行できました。しかし、私が使っていた機能が一つだけデフォルトで用意されていません。具体的には「Use Japanese Keyboard as US Keyboard」という日語キーボードを英語配列で使う設定です。 そこで、Karabi

    Karabiner-Elements で日本語キーボードを英語キーボードとして使う設定 - hnwの日記
    Kiske
    Kiske 2019/01/08
  • PHPの中身をgdbで観察できるようなDockerイメージを作りました - hnwの日記

    CLI版のPHPをgdb上で動かしつつ、内部的なデータ構造を覗き見ることができるようなDockerイメージを作ってDocker Hubにアップロードしました。Docker環境さえあればすぐに動かすことができます。 このイメージを動かせばCのコードを書かなくてもPHP内部のデータ構造を確認することができます。PHPの内部構造を詳しく知りたい、というような人は参考にしてみてください。 準備 Macの人はDocker for Macを用意しましょう。他のOS上でも同様にDockerをインストールしてください。また、イメージの圧縮時サイズが200MB程度ありますので、それなりのネットワーク環境で遊ぶことをオススメします。 起動 Docker 1.10以降ではseccompにより一部システムコールが制限されているため、コンテナ内でgdbによるデバッグができません。期待通りにgdbを動かすにはコンテナ

    PHPの中身をgdbで観察できるようなDockerイメージを作りました - hnwの日記
    Kiske
    Kiske 2017/01/16
  • 勝手にMarkdownプレビューを開くVS Codeのエクステンションを書いた - hnwの日記

    Visual Studio Code(以下VS Code)、みなさん使ってますか?VS CodeはMicrosoftが開発しているオープンソースのエディタです。Electronベースという意味ではAtomと似た存在ですが、Atomより軽いという評判を聞いたりします。 私も最近VS Codeを使い始めました。いまのところMarkdown編集専用という状況ではありますが、便利に使っています。それだけでなく、「Auto-open Markdown Preview」というエクステンションを書いて自分好みの挙動になるようにしてみました。稿ではその顛末について紹介します。 ちなみに作業はすべてMacOSX上で行いましたが、WindowsでもLinuxでも同様だと思います。 作ったもの 今回、「Auto-Open Markdown Preview」というエクステンションを作りました。Markdown

    勝手にMarkdownプレビューを開くVS Codeのエクステンションを書いた - hnwの日記
    Kiske
    Kiske 2016/05/23
    TypeScriptの勉強に良さそう
  • WebスクレイピングライブラリGoutteで遊んでみる - hnwの日記

    新年あけましておめでとうございます。今年もボチボチやっていきます。 稿ではPHP製のWebスクレイピングライブラリGoutteを紹介します。 Goutte(グット)とは Goutteは必要十分な機能を持ったWebスクレイピングライブラリです。そもそもWebスクレイピングというのは、外部Webページから必要なデータを取ってくるくらいの意味です。つまり、GoutteはWebスクレイピングを簡単に行う道具だと考えればいいでしょう。 具体的には、GoutteはWebクローラとHTMLパーサを組み合わせたようなものです。Cookieやフォームの扱いなどWebブラウザとしての機能は一通り揃っていますし、CSS風の要素指定もできるなど、機能面では他のライブラリと遜色ないように感じます。 さらに僕個人がGoutteに期待している点は、安定性とロングサポートです。Goutteは主要機能をSymfony2お

    WebスクレイピングライブラリGoutteで遊んでみる - hnwの日記
    Kiske
    Kiske 2012/01/16
    これ便利だね。
  • PHPMatsuriに参加してきました - hnwの日記

    10月2日から3日にかけて、PHPMatsuriに参加してきました。1日目の午前中は大部屋でセッション、午後からは部屋を区切ってセッション+ワークショップの2並列、1日目の夜から2日目の昼まで各自ハック、2日目の午後からハックしたものについてのLT大会、というような流れでした。 事前情報をほとんどチェックできておらず、宿つきのハック大会+ごく小規模なセッションというくらいの認識で行ったのですが、とんでもない勘違いでした。セッションだけでも非常に充実していて、裏側のワークショップも非常に楽しそうで、それだけでヘロヘロなのに深夜までハックする人が多数という、ひょっとしたら通常の4日分くらいが詰めこまれた2日間でした。 僕はずっとセッションを聞いていたのですが、Nate Abeleの「Practical PHP 5.3」とJoel Perras&Nate Abeleの「フレームワーク嫌いの人の為

    PHPMatsuriに参加してきました - hnwの日記
    Kiske
    Kiske 2010/10/19
  • PHPのcopy関数がファイルサイズ分のメモリを消費する件の対策 - hnwの日記

    補足(2010/08/24 15:00):rename関数について言えば、同一ファイルシステム上であればrenameシステムコールを利用するのでこの問題は起こりません。さらに蛇足ですが、ファイルシステムをまたがってrename関数を利用するとコピーしてから削除することになり、アトミック性を保証できないため、障害の原因にならないかどうかの検討が必要だと思います。 「AKIBA de: PHPのrename()関数はファイルシステム間で使うとメモリをバカいする」で指摘されている通り、PHPのcopy関数やファイルシステムをまたがってrename関数を使う場合に、PHPがファイルサイズと同じ大きさのメモリを消費してしまいます。環境によっては再現しないかもしれませんが、僕の手元のMacOSX 10.5+PHP5.3.3環境では再現しました。 <?php // 「dd if=/dev/urando

    PHPのcopy関数がファイルサイズ分のメモリを消費する件の対策 - hnwの日記
    Kiske
    Kiske 2010/08/30
  • MacOSXのインストール直後にシステム環境設定でやるべきことリスト - hnwの日記

    先日、古いMacBookにSnow Leopardをクリーンインストールしました。その際、以前Leopardをインストールする時にメモしておいた「システム環境設定」の作業リストが役に立ったので公開します。 ややマニアックな設定も含まれていますので、取捨選択してお使いください。他に「これもオススメ!」という設定があれば教えてください。 「共有」「コンピュータ名」のマシン名を変更 「山田太郎のMacBook」みたいなキモい名前になっているので、ホスト名っぽい名前に変更しましょう。 何台かマシンを所有している場合は植物や鉱石といった無生物の名前で統一するのが個人的にはオススメです。 「共有」「コンピュータ名」「編集」でローカルホスト名を変更 「yamada-taro-no-macbook.local」みたいなキモい名前になっているので「ホスト名.local」に変更しましょう。 あまり知られていま

    MacOSXのインストール直後にシステム環境設定でやるべきことリスト - hnwの日記
    Kiske
    Kiske 2010/08/07
  • 第51回PHP勉強会@関東に参加してきました - hnwの日記

    追記(2010-04-04):ごめんなさい、プレゼン内容に一部嘘が混ざってました。「64bit環境とPHP」も併せてご覧下さい。 第51回PHP勉強会@関東に参加して、15分ほどのプレゼンをしました。勉強会の会場は、毎度おなじみトライコーン株式会社さんでした。suzukiさん、会場提供&ust配信ありがとうございました。そして幹事のgusagiさん毎度ありがとうございます。 発表資料 : 「64bit PHPの罠」(PDF、少し改訂版) Ustream録画:http://www.ustream.tv/recorded/5746520 内容としては、2年ほど前のmaru_ccさんの記事「php5.2.6からstrtotime関数の挙動が変わる - maru.cc@はてな」とかぶる内容ですが、自分の周りで64bit環境が増えてきたので改めてまとめなおした感じです。 懇親会などで質問をもらったの

    第51回PHP勉強会@関東に参加してきました - hnwの日記
    Kiske
    Kiske 2010/03/29
  • PHPのY10K問題 - hnwの日記

    PHPは他の言語と同様に、時刻を扱う際にunix epochからの経過秒数(いわゆるunix time)を利用しています。PHP5.2.6以降では、64bit環境であればunix timeも64bitに拡張されています。これで2038年問題も過去のものになるというわけです。 一方、unix timeが64bitに拡張されたことでカオスな結果になることがあるようです。64bit環境のPHP5.2.11で気づいた点を紹介します。 strtotimeが西暦10K年以降に対応していない <?php var_dump(strtotime("9999-12-31 23:59:59")); // int(253402268399) var_dump(strtotime("+10000-01-01 00:00:00")); //int(946648800) ISO8601的に+10000という書き方は正し

    PHPのY10K問題 - hnwの日記
    Kiske
    Kiske 2010/03/10
  • PHPカンファレンス2009でLTしてきました - hnwの日記

    9月5日に、PHPカンファレンス2009のライトニングトーク枠でphpallについて喋ってきました。資料は下記です。 発表資料:「phpall:PHPの全バージョンの挙動を試す」(PDF) Ustream録画:http://www.ustream.tv/recorded/2107844 (他の方のLTも含んでいる動画ですが、僕のLTは7分くらいからです) 過去にPHP勉強会で発表したネタ(参考:「第38回PHP勉強会に参加してきました」)を再度やったようなものです。大勢の前でしゃべるチャンスということで、持ちネタの中で一番ウケのよかったネタを選びましたが、会場の皆様の反応が良くてホッとしました。 ところで、このphpallコマンドはウケ狙いのネタってわけじゃなく、実用的だと思うんですよね。実際、symfony作者のFabienさんも僕のプレゼンを会場で見ていたみたいですが、なんと次のような

    PHPカンファレンス2009でLTしてきました - hnwの日記
    Kiske
    Kiske 2009/09/09
  • PHP 5.3の無名関数を試してみた - hnwの日記

    何番煎じかわからないですが、PHP 5.3からは無名関数が実装されたということで、試しに使ってみました。 見なくても何となく使えるようなものだと思いますが、ドキュメントが「PHP: 無名関数 - Manual」にありますので、ざっと目を通した方がいいと思います。 僕は「どうせ無名関数って中身はcreate_functionなんでしょ?」と思っていたんですが、Closureクラスを使って実装されているなんてことも書いてあります。PHPにしてはマトモっぽくて意外に感じました。 コールバック関数としての無名関数 PHPには引数としてコールバック関数を要求する関数がありますが、PHP5.3.0からは無名関数を引数にしても動くようになりました。 無名関数は、普段の関数と同じノリで「function」から書き始めればOKです。関数宣言との違いは関数名を書かない点だけで、引数やタイプヒンティングについて

    PHP 5.3の無名関数を試してみた - hnwの日記
    Kiske
    Kiske 2009/07/13
  • Symfony Event Dispatcherで遊んでみた - hnwの日記

    Symfony Event Dispatcher とは Symfony Event DispatcherというのはPHPフレームワークであるsymfonyに含まれるライブラリで、GoF*1のObserverパターンの変種です。 このクラスは現在Symfony Event Dispatcherという名前で単体公開されていますので、symfony以外のプロジェクトでも気軽に利用できると思います。全部で300行程度の小さいライブラリで、テストコードが29件書かれています。 また、ガイドとAPIリファレンスが書かれています。レシピ集を見ればsymfonyでどう利用されているかを垣間見ることが出来ます。テストカバレッジ率100%なんてことも書いてありますね。 稿では、PHP5に対応したObserverパターンの実装としてのSymfony Event Dispatcherについて紹介します。 Obs

    Symfony Event Dispatcherで遊んでみた - hnwの日記
  • 見直されるべきPHP5の組み込みイテレータ - hnwの日記

    PHPには5.0.0以降SPL (Standard PHP Libray)という枠組みが導入されています。これにより、Iteratorインターフェースを実装したクラスのインスタンスであれば、foreach文で配列と同じように取り扱えます。自分でクラスを作るときもIteratorを実装すれば使うのが楽ですし、コードも読みやすくなると思います。 また、PHPに標準で組み込まれているクラスにはIteratorを実装しているものが多数あります。たとえば僕の手元のPHP5.2.9には24個のイテレータがあり、そのうちいくつかは十分に実用的なクラスです。ただ、日語の資料が少ないせいか、かなり知名度は低いように思います。記事では4つの便利な組み込みイテレータを紹介します。 SPLのクラスにはデザインパターンの考えが多く含まれています。特に、イテレータを元にイテレータを作るような使い方は、保守性の高い

    見直されるべきPHP5の組み込みイテレータ - hnwの日記
    Kiske
    Kiske 2009/05/26
  • PHPのsort関数は相当おかしい - hnwの日記

    追記(2009/02/28 15:35):ソートする配列の要素が数値または数値形式の文字列のみの場合は、<、==、>が推移律を満たすので、この記事のような矛盾は起こりません。念のため。 オヤジギャグがこらえられなくなったら立派なオヤジだと思います。それはさておき、今日はPHPのsort関数が不思議な挙動をする例を紹介します。 sort関数の紹介 sort ― 配列をソートする 説明 bool sort ( array &$array [, int $sort_flags= SORT_REGULAR ] ) この関数は配列をソートします。この関数が正常に終了すると、 各要素は低位から高位へ並べ替えられます。 PHP: sort - Manual マニュアルをみる限り普通のソート関数です。省略可能な2番目の引数の意味は次の通りです。 sort_flags オプションの 2 番目のパラメータ s

    PHPのsort関数は相当おかしい - hnwの日記
    Kiske
    Kiske 2009/03/02
    PHPの自動型判定によって起こりうる例。
  • mb_check_encodingは何をチェックするのか(その1 SJIS編) - hnwの日記

    (2009/02/15 17:20)「個人的な感想」を追記しました。また、下記はPHP5.2.1以降の挙動です。PHP5.2.0以前のmb_check_encodingは更にカオスなので、あまり使い物にならないと思います。 (2009/02/16 12:30)追記2:バグっぽいと思った件は当にバグで、修正がhttp://news.php.net/php.cvs/56276の通り取り込まれました。PHP5.2.9から修正される予定です。 (2009/02/22 16:20)追記3:他のエンコーディングについても調査しました。「(その2 EUC-JP編)」と「(その3 UTF-8編)」も合わせてご覧下さい。 PHPのmb_check_encoding関数が一体何のチェックをしているのか、エンコーディングごとに一通り調べてみます。 まずはSJISとSJIS-win(CP932)について調べてみ

    mb_check_encodingは何をチェックするのか(その1 SJIS編) - hnwの日記
    Kiske
    Kiske 2009/02/23
  • Emacs使いが幸せにiTermとTerminal.appを使う方法 - hnwの日記

    今回はMacOSXユーザーかつEmacsユーザーの人にのみ関係する話題です。要はKeyRemap4MacBook使うといいよ!ってことです。 以前の記事「一部のCommand+?だけをMeta+?として使うKeyRemap4MacBookパッチ」のパッチに問題があったので修正してみました。これを改めて紹介します。修正してから10日以上使っていますが、僕は違和感なくiTermで作業できています。(Terminal.appでも問題なく使えます) Emacs病とMac Emacs病が悪化してくるとmetaキーを頻繁に使うようになってきます。Macの標準的なEmacsであるCarbon EmacsではデフォルトでCommandキーがmetaキーの意味になっているので、そのままの設定で使っている人が多数派なのではないでしょうか。 一方で、Terminal.appの初期設定ではmetaキーが利用できま

    Emacs使いが幸せにiTermとTerminal.appを使う方法 - hnwの日記
    Kiske
    Kiske 2008/12/22
  • 第38回PHP勉強会に参加してきました - hnwの日記

    第38回PHP勉強会に参加して、5分ほどLTをしました。勉強会の会場はトライコーン株式会社さんにお貸し頂きました。ありがとうございます。 発表資料:「PHPの全バージョンを揃えよう」(PDF) Ustream録画:http://www.ustream.tv/recorded/989155 (5:54) というわけで、みんな複数バージョンのPHPを用意しましょう。結構ウケていた気がしますが、僕は半分くらい気です。 全バージョンと言いつつPHP5だけかよ、という意見もあるとは思いますが、PHP5.0.5あたりまでの古いバージョンはgcc4でコンパイルするのに工夫が必要とか、PHP5だけでも多少困難があるんです。PHP4を全部揃えるとか言い出したら面倒すぎて死ぬと思います。 ビルドの方法やphpallコマンドの紹介などは別の記事としてまとめました(「phpallコマンドでPHPの全バージョンの

    第38回PHP勉強会に参加してきました - hnwの日記
  • PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった - hnwの日記

    (2016/07/02 20:00追記)稿をさらに掘り下げた記事「PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合」「PHPの新しいround関数を読み解く (2)pre-roundingの意味」を書きました。合わせてご確認ください。 12月4日付でPHP5.2.7とPHP5.3.0alpha3が同時リリースされましたが、これに関連して毎度おなじみPHPのround関数の話題です。相変わらず記事は長いので簡単なまとめから。 PHP5.3.0alpha3ではこれまでのPHPのいずれとも違うround関数が実装されました。少々疑問は残るものの、比較的マシな実装だと僕は考えています。今回は0.50000000001のような不思議な数は含まれていませんし、問題が起こる例が以前より減ったように思います。 第3引数で丸め方式を選択できるようになりました。四捨五入(デフォルト

    PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった - hnwの日記
    Kiske
    Kiske 2008/12/10
  • CakePHPカンファレンス東京に行ってきました - hnwの日記

    土曜日に開催されたCakePHPカンファレンス東京に、CakePHPに触った事もないのに行ってきました。CakePHPの中の人であるGarrettの話が聞けて良かったですね。 Garrettの話で印象深かったのは、CakePHPはバグチケット数を0にしてからじゃないとリリースしない、という話題です。 Zend Frameworkとsymfonyはstableでもバグたくさんあるよ、という話題の際にチラッと「stableの意味が違うのかもしれないが」とも言っていたと思いますので、全力で他のフレームワークをDISる意図ではないと思います。とはいえ、リリースの基準がわかりやすいのは非常に良いことで、CakePHPの自慢ポイントなのは間違いないですね。同じことをPHP体の中の人にも言ってやってください。 また、リアルタイムに通訳しながらのプレゼンというのは野心的な試みだと思うんですが、大成功だっ

    CakePHPカンファレンス東京に行ってきました - hnwの日記