タグ

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

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

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

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
  • FFmpegで動画編集をするガイド - moriyoshiの日記

    こんにちは。年末になり、ますますコマンドラインで動画編集をする機会が増えてきているかと思いますが、皆様いかがお過ごしでしょうか。普段触れていないとついつい忘れてしまうffmpegのオプション群。そんなあなたのためのチートシートです。 基礎編 トランスコーディング ffmpeg -i input.mp4 -c:v libx264 -preset medium -c:a libfdk_aac output.mp4 または ffmpeg -i input.mp4 -vcodec libx264 -preset medium -acodec libfdk_aac output.mp4 解説 -c:v オプションは映像コーデックを、-c:a は音声コーデックを指定する。古くはそれぞれ -vcodec -acodec というオプションであった。両者は等価である。 -preset は libx264 の

    FFmpegで動画編集をするガイド - moriyoshiの日記
  • 識別子に絵文字などを使えるようにする - moriyoshiの日記

    とある言語で識別子に絵文字などのシンボルが使えるそうなのですが、一応GoだってUnicodeクリーンなんだ。 これをコンパイラにわせてみる。 $ go run sushi.goどうだ? # command-line-arguments ./sushi.go:3: invalid identifier character U+1f363 ./sushi.go:8: invalid identifier character U+1f363なのでちょっと悔しい。ということでやりました。 $ go run sushi.go sushi~

    識別子に絵文字などを使えるようにする - moriyoshiの日記
  • 「:」を引数の名前と型の間に入れられるようしたりにする魔改造 - moriyoshiの日記

    とある言語が func halfOpenRangeLength(start: Int, end: Int) -> Int { return end - start } println(halfOpenRangeLength(1, 10)) // prints "9" のような文法だったのを見てウッと思ったのでやってみた Go のソースを落としてきて を当てて $ (cd src/cmd/gc && rm y.tab.h && make)とする。 package main type Int int func halfOpenRangeLength(start: Int, end: Int) -> Int { return end - start } func main() { println(halfOpenRangeLength(1, 10)) // prints "9" } $ go r

    「:」を引数の名前と型の間に入れられるようしたりにする魔改造 - moriyoshiの日記
    heavenshell
    heavenshell 2014/06/03
    久しぶりの魔改造ネタw
  • ターミナルで動画を観る試み - moriyoshiの日記

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

    ターミナルで動画を観る試み - moriyoshiの日記
  • グリー株式会社を退職していました - moriyoshiの日記

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

    グリー株式会社を退職していました - moriyoshiの日記
  • やったー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の日記
  • 俺とPHP - moriyoshiの日記

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

    俺とPHP - moriyoshiの日記
    heavenshell
    heavenshell 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の日記
    heavenshell
    heavenshell 2010/08/22
    すげええ
  • ストアドを使って、Webスクレイピングをしよう! - moriyoshiの日記

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

    ストアドを使って、Webスクレイピングをしよう! - moriyoshiの日記
    heavenshell
    heavenshell 2010/07/14
    ネタだけど、UDF のコードや作り方などは凄く参考になる(解説してる所あんまりない)。
  • PHPのはなし ― by moriyoshi - moriyoshiの日記

    PHPのコミッタ申請したのは2002年の9月くらいだし、PHP は何度も fix(修正)しているから「関係ない第三者が」「勝手に」とか言われるのは正直腹が立つが。(Pythonとかあらゆるメジャー系スクリプト言語にバグレポートしてるのよ、一応) – 【お前ら貢献したことあるのか?お前らの方が第三者だろうが!】 なんで今更になって物議を醸してるのか、アホくさ、って感じ。 JAVA を表現するときに、「JAVA TEAは大塚製薬の登録商標です」といつも書くのと同じように、「PHPはPeace and Happiness through Prosperityの略です」と今後書くようにすれば、なんも焦ることはないじゃん。 (元ネタが支離滅裂すぎるので) あんまり面白くならなかった。

    PHPのはなし ― by moriyoshi - moriyoshiの日記
    heavenshell
    heavenshell 2010/06/24
    「PHPはPeace and Happiness through Prosperityの略です」
  • 興味のある言語に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の日記
  • アメーバなうクライアントを Python で書いてみる - muddy brown thang

    タイムライン取得とかつくらんとなー。つけた。 http://gist.github.com/253169 # encoding: utf-8 import urllib2 import cookielib import re import xml.dom as dom import xml.dom.minidom as minidom from BeautifulSoup import BeautifulSoup, Tag, Comment, NavigableString __all__ = ( 'AmebaNowClientException', 'UnsupportedContentTypeError', 'AuthenticationError', 'PostError', 'UnexpectedResponseError', 'AmebaNowClient', ) class A

    アメーバなうクライアントを Python で書いてみる - muddy brown thang
  • Ada, Go, Erlang, Scala, Stackless Python, Java (java.util.concurrent), シェルスクリプトの適当すぎる比較 - moriyoshiの日記

    同じようなコードをそれぞれの言語で書いてみた。 Ada: with Ada.Text_IO; with Ada.Strings.Unbounded; procedure MyTest is use Ada.Strings.Unbounded; use Ada.Text_IO; task MyTask is entry Hello(Message: String); end; task body MyTask is Received_Message: Unbounded_String; begin loop select accept Hello(Message: in String) do Received_Message := To_Unbounded_String(Message); end Hello; end select; Put_Line(To_String(Received_

    Ada, Go, Erlang, Scala, Stackless Python, Java (java.util.concurrent), シェルスクリプトの適当すぎる比較 - moriyoshiの日記
    heavenshell
    heavenshell 2009/11/18
    「魔改造PHP」ワロタw
  • PHPにメッセージキューとそれを扱う糖衣構文を実装してみた (「PHPのすべらない話 #3」) - moriyoshiの日記

    Goにできて、PHPにできないはずはない!というわけでやってしまいました。まあ、これにメッセージキューとメッセージスロットを足しただけなんですが。 <?php function sub($i, $ch) { for (;;) { $a = <- [$ch]; printf("%d:", $i); var_dump($a); } } $ch = thread_message_queue_create(); for ($i = 0; $i < 10; $i++) { thread_create('sub', $i, $ch); } $i = 0; for (;;) { [$ch] <- $i++; usleep(50000); } ?> 見て分かるように、 [$ch] <- $i++;こんな感じにメッセージの送信を、 $msg = <- [$ch];こんな感じにメッセージの受信を書くことができ

    PHPにメッセージキューとそれを扱う糖衣構文を実装してみた (「PHPのすべらない話 #3」) - moriyoshiの日記
    heavenshell
    heavenshell 2009/11/14
    すげぇぇぇ
  • なんか 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の日記
  • Python の文法だけを Ruby っぽくしてみたらどうなるか実験した - moriyoshiの日記

    こんにちわ、あらびきプログラマー moriyoshi です。 Python が生理的に嫌いな人からよく聞く話として「インデントでブロック構造を表す」ってのがありますね。じゃあ中身はそのままで文法だけ Ruby っぽくしたらどうなるんでしょうかね。Python はトークナイザもパーサも簡単に書き換えられるので、試してみましょう。 例えば次のようなプログラムは class Boo(object): def foo(hoge): try: for i in hoge: with i: if i.fuga: while True: j = i.fuga() if not j: break print j + 2 except HogeException: pass else: pass finally: pass こんな風になってしまうわけです。ああ怖いですね。 class Boo(object)

    Python の文法だけを Ruby っぽくしてみたらどうなるか実験した - moriyoshiの日記