タグ

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

  • さくらインターネットに入社しました - tokuhirom's blog

    さくらインターネットに入社しました 昨年の 10月ごろに X こと twitter で @tagomoris から DM が来て誘われたので、2025年1月からさくらインターネットに入社しました。 転職エントリーってあんま書く気なかったんだけど、sugyan が書けって圧をかけてくるので。。 長らくプライベートクラウドの環境で働いていたので Public cloud を使う会社で働くのは大変そうなので、Public cloud を作ることにしました。 という冗談はともかくとして、なんか普通のウェブシステム作るのまぁまぁ飽きたなーというのがあってですね。。 13年も前職に勤めてたので飽きてきてはいたのでちょこちょこと他社の話を聞いたりはしてたんですよね。他社の B2B サービスとかを中心に見てたんだけども日国内でいうと 前職を超える魅力とか規模感を持ってるサービスってあんまなくて、転職にい

    gfx
    gfx 2025/01/09
    転職おめでとうございます!人材のブラックホールや〜〜。
  • 最近またLinux用の日本語IMEを作っている - tokuhirom's blog

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

    gfx
    gfx 2023/01/16
  • Gradle の dependency locking について - tokuhirom's blog

    昔の gradle には dependency locking 機能がなかった。ビルドするタイミングによって、別の依存モジュールが利用されたりしていた。。 最近、gradle に dependency locking 機能がついたので試してみた。 carton.lock とか package-lock.json とか、そういうのと同じようなことができるようになる。 同じレポジトリからビルドしたら同じ jar が生成されるようになる。便利。 dependency locking を利用すると gradle.lockfile というファイルが生成される。 デフォルトだとフェーズ単位でファイルが生成されるから enableFeaturePreview('ONE_LOCKFILE_PER_PROJECT') を settings.gradle に書いて1ファイルにまとめるようにしたほうが良い。gr

    gfx
    gfx 2020/05/13
    ようやくGradleでもdependency lockingできるようになったのか。
  • MySQL の X Protocol/X DevAPI 周りについて調査したのをまとめたののメモ - tokuhirom's blog

    MySQL の X Protocol/X DevAPI 周りについて調査したのをまとめたののメモ MySQL 8 以後では X Protocol がサポートされている(5.7 系では部分的なサポートであり、X Protocol を格的に利用する場合には 8 を利用することが推奨されているようだ) 通信は従来の MySQL Protocol と異なり、Protocol Buffers Based となっていて、各言語のドライバの実装が簡単になっている(protocol buffers がその言語でサポートされていれば、だが) これにより今後 libmysqlclient に依存せずに各言語のドライバが実装されるようになって運用管理が簡単になるんじゃないかと私は考えています。 実際に、mysql-connector-nodejsは X Protocol のみをサポートしていて、libmysq

    gfx
    gfx 2018/07/09
  • GraalVM の native-image で HelloWorld してみる - tokuhirom's blog

    GraalVM の native-image で HelloWorld してみる 目的 https://medium.com/graalvm/instant-netty-startup-using-graalvm-native-image-generation-ed6f14ff7692 によると、graalvm を利用すると Java Application の起動が圧倒的に高速になるようだ。実際にどの程度高速化されるのかを Hello World Application を手元で実行してみることにより体感する。 実験 $ javac Hello.java $ java Hello Hello $ time java Hello Hello java Hello 0.08s user 0.02s system 102% cpu 0.097 total $ ~/Downloads/graal

    gfx
    gfx 2018/05/23
  • hotspot の NullPointerException 時の表示をわかりやすくできないかなあと思って調べたけど挫折した - tokuhirom's blog

    hotspot の NullPointerException 時の表示をわかりやすくできないかなあと思って調べたけど挫折した 解決したいこと foo.bar(baz.boz()); みたいなケースで、NPE が発生した場合に、foo が null で例外発生したのか baz が null で例外発生したのかわからん やってみる bash configure --with-native-debug-symbols=internal --enable-headless-only --with-debug-level=slowdebug --disable-warnings-as-errors make 動かしてみると以下のような出力を得られる。 Exception in thread "main" java.lang.NullPointerException at NPE.main(NPE.j

    gfx
    gfx 2016/10/09
  • orelang を Java で実装してみた - tokuhirom's blog

    orelang を Java で実装してみた http://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc わりとよくある JSON ベースの lisp っぽいインタープリタの実装ですが、コードを見ていてもよくわからなかったので自分で実装しなおしてみました。 package com.example; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import com.fasterxml.jackson.databind.ObjectMapper; public class OreLang { HashMap<String, Object> vars = ne

    gfx
    gfx 2016/09/30
  • mockito でスタブし忘れて NullPointerException 発生するのが辛い時の解決策 - tokuhirom's blog

    mockito でスタブし忘れて NullPointerException 発生するのが辛い時の解決策 mockito では mocking していない場合、org.mockito.internal.stubbing.defaultanswers.ReturnsEmptyValues が返ります。 JDK で提供されているコンテナ型の場合には空のコンテナ型が返りますのでいいのですが、通常のユーザーが作成したクラスの場合、null が返ります。 これにより NullPointerException が発生してつらいです。 SmartNullPointerException が発生した場合、以下のようなエラーメッセージが表示され、非常に問題が解決しやすくなります。 org.mockito.exceptions.verification.SmartNullPointerException: Yo

    gfx
    gfx 2016/09/05
  • Server::Starter を Java で利用する方法。または、System.inheritedChannel() の挙動について - tokuhirom's blog

    Server::Starter を Java で利用する方法。または、System.inheritedChannel() の挙動について Server::Starter を Java でも使いたいなあ、そうすれば LL の場合と同じような運用ができるなあ、という要望をたまに稀によく聞きます。 そんなときに決まって返される答えは、fdopen できないから無理じゃないすかね。。 ということである。 SO_REUSEPORT しよう SO_REUSEPORT なら、java でもちょっとの工夫で使えるんじゃないの? っていう説が出てくる。 で、頑張れば jetty で SO_REUSEPORT 使っていい感じに実装できそうだな、ということはわかって、サンプルコードも書いてみた。 しかし、実装してから指摘されたのだが、弊社では CentOS 6 が標準となっており、CentOS 7 が来るのはい

    gfx
    gfx 2015/05/29
  • Java の AST を解析できる javaparser がアツい!!! - tokuhirom's blog

    Java の AST を解析できる javaparser がアツい!!! https://github.com/javaparser/javaparser javaparser は Java をパースして AST にしてくれるライブラリである。 この手のライブラリは数多あるのだが、ほとんどのものが Java 1.5 ぐらいでメンテナンスが止まっている。 実際このライブラリもメンテナンスが止まっていたのだが、Java 1.8 対応版とし開発が再開されたものだ。 このライブラリはパーサーライブラリであるから、文字列をパースして AST を構築してくれるというものになっている。 実際どのような AST が構築されるのかが気になるところなので、構築された AST をダンプできるツールを groovy で書いた。 #!/usr/bin/env groovy @Grab('com.github.jav

    gfx
    gfx 2015/05/21
  • GS Collections Kata をひと通りやった - tokuhirom's blog

    GS Collections Kata をひと通りやった GS Collections というゴールドマン・サックスさんが出してる Java 用のコレクションライブラリがある。 Java Day Tokyo/JJUG CCC 2015 Spring で知ったのだが、これは以下のような利点を持っているようだ。 使いやすいインターフェース メモリ使用量が標準のコレクションよりもよい場合がある Multimap や sortedbag などの標準にはないコレクション GS Collections には GS Collections Kata という、チュートリアルがある。これは junit test case の形式をしていて IDE で読みこめばすぐに試せる。 順番に指示通りにやっていけば試せるんで、なかなか良い。 例も Company, Order, Supplier, LineItem

    gfx
    gfx 2015/04/16
  • [java] モダンな Annocation Processor の開発手順まとめ - tokuhirom's blog

    [java] モダンな Annocation Processor の開発手順まとめ APT とは Annotation Processing Tool のことで、Java でコードの自動生成を行う際に利用される。 APT を利用すると、Java クラスやリソースの自動生成が可能となる。 インターネットに情報は結構あるのだが、昔のものが多くて、Eclipse に JAR を追加して云々とかそういう感じのものが多くて辛いので調べたことをまとめておく。 アノテーションを作る 適当なアノテーションを作る。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annota

    gfx
    gfx 2015/03/26
  • maven central にリリースしてみた - tokuhirom's blog

    maven central にリリースしてみた Maven central にあげようと以前奮闘してみたが、うまく行かずに諦めていた。 アカウントの登録まではいっていたのだが、なんかうまくいかなくて諦めていたのだ。 が、モリスさんのエントリを見ながら pom を設定していったら今回はなぜかうまく出来た。 http://d.hatena.ne.jp/tagomoris/20141028/1414485679 Maven central は難しいか? Maven central にアップロードするまでに間には以下のようなステップが必要になる。 JIRA にサインアップする JIRA でパッケージに対するアップロード権限を要求する gpg の設定をする settings.xml/pom.xml をセットアップする mvn release:prepare release:perform する この

    gfx
    gfx 2014/10/31
  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    LL から Java に移行した人がはまりがちなこと こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e

    gfx
    gfx 2014/10/01
  • Content-Security-Policy と nonce の話 - tokuhirom's blog

    Content-Security-Policy と nonce の話 Content-Security-Policy の nonce を利用すると、XSS の脅威をかなり軽減できます。 そこで、Web Application Framework ではデフォルトで対応したほうがよいのではないか、という旨を @hasegawayosuke さんから教えて頂いたので、実装について考えてみました。 とりあえず CSP の nonce はどういうものなのかを考慮するために、コード例を探していたのですが、実際に動くサンプルというものが nonce 関連のもので見当たりませんでした。 そこで、実際に動くサンプルを用意しました。 https://github.com/tokuhirom/csp-nonce-sample 以下は Sinatra で書かれたサンプルコードです。 require 'sinatr

  • JSON-RPC 2.0 の over HTTP についての雑感 - tokuhirom's blog

    JSON-RPC 2.0 の over HTTP についての雑感 「うちは JSON-RPC やらんのかね」みたいなことを聞かれたので、前に考えた内容をここに晒す。 method 名について メソッド名が content-body にしか入らないので、ログがおいづらい。 (多分、実際に運用するにあたってはクライアント側で ?method=XXX みたいに付与するとかやって運用するんですかね? なんかちょっと末転倒っぽい) 特定の API method だけこっちのサーバーにふる、とかするのがつらそう。 id が意味ない over HTTP で運用する場合、id を付与していることのメリットがない。 デメリットとして、JSON 自体をまるっとキャッシュすることができなくなる。 メリットについて フォーマットがきまっているので、server2server とか、小規模のサービスとか、あるいは

    gfx
    gfx 2014/05/18
  • Perl 5.19.9 で実装された signatures の構文をためしてみる - tokuhirom's blog

    Perl 5.19.9 で実装された signatures の構文をためしてみる use 5.019009; use autodie; use feature 'signatures'; no warnings "experimental::signatures"; package Foo { sub new($class, $n) { bless {n=>$n}, $class; } sub bar($class, $a) { $a+3; } sub baz($self, $a) { $self->{n} * $a; } } sub add($left, $right) { return $left + $right; } say add(1,2); say Foo->bar(4); say Foo->new(5)->baz(4); みたいな感じでつかえる。 【追記】 use 5.019

    gfx
    gfx 2014/02/24
    ついにか! / メタ情報にどうやってアクセスするのか気になる
  • java.util.Properties についての雑記。 - tokuhirom's blog

    java.util.Properties についての雑記。 http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load(java.io.Reader) http://docs.oracle.com/javase/jp/7/api/java/util/Properties.html#load(java.io.Reader) Javajava.util.Properties のフォーマットでつくられたファイルをつかいたくなるときがあると思います。 そんなときには、Key に空白をふくめられるのかどうかを知りたくなったりするとおもいます。 結論からいうと以下のようになる。 a b=c を java.util.Properties でよむと "a" => "b=c" がとれる。 a\ b=c を java.u

    gfx
    gfx 2014/02/17
    keyに空白を含めたいときは a\ b=value か。
  • Xslate と Mouse と Perl 5.20の話 - tokuhirom's blog

    Xslate と Mouse と Perl 5.20の話 Perl 5.20 で Mouse とか Xslate がおかしいな! ってことになったら、Mouse のバージョンが古くないかを確認しよう。 Mouse の 1.13 より前のバージョンは Perl 5.20 で実行時エラーになる問題がある。 通常はおきないが、 おきるケースがありえる。 具体的には cpanfile に required 'Mouse', '==1.12'; って書いていたり、cpanfile の中身をとか書いてたりするとか、古いバージョン対象でつくった cpanfile.snapshot を carton install --deployment でいれたりすると、Mouse の古いバージョンがはいってしまう。 この状況におちいったときにわかりづらいエラーになるので、今のうちに Mouse のバージョンをあらか

    gfx
    gfx 2013/11/20
    “Mouse の 1.13 より前のバージョンは Perl 5.20 で実行時エラーになる問題がある”
  • Perl5 において chomp() とはなにをするものか - tokuhirom's blog

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

    gfx
    gfx 2013/11/18