タグ

ブックマーク / blog.64p.org (28)

  • 最近またLinux用の日本語IMEを作っている - tokuhirom's blog

    最近またLinux用の日語IMEを作っている 件は mozc の ut がどうこうとかは関係なくて、ふと linux desktop を使おうと昨年末に思いまして、昨年末からちまちまやってます https://github.com/tokuhirom/akaza かな漢字変換って作るの難しいのかなぁ、と思ったので作ってみている。これはまさに Just for Fun でやっている。 わりと普通に自分で常用してる分には困らないかな、というところまできている。 以下は、思ってることの垂れ流しという感じで、まとまってないですが。 「日本語入力を支える技術」というが 2018年に出ていて、このの内容を読めば、だいたいエンジン部分は実装できる。Amazon のレビューではこのよんでも実装できないって書いてあるけど、変換エンジン自体は実装できます。 UI が辛い。けど。 エンジンは、ビタビア

    honeybe
    honeybe 2023/01/16
  • groovy で ant task を記述したい - tokuhirom's blog

    ant でロジックを記述するのはなかなか大変であるし、今となっては潰しのきかないスキルでもあり、未来ある若者に ant を使わせるべきではない。 しかし、世の中には ant を利用することを強いられている若者もいると聞く。 そういった中で、タスクを groovy でこなす方法を紹介しよう。 groovy でタスクを定義できれば、コードの可読性があがりハッピーになれるはずだ。 groovy でタスクを定義するためには groovy 体を自動で取得する必要があるが、これは maven ant tasks で行う。maven ant tasks は、ant から maven の依存関係解決を呼べるようにしたライブラリである。 maven ant tasks はすでにインストール済みである場合も多いと思うが、入っていない場合は以下のようにすればよい。 mkdir ~/.ant/lib/ wget

    honeybe
    honeybe 2015/08/14
  • apache bench(ab) が OSX で刺さった夜は - tokuhirom's blog

    ある日、OSX Yosemite で apache bench でベンチマークを使っていると、なぜか stuck して困っていた。 ab -c 10 -n 16500 http://127.0.0.1:5000/ どうも、対向サーバーを jetty にしても plack にしてもダメなので、なんなのかな~と。。 ab そのものを疑ってみる いろいろ調べてみると、対向サーバーを変えても同じような感じで刺さるのでどうやら ab の側に問題があるのかな、と思って調べてみたところ、OSX Lion の時代にそのような問題が話題になっていたようだ。 最新版の ab は以下のようにして入れることができる。 wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.12.tar.bz2 tar xzvf httpd-2.4.1

    honeybe
    honeybe 2015/07/10
    「kazuho さんによると「16325 みたいな数値をみたら、あー ephemeral」ってわかるものだそうです。僕にはわからなかった!」修練が足らないのだ。(僕もわからないので)修練せねば!
  • Server::Starter から簡単に Java プロセスを起動できるようになった - tokuhirom's blog

    JVM には inetd から起動するときのために、file descriptor 0 をソケットとして開く機能がついている。Jetty 等もこの機能に対応しているので、簡単に利用できる。 file descriptor を 0 に固定出来る機能が Server::Starter にあればよかろうということで、以下のような指定で起動できるように実装した。 $ start_server --port=20000=0 java EchoServer この機能により、Java も LL と同様な形態でアプリケーションを運用することが可能となる。 Java では昔から ClassLoader 機構を利用することによりホットデプロイを行うことが可能だが、リソースの解放が漏れるなど開発時の難しさが指摘されている。 Server::Starter 方式では JVM のプロセスごと死ぬので、綺麗な状態で都

    honeybe
    honeybe 2015/05/29
  • Perl6で「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」の5問目を解いてみた - tokuhirom's blog

    http://qiita.com/tag1216/items/25ff0f957340c54ae73c Perl6 だと eval が EVAL になってるのと、文字列結合演算子が ~ になっているのと実行が異常に遅いこと以外は違いはない。 calc(1, 1); sub calc { my ($b, $n) = @_; if ($n==9) { say $b if EVAL($b) == 100; } else { for ('+', '-', '') { calc($b ~ $_ ~ ($n+1), $n+1); } } } Perl5 なら以下のように極めてわかりやすく記述することが可能。 my $x = 1; for ('+', '-', '') { my $x = $x . $_ . 2; for ('+', '-', '') { my $x = $x . $_ . 3; for

    honeybe
    honeybe 2015/05/27
  • Linux 上で5秒で chroot jail を使えるコマンド「jailing」が凄い! - tokuhirom's blog

    https://github.com/kazuho/jailing/ kazuhoさんがやってくれました。 ずいぶん前からlinuxでchroot jailを作るのに簡単な方法ないかなーと思ってました。個人的にはsystemd-spawnというのを使ってたのですが、幾らか気に入らない所があったり構築に時間がかかったり、ディスク容量を消費していました。簡単に使えて、ディスク容量を消費しないやつがほしいなーっておもってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、github にある docker とかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はjailing とても小さく、実装コードだと100数十ステップ程です。しかもpe

    honeybe
    honeybe 2015/05/13
  • google guice の依存関係を visualize したいよ、って人 - tokuhirom's blog

    https://github.com/google/guice/wiki/Grapher 以下のように実装すればよい。graphviz 用の .dot ファイルが生成される。 PrintWriter out = new PrintWriter(new File(filename), "UTF-8"); Injector injector = Guice.createInjector(new GraphvizModule()); GraphvizGrapher grapher = injector.getInstance(GraphvizGrapher.class); grapher.setOut(out); grapher.setRankdir("TB"); grapher.graph(demoInjector); out.close(); 以下のように、png を生成する。 dot -T

    honeybe
    honeybe 2015/03/11
  • java における sticky session の話 - tokuhirom's blog

    HTTPのセッションをRedisのようなバックエンドに持たせて毎回参照するような構成と、それに加えてローカルオンメモリキャッシュとSticky sessionでさらにnear cache挟んで高速化するの、どっちがベターか論争みたいなのって過去にあるのかな — Takayoshi Kimura (@nekop) November 17, 2014 Javaだとローカルオンメモリキャッシュ簡単だけど、マルチプロセスモデルなスクリプト言語とかだとローカルキャッシュ共有面倒だからバックエンド一択というのが多数派になる — Takayoshi Kimura (@nekop) November 17, 2014 このへん見てて考えたことのメモ。 実際、Java のシングルサーバーからスケールアウトさせる場合は「sticky session によるオンメモリキャッシュ → redis かなにかのバック

    honeybe
    honeybe 2014/11/18
  • jenkins のときだけ一部テストを走らせたくない - tokuhirom's blog

    なんか一部だけすげー重いテストだから jenkins では走らせたくないとか、異常なミドルウェアに依存しているから jenkins では走らせたくないとか そういう事情なときに、一部テストをスキップさせたい。 そんな時は profile を分ければ良い。ということが stackoverflow 見てたらわかった。 http://stackoverflow.com/questions/4389744/is-there-a-way-to-tell-surefire-to-skip-tests-in-a-certain-package <properties> <exclude.tests>nothing-to-exclude</exclude.tests> </properties> <profiles> <profile> <id>fast</id> <properties> <exclud

    honeybe
    honeybe 2014/11/13
  • AngularJS で Controller の継承をしたい - tokuhirom's blog

    したいなっておもって、Google で検索したところ、stackoverflow で Can an AngularJS controller inherit from another contoller in the same module? っていうスレがあって、これで解決したっぽいのでメモ。 var app = angular.module('angularjs-starter', []); app.controller('ParentCtrl ', function($scope) { // I'm the sibling, but want to act as parent }); app.controller('ChildCtrl', function($scope, $controller) { $controller('ParentCtrl', {$scope: $scope

    honeybe
    honeybe 2014/01/20
  • AngularJS を本気でつかうための tips - tokuhirom's blog

    最近、管理画面で AngularJS をつかってみている。 そんな中で、いくつか工夫した点があるのでそれをシェアさせていただきます。 XHR のエラーを表示する XHR のエラーがおきた際のハンドリングをいちいち手でかくのは非効率。管理画面とか中の人しかつかわないので、エラーがおこった旨を随時報告するだけでよい。 そんなケースでは以下のようにする。 angular.module('myapp.exceptionHandler', []) .config(['$httpProvider', function ($httpProvider) { $httpProvider.interceptors.push(function($q, $log, $rootScope) { return { 'responseError': function(response) { $log.error(res

    honeybe
    honeybe 2013/12/10
  • Perl5 において chomp() とはなにをするものか - tokuhirom's blog

    えてして、プログラミングにおけるバグの発生源は、使い方をまちがえていることに起因するものも多い。 を電子レンジでかわかす人がいるように。 そもそも chomp() という組み込み関数はなぜ必要なのか。 Perl5 では、データを行単位で処理するということが重視されたインターフェイスになっている。これは一般的なテキスト処理の頻出パターンだからだ。 while (<>) { chomp; say if /foo/; } これは、入力データを行ごとにとりだし、改行をとりのぞき、/foo/ という正規表現にマッチする行だけを表示するというプログラムだ。 Perl5 を知っている人なら、だれもが簡単に理解できる。 ここで $/ という変数が問題となる。$/ は、行の区切りがはいっている特殊なグローバル変数で、awk でいうところの RS にあたるものだ。 この $/ を変更することにより「行」の区

    honeybe
    honeybe 2013/11/18
  • ngResource はどうやって値を埋めているのか - tokuhirom's blog

    ngResource は AngularJS で RESTful API を call する際につかえるクライアントライブラリだが、これがなかなかマジカルな動きをする。 具体的には、以下のようなコードがなぜか動く。HTTP リクエストが実行された後で $scope.entries にいい感じにレスポンスがうまっているのだ。 $scope.entries = $resource(‘/entry’).query(); 通常なら動かなそうなコードだ。なぜこれが動いてしまうのか。 なぜ動くのか $scope.entries = $resource(‘/entry').query(); のとき、ngResource の内部では以下のようなことが起きている。 $scope.foo = (function () { // 空の配列を作る var value = [ ]; $http.get(‘/foo’

    honeybe
    honeybe 2013/11/05
  • __DATA__ の何行目をよんでいるかを知りたい - tokuhirom's blog

    DATA からデータをよんでいるときに、今ソースコード全体のうち、何行目をよんでいるかを知りたいというケースがある。 そんな場合は以下のようにすればよいだろう。 #!/usr/bin/env perl use strict; use warnings; use utf8; use 5.010000; use autodie; use Fcntl qw(:seek); my $line_number; my $pos = tell(*DATA); seek DATA, 0, SEEK_SET; read DATA, (my $buf), $pos; $buf =~ s/\n/$line_number++/ge; while (<DATA>) { warn $line_number + $. . " : " . $_; } __DATA__ hoge fuga hige そもそも *DATA

    honeybe
    honeybe 2013/09/18
  • plenv 1.9.x のおしらせ - tokuhirom's blog

    plenv が 1.9.x になり、すべてが bash スクリプトになりました。基的には rbenv のコードのコピペとなっています。 前のバージョンにくらべてなにがすぐれているかというと、一番おおきいのは PERL5LIB と PERL5OPT をみなくなっているという点です。bash でうごいているので、perl つかってないのであたりまえですね。これにより、miyagawa さんのとこの Carton さんとの相性がグンバツによくなっております。 具体的には以下のようなケースでの問題が解消しています。 % PERL5OPT=-MDevel::Cover make test Can't locate Devel/Cover.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library

    honeybe
    honeybe 2013/05/30
  • ウェブサービスのクライアントライブラリやHTTPをつかったミドルウェアのクライアントを作成する際に気をつけるべきこと - tokuhirom's blog

    ウェブサービスのクライアントや、Net::Groonga::HTTP のようなミドルウェアのクライアント、いろいろありますが、HTTP サーバーへの簡単なアクセスを提供するライブラリをつくるときに僕が気をつけていることをここに記す。みんな気をつけたほうがいいです。 HTTP Client Library の引数を変更できるようにするか、HTTP Client Library のインスタンスをさしかえられるようにする変更できないライブラリとか利用価値がないです。。 タイムアウトの設定もかえられないライブラリとか、たまにありますが、ちょっとひどいですね。 生のレスポンス情報がとれるようにするHTTP::Response なり Furl::Response なりをそのままとれるようにすべき。 たとえば、$client->last_response のようなメソッドを用意し、最後のレスポンスオブジ

    honeybe
    honeybe 2013/04/26
  • サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - tokuhirom's blog

    https://metacpan.org/module/TOKUHIROM/Perl-Build-0.06/bin/perl-build perl-build というコマンドをつかうと便利。 perl-build 5.16.2 /opt/perl-5.16/ とかで管理するとよい。 perl-build 5.16.3 /opt/perl-5.16/でのアップグレードもうごいている様子。 おためしあれー。 FAQ./configure -d -Dprefix=$path でよくね?それでもいいのですが、PatchPerl によるパッチがあたるので、古いバージョンも確実にはいるのが嬉しいところです。 あと、tar ball のフェッチとかまで自動的にやってくれるのも便利。

    honeybe
    honeybe 2013/03/19
  • 安定的な Perl アプリケーション運用のための perlbrew 運用テクニック - tokuhirom's blog

    前提知識Perl5 は minor version 間ではバイナリ互換性が保証されているPerl5 の minor update では、bug fix しか基的に行われないPerl5 Porters の保守的さ度合いは信用できるperlbrew でセットアップするときに気をつけることインストール名をデフォルトの perl-5.16.3 などとせず、perl-5.16 と minor version を含めないようにする。 例: perlbrew install perl-5.16.2 --as perl-5.16セキュリティフィックスがでた場合の処理chromaticの記事で知ったのだが、perlbrew には upgrade-perl というコマンドがあり、最新のバージョン(マイナーアップデートのみ)にアップグレードすることが簡単にできる。 perlbrew upgrade-perl

    honeybe
    honeybe 2013/03/13
  • httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog

    一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。 しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。App::httpstatus です。インストール方法は cpanm App::httpstatus です。というか依存とかないのでhttp://api.metacpan.org/source/TOKUHIROM/App-httpstatus-v1.0.0/httpstatus をコピーしてくればうごきます。 使い方は以下のとおりです。 4xx なコードを列挙する。 % httpstatus 4 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Foun

    honeybe
    honeybe 2013/02/21
  • Amon2とJSONとセキュリティ - tokuhirom's blog

    [1]http://d.hatena.ne.jp/ockeghem/20110907/p1[2]http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05a.html[3] http://msdn.microsoft.com/ja-jp/asp.net/ff713315[4] http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/cross-site_including.phpあたりをよんで、JSON とセキュリティについてかんがえてみた。 ここで、有効とされている対策のうち while(1); を先頭に付与するPOST ですべて処理するといったあたりは、RESTful でないし、BK 感がひどいというか質的ではないのでできるだけやりたくない。 また、Amon2 では互換

    honeybe
    honeybe 2013/02/06