タグ

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

  • Travis CIのcron jobsを使ってGitHubに定期的にcommitする方法 - hnwの日記

    みなさん、Travis CI使ってますか?Trais CIはクラウドCIサービスの1つで、GitHub上で公開しているOSSを自動テストする目的であれば定番中の定番といっていいサービスです。 ところで、さいきん私の公開しているプロジェクト「hnw/wsoui」で以下のことを実現したいと考えました。 ネット上のデータを加工してGoの連想配列の形で提供したい 変換スクリプトは作成済み 自動更新したい 情報ソースは不定期に更新される そこそこ最新のデータを反映していてほしい これを実現する方法は何種類か思いつきますが、今回Travis CI のcron jobsを使って1週間に1回、更新があったときだけgit commitするような仕組みを作りましたので、これを紹介します。 Travis CI のcron jobs Travis CIでは、gitリポジトリに新たなcommitがpushされるたび

    oppara
    oppara 2018/07/11
  • Mackerelで家庭内ネットストーカーシステムを作ってみた - hnwの日記

    エントリはMackerel Advent Calendar 2017の23日目の記事です。 自宅の無線LANの利用状況をMackerelで監視するようにしたところ、予想以上にキモい仕組みができました。たとえば、家族の誰か(正確には誰かのスマートフォン)が外出するとSlackに通知を飛ばすことができます。 同じことをしている人は多くないと思うので、その知見を紹介します。 システム概要 まずは我が家のネットワーク構成を紹介します。 インターネットに接続しているブロードバンドルータがあり、無線経由でスマートフォンやPCがぶら下がっているような、ごく普通のネットワーク構成です。唯一変わっている点は、ブロードバンドルータ上でLinuxおよびMackerelエージェントが動いていることでしょう。 このルータの詳細は稿では省きますが*1、ザックリ言うとRaspberry Pi 3を無線LANアクセス

    Mackerelで家庭内ネットストーカーシステムを作ってみた - hnwの日記
    oppara
    oppara 2017/12/24
  • とあるPHP拡張のCI事情 - hnwの日記

    PHP Advent Calendar 2017の3日目です。公開が遅くなってしまいました、ごめんなさい。 筆者はphp-timecopというPHP拡張を5年間ほどメンテナンスしています。このPHP拡張はCで書かれているのですが、Travis CIやAppVeyorなど複数のクラウドCIサービスを組み合わせてテストを回しています。稿では各サービスをどのように利用しているか、それぞれの使い分けや特徴などを紹介していきたいと思います。 背景 題に入るまえに、なぜPHP拡張でCIが必要か、という話を紹介します。 C言語で書かれたプログラムはポータビリティが高いような印象を持つ人が多いかもしれませんが、実際はむしろ逆で、ポータブルに書くのが難しい言語の1つです。Cではシステムコールやライブラリ関数を直接呼び出すのが普通ですが、これらは環境によって存在しないこともありますし、細かい挙動が異なるこ

    とあるPHP拡張のCI事情 - hnwの日記
    oppara
    oppara 2017/12/05
  • PHPカンファレンス2010で発表&パネル発表してきました - hnwの日記

    9月24日、25日の両日、PHPカンファレンス2010が開催されました。僕は25日のテックデイで、PHPのストリームについて発表してきました。また、最初のPHPを作った開発者であり今もPHPのコアデベロッパーであるRasmusとHipHop for PHPの開発者Scottを招いての発表がありましたが、そのお二人を囲んでのパネルディスカッションに僕も参加しました。 「PHPストリーム概説」 PHPのストリーム機能について20分ほどプレゼンをしました。プレゼン資料は以下です。 発表資料:「PHPストリーム概説」(PDF) 元々知っていた人、初めて知った人ともにおおむね温かい反応を頂いたように思います。ありがとうございます。 実は、この内容で発表しようと思ったのはid:yandodさんとの会話がきっかけでした。yandodさんによれば、海外PHPカンファレンスではXdebugやPHPUnit

    PHPカンファレンス2010で発表&パネル発表してきました - hnwの日記
    oppara
    oppara 2017/09/09
  • php-timecopをPECLに登録しました - hnwの日記

    かれこれ5年ほどメンテしている拙作のPHP拡張「php-timecop」ですが、このたびPECLに登録しました(PECL :: Package :: timecop)。 PECLというのはPHP体に含まれないPHP拡張を提供する公式のリポジトリです。PECLのアカウントは承認制になっており、誰でも登録できるわけではありません。イタズラやお試しでの登録は減るでしょうが、代わりに登録への精神的ハードルが上がってしまうような仕組みだと言えるでしょう。実際、PECLに登録されているパッケージ総数は365個(2017/7/8時点)と多くはありません。また、日人と思われるPECLアカウントは筆者以外では5人でした。 稿では、PHP拡張をPECLに登録するまでのプロセスや、実際に登録してみてわかったことなどを紹介します。 PECLに登録するメリット さて、そのPECLですが、PEAR*1の衰退とと

    php-timecopをPECLに登録しました - hnwの日記
    oppara
    oppara 2017/07/09
  • Windows Subsystem for Linux上でphp-fpmを動かしてみた - hnwの日記

    最近のWindows 10にはLinuxバイナリをそのまま動かすような仕組みが導入されています。これは Windows Subsystem for Linux (WSL) とか Bash on Ubuntu on Windows (BoW) などと呼ばれているもので、VM実行でなくWindowsネイティブでLinuxを動かすという意欲的な取り組みです。 この環境で最新版のPHPをソースコードからビルドし、アプリケーションサーバとして動作させてみました。 稿執筆時点(2017年5月)ではWSL自体がまだ不安定な印象ですが、nginx+php-fpmを動作させることができました。以下はWindowslocalhost 80番ポートでPHPが動作している証拠画像です。「System」欄のunameの表示にMicrosoftという文字列が入っているのがオシャレですね。 以下、WSL上でngin

    Windows Subsystem for Linux上でphp-fpmを動かしてみた - hnwの日記
    oppara
    oppara 2017/05/02
  • ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記

    先日Twitterに次のような書き込みをしたところ思ったより反応が良かったので、詳細の設定を紹介します。 UDP53番、TCP443番、UDP123番とポートノッキングをするとTCP443番に10秒だけsshdが現れる、という中二病全開の設定をした。皆様にもお勧めしたい。— hnw (@hnw) 2017年3月26日 といっても特殊なことをしたわけではなく、knockdでポートノッキングの設定を行い、iptablesと組み合わせて実現しました。 ポートノッキングとは ポートノッキングというのは、決められたポートを決められた順番で叩くことでファイアーウォールに穴を空けられるような仕組みのことです。ポートノッキングを使えば、TCPの7000番、8000番、9000番の3ポートにパケットを送りつけると22番ポート (SSH) へのアクセスが許可される、といった設定ができます。 ポートノッキングの

    ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記
    oppara
    oppara 2017/03/29
  • 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の日記
    oppara
    oppara 2017/01/15
  • 第七回闇PHP勉強会でrealpathキャッシュとデプロイの話をしました - hnwの日記

    昨日12月11日に第七回闇PHP勉強会を開催いたしました。私を含め発表者6人ということで、とても盛り上がった勉強会になりました。発表者の皆さま、またご参加いただいた皆さま、当にありがとうございました。また会場提供いただいたピクシブ株式会社さまにも大変お世話になりました。 以下が私の発表資料です。 PHPアプリケーションをsymlink切り替えでデプロイしているとrealpathキャッシュ絡みで何かしらトラブルがありますよね、というくくりで複数のトピックを紹介するような内容でした。タイトルの通り、一番話したかったのはmod_phpphp-fpmとでOPcacheの挙動が変わる話だったんですが、かなり入り組んだ内容だったのでうまく伝わらなかったかもしれません。 質問タイムに、@edvakfさんから面白いエピソードを聞くことができました。Pixivではこの手の問題に一通りハマった結果、現在で

    第七回闇PHP勉強会でrealpathキャッシュとデプロイの話をしました - hnwの日記
    oppara
    oppara 2016/12/13
  • Language Update PHP編(LLoT補足) - hnwの日記

    昨日8/27にLLoTの「Language Update」の10分枠でPHPの話をしました。発表資料は以下です。 会場にPHPの人はほとんどいない前提だったので、他の言語の人に「最近のPHPってこんな感じですよ」をお伝えするつもりで資料作成しました。言いたかったことはだいたい言えたつもりですが、補足と感想などを書いてみます。 PHP 7.0でのトピック プレゼン資料にも書いたんですが、PHP 7についてお伝えしたかったことは、メジャーバージョンアップながら移行のハードルは低いこと、また高速化チーム(PHPNGチーム)が高速化を達成したことの意義、という2点になります。 メジャーバージョンアップといえばPerl 4→5やPython 2→3の混乱が連想されると思うんですが、それに比べるとPHP 5→7は内部構造のみの大変更であり、他の言語で言えばマイナーバージョンアップと同レベルの変更だと思

    Language Update PHP編(LLoT補足) - hnwの日記
    oppara
    oppara 2016/08/28
  • php-timecopをPHP 7対応させてみた - hnwの日記

    自作のPHP拡張であるphp-timecopをPHP 7に対応させてみました。この機会に改めてphp-timecopの紹介をしてみます。 php-timecopとは php-timecopというのは筆者が4年ほど前に作ったPHP拡張で、現在時刻に紐付いた値を返すPHP関数について、基準となる現在時刻を過去や未来の任意の時刻に設定することができるというものです。 以下に簡単な例を紹介します。 <?php var_dump(date("Y-m-d")); // 今日の日付 timecop_freeze(0); var_dump(gmdate("Y-m-d H:i:s")); // string(19) "1970-01-01 00:00:00" var_dump(strtotime("+100000 sec")); // int(100000) 上記プログラム中2行目のtimecop_free

    php-timecopをPHP 7対応させてみた - hnwの日記
    oppara
    oppara 2016/04/22
  • DNSSEC対応の独自ドメインを年額$0.88で運用できるよという話 - hnwの日記

    (2016/3/27追記)0.88ドルというのは期間限定のキャンペーン価格のようです。普段はもっと高いのかもしれません。 DNSSECって名前は聞くけど詳細は知らないな、というくらいの理解度の人って多いんじゃないでしょうか。実は筆者もそんな一人だったのですが、この連休中に独自ドメインを取得してDNSSEC対応させてみました。DNSSEC対応できるレジストラ・ドメインの組み合わせとしてはNamecheapで.pwドメインを取るのが探した範囲では最安値で、最初の1年間だけ維持するなら0.88ドル、翌年以降更新する場合でも年額7.88ドルに収められることがわかりました。 稿では一連の顛末を紹介します。 そもそもレジストラやドメインのDNSSEC対応って何? DNSSECにおいて、レジストラはどういう役割を担うのでしょうか?レジストラの選択がDNSSECの利用にどういう影響を与えるのでしょうか?

    DNSSEC対応の独自ドメインを年額$0.88で運用できるよという話 - hnwの日記
    oppara
    oppara 2016/03/21
  • GS105EとMacOSXでTagged VLAN設定 - hnwの日記

    やや変則的なネットワークを組むのに、VLANが使える手頃なL2スイッチGS105Eを利用してみました。その手順を紹介します。 要件 有線LAN接続した端末Aの通信内容を、任意のタイミングでパケットキャプチャしたい パケットキャプチャはMacbook Airで行いたい 端末Aがインターネットに接続する際、Macbook Airを経由させたい mitmproxyを挟んだりしたいのでポートミラーリングではダメ Macbook Airに物理的に接続できる有線LANインターフェースはUSB接続1個のみ 他にWi-Fiインターフェースも通信に使える Macbook Airがネットワークに参加していないときに、比較的簡単な工事で端末Aがインターネット接続できるようにしたい その際にパケットキャプチャできる必要はない これを満たすネットワークを組むのにVLAN機能を使ってみました。 準備 Tagged V

    GS105EとMacOSXでTagged VLAN設定 - hnwの日記
    oppara
    oppara 2016/02/29
  • CloudFlareで運用中の独自ドメインをダイナミックDNSとして利用する - hnwの日記

    CloudFlareといえば無料CDNサービスが有名ですが、高機能な無料DNSサービスも提供しています。筆者は趣味で独自ドメインを管理しており、以前はRoute53を使っていたのですが、昨年の2月からCloudFlareを利用しています(参考:「CloudFlareのCNAME FlatteningをGitHub Pagesで使ってみた」)。10ヶ月ほどの運用で全く不満はありません。 独自ドメインでダイナミックDNS さて、せっかく独自ドメインを持っているのですから、ダイナミックDNSも独自ドメインでやりたいところですよね。実は、各種ダイナミックDNSサービスの自動更新を行ってくれるPerl製のツールddclientが最新版3.8.3からCloudFlareに対応しています。これを使えば独自ドメインのダイナミックDNSがお手軽にできるというわけです。 Debianのddclientにパッチ

    CloudFlareで運用中の独自ドメインをダイナミックDNSとして利用する - hnwの日記
    oppara
    oppara 2016/01/06
  • GoでPHP拡張モジュールを書いた話 - hnwの日記

    12/6のGo Conference 2015 WinterでGoPHP拡張モジュールを書いたよ、という内容のLTをしてきました。 ざっくり言うと、Goって言ってもCのレベルに落ちてくれば連携なんて簡単でしょって思ってたけど、GoPHP拡張もビルドプロセスが隠蔽されてるので、落としどころが見つからなくて苦労したよって話でした。もっと綺麗に連携できる方法を編み出した方は教えてください。 PHP拡張モジュール側のビルドについて補足 拡張モジュールを共有ライブラリじゃなく静的ライブラリとして作ればいいじゃん、って発想で作り始めましたが、実は拡張モジュールを静的ライブラリとして作るのは結構ダルいという事情があります。というのも、拡張モジュールをphpizeするとconfigureオプションで何を指定しても静的ライブラリが作られないようにm4マクロが展開されてしまうのです。 そこで、できあがった

    GoでPHP拡張モジュールを書いた話 - hnwの日記
    oppara
    oppara 2015/12/08
  • PHPのインターン化文字列とは何か - hnwの日記

    このエントリは闇PHP Advent Calendar 2015の3日目です。なぜか@do_akiさんによる4日目の記事「ZEND_TICKS と tick 関数」を読んだ後で書いています。 稿では、あまり日語での説明を見たことがないPHPのインターン化文字列(interned strings)について紹介します。 文字列のインターン化とは 文字列のインターン化というのは多くのプログラミング言語で採用されているテクニックで、同じ不変文字列がプログラム中に何度も登場するような場合に、毎回文字列をコピーするのではなく同じ文字列を共有することで実行時間やメモリ消費量などを有利にするようなものです。Wikipediaの「String interning」なども参照してください。 internというのは軍などで使われる単語で、抑留というのが日語で一番近い単語だと思いますが、どうもピンとこないの

    PHPのインターン化文字列とは何か - hnwの日記
    oppara
    oppara 2015/12/05
  • 拡張モジュール作者だけが知っているPHPのconfigureオプション - hnwの日記

    このエントリは闇PHP Advent Calendar 2015の1日目です。ここでの「闇PHP」はPHPのC言語レイヤの話題という意味で使っています。 そもそも、このAdvent Calendarは第六回闇PHP勉強会を開催する直前の変なテンションで作られたものです。25枠全部が埋まるとは思っていませんが、良いネタをお持ちの方は是非ご参加ください。 configureオプションとは configureスクリプトと聞いてピンと来ない方がいるかもしれませんが、これはPHPをCソースコードからビルドするときの話題です。 PHPをtar ballからインストールする際、次のようにconfigureスクリプトを起動してインストール先や拡張モジュールの有効/無効などを指定してからコンパイル作業を始めます。このconfigureスクリプトに与えるコマンドラインオプションをconfigureオプションと

    拡張モジュール作者だけが知っているPHPのconfigureオプション - hnwの日記
    oppara
    oppara 2015/12/01
  • 初回のコミットをgit rebaseで修正する方法 - hnwの日記

    gitを使っていると、直前の数commitを1コミットにまとめたくなることがあります。そんなときは「git rebase -i」が便利です。 $ git log --pretty=oneline dc561dbe3e149310246384a64ea816c46514ce1b Modified 3 bd271250523c06c1e5fe325c8347aa8fb7509692 Modified 2 313003363efef2e9e8179ee322f0403d1cc9944f Modified 5946ef0345ce4c81f93957126bf079db18df604a Initial commit たとえば上の状況で直前の3個を1コミットにまとめたい場合は、git rebase -iで整理することができます。 $ git rebase -i HEAD~3 # 2コミット目3コミッ

    初回のコミットをgit rebaseで修正する方法 - hnwの日記
    oppara
    oppara 2015/07/18
  • PHPで巨大な整数をカンマ区切りするのにnumber_format関数は使えない - hnwの日記

    PHPには、数値を3桁区切りで表示するための組み込み関数としてnumber_format()が用意されています。 number_format — 数字を千位毎にグループ化してフォーマットする string number_format ( float $number [, int $decimals = 0 ] ) http://php.net/manual/ja/function.number-format.php この関数は金額を表示するような場合に便利です。 <?php $money = 1000; printf("財布の中に%s円あります。\n", number_format($money)); /* 財布の中に1,000円あります。 */ このように金額がカンマ区切りで表示されていると見やすくていいですよね。 ところで、このnumber_format()の第一引数はfloat型です

    PHPで巨大な整数をカンマ区切りするのにnumber_format関数は使えない - hnwの日記
    oppara
    oppara 2015/05/24
  • CloudFlareのCNAME FlatteningをGitHub Pagesで使ってみた - hnwの日記

    (03/04 08:15 追記)今回のDNS設定変更でGitHub Pagesで提供しているCDNが使えるようになったことを追記しました。 今回はDNS方面の話題です。僕ははてなダイアリー以外にhttp://hnw.jp/という古めかしいサイトも管理しています。サイトの実体はGitHub Pagesで、これまでAWSのRoute 53でカスタムドメインの設定をしていました。 ところで、このサイトが2月の頭から1ヶ月ほど見えなくなっていました。原因は僕がGitHubからのメールを読み飛ばしており、DNS設定の変更を怠っていたためです。これに懲りて、今後DNS設定を二度といじらなくて済むようRoute 53からCloudFlareに引っ越してみました。その顛末を紹介します。 GitHub Pagesのカスタムドメイン設定 GitHub Pagesを普段使っていない人も多いと思いますので、まずは

    CloudFlareのCNAME FlatteningをGitHub Pagesで使ってみた - hnwの日記
    oppara
    oppara 2015/03/01