Skip to content

Instantly share code, notes, and snippets.

@matsu-chara
matsu-chara / fieldNamer.scala
Created February 27, 2017 15:45
meta 0.16, pardaise-3.0.0M8
package scalaworld.macros
import scala.collection.immutable.Seq
import scala.meta._
/**
* <s>コンパニオンオブジェクト</s> case classにつけるアノテーション。
* 対応するcase classのフィールドを取得し、
* def フィールド名(value: フィールドの型): (String, フィールドの型) = (フィールド名, value)
* というメソッドをフィールドの数だけコンパニオンオブジェクトに生成する。
import java.nio.ByteBuffer
import java.security.MessageDigest
def md5(s: String) = {
MessageDigest.getInstance("MD5").digest(s.getBytes)
}
def hashes(e: String): Seq[Long] = {
val h1 = ByteBuffer.wrap(md5(e).splitAt(8)._1).getLong
val h2 = ByteBuffer.wrap(md5(e).splitAt(8)._1).getLong
@matsu-chara
matsu-chara / .sbt_0.13_global.sbt
Last active February 22, 2017 09:42
~/.sbt系コピペ
showMessageOnBuildFilesChanged

共変・反変があるとどう嬉しいのか考えるコーナー

考える際の土台として、以下のようなクラスを考えます。

class Person(val name: String)
class Teacher(override val name: String, val kamoku: String) extends Person(name)

また 文字列からクラスAのインスタンスを生成する Read[A] とクラスAのインスタンスから文字列を生成する Write[A] というクラスについて考えてみます。(ReadはfromJson、WriteはtoJsonのようなイメージです。)

@matsu-chara
matsu-chara / log.log
Created September 28, 2016 10:06
ansibleでlistをマージした変数をつくる
~sand/aaa $ ansible-playbook site.yml --connection=local
[WARNING]: Host file not found: /etc/ansible/hosts
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [127.0.0.1] ***************************************************************
TASK [setup] *******************************************************************
ok: [127.0.0.1]
@matsu-chara
matsu-chara / a.yml
Created September 20, 2016 08:31
intersectした上で、空だったときは実行したくないとき
---
- hosts: all
tasks:
- set_fact:
mofu:
- a
- b
- c
- set_fact:
@matsu-chara
matsu-chara / fsm.scala
Last active November 19, 2016 09:28
initialize()を呼び出す必要があったので間違い/(^o^)\ ==> ~~~stateTimeoutは 最初にメッセージを送らないとwhen(0, stateTimeoutのほうは発動しない?~~~
package com.example
import akka.actor.Actor.Receive
import akka.actor.SupervisorStrategy.Restart
import akka.actor.{Actor, ActorSystem, FSM, Kill, OneForOneStrategy, Props, SupervisorStrategy}
import scala.concurrent.duration._
object FSMMain extends App {
val system = ActorSystem("MyActorSystem")
@matsu-chara
matsu-chara / actor.scala
Last active August 5, 2016 06:13
akkaのdispatcherでOOM
import akka.actor.{Actor, ActorSystem, Props}
import scala.concurrent.{blocking, Future}
object OOM extends App {
val system = ActorSystem()
val actor = system.actorOf(Props[OOMActor])
(1 to 10000).foreach(actor ! _)
Thread.sleep(10000)
system.terminate()
}
@matsu-chara
matsu-chara / blocking.scala
Last active August 5, 2016 06:28
blockingを通るメソッドを大量に呼ぶとOOMになるので注意
import java.util.concurrent.{ForkJoinPool, ForkJoinWorkerThread, ThreadFactory}
import scala.concurrent.{BlockContext, CanAwait, ExecutionContext}
class ThreadPrinter extends Runnable {
override def run(): Unit = {
println(Thread.currentThread())
println("isDaemon: " + Thread.currentThread().isDaemon)
println("isInstanceOfBlockingContext: " + Thread.currentThread().isInstanceOf[BlockContext])
println("")
@matsu-chara
matsu-chara / preRestartMailboxOrder.scala
Last active July 4, 2016 17:17
再起動時にpreStartでなげるよりもMailBoxに積まれていたもののほうが早く実行される
package ex2
import akka.actor.SupervisorStrategy._
import akka.actor._
import scala.concurrent.Await
import scala.concurrent.duration.Duration
object Main1 extends App {
val system = ActorSystem()