タグ

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

  • 「ユニコード」で予期せぬ目に遭った話 - moriyoshiの日記

    自分の知らないCJK Ideographのバリエーションがまだあったことに戦慄している pic.twitter.com/kUlyRLDDTM— moriyoshit (@moriyoshit) March 9, 2017 などというツイートをしたところ、思ったより反響があったのでまとめておく。 上記ではあいまいに「バリエーション」などと書いたが、Unicodeとそれを扱う環境においては、バリエーションと一口に言っても次のような状況がある。 意味論的に等価な異なる字形の集合 同じ字形で異なるコードポイントの集合 aは結構なじみ深いと思う。 a-1. 異なるコードポイントにそれぞれ異なる字形が割り当てられているもの 例: 「東」(U+6771) ⇔「东」(U+4E1C) 「斉」(U+6589) ⇔「齊」(U+9F4A) 「高」(U+9AD8) ⇔「髙」(U+9AD9) a-2. 同じコードポイ

    「ユニコード」で予期せぬ目に遭った話 - moriyoshiの日記
    kamipo
    kamipo 2017/03/13
  • sendmsg() で送られた fd の持つロックの所有権は保持されるのか - moriyoshiの日記

    いくつかの *nix では sendmsg() / recvmsg() システムコールで他プロセスに fd を送信できたりします。送信元のプロセスでファイルロックを行った場合、送信先で同じ fd にファイルロックを行うとブロックするのでしょうか。出勤途中に猛烈気になったので確かめてみました。 追記: うぎゃー、unix(7) に書いてありました。 SCM_RIGHTS 他のプロセスでオープンされたファイルディスクリプタのセットを送受信する。データ部分にファイルディスクリプタの整数配列が入っている。渡されたファイルディスクリプタは、あたかも dup(2) で生成されたかのように振る舞う。 これを見落としてなければ、こんなくだらないプログラムを書かなくて済んだものを...。 ちなみに、SCM_CREDENTIALSというのもあるようです。Win32でいうとセキュリティトークンを送信できるような

    sendmsg() で送られた fd の持つロックの所有権は保持されるのか - moriyoshiの日記
    kamipo
    kamipo 2013/03/08
  • Perlの正規表現のバグ? (前編) - moriyoshiの日記

    「鬼車の[[:print:]]はPOSIX流じゃないらしい」でid:ockeghemさんやid:nihenさんと先週いろいろやりとりしてた中で、一つだけ解決していない問題があった。 utf8フラグが立っているかどうかでPOSIX文字クラスのマッチの挙動が変わるという件。 大変詳しい調査をありがとうございます。トラックバックのブログに書いたように、[:print:]の挙動は、Perlでもutf8フラグの有無でも変わってくるようです。[:print:]は実用できないなと思いました え?まじ?と思うも、一応Perlのコード例も出していたので検証しないわけにはいかない。以下のようなコードで試してみたが、utf8フラグが立っていない場合と同じ結果となり、再現しないのだ。 use encoding 'utf8'; for (split //, "\t\r\n a") { printf("%d:%d:%

    Perlの正規表現のバグ? (前編) - moriyoshiの日記
    kamipo
    kamipo 2012/05/10
  • グリー株式会社を退職していました - moriyoshiの日記

    グリー株式会社を退職していました。2006年12月29日が最終出社日でした。 最終日は例年を上回る寒さでしたが、六木は晴れ、抜けるような空の青さが印象的でした。有給を消化するはずが、結局最後まで吉田くんが手がけていたお正月特集の仕掛けに時間を費やしていたので、当にここで出社しなくなるのだろうか、と自問するほどでした。 在職期間は契約社員時代も含め1年半とちょっと短かったのですが、その中でもたくさんのことを経験することができました。サイトの初リニューアル作業に始まり、DBの最適化、出たばかりのSennaを使った全文検索システムや画像サーバクラスタの構築など、責任のある仕事を丸ごと任せてもらえたのは大きかったです。一緒にやっているメンバーには、自分のささいなミスでたくさん迷惑をかけました。ごめんなさい。 一方で、何か大きな成果を残すことができたかというと、謙遜ではなく、あまり胸を張れるとこ

    グリー株式会社を退職していました - moriyoshiの日記
    kamipo
    kamipo 2012/04/01
  • やったーmod_vimできたよー - moriyoshiの日記

    Vim scriptはウェブアプリケーション記述言語やったんやー Plack とかよくわかんないのでさくっと Apache で使えるようにしてみました。 mod_vim httpd.conf はこんな感じ LoadModule vim_module mod_vim.so DocumentRoot . Listen 8080 PidFile /tmp/pid LockFile /tmp/lock ErrorLog /tmp/error_log VimDisplay :0 VimVersion 7.2 VimEncoding UTF-8 <Location /> SetHandler vim VimExpr vimplack#handle(@@) </Location> ビルド方法は、まあ README に書いておけよって感じですが make top_builddir=/usr/share/a

    やったーmod_vimできたよー - moriyoshiの日記
    kamipo
    kamipo 2012/02/09
  • 俺とPHP - moriyoshiの日記

    なんか知らないうちにPHPを全然書いたことがないという噂が広まっていて心外すぎるので弁明しておく。長くなるかもしれない。 PHPを使い始めたのはちょうど10年くらい前のことだと思う。4.0.3 あたりが出た頃だ。当時友人たちとシラバスの情報を共有するサイトをつくろうとしていて、PHP を紹介された。データベースに接続してデータの出し入れをするような仕掛けを簡単に作れるという。 それまでは web で何か作るといったら Perl だったし、テンプレートエンジンとかマルチパートパーサとかをまとめたオレオレ web アプリケーションフレームワークを作ってお茶を濁していた。Perl はかなり好きだった。それでも、PHP の手軽さは輝いて見えた。コードをそのまま HTML に埋め込めることでさえ、「poor-man's ASP」だと思って感激していた。マニュアルを見れば、答えが書いてあったから、動く

    俺とPHP - moriyoshiの日記
    kamipo
    kamipo 2011/02/04
    おっぱいおっぱい
  • Python Hack-a-thon で発表してきました!! - moriyoshiの日記

    今回は資料の作成が後手に回ってしまい、運営の方々や発表者の皆様には大変迷惑をおかけしました。 さて、今回は ctypes 拡張モジュールに関する内容を発表させていただきました。 ctypes拡張モジュールView more presentations from Moriyoshi Koizumi. php-in-python の使い方 PHP-in-Pythonには、まだドキュメントがありません。インストール方法を簡潔に説明します。 a. Windowsの場合 windows.php.netよりThread-safe版のPHPのバイナリをダウンロードします。 ダウンロードしたアーカイブを適当なディレクトリに展開します。 展開された中身に含まれているphp5ts.dllの場所がPATH環境変数に含まれるようにします。 b. Linux等Free Unixの場合 php.netよりPHPのソー

    Python Hack-a-thon で発表してきました!! - moriyoshiの日記
  • Linux上で動くSkype用のbotを作る方法 - muddy brown thang

    はじめに 以前、知人のやっているBeProudという会社を手伝ったのですが、BeProudでは、エンジニアの主要なコミュニケーション手段としてSkypeが使われていました。当時、趣味でたまたまSkypeのAPIについて調べていたので、悪戯っ気を出して、開発環境に即席でSkype APIを使ったbotを設置してみたところ、思いのほか好評を博し、いまやインフラと言っても過言ではない存在 *1 *2と化したようです。 まあそんな状況を眺めつつ、自宅のサーバにSkype botを設置して、お気に入りのSkypeチャットにもbotを加えてみたところ、これも結構好評だったので、興味ありそうな人向けに作成方法をまとめることにします。 Skype Public API Skype Public APIとは、Skypeを外部からコントロールするためのインターフェイスです。 Skype Public API

    Linux上で動くSkype用のbotを作る方法 - muddy brown thang
  • sotarokを勝手に祝う会 - moriyoshiの日記

    sotarokを勝手に祝う会に行ってまいりました! 僭越ながらこのたびはLTをさせていただいたので、その内容の紹介をさせていただきたく。(日立風) 皆様ご存知のことと思いますが、OSSコミュニティーにおいて、開発者が結婚する際には、新郎と新婦に オリジナル○○○○○○○○○○○ を贈呈するという慣習があります。 はい、もちろん オリジナルApacheモジュール ですね。 というわけで、今回は mod_sotarok mod_mikko を作らせていただきました。 mod_sotarok-mod_mikko at github.com mod_sotarok.c: /* * Copyright (c) 2010 Moriyoshi Koizumi * * Permission is hereby granted, free of charge, to any person obtaining

    sotarokを勝手に祝う会 - moriyoshiの日記
  • ストアドを使って、Webスクレイピングをしよう! - moriyoshiの日記

    こんにちは、SQLを愛してやまないmoriyoshiです。 ストアドプロシージャは、一連のSQL文をサブルーチンのようにDBサーバに記録しておき、後からそれを呼び出すことができるようにする仕組みです。近代的なRDBMSには標準的に備わっている機能といえます。 制御構造などもSQL文で記述することができるので、結果的に、あらゆるロジックをSQLのみで記述することができます。手続き型プログラミングにどっぷり浸かった現場の方から愛用されていると言われています。 今回は、ストアドプロシージャの応用として、Webスクレイピングを行なってみましょう。Webスクレイピングとは、特定のWebサイトにアクセスし、そのページの内容 (HTML) を取得、解析し、必要な情報を取り出すという一連の操作を自動化することです。Webスクレイピングを効果的に活用すると、人間がブラウザに向かって単純作業を繰り返す必要がな

    ストアドを使って、Webスクレイピングをしよう! - moriyoshiの日記
  • display_errorsが謎の副作用を持っている箇所について - moriyoshiの日記

    昨日 id:narusase さんよりお便りをいただきました。 はじめまして narusaseです。 ↓このあたりに軽くまとめてありますが・・・ http://d.hatena.ne.jp/narusase/20091203 http://d.hatena.ne.jp/narusase/20091204 htmlspecialcharsのdisplay_errorsの解釈が逆転している問題があるようです。 ↓UTF-8で下記のようなコードを書き実行すると <?php $str = 'メガネ'; $hoge = htmlspecialchars($str, ENT_QUOTES, 'SJIS'); printf("%s\n",var_export($hoge, true)); ?> htmlspecialcharsの箇所でエラーが起こります。 これ自体は問題ないのですがphp.iniの設定が

    display_errorsが謎の副作用を持っている箇所について - moriyoshiの日記
    kamipo
    kamipo 2009/12/16
    svn blame & log を使ってアホを暴き出しましょう。
  • 「10〜30分で何となく分かるGo」という資料 - moriyoshiの日記

    Python Hack-a-thon #2 のために作りました。単なるまとめなので、間違いがあったらぜひ指摘してください。 10〜30分で何となく分かるGoView more documents from ... .... 追記: サンプルコードの zip はこちら

    「10〜30分で何となく分かるGo」という資料 - moriyoshiの日記
  • なんか Go で書くのが流行ってるみたいなので - moriyoshiの日記

    追記:「kzk's blog」の「Writing TokyoCabinet wrapper for Go language」で紹介御礼。この記事は cgo を使った TokyoCabinet のラッパーの書き方を解説しているので、下記のコードと組み合わせて当に tc が backend になっている KVS を書いてみるのもよいかも。 『早速 Go 言語を試してみる!』とか。 『Go で無駄にチャンネルを使ってクイックソートのようなものを書いてみた』とか。 こちらはというと、試しに memcache バイナリプロトコルで通信する KVS もどきを書いた。 サーバのイベントループで go すれば全部済むのが楽ちんですね。 追記: HandleConn() の中で、backend_ch を backend との送信と受信両方に使っていたのだけど、ここにあるように、まったく誤りだということが分

    なんか Go で書くのが流行ってるみたいなので - moriyoshiの日記
  • PHPの「えせプログラミング言語」の弊害 - moriyoshiの日記

    先日のエントリーでも少し触れたが、PHPの最大の問題点は、それが持つ「一見その言語構造がよくあるプログラミング言語の形をとりながら、プログラミング言語の最も大切なところを外している『えせプログラミング言語』である」点にある。Webアプリケーションの開発で注意すべき部分とは何かを根底の部分でちゃんと理解せずにPHPアプリケーションを作ると、後々ひどい目に会うので注意が必要である。 その意味では「PHPでプログラミング言語を学ぶ」などもっての他だし、「JavaでもPHPと同じようなプログラミング言語を作ってWebアプリの開発を効率化しよう」などという発想もとても危険である。 PHPの発想の根底には、「HTMLテンプレート用言語とロジック記述用言語の統一により、開発コストを減らそう」という CGI 時代の安易な発明がある。PHPは、その前近代的な発想を通じて、テンプレートとロジックを同じファイル

    PHPの「えせプログラミング言語」の弊害 - moriyoshiの日記
  • 「パッチを当ててやってもいいんだぞ、お前が嫌なら」 - moriyoshiの日記

    PHP では以下のように new してすぐメソッドを呼べない <?php new DateTime()->getOffset(); PHP で引数をそのまま返す関数を作っておくと便利 PHP はどうせマジメな言語ではないので自分用に作り替えるくらいが丁度いい。 以下 diff↓

    「パッチを当ててやってもいいんだぞ、お前が嫌なら」 - moriyoshiの日記
  • select のなかみ - moriyoshiの日記

    一応 select(2) も読んであったので説明しとく。 メインループは非常に短いので抜粋。ここにはビットマップの転送処理は含まれていないので注意。max_select_fd() の前後が rcu_read_lock() と rcu_read_unlock() で囲まれているのは、ドキュメント (Documentation/filesystems/files.txt) によると 2.6.12 から RCU をファイルディスクリプタテーブルで利用するようになったため。以前は単なるロックだった。 int do_select(int n, fd_set_bits *fds, s64 *timeout) { struct poll_wqueues table; poll_table *wait; int retval, i; rcu_read_lock(); retval = max_select

    select のなかみ - moriyoshiの日記
  • epollのなかみ - moriyoshiの日記

    よく C10K 問題とかいって epoll(7) の話が出てきて select(2) 遅いね poll(2) 遅いねってなるんだけど、正直なところ、これらのシステムコールを実際に使ってコードを書いてみたひとはどのくらいいるのだろう。ましてや eventpoll が何やってるか知っている人はそんなに多くないんじゃないだろうか。もう O(n) だの O(1) だのって煙に巻かれるのもうんざりだ。 というわけで、2.6.26 の fs/eventpoll.c のコードを読んでみた。正直 Linux カーネルにすごく詳しいわけでもないので、誤りがあったら適宜突っ込んでもらえると幸いです。 前提知識として VFS モジュールがどうなってるかとかは LinuxのFSモジュールを書いてみる LinuxのFSモジュールを書いてみる (その2) のソース中のコメントを追ってもらえればと。 登場する構造体 e

    epollのなかみ - moriyoshiの日記
  • 印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記

    アーキテクチャに関する質問として、「○○の仕組みってどうなってるの」というようなことを聞かれても、説明下手なせいか、なかなか口で説明できないことがある。そこで「UTSL (ソース読めばいいよ)」と言いたいんだけど、かといって実際に、これを読むといいんじゃないかな、という話にもしづらい。入門的なコードはあまりにも単純すぎて退屈だし、かといって何か適当な著名なプロダクトのソースも、おおよそ手軽に読めるという感じではない。 さて、前エントリで epoll(7) やら select(2) やらの内部の説明をしたわけだけど、呼び出し側がどうなっているのかという部分のイメージがつかめなければ、片手落ち、というか意味不明だろうというように思ったので、恥をしのんで、簡単なシングルスレッドのイベントループベースの (twisted っぽい) TCP ECHO サーバを書いてみた。 電車の中でも読めるというコ

    印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記
  • LinuxのFSモジュールを書いてみる - moriyoshiの日記

    Fuseとか使えばまああっさりな話なんだけど、実際どう動くのかを知りたかったので書いてみた。もちろんFuseのソースは参考にしていない。それにしても当に資料がないんだよなあ。結局ソース読み込んだ。 というわけであんまりお作法的なものはよく分からないので、識者の方、ぜひとも突っ込んでくださいまし (use strict 使ってないとか register_globals=on になってるとかはなしで)。 下の .c ファイル (my_vfs_module.c) を 上の Makefile でビルドしてやると my_vfs.ko ができるので、それを $ insmod my_vfs.koなどとしてカーネル空間にぶち込む。 で、 $ mount -t my_vfs / /mnt/ahoとすると /mnt/aho に my_vfs がマウントされ、 $ ls -l /mnt/aho 合計 0 -r

    LinuxのFSモジュールを書いてみる - moriyoshiの日記
  • 言語の GC 機能と参照カウント (中編) - moriyoshiの日記

    前編でブクマコメントや日記コメントで どうしたら循環参照によるリークを回避できるのかを説明してほしい PHP 5.3 で cycle collector が搭載されることについてのフォローが欲しい という意見があったので、それも順次取り上げていくことにする。 当はこれを後編としたかったんだけど、どんどん詰め込みたい内容が増えているので、勝手ながら一旦切って中編、後編の 2 立てとさせてもらおう。 SpiderMonkey と XPCOM のガーベジコレクション さて、cycle collector というと Firefox 3 から搭載されるということで気になっている人も多いと思われるので、まずは SpiderMonkey (JavaScript の Mozilla での実装) ではどのような GC (ガーベジコレクション) が行われるのかを見てみたい。 基的に、SpiderMonk

    言語の GC 機能と参照カウント (中編) - moriyoshiの日記
    kamipo
    kamipo 2009/06/23