Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

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

  • Goのロギングライブラリ 2021年冬 - moriyoshiの日記

    この記事はPySpa Advent Calendar 2021の14日目のエントリーとして書かれました。昨日のエントリーは冷凍品でウキウキ引きこもり生活 でした。ちなみに私も70ℓの冷凍庫を購入しましたが当にライフチェンジングでした。 総論: なぜログが必要か 可観測性 たとえ目的は自明でも、その動作までが自明なアプリケーションというものはほぼ存在しません。現実の世界のアプリケーションというものは、動作パラメータだったり実行環境だったり、起動時点でのさまざまな要因によって挙動を変えるものだからです。そして、そうしたアプリケーションにはライフサイクルというものがあります。ここでいうライフサイクルは、アプリケーションの処理が実行されるにつれ、アプリケーションの内外との情報のやりとりで生じる大局的な状態の変化のことです。アプリケーションが並行処理を行うようなものであれば、個々の並行処理の単位

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
    gfx
    gfx 2021/12/15
  • nilが欲しいからと言ってむやみにポインタを使うとひどい目にあう話 - moriyoshiの日記

    スマートフォンアプリ側の実装担当として少し関わっているあるβ版のサービスで、奇妙だが比較的クリティカルな問題が発生していた。 それもメッセージが関係ない人間に届くというものであった。 なんとなくその問題を担当することになったが、常に状況が再現するわけではなく、他の仕事もあったので、問題への見当を付けられないまましばらく過ごしてしまった。 そのメッセージを送信する部分はサーバサイドのコードで、Goで書かれていた。 そのコードのエッセンスを抽出すると、以下のようになる。 package main import ( "fmt" "sync" ) type User struct { Id int Name string } type Mail struct { Title string UserId *int } func sendMail(mail Mail, wg *sync.WaitGro

    nilが欲しいからと言ってむやみにポインタを使うとひどい目にあう話 - moriyoshiの日記
    gfx
    gfx 2018/03/19
  • 「ユニコード」で予期せぬ目に遭った話 - 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の日記
    gfx
    gfx 2017/03/13
  • GoのツールチェインのCコンパイラを使う - moriyoshiの日記

    (この記事は Go Advent Calendar 2013 の12月24日に公開されるはずの記事でした。関係者の皆様大変申し訳ない。) はじめに Goコンパイラをビルドすると、なぜかアセンブラ (5a, 6a, 8a) やCコンパイラ (5c, 6c, 8c) までもがビルドされます。これらはPlan 9のツールチェイン由来のもので、ランタイムライブラリ (src/pkg/runtime) の一部のソースコードのコンパイルに使われます。システムデフォルトのコンパイラを使わない (使えない) 理由は、GoのABIがPlan 9のものをなぞっており、Goランタイム上ではこのツールチェインの生成するコードしか動かせないからです。*1 つまり、このツールチェインを利用することで、Goランタイム上で動くコードをGoではなく全部C言語で書くことができます。 Goのアプリケーション初期化シーケンス G

    GoのツールチェインのCコンパイラを使う - moriyoshiの日記
    gfx
    gfx 2013/12/26
  • Goとerror monads - moriyoshiの日記

    GoCon 2013 autumnの後、yuroyoroなどとと飲んでいて 「Goのエラーを戻り値で引き回すのがどうも冗長」 「Haskellのエラーモナドみたいな何かがあればいいのに」 「型パラメータがサポートされればそういうのが書きやすくなるのに」 という話をしていて、クロージャーで関数呼び出しを囲えば今の言語仕様でもいいんじゃないかなと思ってその場で書いてみたものの話。 monad というのがインターフェイスになっていて、次のメソッドを定義している。 Do(what func () (interface {}, error)) monad 戻り値であるmonadに対して次にDoもしくはEndが呼ばれたときに呼ぶべき関数を受け取り、その関数への参照を保持するmonadを生成して返す DoIt() (interface{], error) monadの保持している参照先の関数を呼ぶ。内部

    Goとerror monads - moriyoshiの日記
    gfx
    gfx 2013/10/20
  • ターミナルで動画を観る試み - moriyoshiの日記

    Unicode文字セットの一部に、これといって用途がわからないものがある。block elements というものだ。 Block Elements (Range: 2580-259F) マイコン世代にはおなじみのセミグラフィクス用キャラクターだ。なぜ Unicode 時代にもなってこれが必要だったのだろうという疑問はあるが、何にせよ、ノスタルジーをかき立てる身近な存在には違いない。 今日はこれを使ってターミナルで動画を見てみたいと思ったのでこんなコードを書いた。 出力はこんな感じ。 charfb: semigraphics on a Unicode-capable terminal.

    ターミナルで動画を観る試み - moriyoshiの日記
    gfx
    gfx 2013/06/03
  • JavaScript で x86 アセンブラ (32 bit) を書いてみた - moriyoshiの日記

    4/22追記: Mach-O builder も実装したので Intel Mac でも遊べる。 JQuery っぽい文法で、ブックマークレットとして簡単に遊べるアセンブラが欲しいと思って勢いで書いてみた (デモ)。とりあえず以下のサンプルが動くくらいにしか実装してない。 var buf = new Buffer(); with (new Assembler(buf)) { call($('get_addr')); $$('get_addr'); pop(ecx); add($('str - get_addr'), ecx); mov($('sizeof(str)'), edx); xor(ebx, ebx); mov(4, eax); // write(2) int(0x80); mov(1, eax); int(0x80); // _exit(2) $$('str'); $string(

    JavaScript で x86 アセンブラ (32 bit) を書いてみた - moriyoshiの日記
  • java-ja.js #2 で『AAなゲームをJSで』を発表しました - moriyoshiの日記

    AaなゲームをjsでView more presentations from Moriyoshi Koizumi. 動画をAAに変換するデモは以下で観れます。 (動画がTheoraなのでSafariは非対応) http://dl.dropbox.com/u/673207/aalibtest/index.html 紹介したサンプルコードその1: <html> <body> <pre id="screen" style="width:80ex; height:25em; line-height:100%; color:white; background-color:black"></pre> <script type="text/javascript"> function repeat(c, n) { return new Array(n+1).join(c); } var scr = doc

    java-ja.js #2 で『AAなゲームをJSで』を発表しました - moriyoshiの日記
    gfx
    gfx 2012/06/10
    なんだこれsugeeee!!!
  • 俺とPHP - moriyoshiの日記

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

    俺とPHP - moriyoshiの日記
  • なんで PHP をつかいつづけるのか - moriyoshiの日記

    PHP を使い続けたいと思うように PHP 自体を変えていくという発想が必要です。 http://wiki.php.net/rfc/builtinwebserver

    なんで PHP をつかいつづけるのか - moriyoshiの日記
    gfx
    gfx 2011/02/03
    記念パピコ!
  • 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の日記
  • Issue #4753: Faster opcode dispatch on gcc - moriyoshiの日記

    追記: typo修正。テストコードに余計な「r」が含まれてたのと、「PICコード」とか間抜けなこと書いてたのを。 Issue #4753 職場でも話題になったので。 このパッチのコメントによると、threaded codeにしたほうが分岐予測が効果的に働き、15%-20%ほど速くなるとのこと。computed goto自体は、threadedにする都合によるものなので、実はあまり質的ではない。 要は、分岐予測は分岐命令ごとに、特定の呼び出しパターンを検出することで行われるものなので、ディスパッチする箇所が1カ所になっているよりは複数箇所になっている方が有効に利用できるということらしい。 つまり、 int *op = opcodes; for (;;) { static void *table = { &&OP_ADD, &&OP_LOAD, ... }; goto table[*op];

    Issue #4753: Faster opcode dispatch on gcc - moriyoshiの日記
    gfx
    gfx 2010/11/04
    computed goto (direct threaded code)
  • 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
    gfx
    gfx 2010/10/02
  • 『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記

    すでに多くの方がご存知のことと思いますが、株式会社ロングゲートからまもなく『プログラミングの魔導書 〜Programmers' Grimoire〜』が発刊されます。 発売前レビューをするということで、id:faith_and_brave さんより PDF を頂戴していたのですが、まったく自分の役割を自覚していなかった (内容のチェック的なものかと思ってました) ので、予約締切間近 (8/6、つまり明日までです!) ですが、ちょっと紹介させてもらいますね。 Bjarne Stroustrupへのインタビュー デンマーク生まれの長男で髪の毛が年々少なくなっているというビャーネ・ストロストォプさんへのインタビューです。インタビュワーは、丸刈りで丸刈りでC++が好きで「の虫」というブログを執筆されている、江添さんです。 C++0xの現況をざっくり把握するのに、どこを見るのが一番なんだろうか、と悩

    『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記
    gfx
    gfx 2010/08/06
  • LLTigerで発表しました -Language Update編- - moriyoshiの日記

    資料あげときます。 Xlib.php は http://github.com/moriyoshi/php-Xlib/ よりとってきてください。 <?php require 'Xlib.php'; $fonts = array( 'hiragino-mincho' => "/System/Library/Fonts/ヒラギノ明朝 ProN W6.otf", 'courier' => "/Library/Fonts/Courier New Bold.ttf", ); $texts = array( array("はい"), array("始まって"), array("しまいました"), array("Heavyweight"), array("Heavyweight\nTemplate"), array("Heavyweight\nTemplate\nLanguage"), array("PH

    LLTigerで発表しました -Language Update編- - moriyoshiの日記
  • Python Hack-a-thon #4 にて話しました - moriyoshiの日記

    追記: 4回目でした。タイトルを修正。thanks to id:ymotongpoo . 追記2: id:ymotongpoo が当日の様子を録画してくれていました! 説明を端折りすぎて、何言ってるか分からない人も多かったのではないかと思うので、どうせネタなんだけど改めて書く。 端的に言うと、PHP というのは、テンプレート言語のくせに、ソケットを開いてあらゆるプロトコルをしゃべることができる。じゃあ、X プロトコルもいけるよね!ということで、Xlib 相当のものを (必要な API のみ) 実装したって話ですよ。 http://github.com/moriyoshi/php-Xlib/blob/master/Xlib.php サンプルコードは以下。 http://github.com/moriyoshi/php-Xlib/blob/master/test.php <?php requi

    Python Hack-a-thon #4 にて話しました - moriyoshiの日記
    gfx
    gfx 2010/07/12
    こ、これは…
  • PerlのXSからPerlの関数を簡単に呼び出せるようにしてみた (C++で) - moriyoshiの日記

    Perlの謎APIをwrapして、Perlスクリプトの関数をC++から簡単に呼び出せるようにしてみた。 てか、 リファレンスカウントを透過的に行えるようpimpl形式のコンテナを使ってみる mortalを透過的に行えるようcall_sv()による関数呼び出しを完全にブラックボックス化する って実験をやりたかっただけなのにDevel::BindPPとは完全に別プロダクトになっちゃいました。 test1() は、任意の数の引数を取り、引数の合計値を返す add()という関数 *1 を C++ から呼び出す例。 test2() は、MIME::Base64::encode_base64() を呼び出す例。 test3() は、複数個の値を返す関数を処理する例。 test4() は、perl::value() の演算子オーバロードのテスト。 #include <iostream> #include

    PerlのXSからPerlの関数を簡単に呼び出せるようにしてみた (C++で) - moriyoshiの日記
    gfx
    gfx 2010/05/18
    @moriyoshit このネタ希望かも、という天の声がします!
  • 興味のある言語にPHPと書いておいたら面接で爆笑された - moriyoshiの日記

    Inspired by http://anond.hatelabo.jp/20100125020240 Perlエンジニアを募集してる会社の採用面接を受けた時の話。 転職エージェントに作れと言われて作ったシートに、「興味のある技術/言語」という欄があったんです。 PSGI/Plackとか色々書いたけど、プログラミング言語の中で興味があるのはPHPだったので、 PHPと書いておいたのですが、それを見た髭面サスペンダーの面接官のリアクションが酷かった。 面接官「PHP・・・ふははっ!PHP!」 面接官「PHPやってるんですか?wwwww」 俺「(唖然)は、はい・・まだ参照を理解したぐらいですが。。」 面接官「PHP・・・ニヤニヤ」 その人はCPANコミッタで、当然Perlのコードを書いている人だったので、 Perlが「Improved PHP」と呼ばれている事を知らないワケが無いだろうと思って

    興味のある言語にPHPと書いておいたら面接で爆笑された - moriyoshiの日記
  • Boost.Python の機能をざっと紹介してみる - moriyoshiの日記

    Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介してみたい。 Boost.Python の基礎 Boost.PythonC++ のクラスや関数をラップする Python モジュールを恐ろしく簡単に書けるようにする、強力なライブラリである。 特に、Pyrex や Cython と比べて何がうれしいのかというと、 Python側にいちいちラッパ関数を書かなくてよい (テンプレートにより自動的に定義される) コンバータを登録することで、PythonC++の型の透過的な変換が容易にできる C++ のクラスを分かりやすい形で Python のクラスとして見せることが可能 といった点が挙

    Boost.Python の機能をざっと紹介してみる - moriyoshiの日記
  • Shibuya.pm テクニカルトーク #12 で発表してきました - moriyoshiの日記

    果たしてPHPPythonの人が行っていいのかどうか、しかも発表はGoの話でPerl関係ないしって感じで、微妙なアウェイ感でした。というか最近どこで喋ってもアウェイ感があるわけですが。 GoでKVSを書けるのかView more documents from ... .... ※実際に作ってみたサーバのソースコードはこれです: http://d.hatena.ne.jp/moriyoshi/20091111/1257929640 Go の知識がある程度あることを前提にスライドを作ってしまったので、「Goroutineって何?」「チャネルって何?」というように意味不明だったところはあるかと思いますが時間の都合です。勘弁を。 オーガナイザの id:TAKESAKO さん、会場のリクルートさんどうもありがとうございました。 2次会で、id:gfx や id:tokuhirom と Perl

    Shibuya.pm テクニカルトーク #12 で発表してきました - moriyoshiの日記