Scala + Processingは新しい言語を学ぶ興味深い方法です

最近、私は自分自身の経験を見る機会がありました:いくつかの新しい技術を適用する方法を学ぶためには、このトピックに関するいくつかの本を読むだけでは十分ではありません。



しかし、Scalaで何がそんなに面白いことができますか? 実際、選択は大きすぎません。 私はかつて小さなツールを思いつき、それをゆっくりと書いて、「スコアリング」しました。 数か月後、残念なことに、構文「for loop」をグーグルで検索しました...



これ以上先に進めないことに決め、言語の主な機能に関する小さな予測を見つける必要があります。 ここで、Processingは役に立ちました。 私のような初心者向けの退屈な教育プロジェクトを視覚的なインスタレーションに変えるのに役立ちます。 そして、掘り下げるものを選択できます-例えば、フラクタル生成、粒子レンダリング、データ視覚化。



Scalaにコピーし、GitHubにいくつかの例を投稿しました。 画面では、そのうちの1つだけがMSA Fluidsです。 猫の下で興味を持ってください。







Scalaに出会い、すぐにこの言語が好きになりました。 Scalaでのプログラミングを含むいくつかの本をめくりました 。 理論だけでも、プログラミングの世界を別の視点から見ることができました。 残念ながら、Scalaでの私の主な仕事は決してつながりがありません。実際、私が最もよく知っている言語は、場所によってはまったく異なります。 そして、この言語はProcessingではありません。



処理中



だから、ここでProcessingを紹介する絶好の機会です。それを聞いた人は少なく、手で触れた人はほとんどいないからです。 処理は、マイクロIDEとさまざまなライブラリを備えたJava用のDSLです。 美しいスラサックを生成するために、いわゆるビジュアルアーティストによって使用されます。



ビデオタグ処理を使用してVimeoをクリックし、 ユーザーが何を思いつくかを確認することをお勧めします。 ここにいくつかの美しいものがあります:















繰り返さないために、処理に関するいくつかの興味深い記事がすでにHabréで公開されています。



そして、彼ら自身の言葉で書かれたそれらのすべてを簡単に要約します。 幼少期にBASICまたはLogoでプログラミングを学んだことを思い出してください。亀はどこで線を引きましたか? 切り株は明確で、ここの誰もが自分の好きな言語でそれほど美しくないことを補うことができます。 はい、30層の抽象化でさえ、道路に沿ってラップします。 また、普通の人々にとって、OOP、クラス、ライブラリの種類を理解することは難しく、彼らはそれを必要としません。



そこで、私たちは普通のビジュアルアーティストがアイデアを命令型に翻訳できるように、このような単純なJavaベースの言語を作成することにしました。 たとえば、ここに線を引き、次に正方形を引きます。 そして出発。 処理は現在大きく成長しており、無視するのは困難です。 多くの優れたライブラリが書かれており、本質的にJavaであるため、Javaライブラリキャリッジも使用できます。



また、ScalaはJVM上でも実行されます...ええ、わかりましたか?



実際、Scala- Spdeで記述できるProcessing IDEに基づいたプロジェクト全体があります。 そして彼については、すでにscala-lang.orgに 書いています 。 しかし、このIDEは私には小さくて軽薄に思えます。 大きなものを書くと、スマットが始まります。 それでは、もっと便利なもので停止しましょう。



インストールとセットアップ



ほとんどの場合、Scalaでの開発用のIDEが既にあるので、これには焦点を合わせません。 ScalaプラグインでintelliJ IDEAを使用しています。



まず、 Processingをダウンロードしてインストールする必要があります。





次に、Scalaプロジェクトで、メインのProcessingライブラリを接続します。



Windowsでは、パスはほぼ同じです。



コード



次に、新しいメインクラスを作成します。 テストと呼びました。



import processing.core._ object Test extends PApplet { private var test:Test = _ def main(args: Array[String]) = { test = new Test val frame = new javax.swing.JFrame("Test") frame.getContentPane().add(test) test.init frame.pack frame.setVisible(true) } } class Test extends PApplet { override def setup() = { } override def draw() = { } }
      
      







Processingでは、ほとんどの機能がPAppletクラスに関連付けられています。 ところで、実行構成でプロファイルを設定した場合、AppletViewerによって起動することもできます。 その場合、mainメソッドは必要ありません。



これまでのところ、このコードはほとんど機能しませんが、処理プログラムの通常の構造(スケッチと呼ばれる)で既に見られます。 さらに、このコードを少し拡張します。 彼はカーソルの後ろに黒と白のランダムな花を描きます。 このようなもの:



 import processing.core._ import math._ import scala.util.Random object Test extends PApplet { private var test:Test = _ def main(args: Array[String]) = { test = new Test val frame = new javax.swing.JFrame("Test") frame.getContentPane().add(test) test.init frame.pack frame.setVisible(true) } } class Test extends PApplet { var angle:Int = 0; override def setup() = { size(640, 360) background(102) smooth() noStroke() fill(0, 102) } override def draw() = { angle += 10 var value = cos(toRadians(angle)) * 6.0 for (a <- 0 to 360 by 75) { val xoff = cos(toRadians(a)) * value val yoff = sin(toRadians(a)) * value fill(Random.nextInt(255)) ellipse( (mouseX + xoff).toFloat, (mouseY + yoff).toFloat, value.toFloat, value.toFloat ); } fill(255); ellipse(mouseX, mouseY, 2, 2) } }
      
      







次は?



実験として、いくつかの興味深い例をScalaに転送し(MSA Visualsの有名なFluidsを含む)、GitHubにそれらを投稿しました: scala-processing-examples 。 現在、2つの例しかありませんが、非常に興味深いものです。



また、おそらく利用可能な方法に関するヘルプが必要になります。 彼女 (およびより多くの有用な資料)は、常にprocessing.orgで見つけることができます



個人的には、このトピックを視覚化して記憶するために、 を取り、座って各トピックの小さなスケッチを思いつくのが私の計画です。



いくつかのコメント。



GitHubでサンプルを実行するには、openglライブラリをインポートする必要があります。



そして(重要!).jarアーカイブの内容をこれらのライブラリのネイティブ実装で解凍します



そして、実行構成で、それらへのパスを登録します



そうしないと、アプリケーションがエラーでクラッシュし、joglライブラリが見つからなかったという。



IDEAでネイティブライブラリをより正確に接続する方法をまだ理解していませんでした。 おそらくまったくそうではありません



そして最後に



面白い言語を学習するための美しい写真は、鈍いテキストユーティリティよりもはるかに優れていることを認めなければなりません。 良い実験をしてください!



All Articles