手軽に自分用のショートカットが定義できるgolを作った

github.com go-linkというものが前職にあって、それのパクリです。(ただし運用はしたくないのでlocalhostで動かす前提にした) ワークフローがこれに依存しすぎていて無いと精神が不安定になるので作りました。 go get github.com/matsu-chara/gol で入りま…

TwitterのFutureについてのざっくりまとめ

基本的に以下からそのまま取ってきています。 ドキュメント Futures — Util 6.45.0 documentation コメント util/Future.scala at util-6.45.0 · twitter/util · GitHub 説明用のざっくりポインタとしてまとめる予定だったのに、あれもこれもと欲張ってしま…

ReladomoというORMを触ってみた

Reladomoはゴールドマン・サックスが公開しているJava向けORMです。 https://github.com/goldmansachs/reladomo-kata にチュートリアルが公開されていたので触ってみました。 ちなみにReladomoもReladomo-KataもApache License 2.0です。 Chaining JavaのORM…

BiTemporal Data Modelに入門中

BiTemporal Modelingについてちょっとだけ調べたりしたのでメモ。 基本的に Temporal Data Models(ppt注意)とTemporal Databasesを大幅に端折ったものに他の資料を少しだけ入れた感じの内容です。 Temporal Data Models BiTemporal ModelingはTemporal Data …

case classのフィールド名とフィールドに対応する値を渡すと型安全にフィールド名と対応する値の組を渡してくれるアノテーションをscalametaで書いた

ややこしいタイトルシリーズ(?) モチベーションが伝わりづらいけどDBへのアップデートでフィールドを4つか5つ指定したい(かつcase classのインスタンスは情報が足りなくて作れないという制約がある)という状況を考えます。 このとき sql.update(テー…

opensslでBASE64エンコードされた文字列をdecryptしようとしたら769bytes以上になるとエラーになる件

scalaでファイルを暗号化&base64エンコードしてopensslでファイルを平文にしようとしたところ平文サイズが768byte以下のファイルは平文にできるのに、769byte以上の文字列を入れると下記のエラーが出る現象について。 $ openssl aes-256-cbc -iv $IV -K $KEY…

IntelliJのライブテンプレートにimport scala.concurrent.ExecutionContext.Implicits.global入れたら便利になった。

タイトルそのままです。 IntelliJ IDEA 2016.3.4です。 知ってる人は知ってるというか自分もなんか登録できるなということは知ってたんですが今まで何登録すればいいんだろうと思って放置していましたが登録したら便利になりました。 Preferences > Editor >…

slackのユーザーを全員取得してアイコンをemojiとして登録する書捨てスクリプト

前々からほしかったので時短で雑に作った。 https://github.com/matsu-chara/slack_user_avatar_emojis matsu_chara ユーザーだったら :m_atsu_chara: のような絵文字になる。(名前そのままだとメンションになってしまうため回避するためにアンダーバーを入…

株式会社ドワンゴを退職しました。

2017年2月28日付けで株式会社ドワンゴを退職しました。 新卒入社から二年弱、Scalaを書いたり、ScalaTextの作成に参加したり、Kafkaを運用したりしていました。 短い期間でしたがscalazコントリビューター1位&2位の人*1を含め、色々な側面ですごい人達と同…

akkaでメールボックスをクリアしつつリスタートしたかったけど何か微妙。

リスタートの時にメールボックスクリアしたくなったんですが、(厳密にはRestartではなくてStop => 新しいのをStartみたいなのでもOKなんですが・・)あんまりいい方法がなくてうーんって感じだったので検討をメモ書き程度に。 結論としてはstashするか、dea…

カーネギーメロンのDBに関する講義が面白いのでおすすめ

ここに書くことによって途中でやめられなくするメソッドです。 ハッカーニュースを眺めていたら以下のようなCS系講義動画のまとめリポジトリが流れていました。 GitHub - Developer-Y/cs-video-courses: List of Computer Science courses with video lectur…

(ansible 2.1までは)ansible_managedを使うと毎回changed扱いになる可能性がある

以下の話題はansible 2.2以降では修正されています。 https://github.com/ansible/ansible/pull/18094 ansible_managed ansibleのtemplate内で {{ ansible_managed }} とすると Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}的…

akka FSMでstateTimeoutが一度メッセージを受け取らないとスケジュールされないときはinitializeの呼び忘れかも

結論 initialize() https://github.com/akka/akka/blob/v2.4.13/akka-actor/src/main/scala/akka/actor/FSM.scala#L511-L522 をFSMのコンストラクタの最後(または適切なライフサイクルメソッド内)で呼びましょう。 ActorのreceiveTimeout akka actorにはrece…

OpenStackのUbuntuでdocker使ったらコンテナからのcurlがハングする件

dockerコンテナ上で何故かcurlが上手くつながらない問題にハマったのでメモするシリーズ。 環境 Ubuntu 14.04.5 LTS ( on OpenStack) Docker version 1.11.2, build b9f10c9 症状 ホストで curl https://github.com は正常にレスポンスを受け取れるのにもか…

ProtocolBuffersでprimitiveのデフォルト値と値が入っていないことを区別したいときにどう書くか

結論 wrappers.protoが便利 背景 protobufでは値を省略したときに、その型で定められたデフォルト値が代入されます。 例えばstringを省略すると自動的に""を指定したことになり、「値が指定されなかった」のか「空文字列を明示的に入れた」のかを区別しない…

redis叩く君をつくった

ponyで何か作りたいなと思ったのでひとまずScalaで作ってそれを移植しようかなーと思い立ち作ってみた。 GitHub - matsu-chara/redica get/setしか叩け無いけどまあいいよね( ◜◡‾) レスポンスのパースが限定的なので勉強がてらもう少し作って見るかも。 せっ…

Ponylang 0.3祝いと最近のPony事情

はろぽに〜₍₍ (ง´・_・`)ว ⁾⁾ Pony 0.3リリース 2016年8月26日にPony 0.3がリリースされました。 チュートリアルについてのブログを書いたときから大分経ったような気がするので、 最近のPony事情についてちょっとまとめようかなーと思います。 (ついでにチ…

blockingとOOM [scala]

ExecutionContextとblockingについて調べたメモ [scala] - だいたいよくわからないブログ の続きです。 今回の記事の結論 blockingをたくさん呼ぶとOOMになるまでスレッド数が増え続けるっぽい。 ==> 追記: scala2.12 だとlimitがあるので安心して使えるらし…

Kafkaのproducerのrequest.timeout.msはどのように作用するか

気になったのでコードを追ったりしてみました。備忘録けんメモ書きです。 そもそもtimeoutがどうやって送信されてどうやってbrokerで受信されているのかが追いにくいのですが、 https://github.com/apache/kafka/blob/0.9.0.0/clients/src/main/java/org/apa…

akkaで失敗したメッセージを順番通りにもう一度処理してもらうには

概ね Mailbox with Explicit Acknowledgement — Akka Documentation のお話です。 まずはbuild.sbtです。 name := "akka-scala-seed" version := "1.0" scalaVersion := "2.11.8" val akkaVersion = "2.4.8" libraryDependencies ++= Seq( "com.typesafe.akk…

Kafkaの旧consumerでいうconsumer.idは新consumerだと何なのか

consumerが復数同時に同じpartitionにつないだときに、どのクライアントが担当するかを意図的に決定させるためにconsumer.idを設定していたんですが、新consumerでconsumer.id設定できるところがみつからないなーと思ったので、Kafkaコードを微妙に追いつつ…

slackチャンネルのワードクラウドを生成するslackloudを作った

アイコンを変えました₍₍ (ง´・_・`)ว ⁾⁾ そして作りました。 GitHub - matsu-chara/slackloud slackloudとは slackのトークンさえあれば ./run.sh "#作成対象チャンネル" --post "#画像ポストチャンネル" でワードクラウドの生成、画像投稿までやってくれる便…

iterm2 version3.0でssh-host-colorが`44:52: syntax error: end of line~~~`みたいなエラー出すのを直した

細かいものを書いてブログを延命するエブリデイ₍₍ (ง´・_・`)ว ⁾⁾ 前置き iterm2 3.0のshell integrationが結構よくて、 時間がかかるコマンドを実行しちゃった後に、あっ終わったら通知して欲しかった・・・ってときにもCmd-Opt-Aで後付アラートしかけられた…

markdown内のjsonコードブロックを拾ってjsonlintかけてくれる君を雑に作った

markdownのjson codeblockにAPIレスポンスの仕様とか書いてるけど何か微妙にずれたりしていてワーってなるときに備えて作りました。 codeblockを抜き出してきてjsonlintを叩きまくる仕様です。 実装が雑だけど、困ってないしあんまり継続的にはメンテしないだ…

Slackの勢いをグラフにしてくれる君を作った

github.com 分報チャンネルが社内で話題なので流量を可視化することで仕事の集中度となんかリンクしてるのかなーと思って雑に作りました。 22~0時とかに山がありますがその辺は仕事してるのではなくて帰宅後雑談タイムだなーとかが分かります。 ruby力がなさ…

KafkaMeetup Japan#1 で発表しました

Apache Kafka Meetup Japan #1 at Yahoo! JAPAN - connpass Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集 from matsu_chara www.slideshare.net ザクザクとした発表になりましたが、これからKafkaを導入しようとか今導入してますと…

ansible.cfgにask_vault_pass = Trueを設定したいけど毎回パスワード聞かれたくないとき

ansible.cfgにask_vault_pass = Trueを設定したいけどそうすると必要なとき以外もvaultパスを聞かれてつらいのをなんとか回避する ansible-vaultで暗号化したファイルをansible-playbookコマンドなどで使いたい場合は ansible-playbook --ask-vault-pass -i …

super.preRestartの位置でライフサイクルメソッドの呼ばれる順番は変わる - akka

akka 2.3.13です。 preRestartの中のどの位置でsuper.preRestart(..) を呼ぶかによって微妙に処理の順番が変わって辛かったのでメモします。 gist.github.com コメントのとおりですが、 最初にsuper.preRestartを呼ぶとpreStart -> postStop -> preRestart …

actor内で特定のExceptionが投げられることをテストしたいときはEventFilterを使おう - akka

akka 2.3.13です KillされたことをテストしたくなったのでググったらEventFilterなるものが出てきました。 Testing Actor Systems — Akka Documentation なんとログを見て特定の例外ログが出ているかどうかを見るもののようです。ゴリ押してますね。 使い方…

歌舞伎座.tech#9でPonyについて発表しました

歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」 - connpass で発表しました。 オープンな勉強会で発表したのは初めてだったので胃に穴が空きそうでしたが、なんとか乗り越えられました・・死にそう・・・(◞‸◟) ponyの知名度がちょっとでも上がれば幸…

pony runtimeメモ actor dispatch編 [ponylang]

pony runtime ponyのランタイムについての論文を読んでいる中でActorの仕組みについての部分を見て現状の実装はどうなっているのか気になったので少しだけ見てみました。 論文は2013年ですが現時点(2016/3/5)での最新コミットのソースを見てみます。 *1 acto…

ExecutionContextとblockingについて調べたメモ [scala]

この記事の結論 globalなExecutionContextではブロックする処理をblockingで包むとスレッド数が勝手に増えるから空きスレッドが無くて実行できないといったことを防げる。 ExecutionContext.fromExecutorService(new ForkJoinPool(100)) で生成されるThread…

Actorの初期化をpreStartでやるべきかプライマリコンストラクタでやるべきかは公式ドキュメントに書いてある - akka

akka2.3.13です。 actorの初期化について迷ったのですが公式ドキュメントに書いてあったのでまとめます。 モチベ Actorのフィールドでなんらかの値を初期化する際に以下のパターンが考えられます。 *1 var foo = _ // varで宣言 override preStart() { super…

Learning Akkaを読んだ

www.amazon.co.jp を読みました。(2015/12/24発売) 全体を通してJava8とScala版のコードが併記されているので賞味としてはもう少し短くなりそうです。 この本では、akkaを使った並行処理だけでなくakka-remoteを使った分散システムの作成にも取り組みます。 …

処理が止まってしまったactorはKILLできる・・? - akka

注:どうなんだろうというところで終わっているので結論はありません。 akka 2.3.13です。 Actorの中で使ってるライブラリがデッドロックしてる?みたいなケースに遭遇したので雑に調査しました。 とりあえず少なくとも以下の様な状況でKillしようとしても止…

ActorInitializationExceptionではpostStopは呼ばれない(?) - akka

akka 2.3.13です。 preStartの中で例外が出た時にpostStopが呼ばれないような挙動があり、微妙に問題になったので本当に呼ばれてないのかどうか調べてみました。 import akka.actor._ object Main extends App { val system = ActorSystem() try { val actor…

継続モナドが分からなくてもActionContの嬉しさなら何とか分かる気がした。

某会社の某アカウントシステムで使われているという継続モナドコントローラーですが、 今までいまいちよくわかっていなかったのですが友達に教えてもらってなるほど!と思ったので書き記します。 ActionCont 継続モナドコントローラー(ActionCont)について…

ansibleのfact_cachingはansible_date_timeもcacheする

ansible高速化のためにansible.cfgに色々設定していましたが、fact_cachingの機能を使うと {{ ansible_date_time.date }}_{{ ansible_date_time.hour}}{{ ansible_date_time.minute }}{{ ansible_date_time.second }} のような変数に使われているdate_timeま…

Future.sequenceでExecutorContextだけ明示的に渡したい時

このエントリが投稿されているということはネタ切れが近いということです(´・_・`) 本題 Future.sequence の引数が (implicit canBuildFrom, executorContext) となっていて、 executorContextだけ渡せないつらいと思ったら (implicitly, execurtor) でいける…

カスタム補間子で自分用のString interpolationを作る

scalaでは s"" という形式で文字に変数を直接埋め込むことができます。 val a = "つ" val b = "ら" val c = "い" s"very $a $b $c poyo." でscalikejdbcには sql"" とかもあり、そもそもscala的には s"" も構文的に特別扱いされているわけではなくて 自分で…

ControlThrowableをcatchしてみる

scalaで try { f() } catch { case e: Throwable => println(e) } など書いてしまうとどうなるかは以下の記事に解説があります。 Scala 2.10 から try catch の catch の部分に型を書かないと警告が出るようになった件について - scalaとか・・・ ほへーと思…

intelliJのプラグインをgithubのリポジトリからcloneしてインストールする方法(idea-plugin-protobuf編)

github.com protobufのシンタックスハイライトなどを効かせてくれるidea-plugin-protobufですが、 2015年12月現在、コミットは行われているものの最終releaseは2月でだいぶ差が開いていそうです。(20コミットくらい) 現状のリリースでprotobuf v3を書くと…

Ponylangについてアドベントカレンダーを書いた後の話

第2のドワンゴ Advent Calendar 2015 - Qiita に参加してponylangについて書きました。 Ponylangで型付きActor生活 - Qiita 今回は上の記事を投稿した後で教えてもらったことや気づいたことをまとめます。 学び http://www.ponylang.org/papers/fast-cheap.p…

pub subっぽいponylangのサンプルコードを書いた

Implementing chat application with Pony lang | Software Development Ramblings に影響を受けて、chatではなくpub/subっぽい何かを作ってみることにしました。 内容的にはpub/subのアーキテクチャがどうあるべきかということではなく、 ponylangでこうい…

npmのパッケージに更新があったら自動でpackage.jsonを変更してプルリクを送ってくれるjenkinsのjobを作った。

npmのパッケージでアップデートがあったら自動で上げてプルリクエストを送ってくれるjenkins job · GitHub 上のものを保存したらjenkinsで以下の条件を整えます。 github enterpriseのURLを一番下の変数っぽいけどそうじゃないところに書く(元がハードコード…

textlintのruleプラグインで見出しのレベルが適切かチェック

matsu-chara/textlint-rule-incremental-headers · GitHub www.npmjs.com 文章を書く時に見出しに関するルールを決めたので、自動で検査するためのツールを作りました。 ルール自体の実装は簡単だったんですが、 textlintルールのテスト、https://t.co/ILIhC…

gitbook-plugin-tut-to-scalaをリリースした

けどおそらくもう更新することは無いと思います(´・_・`) matsu-chara/gitbook-plugin-tut-to-scala · GitHub www.npmjs.com なにこれ gitbookのプラグインです。 ```tutという文字列をビルド時に```scalaという文字列に置き換えます。 tutとは github.com tut…

脱gulpしたいけどkarma startでmochaのテストもeslintもしたいし、watchifyされていたい感じの人向けのJSプロジェクトテンプレートを作った。

タイトルが長い。 charaい先輩のブログ、更新が止まってて心配だ— トンボ (@tom__bo_CS) November 15, 2015 書くこと無いなーと思ってぼんやりしていたら生存を心配されてしまったのでハートビート的に何か書くことにしました。 しかし、書くことがあったら…

Ponylangで型付きアクター生活[7] capability subtyping, arrow type編

注意 ここにある内容はpony2.x時代にドキュメントに書かれていた物なので、もう古い可能性が高いです。最新の情報は公式ドキュメントを参照してください。 はろぽに〜₍₍ (ง´・_・`)ว ⁾⁾ 今回で最終回です。 Capability subtyping reference capabilityが付いて…

Ponylangで型付きアクター生活[6] consume, recover編

注意 ここにある内容はpony2.x時代にドキュメントに書かれていた物なので、もう古い可能性が高いです。最新の情報は公式ドキュメントを参照してください。 はろぽに〜₍₍ (ง´・_・`)ว ⁾⁾ 前回isoとtrnはそのままでは代入できないということが判明したので今回は…