タグ

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

  • date-holidays という祝日ライブラリが良い意味で狂っていた - hnwの日記

    世界には色々なマニアがいるなーという話を紹介します。 先日Node.jsで使える祝日ライブラリを探していたところ、複数の国や地域の祝日に対応しているライブラリ date-holidays を見つけました。 commenthol/date-holidays: worldwide holidays このライブラリは稿執筆時点で143ヶ国379地域の祝日に対応しています。この時点で頭がおかしい(ほめ言葉)のがわかると思うんですが、さらに凄いのがこれらの祝日をすべてYAMLで定義しており、このYAMLが変態的だという点です。 YAMLによる祝日の定義例 どう凄いかは実際のYAMLを見た方が早いと思うので、例を紹介します。下記は日の祝日の定義の一部です。 01-15: name: en: Coming of Age Day jp: 成人の日 active: - from: 1948-07-20

    date-holidays という祝日ライブラリが良い意味で狂っていた - hnwの日記
    castaneai
    castaneai 2019/04/14
  • GAE/SE PHP 7.2環境は実用性が高そうだという話 - hnwの日記

    筆者の周囲だけかもしれませんが、さいきんGoogle App Engine Standard Environment(以下GAE/SE)が再注目されつつあるように思います。今回筆者もgVisorベースのGAE/SE PHP 7.2環境に触ってみたので、その内容を紹介します。 GAE/SEとは GAE/SEは元祖PaaSとも言えるような、Googleが提供するフルマネージド環境です。以前からJavaPythonGoPHPの4言語の環境が提供されていましたが、Go以外の言語のバージョンアップは長いこと提供されておらず、Google気度に疑問を持っていた人も多かったように思います(私もその一人でした)。 ところが最近になってNode.js 8、Java 8、Python 3.7、PHP 7.2と立て続けに新バージョンを提供してきており、Googleが水面下でGAE/SEに開発リソースを

    GAE/SE PHP 7.2環境は実用性が高そうだという話 - hnwの日記
    castaneai
    castaneai 2018/09/16
    “Ubuntuのx86_64バイナリをデプロイすると実行可能”
  • MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記

    MySQLのデータ型としてFLOAT型という型があるのですが、これを採用するのは混乱の元ではないか?と感じたので、その詳細を紹介します。 そもそもこの話のきっかけは「MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由」という記事が目に止まったことです。それなりに人気を集めている記事のようですが、私の読んだ限りではFLOAT型を使うだけの根拠が文中から読み取れず、さらに類似する一次情報や英語記事が全く見つからなかったので、真偽が怪しい情報だと感じました。 その後、MySQL上で実験したりCソースコードを読んでみたりした結果、私の得た結論は真逆のものになりました。MySQL警察の方や浮動小数点数警察の方、追試や反論など頂けると助かります。 MySQLのFLOAT型とは MySQLのFLOAT型は原則としてIEEE754浮動小数点数単精度型(32bit)で実現されます*1。

    MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記
    castaneai
    castaneai 2017/12/22
  • PHPの連想配列は常にin_arrayより速いのか - hnwの日記

    プログラムを書いていると、入力値が辞書に含まれているかを調べたいようなことがあります。たとえば、ユーザーに都道府県名を入力させて、それが正しい都道府県名であるかどうかを調べたい、というようなことがあるかもしれません。 このような内容をPHPで書く際、キーに都道府県名を持つような連想配列を作る習慣がある人は多いはずです。これは典型的な連想配列の使い方といえるでしょう。 <?php $prefs = array( "北海道" => true, "青森" => true, // ... "沖縄" => true, ); if (isset($prefs[$input])) { // 都道府県名が正しい時の処理 } 一方で、in_array関数を使うやり方も考えられます。 <?php $prefs = array( "北海道", "青森", // ... "沖縄", ); if (in_array

    PHPの連想配列は常にin_arrayより速いのか - hnwの日記
    castaneai
    castaneai 2017/05/22
  • PHPプログラムを書いたらマイナス21億行目あたりでエラーが出た - hnwの日記

    (2016/10/5 20:40 追記)誤解を招いている部分がありそうなので文末に補足を追記しました。巨大なプログラムをわせただけでPHPが死ぬわけではありません。 毎度おなじみ、意図的に重箱の隅をつついてみたよって話です。あるPHPプログラムを実行したら次のようなエラーに遭遇しました。 $ php over-2g-lines.php int(0) PHP Fatal error: Uncaught Error: Call to undefined function var____dump() in /Users/hnw/over-2g-lines.php:2150000004 Stack trace: #0 {main} thrown in /Users/hnw/over-2g-lines.php on line -214496729221億5千万4行目で致命的エラーが発生したよ!とい

    PHPプログラムを書いたらマイナス21億行目あたりでエラーが出た - hnwの日記
    castaneai
    castaneai 2016/10/06
  • PHP extensionとZend extensionの違い - hnwの日記

    PHPのextensionにはPHP extensionとZend extensionという2種類があります。これらの違いが何なのか、PHPの実装レベルから調べてみました。 PHPのextensionについて PHPのextensionには2種類が存在します。これらは次のようにphp.iniでロード指定する構文が異なります。 extension=extension.so zend_extension=/path/to/extension.so 稿では「extension=」でロードされるものをPHP extension、「zend_extension=」でロードされるものをZend extensionと呼びます。これらはPHPのソースコード中ではそれぞれmoduleとextensionと呼ばれているので注意してください。 代表的なZend extensionとしてはXdebugとZend

    PHP extensionとZend extensionの違い - hnwの日記
  • 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の日記
    castaneai
    castaneai 2012/01/16
  • PHPで==の代わりにstrcmp関数を使うことによる問題点 - hnwの日記

    補足(2010/12/01 03:00):floatからstringへのキャストで丸められる桁数についてですが、php.iniの設定値「precision」の影響を受けるようです。 僕は以前から「PHPの==はキモいから===を使おうよ」と言っているつもりです(参考:「PHPの==がキモい件」)。しかし、ネット上には==を使った比較での不慮の事故を防ぐ目的で、「安全な==」としてstrcmp関数を使って比較している人が居るようです。このやり方について問題点を指摘します。 strcmpで比較するというのはstring型にキャストをして比較するのと同じですから、キャストして何が起こるか熟知していないと比較結果は想像がつきません。僕は全ての型からstring型へのキャストで何が起こるかスラスラ言えるわけではありませんから、何でもstrcmpするのは==を使うのと同じように怖いと感じます。 今回、

    PHPで==の代わりにstrcmp関数を使うことによる問題点 - hnwの日記
  • GitHubへpull requestする際のベストプラクティス - hnwの日記

    みなさん、Git使ってますか?僕はまだメインのVCSがSubversionなのもあって、なかなか慣れません。せっかくGitを使っているのに、ちょっと不便なSubversionくらいの位置づけです。でも、同じような理解度の人って多いんじゃないでしょうか。 一方で、最近はGitHub管理のオープンソースプロジェクトが増えてきました。バグレポートを送るにしてもpull request*1が前提のような空気があり、Git初心者には少し敷居が高い印象があります。 そんな僕も先日初pull requestをしてみたんですが、色々な失敗の積み重ねで残念なpull requestになってしまいました。その反省を元に、稿ではpull requestする際のベストプラクティスを紹介します。これは「Git Workflow」をベースにコマンド例などを加筆したものです。 概要 pull requestする際は、

    GitHubへpull requestする際のベストプラクティス - hnwの日記
    castaneai
    castaneai 2011/05/29
  • 見直されるべきPHP5の組み込みイテレータ - hnwの日記

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

    見直されるべきPHP5の組み込みイテレータ - hnwの日記
  • 1