妥当なNullの使い道

「Null」ってあるじゃないですか。参照が何も指し示していないときに利用するアレ。 Nullが発明された当時はそれなりの事情があったのだと思いますが、昨今Nullは忌避すべきものという扱いが主流かなーと思います。 事実プログラミング言語においてはNullが…

一緒にビズリーチ・キャンパスの成長を支えてくれる仲間を募集しています!

このブログでも書きましたが、2021年の年始から転職活動をしていました。おかげさまで無事に転職できて、4月から株式会社ビズリーチで働いています。今は新卒事業部で、ビズリーチ・キャンパスというサービスの開発に携わっています。 で、近況はこれぐらい…

今の会社に入って良かったこと・気付いたこと

今の会社に入社してから1年とちょっとが経った。で、もう辞めるつもりで、ただいま絶賛転職活動中。まあ請け負ったものがあるので、転職時期は年度明けとかになりそうだけど。 いろんな会社を転々としてきたけど、その中でこの会社で感じたことがあるので書…

エルビス演算子はプログラミング言語によって定義が違うので、あまり言いたくない

エルビス演算子ってありますよね。"?:"で、これを90度傾けるとElvis Presleyに見えるからそう呼ばれているやつ。 Wikipediaのエルビス演算子の記事には: 左式exprLの評価結果が真と判定される場合にはその結果が、それ以外の場合には右式exprRの評価結果 と…

XcodeGenの導入でつまずいたところ

今私の中でちょっとアツいのがXcodeGenで、まあアツいんでアツいうちに導入するか〜って昨日ぐらいに重い腰を上げました。 結構スムーズに書けたんですが、いくつかつまずいたので、その点をピックアップ。ちなみに書くときに参考にしたのは XcodeGen/Projec…

OpenCVのDescriptorMatcherの話

特徴量の検出(detect)と記述(compute)については割愛。これはその後の特徴量を比較するときに使うDescriptorMatcherについての話。 まずDescriptorMatcherの使い方 コードはScalaです。 import org.opencv.core.MatOfDMatch import org.opencv.features2…

OpenCVをJavaから使うぞ〜〜〜完全インストールマニュアル

まあJavaというかScalaから使いたかったんですが、同じことなんでとりあえずJavaから使うぞ〜〜〜という話です。 (macOSの話だけど)Homebrewで入れていいの?Mavenのリポジトリにあるの使っていいの?とまあいろいろ躓いたんで、まとめときます。 OpenCV(…

ObjectOutputStreamでシリアライズしたオブジェクトを永続化したら、serialVersionUIDが変わっちゃって破滅するやつ

題名のことやったやつおる? ここにおる。こういう例外が投げられる。 InvalidClassException: local class incompatible: stream classdesc serialVersionUID = 1083041391519420705, local class serialVersionUID = -8102506628468650634 シリアライズし…

JSR-310のDateTimeFormatterに気を付けろ

JSR-310に限った話ではないかもしれませんが。 JSR-310で日時なりを文字列にするときは、fomratメソッドにDateTimeFormatterクラスのインスタンスを渡してやる。んー分かりやすい。ちなみにtoStringメソッドでもOK。この場合はISO 8601の形式でフォーマット…

ELBを介したSSEを行う場合の設定や気を付けるところ

aws

SSE(Content-Type: text/event-stream)便利ですよね。フレームワークがサポートしていることも多いですし、その通りやれば結構サクッと動作します。 しかし、ローカルで試した場合にサクッと動作しても、ELBを介した場合に結構ハマったりしたので、その場…

Akka StreamsのalsoToを使うとSourceが停止しない

結論から言うと下記のコードには問題がある。rediscalaでRedis pub/subに繋いで、subscribeで受け取った内容をAkka HTTPでのSSEで返すコードの例です。 import java.nio.charset.Charset import akka.actor.ActorSystem import akka.stream._ import akka.st…

sealed abstract case classがすごい

sealed abstract case classなるものがある。別のことを調べてたらこちらの記事(のコメント欄)で見掛けて感動してしまった。 軽く触れると、newできなくなり、case classによって自動で生成されるcopyメソッド、そしてコンパニオンオブジェクトのapplyメソ…

Scalaマクロのerrorとabortの違い

Scalaのマクロで、コンパイルエラーにしてしまうときは Context.error を使う。 def someMethod_impl(c: Context)(arg: c.Expr[String]): c.Expr[Unit] = { // ... if (cond) { c.error(c.enclosingPosition, "a message") } // ... } でもこれが微妙に使い…

Scala dynamics + macros

Type Dynamic Scalaはメソッドなどの有無をコンパイルの時点で解決しますが、Dynamic traitを使うことによって動的にすることが出来ます。 // Dynamic traitを使うために必要。コンパイラオプションに `-language:dynamics` を渡してもOK import scala.langu…

パッケージの依存を単方向にするための拡張メソッド

DDDの話をするとしよう*1。 IDDD 第9章 モジュールにおいて、モジュール(Scalaだとパッケージ)の依存は極力減らせ。現実的には難しいが、単方向にしたり、親子関係にあるならば双方向を許可する、ということが述べられている。 しかしこれめっちゃ難しい。…

Y8 2017 spring in Shibuyaでお話した #y8spring

久し振りに登壇しました。 内容はメディロムで開発しているウェブAPI*1を、どんな風にScalaで書いているか、どんな判断を下しているか、などといったものです。今の仕組みもそろそろこなれてきたし、次(イベントソーシング、CQRSとかな!)に行く前にいっち…

ScalaのJSONライブラリcirceの使い方

ScalaのJSONライブラリと言うと、json4sあたりが有名なのかと思います(私感)。 が、json4sはリフレクションを使うので、何かと避けたい方も多いかと思う。 ということで、circeを使ってみましょう。 circe概要 circeはScalaのJSONライブラリです。 読み方 …

Akka HTTPを使ってみる。Akka Streamsにもちょっと触れるよ

Akka HTTPとはAkkaの上でHTTPサーバーを実現したものです。HTTPクライアントとしての機能を持っていたり、WebSocketのサポートもしています。 sprayという似たものもありますが、spray/sprayには「長らくメンテしてないよ。Akka HTTPに置き換えらているよ」…

型推論ふりかえり

型推論、よく聞きますね。よく聞くのでWikipediaにも型推論のページがあります。 この仕組みの恩恵は案外自然と享受しているものですが、機能を提供することライブラリの開発においては知らないと始まらない前提のようなものであると最近思います。が、自然…

YAP(achimon)C::Asia Hachioji 2016 mid in Shinagawaに行ってきた

7月2日(土)、3日(日)の2日間開催されたYAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa(以下ヤパチー)に行ってきました。 yapcasia8oji-2016mid.hachiojipm.org トークした 実はこういうイベントに参加するの初めてで、まートークしたことも当然…

PlayStation 3が欲しかったのでその欲望を満たしてみたら想像以上に満たされた

「PlayStation 3とか買ってもやりたいタイトルあるの?」と言っていたのは何年前か。多分PlayStation 3が発売された直後とかだと思います。今ではタイトルの本数もかなりの数に上るんじゃないでしょうか。だってPlayStation 4の時代ですもんね。しかもBlu-ra…

Capistrano 3への手引き

Capistrano、便利ですよね。capistrano/capistrano最近メジャーバージョンアップがあったのですが、使い方、というかスクリプトの書き方やお作法が変わり、「Capistrano 3にアップデートしたはいいけど全然動かなくてどうなってんだ」という流れはもはやお約…

EmacsからVimに乗り換えた

vim

ちょっと前にEmacs + markdown-modeでドキュメントを書いていたのですが、Markdownって改行を入れると、ウェブブラウザ上では改行されていなくとも、HTML上で改行(単にCRが入ってる、という意味)されるじゃないですか? そういうときってウェブブラウザ上…

MeCabのメモリ管理はどうなっているのか

以前mecab-rubyを用いた下記のコードがコケる場合がありました。 node = MeCab::Tagger.new.parse(text) これはparseメソッドを呼び出している最中にMeCab::TaggerのインスタンスがGCによって解放されてしまい、メモリ違反を起こすためです(昔のことなので…

Rubyにpackage_privateを導入しようとしたら

Rubyのメソッドの可視性はpublic, protected, privateの3種類です。そこに同一パッケージ(イコール同一gem?)からのみ呼べるpackage_privateを導入してみましょう。結論から言うと断念しました。以下のような場合は簡単です。 class String def nya "#{sel…

Rubyで任意のメソッドの呼び出しを記録するgemを作った

タイトルの通り。 takkkun/peeek · GitHub インストールは: $ gem install peeek で。処理としては対象のメソッドを呼び出し記録用のメソッドで包んでいるだけです。使い方はREADME.mdなりをご覧ください。が、一部書き漏らしていることがあり、それをここに…

httpstatusコマンドで、HTTPのステータスコード(

一般的なWeb Programmerならば、HTTP Status codeはすべて暗記していると聞きました。しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。httpstatus.erlです。インストール方法は: $…

最近のMeCabの使い方

MeCabはC/C++で書かれた形態素解析を行うライブラリなのですが、ちょっと疑問に思うところがあって、以下のようなコードを書きました。 require 'MeCab' mecab_options = '-Owakati' 1000.times do |n| begin tagger = MeCab::Tagger.new(mecab_options) # d…

ErlangでTwitterのUserStreamを受け取る

以前もErlangでTwitter Streaming APIを使うといったエントリを書いたのですが、いかんせん情報が古すぎます。UserStreamではなく、素のStreaming APIなのはともかく、認証がベーシック認証だったりします。その割にはどうやら最近参照されているらしい。htt…

autotest-twitterでブヒる

最近とあるgemを書きながら付随するgemを書いてて優先すべきそれが中々進まない昨今ですこんばんは。で、恥ずかしながらテストファーストってあんまりやったことなくて、今それを実践しながらの開発をしています。使っているツールはRSpecなんですが、コマン…