タグ

scalaに関するlilpacyのブックマーク (78)

  • これだけ読めばOK!Scalaの環境構築2023 - Lambdaカクテル

    自分は、仕事Scalaを数年間・プライベートな経験を含めると10年弱のScalaの経験がある、そこそこの熟練Scalaエンジニアだ。チームにメンバーが入ってきたり他人に勧めるたびにScalaの環境構築を教えている一方、最新の知見を反映した記事が無くて他人に勧めづらかったので、自分が書くことにした。 現在ある記事 けっこう古びている 覚えながら書かれていることが多いのでやや曖昧な箇所がある(でもありがとう!) 最新のツールが利用できておらず無駄が多い 網羅的でない 今回目指す内容 最新の知見を活用して最短距離を目指す 何もない状況から一通りのツールが揃う所を目指す Scalaの環境構築は年を追うごとに簡単になってきているので、大多数の読者は引っかからずに進めるようになっているはず。 Scalaは基的にJVMで動作する言語だ。このため環境構築にはJVMのセットアップも含まれるのだが、それに

    これだけ読めばOK!Scalaの環境構築2023 - Lambdaカクテル
  • 大量リクエストを低コストでさばく AWS Lambda 関数を JVM で実現 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

    こんにちは、Chatwork 株式会社のソフトウェア開発者、立野と申します。 2021 年 7 月に アマゾン ウェブ サービス ジャパン (AWS) さん主催のイベント「そろそろマネージド、クラウドネイティブで行こう ! サーバーレスへのチャレンジ」にて、Chatwork におけるサーバーレス開発事例をお話しました。 弊社事例に対して「エンタープライズ開発でおなじみの Java/Scala で、高速・低コストの AWS Lambda 関数を実現する技術」が興味深い、という反応をいただきました。 この点を「ぜひ深堀りして紹介してみませんか」と AWS のソリューションアーキテクトの方々にお誘いを受けましたので、皆さんでも お試しいただけるソースコード つきの実践形式でご紹介いたします。 なお弊社事例の背景やアーキテクチャ詳細などにご興味のある方は、ぜひブログ記事や発表資料をご覧ください。

    大量リクエストを低コストでさばく AWS Lambda 関数を JVM で実現 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
    lilpacy
    lilpacy 2022/03/12
    "GraalVM native-image を使うことで、Java で実装した Lambda 関数は Node.js や Python ランタイムと同程度のメモリ量で同程度か少し速くなりました"
  • [Scala]パターンマッチにおけるアットマーク(@) - Qiita

    def flatMapSublists[A,B](ls: List[A])(f: (List[A]) => List[B]): List[B] = ls match { case Nil => Nil case sublist@(_ :: tail) => f(sublist) ::: flatMapSublists(tail)(f) } ん?sublist@(_ :: tail)??? 意味 パターンマッチを行う際にfoo@barで、barにマッチしたものをfooにバインドするということらしい つまり、上の例ではlsが_ :: tailにマッチするようなものだった場合に、lsがsublistにバインドされる 他の例 参照URLで出されている例そのままだが、リストに3つの要素があるかどうか確認し、 そうであった場合に、標準出力しながら、リストの2番目(indexは1)の要素を取得したいとき

    [Scala]パターンマッチにおけるアットマーク(@) - Qiita
    lilpacy
    lilpacy 2021/04/22
    あずにゃんパターン
  • MySQLをScalikeJDBCとHikariCPで使う - Qiita

    HikariDataSourceのままDataSourceconnectionPoolに渡してしまえばOK 基的な書き方は以下のとおり import javax.sql.DataSource import scalikejdbc._ import com.zaxxer.hikari._ class Sample { ConnectionPool.add('master, new DataSourceConnectionPool(getDataSource)) def getDataSource: javax.sql.DataSource = { val host = "localhost" val port = 3306 val database = "master" val user = "foobar" val password = "foobar" val dataSourceCl

    MySQLをScalikeJDBCとHikariCPで使う - Qiita
  • Playframeworkで定期実行させる - akka-quartz-schedulerを使う - Qiita

    こんにちは、t_hirohataです。 最近PlayFrameworkで、指定した時間に処理を動かすプログラムを書いたので そこで使ったライブラリをちらっとご紹介します。 元記事はこちら 今回ご紹介するのは、akka-quartz-schedulerというライブラリで、 cronのような書き方でスケジュールを設定できるというものです。 (※このライブラリはAkkaを使うので、Akkaの知識が多少必要になります。) このライブラリを使うにはbuild.sbtに追加する必要がありますが、 Akkaのバージョンによって追加するものが異なるので、こちらを参考に追加すると良いです。 それでは早速使ってみたいと思います! 追記 この記事ではPlay2.3を使用しています。 Play2.4ではGlobalオブジェクトがdeprecatedになったので、ApplicationLifecycleを使うように

    Playframeworkで定期実行させる - akka-quartz-schedulerを使う - Qiita
  • Eventually - scalatest_2.11 3.0.0 javadoc

  • Java 8 vs Scala: 特徴を比較する

    Java 8はついにラムダ式を導入します。ラムダ式自体は2009年からProject Lambdaで利用することができました。当時はラムダ式はJava Closuresと言われていました。サンプルコードを紹介する前に、ラムダ式がJavaプログラマにとってなぜ歓迎すべき機能なのかを説明しましょう。 なぜラムダ式を使うのか ラムダ式の一般的な使い方はGUI開発においてです。一般的に、GUIプログラミングではイベントと結びつく振る舞いを解決する必要があります。例えば、ユーザがボタンを押したとき(イベントが発生したとき), プログラミングは何らかの処理を実行する必要があります。例えば、Swingでは、次のコードで示すようにActionListenersを使います。 class ButtonHandler implements ActionListener { public void actionP

    Java 8 vs Scala: 特徴を比較する
  • Scala is a Maintenance Nightmare - MungingData

    Scala is a Maintenance Nightmare - MungingData
    lilpacy
    lilpacy 2021/03/23
    ライブラリのバイナリ互換性とか
  • リアクティブプログラミングにおけるPlay、Akka、Akka Streams

    前回記事では、Lightbend Platformを構成する各プロダクトについて紹介しました。今回はLightbend Reactive Platformを構成するPlay framework、Akka、Akka Streamsについて、実際にサンプルを動かしながら解説します。 なお、稿のサンプルプログラムを動かしたい場合、前回記事にセットアップ方法を記述してあるので、それを参考に環境を作成しておきましょう。 リアクティブプログラミングにおけるPlay framework ここではPlayのプロジェクトを作成し、ソースコードの内容について解説します。 sbtとは、Giter8とは なお前回記事では、「Activator ui」を使用してプロジェクトを作成しましたが、Activator uiはEOLを迎えることになっています。 現在は「sbt」「Giter8」の使用が推奨されているので、そ

    リアクティブプログラミングにおけるPlay、Akka、Akka Streams
  • リアクティブプログラミングにおけるPlay、Akka、Akka Streams

    リアクティブプログラミングにおけるPlay、Akka、Akka Streams:リアクティブプログラミング超入門(3)(2/2 ページ) Reactive StreamsのAkka実装「Akka Streams」とは 現在のWebでは膨大な量のデータをリアルタイムでやりとりしています。こういったデータは普通にダウンロード/アップロードしていては時間がかかり過ぎてしまうので、ストリーム処理(無限に発生するデータを継続的に処理する仕組み)が必要になります。 例えば、下記などはストリームが妥当な処理方法です。 テラバイト級ファイルの処理(メモリに展開し切れない) 通信処理(処理が継続的に発生し続ける) Stream処理では、受信側(Subscriber)が処理しきれないデータを送信し続けるとバッファーがあふれてしまうため、送信側(Publisher)がデータを送り過ぎないようにする必要があります

    リアクティブプログラミングにおけるPlay、Akka、Akka Streams
  • Akka Streamsで実装するリアクティブストリーム

    今回と次回の2回に分けて、Akka Streamsを使って実装するリアクティブストリームについて解説する。 はじめに 前回と前々回の2回で、Akkaでレジリエントなシステムを構築するためにAkka Clusterを使ってクラスタを組む方法を紹介しました。単に処理能力の向上を目的に並列化/分散化の手段としてAkkaを利用するだけでなく、障害に強く可用性の高いシステムを構築するための手段としても有効であることがおわかりいただけたでしょう。 今回と次回の2回に分けて、連続して発生し続けるデータを処理する「ストリーム処理」をAkkaで実現する方法を紹介します。Akkaではストリーム処理を実装する拡張機能として、「Akka Streams」が提供されています。Akka StreamsはJava 9の新機能として注目される「リアクティブストリーム」を実装したライブラリです。最初に リアクティブストリー

    Akka Streamsで実装するリアクティブストリーム
  • 第20章:Scalaでアクター! - Qiita

    ついに アクター について語る時がきました。 Scalaの醍醐味の一つです。 そして難しいです。。。 でも、アクターを使うと並列処理を扱うことが簡単になります。 ただアクターには色々な種類があるので、そこが簡単じゃないかも。。。 アクターの歴史 2.9のアクターは知らないんだけど、2.10からは標準のscala.actorパッケージが非推奨になっていて 今後削除されるみたいなんだ。 そして、今後はAkkaのアクターを使うことが推奨されている。 The Scala Actors API Akkaとは Typesafe社が開発していて、高い抽象度・並行・スケーラブルなアプリケーションを実装するためのScalaJavaのイベント駆動の分散並列型アプリケーションフレームワークです。 Typesafe社は、Scalaの生みの親Martin Oderskyの会社ですね。 アクターとは ところで アク

    第20章:Scalaでアクター! - Qiita
  • スレッドセーフな連想カウンタをリセットしたい人生だった - Qiita

    とあるマイクロサービスにスレッドセーフな連想カウンタを仕込みたくなったので、ここのところ格闘していました。要件はこんな感じです。 リクエストごとに様々なキーのカウント値をインクリメントする 定期的に全キーのカウント値をログ出力して0にリセットする インクリメントされなくなったキーをメモリに保持しつづけない フレームワークとして使っている Finagle の mterics 機能を初めに検討したのですが、リセットする方法がなさそうだったのと、数十万個のキーを登録するようなものではなさそうだったので、自前で作ることにしました。 ということで Java のスレッドセーフな連想配列 ConcurrentHashMap のドキュメントを見てみると ConcurrentHashMapは、LongAdderの値を使用し、computeIfAbsentで初期化することにより、スケーラブルな頻度マップ(ヒス

    スレッドセーフな連想カウンタをリセットしたい人生だった - Qiita
  • 【Haskell や圏論が出てこない】Scala で型クラスを完全に理解した話 - Qiita

    TL;DR 結論から。 型クラスはちょっとすごいオーバーロード であり 型に対して静的にメソッドを挿入する方法 です。 この記事は Haskell や 圏論等の難しそうな知識・議論なしで型クラス概念を具体的に理解する 型クラスが実は単なるすごいオーバーロードで、ちょっとした便利なものだと実感できる 型クラスとインターフェイスの違い論争で消耗しなくなる 型クラスを知っているとなにがオトクなのかわかる Haskell 等の高度な抽象化の恩恵を Java 的な慣れ親しんだシンタックスで書ける Scala は便利でたのしいと感じる ことを目的としています。 対象読者 関数型とか型クラスとかモナドとかよく聞くけど全然わからない…でも理解したい気持ちはある 型クラスの概念はいろいろ読んでなんとなく分かるけど説明が Haskell ばかりで実感がわかない 型クラスがなんなのかはぶっちゃけどうでもいいが、

    【Haskell や圏論が出てこない】Scala で型クラスを完全に理解した話 - Qiita
  • Scala ラムダ超入門 - Qiita

    Scalaの文法に慣れて来た方を対象に、ラムダ式や高階関数を使って関数を取り回す方法を説明します。カリー化や部分適用も取り上げます。いわゆる関数型言語らしい機能です。 この記事は以下の記事のScala版です。故に、結構無理しているところもあります。 Haskell 超入門 練習の解答例は別記事に掲載します。 ラムダ式 今まで取り上げて来た文法では、関数の引数を左辺で定義していました。

    Scala ラムダ超入門 - Qiita
  • コンパニオンオブジェクトって何のためにいるの? for Rubyist - Qiita

    初めてRubyからscalaに来たとき、「なんで特異クラスっぽい? シングルトンパターンっぽい?やつがいっぱいいるの?」と悩みました。なぜならrubyのクラス変数やシングルトンパターンはアンチパターン扱いされるほど嫌われていたからです。 しかし、 scalaのコンパニオンオブジェクトとrubyの特異クラスは見かけ上似ていますが、意味が違います。 この記事ではRubyエンジニア目線で、Scalaのコンパニオンオブジェクトについて解説していきたいと思います。 コンパニオンオブジェクトとは? 「コンパニオンオブジェクト」とは、あるクラスに対して同じスコープ、同じ名前で定義されたシングルトンオブジェクトです。 これがコンパニオンオブジェクトです。 が、シングルトンオブジェクトに対して漠然とした不安を感じます。。 コンパニオンオブジェクトはrubyのintializeみたいなもん しかし、その不安は

    コンパニオンオブジェクトって何のためにいるの? for Rubyist - Qiita
  • スーパークラスのコンストラクタ - クラスの継承 - Java入門

    クラスを作成した際にコンストラクタを作成しているとまずコンストラクタが呼ばれますが、他のクラスを継承している場合にスーパークラスのコンストラクタの扱いがどうなっているのかを確認します。 下記のような簡単なサンプルを作成します。クラスBはクラスAを継承し、クラスCはクラスBを継承しています。それぞれにコンストラクタを記述してからクラスCのオブジェクトを作成してみましょう。 ctest14.java class ctest14{ public static void main(String args[]){ C sample = new C(); } } class A{ A(){ System.out.println("クラスAのコンストラクタ"); } } class B extends A{ B(){ System.out.println("クラスBのコンストラクタ"); } } cla

  • .pop() equivalent in scala

  • Class,Abstract Class,Trait,Objectの違いまとめ - うなの日記

    ScalaByExample - Example 6 Classes and Objectsより。ScalaのClassとかTraitの違いについて、わかる範囲でまとめてみます。 ScalaのClassとかTraitの比較表 Class Abstract Class Trait Object 抽象メソッドを持てるか? × ○ ○ × メソッドの実装を書けるか? ○ ○ ○ ○ インスタンス化が可能か? ○ × × ○(ただしインスタンスは一つだけ) コンストラクタ引数の指定ができるか? ○ ○ × × 継承の制約 Class,Abstract Classのうち1つと、複数のTraitを継承できる 同左 同左 同左 比較用:JavaのClassとかInterfaceの比較表 JavaのClassとかInterfaceを同じ表に当てはめるとこんな感じになります。 Class Abstract

    Class,Abstract Class,Trait,Objectの違いまとめ - うなの日記
  • trait と abstract class の使い分け

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    trait と abstract class の使い分け