Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

プログラミング言語Scalaの特徴として、オブジェクト指向と関数型の融合とか、オブジェクト指向と関数型のハイブリッドといったことがよく言われます。これらの言説は間違っているわけではないものの、Scalaという言語の本質的な部分をよく表していないと私は思います。 また、関数型の要素を取り込んだ、という部分によって必要以上にScalaを恐れている人もいるように見受けられます。 そこで、「正しい」Scala言語の解説を簡単に書いてみることにしました。 クラスベースのオブジェクト指向言語である object構文やその他一部を除いて、Scalaでは原則的にクラスからオブジェクトをnewしてオブジェクトを作成します。
scala> trait A { def greeting(name: String): String } defined trait A // これは普通 scala> val a1: A = new A { def greeting(name: String): String = "Hello, " + name } a1: A = $anon$1@5c0f79f0 scala> a1.greeting("Serval") res0: String = Hello, Serval // !!!?!?!?!??!?!??!!?!? scala> val a2: A = { name: String => "Hello, " + name } a2: A = $$Lambda$1050/812031404@629adce scala> a2.greeting("Arai-san") res
概要 PlayFrameworkやAkka HTTPをつかっていて、うまくパフォーマンスがでなかった経験ありませんか? もしかしたらそれ、スレッドプールをうまく分割できていなかったからかもしれません。 PlayFrameworkやAkka HTTPなど、ノンブロッキングI/Oを前提につくられたライブラリやフレームワークでは、ブロッキングI/Oに十分な注意を払う必要があります。 具体的に言うと、ノンブロッキングI/Oの処理のみを実行するスレッドプールと、ブロッキングI/O(I/O待ちによりスレッドを占有する)を含む処理を実行するスレッドプールは分割し、それぞれ適切に設定する必要があります。 なぜスレッドプールをわけるか ノンブロッキングI/Oはその特性上、I/O待機中にCPUやスレッドを専有せず、他の処理に割り当てることができます。 この特性を活かし、PlayFrameworkやAkka H
Kotlin のマルチプラットフォーム対応、アツいですね。 KotlinConf 2017 Keynote レポート | TechBooster JetBrains/kotlinconf-app: KotlinConf Schedule Application 上の kotlinconf-app の対応プラットフォームは、 サーバーサイド(Kotlin for Server-side, Ktor) Webページ(Kotlin/JS, React) Android(Kotlin/JVM) iOS(Kotlin/Native) となっています、すご! Xamarin と比べてどうよ? 普段 Xamarin を使用して Android/iOS アプリを開発しているので、クロスプラットフォームアプリ開発技術が増えて嬉しい限り。 しかも Kotlin で書けるのはとてもよいですね。 正直、C# より
概要 gatlingという負荷試験ツールの結果が見栄え良いとのことで試してみた。 どんなものか ScalaなDSLでテストケースを記載するjmeter的なもの。QuickstartとAdvanced Tutorialを実施するとどういうものかわかるかと。 DSLの独特な所としてはUserとScenarioという概念があり、実際に人がブラウザを操作してる感覚+高級言語で表現できるは良いかと。 例えば「hoge.comの/hoge見た後/fugaを見る」というScenarioのUserを10分間に100User分負荷を発生、という感じで、ユーザがブラウザを操作する振る舞いをDSLにいい感じに表現できる。 実際にはwebアプリは複数のページ遷移で1アクションなこともあるので、このように書けると便利そうね、と。 導入 以下、linuxの場合。 jdk落としてきてインストール Gatling Pro
JavaのWeb開発の開発後期になると性能試験や負荷試験を実施することになると思いますが、 そのフェーズになると色々な問題が起こることが多い。 今まで起きた問題と調査・解決方法をいくつかの回に分けて紹介しようと思います。 まずはメモリリーク。 長時間サーバを起動して運用していたり、負荷試験を実施するとメモリリークを起こすことがある。 ガベージコレクションのおさらい Javaのヒープは大きくnew領域(young領域)とold領域に分かれます。 new領域には生成されてすぐのオブジェクトが格納されてマイナーGCにて未使用になった際に開放されます。 マイナーGCを何度も繰り返されても開放されない(長く参照されている)オブジェクトは old領域へと移動され、こちらはメジャーGC(フルGC)で開放されます。(メジャーGCはnewとperm領域も開放。) もう少し細かく説明すると・・・ new領域は
DIを使わない状態ではUserRepositoryというインターフェースが定義されているのにもかかわらず、UserServiceはUserRepositoryImplの参照も持っていました。 これではせっかくインターフェースを分離した意味がありません。 UserServiceがUserRepositoryインターフェースだけを参照(依存)するようにすれば、具体的な実装であるUserRepositoryImplの変更に影響されることはありません。 この問題を解決するのがDIの目的です。 それではDIのインジェクタを加えて、上記のクラス図を修正しましょう。 謎のインジェクタの登場によりUserServiceからUserRepositoryImplへの参照がなくなりました。 おそらくインジェクタは何らかの手段でサービスであるUserRepositoryImpl(Dependency)をクライアン
case class Cont[R, A](run: (A => R) => R) { def map[B](f: A => B): Cont[R, B] = Cont(k => run(a => k(f(a)))) def flatMap[B](f: A => Cont[R, B]): Cont[R, B] = Cont(k => run(a => f(a).run(k))) } ここで重要なのは Cont のコンストラクターに渡される run 関数です。 この run 関数を作り Cont のコンストラクターに渡すことで、継続モナドを作ることができます。 それで run 関数の型を見てみますと (A => R) => R とあります。 A => R という型の関数を受け取り、おそらく受け取った関数を実行し R という結果を返すという動作が期待できます。 ここで A を全体の中の途中の計
プログラミング言語同士の比較をするとき、ある言語が別の言語より複雑であるということがよく批判の対象になります。たとえば、C++は複雑過ぎる、Scalaは複雑過ぎる(Javaと比較して)、といった意見をよく耳にします。 しかし、実際に客観的な指標に基いて比較してみたことがある人はあまり居ないのではないでしょうか。自分がみる限り、その人がこれまで学んできた言語と比較して、「難しく感じた」ことをもって「複雑だ」という主張をしていることが多いように思います。 しかし、複雑である <=> 難しい(と感じる)も必ずしも正しくありませんし、単純である <=> 簡単であるとも限りません。 このエントリでは、JavaとScalaの構文を比較して、よく言われる「Scalaは複雑である」という主張に反して、「Scalaの方が単純である」ということが言える(ただし、Scalaの方が簡単であることは意味しない)とい
Scala関西 Summit 2017 で公開されました資料の一覧ですー。 ※Twitterで拾えた分だけですので、他にもありましたら、追記したいので教えていただけると嬉しいですー。 セプテーニ・オリジナルホール Non-Functional Programming in Scala - 竹添 直樹 Scala and Akka apps on Kubernetes in ChatWork - 林 大介(hayasshi) 実践ScalaでDDD - 辻 陽平 ストリーム処理ことはじめ ~ Akka Streams - にしかわささき Not Found グラフを知って理解するAkka Stream - kamijin_fanta Reladomo in Scala - 伊藤博志/瀬良和弘 「Scale with Scala」の道程 - 松坂 高嗣 Not Found Scala on
Scalaでメタプログラミングをするためのライブラリ http://slides.com/cb372/metaprog-shapeless-matsuri-2017#/ https://github.com/blast-hardcheese/talks/tree/scala.meta-crash-course なぜ話題になっているのか これまでScalaでマクロを書くにはscala-reflectを使っていた ところがscala-reflectを使ったマクロはdeprecatedになるらしい これからはscala.meta scala.metaで何ができるか Scalaのプログラムをいじることができる def addStat( classDefn: Defn.Class, stat: Stat): Defn.Class = { val templ = classDefn.templ val
こちらのIssueで紹介されている通りです。 https://github.com/embulk/embulk/issues/421 (Issueだとあんまり気付かれないので、Issueと内容は同じですが、qiitaでのシェアを目的としてます。) EmbulkEmbedというクラスを呼び出して、下記にようにすればJavaからEmbulkを実行できます。 EmbulkのJarはhttps://dl.bintray.com/embulk/maven/とかから最新版をダウンロードすると良いと思います。 import java.io.File; import org.embulk.EmbulkEmbed; import org.embulk.EmbulkEmbed.Bootstrap; import org.embulk.config.ConfigLoader; import org.embulk
はじめに 某記事で、 implicitsなんて呼ばないで、各機能ごとに適切な名称で呼ぼう。あと、重要なのは型クラスだからそれだけ注意すればOK、という趣旨のことを書きましたが、どうやって使えばいいかは投げっぱなしだったのでその導入編だけでも書こうかと思います。この記事での目的は簡単で、 Scalaのコレクションのsumメソッド(とproductメソッド)を自作の有理数クラスに適用できるようにしよう ということになります。実際のところ、sumメソッドを整数リストに対して呼び出す、たとえば でも、型クラスを「使って」はいるのですが、実際に型クラスに新しいインスタンスを追加していないので、使った実感がわかないと思います。そこで、有理数クラスです。実装が比較的簡単である上に、四則演算への対応が容易という点でこれを選ぶことにしました。 まずは、有理数クラス(Rational)の実装です。ここは、本題
Help us understand the problem. What is going on with this article? JavaプログラマのためのKotlin入門という記事があったので、マネして、ScalaプログラマのためのKotlin入門を書いてみることにしました。二番煎じとか言わないでね! Kotlinって何? 「Kotlin が Android の公式言語になることが Goole I/O 2017 で発表されました。」らしいです。Scalaプログラマが今後Kotlinを始めることが今後多くなると思うので、Kotlinをスムーズに始められるように次の 3 点についてまとめます。 Scalaとほぼ同じところ 違う考え方が必要でつまづきがちなところ Kotlinならではの不便なこと Kotlinって何?は元記事にあるのではしょります。元記事は連載形式だそうですが、今回の記事
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事はAizu Advent Calendar 2015 @ababup1192の記事です。 innocentyknrさん <- 前の人 ・ 次の人 -> masapontoさん 記事の内容 AltJSの一種であるScala.jsをオススメする記事です。以下の点を軸として紹介をしていきます。ScalaとScala.jsの魅力を語り続ける記事なので、環境構築資料としては役に立たないと思います。 Webフロントエンド開発の現状と環境 言語の強み Scala.jsを使ったモダンな開発 Scala.jsとは 名称から分かる通りAltJSの一
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector java-1.7.0-openjdk-demo.x86_64 : OpenJDK
設定する前に emacsでjavaを書くにはそれなりにjavaに習熟してる必要があると思う おすすめできない人 eclipseやnetbeansなどのインテリジェンスな補完がないとjavaを書けない人 javaのソースから継承ツリーが辿れない人 java se,java eeなどのコアなクラス群をいつ使えばいいのかぱっと出てこない人 プロジェクトで使用してるライブラリを把握できない人 つまりIDEまかせでソースの大雑把なマッピングが脳内で出来てない人は今使ってるIDEを使いづづけた方がいいです。 メリット emacsからmavenが呼び出せる(eclipseもnetbeansも出来るけど) IDEほど重くない あとなんだろう? コマンド併用でeclipseってエディタだよね? って言う人には向いてます。 malabar-mode? malabar-mode はemacsに昔からあったjde
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く