プログラミング言語 Scala 10冊目at TECH
プログラミング言語 Scala 10冊目 - 暇つぶし2ch2:デフォルトの名無しさん
14/01/25 15:10:36.80
前スレがいつの間にか埋まってたので立てといた

3:デフォルトの名無しさん
14/01/25 16:44:45.56
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::

4:デフォルトの名無しさん
14/01/25 18:34:17.20
凄く基本的なことを聞くんだけど
scala+Play framework2.0で作ったサービスを公開するには
どういう鯖を借りればいいんだ?
javaが動けばどれでもいいんでする

5:デフォルトの名無しさん
14/01/25 19:01:58.79
お手軽なのは平六かな

6:デフォルトの名無しさん
14/01/25 22:55:32.62
herokuはrootアクセスできなくて面倒みたいな話がある
URLリンク(gist.github.com)

7:デフォルトの名無しさん
14/01/26 02:05:44.02
枯れているけどナウくないDbUtils
枯れてないけどナウいScalikeJDBC
JDBCのラッパーはどっちがええの?

8:デフォルトの名無しさん
14/01/26 03:52:37.67
そもそもJDBCのラッパーって必要なのだろうか…
RDBMSとは文字列と数値のやりとりしかしないんだし

9:デフォルトの名無しさん
14/01/26 08:36:24.95
トランザクションなどを上手く抽象化したいというのはあるな。

10:デフォルトの名無しさん
14/01/26 08:47:09.37
jdbcの不完全な点はリゾルトセット取得後もコネクションを保持していなきゃいけないことだ。
これさえ解消されてれば自作ラッパーを作る必要も無かった。

11:デフォルトの名無しさん
14/01/26 09:12:27.57
>>6
まあ、Herokuは開発者に対してrootアクセスを提供しない代わりに色々なサービス(freeプランのは大体制限がきついけど)をaddonとしてコマンド一発で
インストールできるし色々な雑務から開発者を解放してくれるよというものだしね。その代わりにHeroku特有の制限を色々受け入れなきゃいけない
し、Herokuへのデプロイは遅いしとまあ別の苦労を背負わされることでもある

自分で作ったサービスをとりあえず手軽にデプロイして公開したいならHeroku自体は悪くないんじゃないかな。デプロイ作業は確かに簡単だし

12:デフォルトの名無しさん
14/01/26 09:15:27.19
リザルトセットは必要な行をとっととフェッチしてなるべく早く閉じるのが鉄則。
なのでコネクションを保持云々の不満が起こる理由がよく分からん。

13:デフォルトの名無しさん
14/01/26 09:30:11.74
レコードが少ない場合はそれでいいけど,そういう状況ばかりじゃないんだよ。

14:デフォルトの名無しさん
14/01/26 15:16:26.35
scalaのprotected[this]ってrubyのprivate相当なんだな
使いやすいと思うんだけどあんまり話題にならんね

15:デフォルトの名無しさん
14/01/26 16:07:22.54
逆にどこに話題性が?

16:デフォルトの名無しさん
14/01/26 16:58:18.45
「このフィールドはサブクラスにはインスタンスの外からアクセス出来るようにしよう」なんてケースあんま無いんだから
protectedを使う事は大分少なくなるんじゃないかと思うんだが

17:デフォルトの名無しさん
14/01/26 17:58:24.07
いつ使うんだよ

18:デフォルトの名無しさん
14/01/26 18:13:16.32
普通に上位クラスの実装を下位のクラスでも利用させたいとき
普通のprotectedだとインスタンスの外からアクセス出来ちゃう可能性があるけど
そんな意図が無いときはprotected[this]でいいんじゃないかと

19:デフォルトの名無しさん
14/01/26 18:40:37.26
rubyのprivateがprotectedになってるのって
実装の都合上とかで仕方なくそうなってるんじゃなかったか

20:デフォルトの名無しさん
14/01/26 18:58:03.50
Matzもどうしてそうしたか忘れてると言ってた

21:デフォルトの名無しさん
14/01/29 15:13:57.27
ArrayとListを比べると生成時に使うコストがListのほうがはるかに小さいことはわかったんだけど、他はどうなんですかね。
調べてもよくわからないので教えてください。

22:デフォルトの名無しさん
14/01/29 15:16:28.04
ListとSeqの使い分けについて、誰か語ってくれ。

23:デフォルトの名無しさん
14/01/29 15:17:57.91
Scalaのコレクション周りは秘境

24:デフォルトの名無しさん
14/01/29 17:24:34.66
canbuildなんとかを理解したと思ったら翌日には忘れてる

25:デフォルトの名無しさん
14/01/29 17:30:52.62
Listは不変だから部分が共有されるからArrayより速いの?
それとももっとローレベルの話ですか

26:デフォルトの名無しさん
14/01/29 18:44:53.67
可変Listは?

27:デフォルトの名無しさん
14/01/29 20:04:22.48
Listはリンクリストだから固定長かつ不変の時は一般にメモリ消費も速度もArrayBufferに劣る

28:デフォルトの名無しさん
14/01/29 21:06:56.37
Arraybuffer使っときゃいいの?わけわからん

29:デフォルトの名無しさん
14/01/29 21:24:08.50
>>22
関数の引数は基本全部Seq型にしてる
でも戻り値の型もSeqになってしまって、元々の型情報が失われるのは不便
canbuildfromで頑張れば何とかなるみたいだが俺の頭では理解不能

30:デフォルトの名無しさん
14/01/29 21:28:42.65
URLリンク(docs.scala-lang.org)
読んどいて損はない

31:デフォルトの名無しさん
14/01/29 21:38:32.74
コレクション+わかりやすく豊富なコレクションメソッド+第一級関数=最強

32:デフォルトの名無しさん
14/01/29 21:43:22.63
.filter()にブール型の関数を渡すというのは割と衝撃的だった

33:デフォルトの名無しさん
14/01/30 02:47:48.00
言語設計者の意図をくめば、ListよりもSeqを使うようにした方がいい。
何故なら、名前が1文字短いから。
ユーザにどんどん使って欲しいからこそ、SequenceでなくSeqにしたに違いない。

34:デフォルトの名無しさん
14/01/30 15:31:15.24
Scalaを学ぶには、言語設計者の気持ちを理解しなければならない…!!

35:デフォルトの名無しさん
14/01/30 16:39:54.35
actorオブジェクトのフィールドにスレッドセーフじゃないもの持たせても大丈夫?
java.sql.Connectionなんだけど
insertに結構時間かかるから非同期にやろうとしてるんだけど

36:デフォルトの名無しさん
14/01/30 19:36:01.73
自分が気を付けてれば問題ない
処理速度とかは知らんけどな
メッセージで送るのはイミュータブルなのがいいよ

37:デフォルトの名無しさん
14/01/30 21:45:28.59
> To successfully use Scala, you need to research the language
> and have a very strong opinion on which parts are right for
> you, creating your own definition of Scala, the good parts.
Scalaを上手く使うには、Scalaの良いパーツを自分で定義しないといけない

38:デフォルトの名無しさん
14/01/30 21:47:32.52
何だその訳w

39:デフォルトの名無しさん
14/01/31 00:09:29.86
scalaってもっとマシな構文にすりゃ流行ってたんだけどね
javaとrubyをセンスのないバカが混ぜて作りあがったカオスがscala

40:デフォルトの名無しさん
14/01/31 00:55:39.95
>>37
マルチパラダイム言語をうまく扱うには、
領域に合った適当な部分言語を考えておかないといけないんだけど
でも結局人のコードを読むことを考えると、言語全体を把握しておかないとダメっていう辺りは
C++と似たような状況になるのかなあと

C++の場合はマルチパラダイムに加えて互換性の制約があるからもっと難しいはずで
そういう意味ではScalaはまだマシだとは思うが

41:デフォルトの名無しさん
14/01/31 01:10:31.63
URLリンク(www.scala-lang.org)
言語仕様だけで200ページとかどんなけなんだよ…
これ、ライブラリ抜きなんだぜ?

Scalaはただでさえ仕様がオバケなのに、その上
自由度が高すぎてカオスになりやすいRuby系の文法だからもう無茶苦茶

42:デフォルトの名無しさん
14/01/31 01:41:01.43
scala始めようと思ったけどひき返そうかな。こんなぼくにはpython辺りがよいでしょうか?

43:デフォルトの名無しさん
14/01/31 01:53:15.49
プログラミングから引き返せ

44:デフォルトの名無しさん
14/01/31 02:05:00.67
SQL>PHP>Java>Ruby>Python>c>>scala

45: ◆QZaw55cn4c
14/01/31 02:12:13.20
>>44
C++はどこ?

46:デフォルトの名無しさん
14/01/31 02:15:01.75
URLリンク(docs.oracle.com)
200ページでオバケなら670ページあるjavaはどうなっちゃうの?

47:デフォルトの名無しさん
14/01/31 06:43:38.37
そもそも言語を選ぶ時に仕様書のページ数なんて気にする人間はほとんどいない

48:デフォルトの名無しさん
14/01/31 08:55:55.89
CやC++も大概だし、Schemeの倍って考えると意外と小さいな

49:デフォルトの名無しさん
14/01/31 10:06:40.32
仕様書が少ない!じゃあこの言語をを使おう!って人間がこの世にいるとは思えないんだが

50:デフォルトの名無しさん
14/01/31 10:39:08.25
だっておまいらがページ数で脅かすんだもん。

51:デフォルトの名無しさん
14/01/31 12:04:13.46
し、仕様書オバケが出たー!

52:デフォルトの名無しさん
14/01/31 13:40:21.82
>>42
引き返すなら今のうちだぞ…

53:デフォルトの名無しさん
14/01/31 22:47:04.73
scalaで自分が作った関数をprintln()などのように何もせず使えるようにするにはどうすればいいですか?

54:デフォルトの名無しさん
14/01/31 22:56:12.13
何もせずっていうのがちょっとひっかかる言い方だけど
パッケージオブジェクトに置くか、もしくは
例えばobject A { def println() = {略} }って定義ならimport A._とかimport A.printlnすればいいよ

55:デフォルトの名無しさん
14/01/31 23:12:18.91
ありがとうございます。

56:デフォルトの名無しさん
14/02/01 00:27:21.23
前スレにあったeclipseのコンパイル早くなったというのあったけど、intelijやsbtにもネタがあるらしい

sbt0.13.2-M1の新しいインクリメンタルコンパイル試したら素晴らしい結果がでた
URLリンク(d.hatena.ne.jp)

IntelliJ IDEA 13.0.2の新しいScalaコンパイラ – 最大で25%高速化
URLリンク(blog.jetbrains.com)

57:デフォルトの名無しさん
14/02/03 00:35:27.34
scalatra使ったwebアプリをeclipseで開発したいけどどうしたらええの

58:デフォルトの名無しさん
14/02/03 01:17:42.53
URLリンク(www.scalatra.org)

59:デフォルトの名無しさん
14/02/03 03:03:43.51
Scala IDEは、いつになったら、呼び出し元一覧とか出せるようになるの?

60:デフォルトの名無しさん
14/02/05 21:35:39.76
お前らケース文教えて
それか、vipにプログラミングスッドレ立てて
case classの変数マッチ case Class(1, a, b)みたいのって
どう実装されてるの?
冗長な引数があったらダメなの?例えば、角度で370度と10度は同じ意味ですみたいな

61:デフォルトの名無しさん
14/02/05 23:03:08.88
ガード式使えばいけるやろ。
case figuare(_, angle) if angle ==10 || (360 - angle) == 10
とか

62:デフォルトの名無しさん
14/02/05 23:08:38.88
angle % 360 == 10 二番目の条件はこうだったわ

63:デフォルトの名無しさん
14/02/05 23:15:49.08
常にそういう性質持たすならunapplyを自分で実装するか

64:デフォルトの名無しさん
14/02/06 18:27:54.34
身も蓋もない言い方をするとそんな入力値は無効だな。前持って正規化すればいいんじゃないのか。(そういうことではない)

65:デフォルトの名無しさん
14/02/06 21:58:27.96
並列コレクションが有効な場面と無効な場面がよくわかりません
例えば、元々あるコレクションに対する演算ではどのようなものが高速になるのですか?
ソートなどでは意味がありませんよね?

66:デフォルトの名無しさん
14/02/06 22:39:23.33
並列コレクションが有効と確信できる場合以外は無駄だと思った方が良いよ

67:デフォルトの名無しさん
14/02/06 23:02:34.41
並列コレクションってそんな難しい概念かぁ?
何でこんな質問が来るんだろう

68:デフォルトの名無しさん
14/02/07 00:24:27.79
>>65
並列コレクションはコレクションに対する演算を並列化するんじゃない
foreachを並列実行する、ただそれだけ
各要素に対して完全に独立した処理を行うのに使う

69:デフォルトの名無しさん
14/02/07 00:30:25.95
C#/VBのParallelEnumerableと全く同じ概念だからそっちの情報を参照した方が分かりやすいんじゃないか
あっちは変に気取ってないからな

70:デフォルトの名無しさん
14/02/07 01:20:52.80
並列コレクションのどこに気取る要素があるんだよ

71:デフォルトの名無しさん
14/02/07 01:33:57.50
どうでもいいことにいちいち新しい名前を与えたがる
それで覚えることが増える。凡人のやること

72:デフォルトの名無しさん
14/02/07 02:43:44.89
actorモデルが一般化されたりするのかな
オブジェクト指向m9(^Д^)プギャーみたいな

73:デフォルトの名無しさん
14/02/07 04:59:25.39
Actorって、今までスレッド使ってた箇所全てで、Actorに置き換え可能なの?

74:デフォルトの名無しさん
14/02/08 00:00:31.32
>>73
可能だけどループは再帰で置き換え可能ってのと一緒で
メンタルモデル的なのが違うから置き換わらないと思う

75:デフォルトの名無しさん
14/02/08 04:42:10.92
書き込むスレが不適切かもしれませんが御教授ください。
失敗する可能性のある関数failable: A ⇒ Option[A]があり、
それを最初の引数x: Aから漸化式のように連結させ、
List(failable(x).get, failable(failable(x).get).get, failable(failable(failable(x).get).get).get, ...)
と任意の回数*もしくは失敗するまで*続かせるリストを作る関数はどのように定義すればよいのでしょうか。
末尾再帰やscalazのKleisliを利用したreduce(>=>), Iteratorの実装なども考えましたが、いまいちどう書けばよいのか分かりません。
この場合どのように書くべきでしょうか?

76:_uy2.1p0
14/02/08 10:30:30.63
rubyなら簡単に出来る

def ary n , h
  return h if n == 0
  ary n-1 , ->{ h.call }
end

p a = ary( 3 , ->{ "a" } )

p a.call

77:デフォルトの名無しさん
14/02/08 12:18:59.01
>>75
逆順のリスト作って最後に反転させるような書き方なら普通に書けない?

78:デフォルトの名無しさん
14/02/08 12:39:53.03
>>75
Streamでやれば?
def failable(x: Int) = Option(x + 1)

def hoge(x: Int): Stream[Int] =
 failable(x) match {
  case Some(r) => r #:: hoge(r)
  case None => Stream.empty
 }

hoge(0) take 5 foreach println

79:デフォルトの名無しさん
14/02/08 13:21:52.98
>>75
Itarator版

def f[A](a: A)(failable: A => Option[A]): Iterator[A] =
 Iterator.iterate(failable(a))(_.flatMap(failable)).takeWhile(_.isDefined).map(_.get)

80:デフォルトの名無しさん
14/02/08 14:05:48.12
>>75
Scalaz

import scalaz.std.stream._
import scalaz.syntax.id._

def f[A](x: A)(failable: A => Option[A]): Stream[A] = unfold(x) { f(_).map(_.squared) }

81:80
14/02/08 14:34:11.94
f(_) は failable(_) の間違い

82:デフォルトの名無しさん
14/02/08 14:37:25.47
scalaz勉強しようと思ったらやっぱり公式ドキュメントとソース眺めるくらいしか方法ない?

83:デフォルトの名無しさん
14/02/08 14:40:29.14
ScalazはHaskell勉強したほうが早いのでは

84:デフォルトの名無しさん
14/02/08 14:51:37.60
>>82
独習Scalazは?
URLリンク(eed3si9n.com)

85:デフォルトの名無しさん
14/02/08 14:55:57.16
scalazって何?
scalaとはまた違うの?

86:デフォルトの名無しさん
14/02/08 14:57:51.02
scalazっていうただのScalaライブラリの名前だよ

87:デフォルトの名無しさん
14/02/08 14:59:07.72
へー、何か凄いんです?

88:デフォルトの名無しさん
14/02/08 17:11:24.29
ちょっと便利な関数とかいろいろ詰め合わせましたみたいな感じのライブラリ

89:75
14/02/08 18:25:53.11
みなさんありがとうございました。
>>78,79,80を見て勉強しようと思います。

90:デフォルトの名無しさん
14/02/09 17:23:45.54
スカラ座

91:デフォルトの名無しさん
14/02/11 19:44:29.04
class A protected ()
object A { def make(): A = new B }
class B protected () extends A
これできないけどなんでなの?コンパニオンオブジェクトからコンストラクタにアクセスできない?

92:デフォルトの名無しさん
14/02/12 12:31:57.59
scalax.io って、もう終わってるって事でいいの?

93:デフォルトの名無しさん
14/02/12 14:53:48.87
そもそもscalaが(略)

94:デフォルトの名無しさん
14/02/12 15:31:52.76
始まってすらいないから!

95:デフォルトの名無しさん
14/02/12 15:37:48.64
始まってもないのに終わった言語ということか

96:デフォルトの名無しさん
14/02/12 16:10:32.58
>>91
基本コンストラクタをprotectedにしたんならB自身とそのサブクラスからしかnewできんよ
object Aとclass Bは何の継承関係にもないじゃん?

97:デフォルトの名無しさん
14/02/12 16:27:06.84
URLリンク(www.slideshare.net)
これakkaみたいにscala本体に取り込まれないかな

98:デフォルトの名無しさん
14/02/12 16:50:57.83
結局、I/Oは、どのライブラリ使えばいいんだよ?

99:デフォルトの名無しさん
14/02/12 17:16:36.98
javaのCommonsIO

100:デフォルトの名無しさん
14/02/12 17:27:34.99
他にもJavaから引っ張ってきたほうがいい、そうせざるを得ない機能ってある?

101:デフォルトの名無しさん
14/02/12 18:14:10.17
scala製ライブラリはまだ数が少ない
文字コード判定ライブラリとかjavaのものしかない

102:デフォルトの名無しさん
14/02/12 18:20:01.82
暗号関係とかDBとか

103:デフォルトの名無しさん
14/02/12 18:57:22.78
>>92
2年間放置されてる?

今は、Java 7 NIO file APIベースがいいと思うんだけど

104:デフォルトの名無しさん
14/02/12 19:17:07.43
>>103
URLリンク(github.com)
こっちは最後のコミットが6ヶ月前になってるけど

105:デフォルトの名無しさん
14/02/13 17:33:21.46
javaライブラリの知識はもしscalaが消滅しても無駄にならないので
枯れたjavaライブラリをなるべく使うようにしている

106:デフォルトの名無しさん
14/02/16 12:56:53.81
こんにちは。ここで質問させてください。
外部から提供されるクラスAがあり、それをこちらのクラスBが使用している状況です。
さて、クラスAはネットワークライブラリの一部なため、動作が複雑でテストに不便です。
テストのためdependency injectionの手法を使い、クラスAをダミークラスDummyAに置換したいと考えています。
まず継承を使おうかと考えたのですが、そもそも外部のクラスは継承させることができません。(1)
(1)
trait ALike { ... } // 必要な機能をまとめたトレイト
class A extends ALike ... // ←外部クラスだから無理
class DummyA extends ALike...

def task(a: ALike) = ...

そこで、あらゆるクラスを横断的に処理できる型クラスを導入してみようかと思ったのですが、
インターネットで調べてみたところ、*型クラスが実装されている型を引数に取る処理しかできない*(2)ような書かれかたがなされています。
(2)
implicit class HogeHoge extends TypedClass[A] {
def hogehoge(x: A) = ... // ここ。hogehoge(message: String)で受けて内部でAを使いたい
}

この場合どのように書けばよいのでしょうか?こういう用途では型クラスは使えないのでしょうか?
質問が分かりにくくて申し訳ありません。簡潔に書くと、
* importした外部のクラスと内部のダミークラスを交換し、クラスBのコンストラクタ経由でのDIを行いたい
* 具体的には副作用のある「ネットワーク上のホストをあるリストに追加する処理」をするクラスを「リストに追加したふりをしてくれる自前のクラス」に交換したい
よろしくお願いします。

107:デフォルトの名無しさん
14/02/16 14:19:35.67
URLリンク(eed3si9n.com)
主に調べたのって、scalaでDIする方法かな?

108:デフォルトの名無しさん
14/02/16 14:21:53.97
URLリンク(lab.synergy-marketing.co.jp)で-di-effective-scala-lift-のdi編
URLリンク(togetter.com)
テストと結び付いてると、そのまま参考になるんだけどね。

109:デフォルトの名無しさん
14/02/16 19:16:09.65
トレイトALikeを実装したAdapterをAに噛ませれば
AdapterとDummyAが交換可能になるはず

110:デフォルトの名無しさん
14/02/16 21:09:39.96
真面目な奴ほど、一年に一つ新しいプログラミング言語を覚えよう、とかいうのを
真に受けちゃって、やっぱり今は関数型言語だよね、Scalaって奴がなんかすごいらしい、
とオーム社の買って、カリー化あたりで良い加減面倒になって、新しい発想が身に付いた、
とか勘違いしてるけど、結局やってる仕事や書いてるコードに何も変化はありませんでした、
となってしまうのかな?

111:デフォルトの名無しさん
14/02/16 21:30:52.91
ふと思い出したけど、カリー化ってあんまり使われてないな。
他の関数型言語と違って、括弧分けるところがイケてないからか。

112:デフォルトの名無しさん
14/02/16 21:46:09.98
あれ?カリー化する関数みたいなのなかったっけ?
単純にJavaとの相性がよくないからだけな気がする。
カリー化するとJavaから使いにくいから。

113:デフォルトの名無しさん
14/02/16 22:22:34.06
昔から関数型入門すると、null禁止、代入禁止、副作用を分けるのが身について、
手続き型に戻っても効果があるとは言われてたので、いいんじゃないかな。
ギプスとしては、ocamlやhaskellのがいいかもしれないが、
scalaならそのまま使えるというのがあるのが悩みどころ

Tumblerとドワンゴはphpからscalaいったみたいだけど、phpプログラマの生い立ちが違いそうだね。
URLリンク(www.slideshare.net)
URLリンク(2012.8-p.info)
何にせよ技術レベル底上げするのに、会社として講習会やるべきなんだろうな。

話が逸れるけど、playのscalaテンプレートは、デザイナーフレンドリーじゃないという評価だね。
URLリンク(tech.furyu.jp)
もともと.net MVCのrazerが元になってるはずだけどそっちでもなんだろうか。
テンプレートエンジンは構造制御に絞るべきというのもよく聞く。

114:デフォルトの名無しさん
14/02/16 22:34:54.17
そんな個人的な意見を取り上げられてもな
ホスト言語のコードを直接埋め込むタイプなだけだ
専用言語ならデザイナーフレンドリーなのか?
そんなもん馬鹿げた思い込みだ

115:デフォルトの名無しさん
14/02/16 22:56:29.62
> 私が英語を読めていないのかもしれないけど、個人的にはこの感覚はあまり共有できていない。表も Scala でもいいんじゃないかと思う。

これと同意見なのかな?

116:デフォルトの名無しさん
14/02/16 22:58:15.14
カリー化より部分適用の方が簡単だから使われてない感じがする

117:デフォルトの名無しさん
14/02/16 22:59:47.26
そういや、play1はGroovyテンプレートだったけど、ドワンゴのは別物なのかな?

118:デフォルトの名無しさん
14/02/16 23:40:34.22
何人かそれなりにScalaに熟練した人に話を聞いたけど、
Play標準のテンプレートエンジンはだいたい評判が良くない気がする

自分で使ってみた感触としては、@の挙動がわけわからんというか、
あんまり思い通りに書けないというか……

119:デフォルトの名無しさん
14/02/17 14:13:08.98
spring mvcより、playの方がメジャーなの?

120:デフォルトの名無しさん
14/02/17 23:12:45.43
Scalaの時点でアレなんだから自分が気に入ったのを使え

121:デフォルトの名無しさん
14/02/17 23:23:13.99
再帰呼出をしないメソッドでも、最後の行以外での途中returnは推奨されないんですか?

122:デフォルトの名無しさん
14/02/18 02:53:45.50
>>121
途中のreturnが必要なほど長いメソッドはなるべく書かない

123:デフォルトの名無しさん
14/02/18 07:39:38.77
>>122
長さって関係ありますか?
def hoge(): Moge = {
if (isA) {
return a
}
if (isB) {
return b
}
return o
}

124:デフォルトの名無しさん
14/02/18 07:45:49.92
>>122
というような、視野を短く切るためのreturnです
途中送信してしまった

125:デフォルトの名無しさん
14/02/18 07:59:41.70
def hoge(): Moge = if (isA) a else if (isB) b else c

126:デフォルトの名無しさん
14/02/18 08:54:09.55
それreturnいらんやろ

127:デフォルトの名無しさん
14/02/18 08:58:10.07
手続き型プログラミングと関数型プログラミングの違いかな

個人的には関数型プログラミング言語なんだから関数っぽく書きたいが、
if式の連鎖は分かり難いのでこんな感じにしてる:
def hoge(): Moge = (isA, isB) match {
  case (true, _) => a
  case (_, true) => b
  case _ => o
 }
拡張性が要るならListにする

128:デフォルトの名無しさん
14/02/18 09:00:48.92
「視野を短く切る」とか言ってる時点で実際はもっと長いメソッド書いてるんじゃね

129:デフォルトの名無しさん
14/02/18 09:05:36.62
>>127
むしろifより読みづらいし書きづらいんじゃないかw
条件の数が多くなると大変だし

どうせmatchを使うならこれでどうか? Lisp系のcondみたいな感じで
() match { case _ if isA => a;case _ if isB => b; case _ => o }

130:デフォルトの名無しさん
14/02/18 18:37:49.57
うん、それは無い

131:デフォルトの名無しさん
14/02/18 19:07:58.15
>>128
>>124です
Java畑ですが「1メソッド20行以内」はなるべく守ってますよ
だから先の例のifブロック内が複雑だとしたら、1ブロック毎にメソッドに切り出したりしますよ
もし2択で済むなら三項演算子使いますよ
他にはなんだろう、ネストを浅くしたいとかもあります

周りに関数型言語やってる人いないし、ベストがよく分かんないです
ループを末尾再帰で考えるってのは、出来てきた気がします

132:デフォルトの名無しさん
14/02/18 19:42:58.66
ラムダ関数をよく使うので
どこへのreturnなのかがわかりにくいので使いたくない

133:デフォルトの名無しさん
14/02/18 20:54:21.97
むしろreturn非推奨って誰が言い出したの?

134:デフォルトの名無しさん
14/02/18 21:48:31.97
関数型プログラマ

135:デフォルトの名無しさん
14/02/18 22:06:39.58
実際ほとんど使わないよねreturn

136:デフォルトの名無しさん
14/02/18 23:07:46.98
>>131
関数型言語ってHaskellしかまともに触った事がないんだけれど、
Haskellではifは関数なので必ずelseが必要だったから、それと同様に必ずelse書いてる。

あってる間違ってるは分からないけど、ifにelse付けてる限りはreturn要らない感じはする。
あと単純なifでもついついmatch使ってしまう。

137:デフォルトの名無しさん
14/02/18 23:11:14.81
Haskellのifは関数じゃないぞ

138:デフォルトの名無しさん
14/02/18 23:38:58.36
純粋関数ならいいが、副作用の後のreturnを省略するのは
マジで気持ち悪いしわかりにくいからやめてほしい

139:デフォルトの名無しさん
14/02/20 21:36:17.45
ifは関数というよりも演算子かなぁ

140:デフォルトの名無しさん
14/02/21 23:40:46.05
まあ演算子も関数だから間違ってないね

141:デフォルトの名無しさん
14/02/22 02:10:12.27
Haskellのifは構文であって関数でも演算子でもないぞ

142:デフォルトの名無しさん
14/02/22 02:50:16.56
Haskell文法的には式扱いだったはず
意味論的にはλ計算がベースだから全部関数だーとか言い始めたら
まあそうかもしれないけどあんまり実入りのない議論に……

143:デフォルトの名無しさん
14/02/22 15:01:41.45
statmentではなくexpressionなので個人的には文より式の方がしっくりくる

144:デフォルトの名無しさん
14/02/24 18:17:06.06
C、Objective-C、ruby、pythonをやってきたんだが
javaやらずにscalaって難しい?
入門書いくつかチラ見したがjava経験者向けに説明してる感じで焦った
java未経験者におすすめの本とかないかな?

145:デフォルトの名無しさん
14/02/24 19:06:55.25
そんだけやってきたならJavaなんかサンプルコードをしばらく眺めたら十分理解できるはず
悩んでる暇があったら一時間で十分だ
身構えるようなことではない

146:デフォルトの名無しさん
14/02/24 19:08:35.56
Javaをやってないならscalaなんか何一つうれしくないだろ

147:デフォルトの名無しさん
14/02/24 19:24:34.03
遅くないRuby感覚の言語としては価値がある
まあ結局何をするにもJavaの情報に頼るから、Javaが読めないとまず何も作れないし
Java由来の妙な部分が受け入れられなくてクソ言語に感じるだろうね

148:デフォルトの名無しさん
14/02/24 19:53:40.03
コップとかならJava知らんでも理解できると思うけど、いざ運用しようとなると無理だろうな

149:デフォルトの名無しさん
14/02/24 20:33:37.24
>>144
CやらずにObjective-Cって難しい?

150:デフォルトの名無しさん
14/02/24 21:02:08.44
>>149
Objective-Cでもポインタからは逃げられない

151:デフォルトの名無しさん
14/02/24 21:46:00.48
java知ってるほうが嬉しいよね
javaではくっそめんどくせぇのにscalaだと楽だなって感じで

152:デフォルトの名無しさん
14/02/24 21:50:19.81
javaからそのままscalaに行くとそうでもないけど、
途中にCとかhaskellとかが入ると、scalaの起動の遅さにイライラする

153:デフォルトの名無しさん
14/02/24 23:25:29.72
scalaの起動って何のこと?

それはそうとjava知ってるとscalaに限らず大抵の言語が素晴らしく感じる
でも今からjavaを知ることになる人は不幸だと思う

154:デフォルトの名無しさん
14/02/24 23:27:39.12
scala と scalac と scalaのload が遅い

155:デフォルトの名無しさん
14/02/24 23:33:50.06
ScalaはJava使いにとっては最高の関数型言語なんだと思う
近い将来、ScalaがJavaを置き換える存在になるという言葉も、
その可能性を(個人的には)認めたい
ただし逆の見方をすれば、Javaを使っていない人から見ると
関数型言語としてのScalaは魅力に欠ける

156:デフォルトの名無しさん
14/02/25 00:05:13.59
javaはマジでクソ言語。
c#とか似てるって言われるけどjavaと同じって言われるなんてc#が可哀そう

157:デフォルトの名無しさん
14/02/25 00:08:52.42
多分関数型言語で一番無難なのはocamlな気がする
構文は冗長だけどhaskellよりはだいぶ敷居が低いと思う
個人的にはschemeが覚えること少ないし簡単だと思うんだけど
人に進めてもlispってことで拒否感出す人も多いからな。。

158:デフォルトの名無しさん
14/02/25 03:37:19.03
ocamlは構文がフランスすぎるから駄目

159:デフォルトの名無しさん
14/02/25 06:58:43.43
schemeは関数型言語っていうかlispだろ

160:デフォルトの名無しさん
14/02/25 08:34:36.88
ocamlはutf-8が標準じゃないのできつい。
GUIも作りにくいし
実用をためらう

なのでocaml使うならF#だわ

161:デフォルトの名無しさん
14/02/25 18:46:57.02
f#はライブラリとideとguiの作りやすさが関数型言語だと最強レベルになりそうだけど
unix環境じゃ流行らなそうなのが気はする

162:デフォルトの名無しさん
14/02/25 22:39:01.27
unix環境で実用を考えるならScalaで満足している。
windowsでもScalaで満足しているけど。

ToyならHaxeかなぁ
使ってみたことないけど

163:デフォルトの名無しさん
14/02/25 23:44:41.70
>>161
ありがとう!
ウチはMacだが早速F#拾ってきた。

Scalaは1.7,1.8のJavaでトラブルだし
そろそろ見切り時かもだった。

164:デフォルトの名無しさん
14/02/26 00:04:08.46
ClojureがML系だったらなあ
いくら闇鍋ScalaよりずっとクリーンでもLispじゃ普及は望めないよね

165:デフォルトの名無しさん
14/02/26 00:20:37.40
lispはいい言語だけどバカに使わせるとゴミみたいなコードになる
でもポール・グレアムみたいなlispのすごい人は少数のハッカーでやるのが良いって言ってるし
clojureの開発陣も門戸広げてバカが来ることなんて望んでないんだろ

166:デフォルトの名無しさん
14/02/26 20:25:54.38
Lispは再起の勉強にはイイ言語だけれども、
状態遷移の塊でしかないという現実を反映していない

167:デフォルトの名無しさん
14/02/26 21:54:46.34
なんだそりゃ……

168:デフォルトの名無しさん
14/02/27 00:34:17.20
こいつはPure Lisp原理主義者だ!

169:デフォルトの名無しさん
14/02/27 00:45:53.34
LISPは解散しました

170:デフォルトの名無しさん
14/02/27 00:48:24.22
破壊的代入のできるLispはともかく、
代入できない純粋関数型のHaskellとかでも状態遷移は表現できるんだよー

171:デフォルトの名無しさん
14/02/27 00:57:32.05
時間積分を使うシミュレーション(ゲーム含む)を関数型で作るなら
やっぱり漸化式の形で書くことになるの?
それだともうほとんど関数型の意味ないね

172:デフォルトの名無しさん
14/02/27 01:02:18.05
漸化式って再帰ってことか?
foldで抽象化できるじゃん

173:デフォルトの名無しさん
14/02/27 01:08:09.92
>>170
状態がないのに状態遷移が表現できるってのは
哲学的というかメタ的というか
日本語でも英語について語ることができますみたいな
そりゃそうかも知れないけど
日本語で語られる英語って英語なの?みたいな

174: ◆QZaw55cn4c
14/02/27 02:57:24.09
つ再帰関数、不動点コンビネータ
すべての状態遷移は再帰で表現できますよ~ペアノにより自然数の定義とか

175:デフォルトの名無しさん
14/02/27 07:27:55.31
>>173
あたかもプログラミング言語上は
状態を書き換えていないかのように振る舞うというだけであって、
実際上は、状態にあたるメモリを書き換える代わりに新しい所に書いてるだけ

なにしろ最終的には、機械語の命令列とメモリの読み書きにしないと計算機上で動かんので、
この手の変換はJVMも含めてありふれてる
自然言語的な混乱とはぜんぜん違う話だと思う

176:デフォルトの名無しさん
14/02/27 08:17:39.44
でそれが関数型なのか?ってことでしょ
そういう理屈なら全ての手続き型は関数型と見做せることになるよ

177:デフォルトの名無しさん
14/02/27 09:42:55.10
それが「モナド」。(純粋)関数型言語の上に、手続きというモデルを再構築したもの。

178:デフォルトの名無しさん
14/02/27 18:44:55.34
オブジェクト指向の機能を使ったからオブジェクト指向だ!
とか抜かしてるよくいるバカと一緒だな

179:デフォルトの名無しさん
14/02/27 19:50:58.91
Scalaだと関数型意識してクラスもイミュータブルにするん?
面白そうだけどクラスタ構成するような規模じゃないと意味無さそう

180:デフォルトの名無しさん
14/02/27 21:10:43.11
>>179
case class って書くと勝手にイミュータブルになるしあまり気にした事がないなぁ。
凄い人たちはちゃんと気にしてるんだろうけど。

181:デフォルトの名無しさん
14/02/27 23:09:49.69
モナドはオタク的自己満足のために余分なレイヤーを重ねているだけという印象が強いな

ミュータブルはオブジェクト指向、イミュータブルは関数型でまとめたocamlの方が素直に思える。

182:デフォルトの名無しさん
14/02/27 23:33:27.42
sbtにcache proxyを設定したくて、LAN内に置いたnexusやArtifactoryを設定してみるんだけど、
全然うまく行かない。
下の記事の通りにやっても、中途半端にしか成功しない。
URLリンク(engineering.clever-cloud.com)

いつもJava用のライブラリは、うまく取ってこれるんだけど、Scala用のJARファイル名にバージョン番号が
入ってるようなライブラリがエラーになる。ちゃんと設定出来てる人居る?

183:デフォルトの名無しさん
14/02/27 23:36:59.90
外部の実行ファイルをプログラムに同梱し、その同梱ファイルを実行した結果を取得するということは可能でしょうか?

184:デフォルトの名無しさん
14/02/28 00:58:47.80
何故このスレでそういう質問をするのか謎
他にふさわしい場所いくらでも有るだろうに

実行ファイルをテンポラリに書き出して実行すればいいだけじゃね

185:デフォルトの名無しさん
14/02/28 08:01:02.53
普通に考えてScalaでやりたいからじゃね?
可能かどうかで言うと可能だし、やり方はいくらでもあるけど、
どういう状況でもっと具体的に何がしたくて、
何で詰まってるか分からないとアドバイスは難しいよね。

186:デフォルトの名無しさん
14/02/28 11:48:36.52
おそらくコプロセスの標準ハンドルをどうこうしたいということだろうけど
javaで探したほうが早いな。

187:デフォルトの名無しさん
14/02/28 16:27:37.14
>>113
playは大分前に少し勉強してみただけだから詳しくは言えないが、.netのrazorの場合、vsの補完が強力で@を変に使ったらその場で警告が出るので、razorの文法を理解してなくてもなんとかなる

188:デフォルトの名無しさん
14/02/28 21:11:38.46
禅の心でコーディングすれば、VisualStudioなんて不要

189:デフォルトの名無しさん
14/02/28 22:23:01.43
好き嫌いはともかくVisualStudioのIDEとしての完成度の高さはやっぱすごいと思う

190:デフォルトの名無しさん
14/02/28 23:01:23.15
好き嫌いはともかくJavaの業務系での実績の多さはやっぱすごいと思う

「好き嫌いはともかく」と付ければ何とだって言える
結局人間ってのは好きか嫌いかだ

191:デフォルトの名無しさん
14/02/28 23:10:46.00
自分で作って自分で売るんじゃない限り好き嫌いなんかどうでもいいだろ
生産性の低い言語を使って困るのは客や会社であってプログラマじゃない

192:デフォルトの名無しさん
14/02/28 23:11:32.22
好き嫌いはともかく中国は島国だと思う

ほんと?

193:デフォルトの名無しさん
14/03/01 04:12:48.47
むしろ好き嫌いはともかくとつけると言えること狭くなるような

194:デフォルトの名無しさん
14/03/01 04:58:10.34
このスレは母国語も危うい馬鹿しかいないのか?

>>189において「好き嫌いはともかく」ってのは補助的な役割しか果たしていない。
メインは「すごい」と「思う」だよ。
具体的な数値を提示しなければ何とでも言えるし、評価の指標を設定することすら難しい内容。
それに加えて「思う」の主格がないために「一般的に思われている」との錯覚を与えている。
「好き嫌いはともかく」ってのはそれを強化しているに過ぎない。

好き嫌いはともかく日本の政治家はリーダーシップがあると思う
好き嫌いはともかく地球は太陽系で最も美しい星だと思う
好き嫌いはともかくアキバ系アイドルは可愛いと思う
好き嫌いはともかく2chの運営は優秀だと思う

195:デフォルトの名無しさん
14/03/01 05:12:48.04
主格がないために「一般的に思われてる」との錯覚を与えている(キリッ

196:デフォルトの名無しさん
14/03/01 08:25:09.45
お疲れですねw

197:デフォルトの名無しさん
14/03/01 08:57:58.46
そういう中身の無い議論はHaskellスレで頼む

198:デフォルトの名無しさん
14/03/01 09:50:19.27
haskellスレ荒れすぎて辛い

199:デフォルトの名無しさん
14/03/01 14:57:39.76
junitでscalatraのテストのやり方教えて

200:デフォルトの名無しさん
14/03/01 15:12:38.08
ScalaTest, Specs2, ScalaCheck じゃだめなんだよね。一応確認

201:デフォルトの名無しさん
14/03/01 15:16:56.66
junitやないとあかんのや
馴染みのある奴やないと嫌やねん

202:デフォルトの名無しさん
14/03/01 15:51:59.97
ツール連携ができなくて無理とかそういうんじゃなくて
馴染みがあるとかそういうレベルの話なの
むしろよくその状態で Scalatra や Scala に手をだそうとしたなと感心してしまう

203:デフォルトの名無しさん
14/03/01 16:04:11.82
むしろ実在するかも疑わしい人物像を作り上げて感心してしまう
202の想像力に感心してしまう

204:デフォルトの名無しさん
14/03/01 16:25:42.02
というかJavaとの親和性が魅力のScalaのスレで
「馴染みがある」を軽視する発言はどうかと

205:デフォルトの名無しさん
14/03/01 16:32:07.72
>>182
この件、やっと自己解決したよ。

Artifactoryのリモートリポジトリ設定で、"Suppress POM Consistency Checks"をオンにすれば、
Scala用の、パスにコンパイラバージョン番号が入るJARファイルでもエラーにならなくなる。
エラーログは出まくるけど。

206:デフォルトの名無しさん
14/03/01 18:03:55.52
scalaはjavaみたいに書けるけどjavaみたいに書くとダサイとか言われる謎言語だからしょうがないね

207:デフォルトの名無しさん
14/03/01 21:58:59.50
>>204
Javaとの親和性は、1からすべてのライブラリをScalaで作らなくてもいい、段階的にでも移行できるって話だ
すでに Scalatra/Scala と親和性の高い test framework があるのだから、そっち使ったらどうなのってだけだ

208:デフォルトの名無しさん
14/03/02 01:04:16.89
そっち使ったらどうなのって「だけ」で
人を小馬鹿にするからつっこまれたんじゃ?

209:デフォルトの名無しさん
14/03/02 03:02:36.33
まぁでも>201はJavaやってた方が幸せだと思うけど

210:デフォルトの名無しさん
14/03/02 04:30:35.22
Scala extends Java

211:デフォルトの名無しさん
14/03/03 10:32:28.95
eclipseのScala IDEってどれくらい進化してるん?

212:デフォルトの名無しさん
14/03/03 12:29:16.11
>>211
諦めて、 IntelliJ IDEA使うよろし

213:デフォルトの名無しさん
14/03/03 12:36:55.76
>>212
UIが不安定なイメージが・・・

とりあえずJavaソースと混同してもリファクタリングがちゃんと働いてくれるのが理想なんですが

214:デフォルトの名無しさん
14/03/03 13:34:54.47
def using[T <: {def close()}](x:T)(f:T => Unit) =
try { f(x) } finally { x.close() }
こんなのやりたいんだけど構造的サブタイピング使うと遅くなる?

215:デフォルトの名無しさん
14/03/03 16:40:41.40
Structural Subtypingはリフレクションの機能使って実装されてるからその分のコストはかかるよ

216:デフォルトの名無しさん
14/03/03 20:18:26.99
intellijはuiがjavaだからもっさりなんだよな
ネイティブのuiと違和感大きいし

217:デフォルトの名無しさん
14/03/03 20:48:19.97
同じ理由でNetbeansも苦手だわ

218:デフォルトの名無しさん
14/03/03 21:23:46.00
IntelliJはそこまで重くない気がするけど、
文字列リテラルにも補完をかけようとするのか、ガクッと遅くなることはある
あとデフォルト設定だとカーソルが浮くのとか、細かい部分が積み重なって
微妙な不快感につながってるのかも

とはいえ、ベースが売り物なだけあって完成度は高いと思う

219:デフォルトの名無しさん
14/03/03 21:24:19.02
貧弱ゥ、貧弱ゥ

220:デフォルトの名無しさん
14/03/04 21:44:09.36
InteliJはリファクタリングの動作が安定してて良いよね
特にメンバ変数名変えたときに、名前付き引数使ってる部分をちゃんと追従してくれる

でも、名前付き引数って内部ではデフォルトコンストラクタ後にsetter使ってるだけだから
EclipseGroovyではwithで代入するようにすれば良いだけかも

221:デフォルトの名無しさん
14/03/05 10:48:53.85
でもIntelliJはモジュール間(Eclipseのプロジェクト)で
リファクタリング反映してくれないのが

222:デフォルトの名無しさん
14/03/05 17:09:08.19
ルックアンドフィールがおかしい
ファイル選択ダイアログとかJavaでUI作ってるのまるわかり

223:デフォルトの名無しさん
14/03/05 22:15:10.99
IntelliJは、UIはアレだが、実用性が高い。

224:デフォルトの名無しさん
14/03/05 23:33:22.94
プロジェクトの感じ苦手なんだけどみんなはどうなの?
sbtでゴリゴリやってたりするの?

225:デフォルトの名無しさん
14/03/05 23:46:18.84
ScalaはIDEに完全に管理されて補完がバリバリ動いてこそだろ
Scala自体はともかく、Javaのゲロみたいなライブラリを補完や動的チェックなしで使うのは苦行

226:デフォルトの名無しさん
14/03/09 14:35:12.06
現在プログラム板のID制導入の投票を実施中です
よろしくお願いします

プログラム板 強制ID制導入に関する投票スレ
スレリンク(vote板)

227:デフォルトの名無しさん
14/03/09 16:01:41.71
>>225
マクロ対応してるIDEってあるかな?

228:デフォルトの名無しさん
14/03/10 11:58:02.13
scalatraってservletのラッパーだから
サーブレットの機能も使える?
WEB-INF/web.xmlにフィルタ追加したいです

229:デフォルトの名無しさん
14/03/12 20:41:55.44 WNHX0k15
The outer reference in this type XXX cannot be checked at run time.

この警告ってどういう意味ですか?

230:デフォルトの名無しさん
14/03/13 00:51:32.46 yfVBSL8u
URLリンク(stackoverflow.com)

231:デフォルトの名無しさん
14/03/13 16:17:49.13 j0o71mYX
Play! framework 2.2.3で開発してるけど、リクエストのエンコーディングがUTF-8で決め打ちになっているのが困る。
SJISのリクエストが来ても正しくエンコーディングできない。
リコンパイルするしか対処法はないのかなあ。PaaSとかにデプロイしたいからあまりPlayには手を加えたくない。
たいていのPaaSは標準のPlayしか利用できない。

232:デフォルトの名無しさん
14/03/13 22:56:58.71 jchWpC25
PR送れば?

233:デフォルトの名無しさん
14/03/29 15:15:02.64 iSspUegM
import java.io.File
import java.net.URL
import org.apache.commons.io.{FileUtils, FilenameUtils}
val urlRe = """(?i)h?ttps?://[\w/:%#\$&\?\(\)~\.=\+\-]+\.(jpg|jpeg|png|bmp)""".r
val imgDir = new File("img")
val encoding = "Shift_JIS"
def エロ画像収集(url: String) = {
if (!dir.exists()) dir.mkdir()
val urls = io.Source.fromURL(url, encoding).mkString.split("\n").map(s => urlRe.findAllIn(s).toList).flatten
val fixedUrls = urls.map(s => if (s.startsWith("ttp")) "h" + s else s)

fixedUrls.par.foreach{ url =>
def recur(n: Int): Unit = {
val name = FilenameUtils.getName(url)
val file = new File(imgDir, + name)
try {
if (!file.exists()) FileUtils.copyURLToFile(new URL(url), file)
} catch {
case e: java.io.FileNotFoundException =>
case e: java.io.IOException =>
if (n < 3) {
java.lang.Thread.sleep(3000)
recur(n + 1)
}
}
}
recur(0)
}
}

def test_エロ画像収集() = エロ画像収集("""スレリンク(ascii2d板)""")

234:ver2
14/03/29 15:31:22.62 iSspUegM
import java.io.{File, FileNotFoundException, IOException}
import java.net.URL
import java.lang.Thread
import org.apache.commons.io.{FileUtils, FilenameUtils}
import java.util.concurrent.atomic.AtomicInteger
val urlRe = """(?i)h?ttps?://[\w/:%#\$&\?\(\)~\.=\+\-]+\.(jpg|jpeg|png|bmp)""".r
val imgDir = new File("img")
val encoding = "Shift_JIS"
val count = new AtomicInteger()
def エロ画像収集(url: String) = {
if (!dir.exists()) dir.mkdir()
val urls = io.Source.fromURL(url, encoding).mkString.split("\n").map(s => urlRe.findAllIn(s).toList).flatten
val fixedUrls = urls.map(s => if (s.startsWith("ttp")) "h" + s else s).distinct
fixedUrls.par.foreach{ url =>
def recur(n: Int): Unit = {
val ext = FilenameUtils.getExtension(url)
val file = new File(imgDir, count.incrementAndGet().toString + "." + ext)
try {
if (!file.exists()) FileUtils.copyURLToFile(new URL(url), file)
} catch {
case e: FileNotFoundException =>
case e: IOException =>
if (n < 3) {
java.lang.Thread.sleep(3000)
recur(n + 1)
}
}
}
recur(0)
}
}
def test_エロ画像収集() = エロ画像収集("スレリンク(ascii2d板)")

235:デフォルトの名無しさん
14/03/29 18:32:52.55 H5CN7Obn
>mkString.split("\n")
ここgetLinesでよくね

236:ver3
14/03/29 23:39:16.57 iSspUegM
import java.io.{File, FileNotFoundException, IOException}
import java.net.URL
import java.lang.Thread
import org.apache.commons.io.{FileUtils, FilenameUtils}
val urlRe = """(?i)h?ttps?://[\w/:%#\$&\?\(\)~\.=\+\-]+\.(jpg|jpeg|png|bmp)""".r
val imgDir = new File("img")
def エロ画像収集(url: String) = {
if (!dir.exists()) dir.mkdir()
val urls = io.Source.fromURL(url, "Shift_JIS").getLines.map(s => urlRe.findAllIn(s)).flatten.toList
val fixedUrls = urls.map(s => if (s.startsWith("ttp")) "h" + s else s).distinct
fixedUrls.par.foreach{ url =>
def recur(n: Int): Unit = {
val ext = FilenameUtils.getExtension(url)
val file = new File(imgDir, url.replaceAll("[^a-zA-Z0-9]","") + "." + ext)
try {
if (!file.exists()) FileUtils.copyURLToFile(new URL(url), file)
} catch {
case e: FileNotFoundException =>
case e: IOException =>
if (n < 3) {
Thread.sleep(3000)
recur(n + 1)
}
}
}
recur(0)
}
}

237:デフォルトの名無しさん
14/03/30 22:00:29.19 6sp9d58I
gistでやれ

238:デフォルトの名無しさん
14/04/25 02:10:23.92 gi5f+y0I
「Scala 2.11」リリース、コンパイラの性能強化などが行われる
URLリンク(sourceforge.jp)


あれ?
スレ間違えたかな?
新しいバージョン出たのに、一ヶ月以上投稿されていないぞ。

239:デフォルトの名無しさん
14/04/25 12:04:32.34 gb+da3V7
なんかscalaの人がD社に集まってる?

240:デフォルトの名無しさん
14/04/25 12:11:08.60 vpRHTENH
女子マネ弁当うらやましす

241:デフォルトの名無しさん
14/04/25 13:43:40.85 xYpIBQ/t
女子マネ弁当のせいで逆に朝行かない人もいるし、あれはほんとクソ

242:デフォルトの名無しさん
14/04/25 19:28:32.60 jPmvuOB6
上鳥取弁当

243:デフォルトの名無しさん
14/04/26 10:58:21.58 KWFffi1l
ドワンゴってキーワード出しただけで、もうScalaと違う話になってる、、、。

でも、ドワンゴがScalaを本格採用したら、この状況も変わるかもね。
逆に、TwitterがScalaを捨てたら、Scalaは本当にオワコン。

244:デフォルトの名無しさん
14/04/26 12:18:26.98 xctJXi+r
ドワは大嫌い

245:デフォルトの名無しさん
14/04/26 14:36:26.65 hLRLrFim
派手に大爆死するか静かに息を引き取るかの違いでしか無いな
とっくにオワコン

246:デフォルトの名無しさん
14/04/26 15:17:49.23 rVQYbF8V
はいはい

247:461 ◆Of8OpFdQADOA
14/04/29 04:54:14.07 yHrjP2Pq
Spray.ioの話題はここでいいですか?
P2P掲示板を作ってるスレから来たものです。
実装につまづいている部分があってそれを相談しに来ました。
ドキュメントや例が少なくて苦心しています。
もし他に適当なスレがあったら誘導お願いいたします。

248:デフォルトの名無しさん
14/04/29 11:24:25.48 vcN4iS4p
ここでいいよ

249:デフォルトの名無しさん
14/04/29 14:07:55.92 fqLJb+0P
URLリンク(groups.google.com)
一日に10件近く新規投稿あったりするんだな。スゲー

250:デフォルトの名無しさん
14/04/29 14:39:40.80 eBu7xOA+
せっかくだから、Spray.ioがPlayよりどのへんで優れてるのか、実感を語ってくれ。

251:デフォルトの名無しさん
14/04/29 16:49:53.41 pvgpWpOe
>>244
奇遇ですね
私も嫌いです

252:デフォルトの名無しさん
14/04/29 19:23:09.80 fqLJb+0P
Play2かSprayに移るって話出てくるのは、WebAPIぐらいじゃないかな。
Sprayって非同期RPCとかのレイヤーなんじゃなかったっけ?

最近は、Finagleの上にというのもあるみたいだけど。
URLリンク(github.com)

253:461 ◆Of8OpFdQADOA
14/04/30 00:32:53.40 m2hxDZhX
ありがとうございます。ではここでお話させていただきます。
spray-clientとspray-canで、ケースクラスをJSONに自動で変換して送受信しようという計画です。
具体的なJson-supportの使い方が分からずに途方に暮れています。
試しに書いてみたコードでは、MarshallerとUnmarshallerが足りないなどのコンパイルエラーが出ます。
手動でStringを送受信してその都度JSON<->ケースクラスで変換するほうが良いのでしょうか?

参考
URLリンク(spray.io)

254:デフォルトの名無しさん
14/04/30 03:56:56.99 TLgfnSfz
試しに書いてみたコード
とscalaとsprayのバージョンはいくつなのか見せて

255:461 ◆Of8OpFdQADOA
14/04/30 20:07:03.12 m2hxDZhX
遅くなりました。
今現在なんとか動かせるようになったので、質問は取り消すことにします。
またその方法やコードについてはブログなどに纏めて後で公開したいと思います。
お騒がせしました。

256:デフォルトの名無しさん
14/05/05 03:35:07.02 3Ni5KvUG
半年ぶりくらいに scala をやろうと思って
sbt とか giter8 とか落としなおしてたんだけど、
Typesafe が 便利なものだしてたんだな。
今はコレが主流なん?

257:デフォルトの名無しさん
14/05/05 03:48:44.44 fiA0HUlx
sbtが標準のプロジェクト管理ツールになってるとおもう。intellij ideaとかでも、プロジェクトが認識される。
giter8はプロジェクトのテンプレート展開するツールだけど、イマイチ浸透してないような?
チュートリアルに書いてあるプロジェクトはどれぐらいあるかな?

258:デフォルトの名無しさん
14/05/05 16:16:19.70 wgCLsPWH
スカラ祭り、今年はやるらしいな。
URLリンク(scalamatsuri.org)

259:デフォルトの名無しさん
14/05/05 16:32:30.27 wgCLsPWH
>>258
面接官 「Pythonの倒し方、知らないでしょ? オレらはもう知ってますよ」

260:デフォルトの名無しさん
14/05/05 17:37:52.21 GqplFE2u
>>258
英語話せなくても何とかなるなら行きたいです

261:デフォルトの名無しさん
14/05/06 17:13:35.77 8r5Ba8c0
scala> 10000000000.0.toInt
res0: Int = 2147483647

例外出さないとかありえないんだが?
俺のGWを返してほしいんだが?

262:デフォルトの名無しさん
14/05/06 18:29:39.49 d9R3RQy1
Double#toIntは単にintにキャストするだけみたいだな
(10000000000.0).asInstanceOf[Int]と同じ

263:デフォルトの名無しさん
14/05/06 19:07:39.05 r9HN0+TW
そういや、思い出したけど、
String#toIntは、Option[Int]を返すバージョンも作るべきだと思う。
Liftでは用意してたぞ。asInt

これ、実装はStringLikeかな。

264:デフォルトの名無しさん
14/05/06 19:15:51.70 d9R3RQy1
URLリンク(github.com)
Integer.parseInt呼んでるだけだな
まあこっちは例外出すしTry("10000000000.0".toInt).toOptionでいいんでないかね

265:デフォルトの名無しさん
14/05/15 01:48:08.06 6KypUwmR
Scalaの入門書はどれがオススメですかね?

266:デフォルトの名無しさん
14/05/15 01:53:13.81 yJ+NDsnO
というか、日本語の本って2冊しかなくね?

267:デフォルトの名無しさん
14/05/15 02:10:46.39 EhgFi1pN
>>266
んなこたない
URLリンク(jp.scala-users.org)

入門者におすすめできる本ってもしかしてないのでは……
初期に出た入門書っぽいのは対応しててもせいぜい2.8で2.7メインだったりするし
コップ本は「ちょっとscalaやってみるわw」って人に勧めるにはヘビーすぎる感じ

268:デフォルトの名無しさん
14/05/16 00:21:02.28 rkwNW8iO
コップ本の前に大学講義用の簡潔な資料の多い*MLで肩慣らしするとか

269:デフォルトの名無しさん
14/05/16 04:41:23.64 tC3uNMQ9
少し古いけど「Scala逆引きレシピ」で肩慣らししてから
コップ本かな

270:デフォルトの名無しさん
14/05/16 09:16:29.76 X7ZngJ90
コレクションクラスの全容と使い分けを書いた本って有るの?

271:デフォルトの名無しさん
14/05/16 10:55:14.11 rkwNW8iO
ここら辺とAPIドキュメントでいいような。
全部書いてあるかは、分からないけど。
URLリンク(docs.scala-lang.org)

272:デフォルトの名無しさん
14/05/19 17:18:33.86 RGM3YAZ3
List(Some(1), Some(2)) => Some(List(1, 2))
こういう変換してくれる関数はありますか?

273:デフォルトの名無しさん
14/05/19 18:18:05.85 EBM13Ejd
>>272
Scalazのsequenceかな?

274:デフォルトの名無しさん
14/05/19 19:26:21.31 1Vquo/IO
>>272
flattenでよいんじゃないかな

275:デフォルトの名無しさん
14/05/22 02:16:24.36 kNyzitze
3日間使っただけだけど、Slickってダメなライブラリじゃね?
すぐハマるんだけど。
コード例に載ってる奴だけで済むならいいんだろうけど。

276:デフォルトの名無しさん
14/05/22 07:41:41.24 ECkRJuZ0
それはOSSのほとんどに言えること

277:デフォルトの名無しさん
14/05/22 15:17:30.88 j+3vqhqP
ベンダーが提供するものだけ使えばいいよ

278:デフォルトの名無しさん
14/05/22 23:07:11.09 /0gQcYjf
そんな時はScalikeJDBC

でもscalaベンダ提供のライブラリっていったら
URLリンク(slick.typesafe.com)

279:デフォルトの名無しさん
14/05/23 00:48:03.04 BtDc2LWD
最近、Typesafe社を信用しすぎないようにしようと思った。

280:デフォルトの名無しさん
14/05/23 19:28:21.40 WVZoxCv3
URLリンク(github.com)

281:デフォルトの名無しさん
14/05/25 23:30:45.42 Kqg55CS/
>>272
List(Some(1), None, Some(2)) => List(1, 2)
でいいんならflatten

282:デフォルトの名無しさん
14/05/28 00:29:39.91 v0COvUG2
sbt 0.13.5 リリース
URLリンク(github.com)

283:デフォルトの名無しさん
14/06/04 22:21:07.21 UyIsHdSg
アップルがパクリ言語Swiftを出したな。
すべて持ってかれてオワコン言語になるか
相乗効果で有名になるかどうやら

284:デフォルトの名無しさん
14/06/04 22:40:14.96 oN6V+kTo
Scalaはサーバー専用言語であっちはApple端末専用言語だろ
何をどう持っていくのか

285:デフォルトの名無しさん
14/06/04 23:16:40.05 ZW3U0roy
Windowsでも使えて、Scalaとjavaの関係と同じくらいの簡単さで、ObjectiveCを使えるなら乗り換えたい

286:デフォルトの名無しさん
14/06/05 00:31:53.51 sFfzPzAE
パクリってどの辺が?

287:デフォルトの名無しさん
14/06/05 00:41:03.07 /T91KtMA
GoやMLよりもAOTなscalaって感じはする。

288:デフォルトの名無しさん
14/06/05 00:46:19.88 /T91KtMA
違うな。
AOT環境でscalaの変わりとして選ぶならどれ?って聞かれたらという感じかな。

289:デフォルトの名無しさん
14/06/05 23:15:56.62 ZqenSHM0
仕事はSwiftの方が多そうだよね
大事な事です、残念だけど。

290:デフォルトの名無しさん
14/06/05 23:20:10.08 OExbqmqh
SwiftはWindowsでも使えるのでしょうか?

291:デフォルトの名無しさん
14/06/05 23:59:50.79 KZps3rc8
言語だけなら誰かがすぐにコンパイラ作るだろうけど
互換APIはAppleに訴えられるだろうね

292:デフォルトの名無しさん
14/06/14 22:22:14.84 +wPvk2Xf
opt.map(_.value).getOrElse(デフォルト) //optはOption型
みたいなコードをIDEAで書くと
「Simplifiable operation on collection」という警告が出て
existsを使え、みたいな事を言われるんですが
どういう意味なんでしょうか?

293:デフォルトの名無しさん
14/06/15 00:23:28.69 PFhEfnYG
ScalaのAOTだいぶ強化されてるぞ
日本語情報ぜんぜん無いが

294:デフォルトの名無しさん
14/06/15 03:23:02.16 C08jxBHd
>>292
動作は同じでもっとシンプルかつ分かりやすく効率的な書き方あるから大人しくこっち使えよオラって意味だよ
たぶん君の場合はmapとgetOrElse(false)の組を使ってるせいでexists使えって言われてるんだと思うよ

IDEAのSetting -> Inspections -> Scala: General -> Simplifiable operation on collection
でどんなコードが警告出されてどう変換されるか確認できるから見ればいいよ

295:デフォルトの名無しさん
14/06/15 06:02:36.52 HmoyO5I3
???の意味が知りたいんだけど、何でググれば出てくる?

296:デフォルトの名無しさん
14/06/15 06:18:19.64 0Xbi4t4E
URLリンク(twilog.org)

297:デフォルトの名無しさん
14/06/15 13:42:22.46 iTUQluLb
Akka IOのサンプルコードが足りなすぎてどう書いて良いのかわからない。
TCP通信をさせたいのだけれど。
役に立つ書籍とかご存知ないですか?

298:デフォルトの名無しさん
14/06/19 22:35:20.11 KRuS/Nkr
Rubyで以下の様なシナリオ生成用の
ツール作っていたのですがわけあって
Scalaでも同じものを作ってみたいのですが
類似するサンプルがどうしてもみつからないのですが
どうやって作ればいいか助言をいただけないでしょうか?

Title {
Description "TEST"

scenario {
name "scene1"
data 1
}
scenario {
name "scene2"
data 1
}
}

299:デフォルトの名無しさん
14/06/19 23:17:45.87 2pIWoYhf
>>297
akkaは公式ドキュメントが充実してるじゃん
URLリンク(doc.akka.io)
akkaの本は洋書だと結構あるけど和書はまだ1つも出てないな
>>298
「scala パーサコンビネータ」でググったらいっぱいでてくるよ

300:デフォルトの名無しさん
14/06/19 23:30:10.92 KRuS/Nkr
>>299
書き忘れたんですけど内部DSLの例で括弧使った例って
よくわからないのだけど

301:デフォルトの名無しさん
14/06/20 00:43:28.34 1cTFM3kL
DSLって部分を読み落としたんだろ

302:デフォルトの名無しさん
14/06/20 01:18:50.96 fiYVjyLm
>>304
外部DSLを知らないってことですね

303:デフォルトの名無しさん
14/06/20 11:50:05.10 aFVmrh+o
>>304

304:デフォルトの名無しさん
14/06/20 12:57:20.72 +KfxKSN3
RT >304


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch