サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
qiita.com/f81@github
第7章も相変わらず 型 について語るぞ! 今回の主役は、Javaプログラマーには馴染みがない タプル ! 複数の戻り値 戻り値で複数の異なる型を返したくなったことはある? Javaだと引数の型は1つと決まっているから、単純には実現できないよね。 だから、代替案としてこんな手を使ったりするよね。 例えば、新たなDTO等の 情報格納役 を定義し、そのフィールドに複数の型を用意する 引数に複数のオブジェクトを渡して、戻り値相当をそのオブジェクトに設定する インタフェースを分割する。つまりそれぞれのデータを返すメソッドを用意する 戻り値をコレクションにして、複数の型のオブジェクトを格納する(ほとんどやらないけど) どれも面倒臭いんだよね。クラス名決めるのだって大変だし。。。 Javaの世界では諦めモードだけど、Scalaの世界では素晴らしい仕組みが備わっているんだ。 複数の型を返す仕組み、 タプル
今回はCollection パッケージの「Traversable」ついて、 リファレンス風に紹介するよ。 scala.collection.Traversable このトレイトは、コレクションの中でも上位トレイトで重要なメソッドを持っているんだ。 どんな操作が存在するか実際に実行して感じてみてね! 入門編としてこちらも必読(^^)v 第8章:Scalaのコレクション(Seq, Set, Map)入門 scala.collection.Traversable コレクション階層の基本となるトレイト。Seqだけではなく、Set・Mapもこのトレイトをミックスインしている。 foreachメソッドのみが抽象メソッド。このメソッド以外はTraversableLikeに実装が用意されている。 代表的なメソッドを使ってみたよ。 抽象メソッド foreach 全走査して要素を1回ずつ処理する
まだまだ型だ! 今回は複数のインスタンスを束ねる コレクション型 。 アプリケーションを作るには重要な型だ! コレクションも奥が深いから、今回は入門と言う形にするよ! コレクション型 コレクションとは、複数のオブジェクトを一纏めにする箱のようなものだ。 Javaだと以下のインタフェースが有名だね。 List Set Map List、Mapは使われることが多いけど、Set人気はいまいちだ。 Setは、非常にパワフルな武器なんだけどね。。。 まぁそれは置いておいて。 Scalaで代表的な型は以下だ。 Seq Set Map Seqってなんでしょう?シーケンスです。順序を表す箱です。 Seqの実装クラスの1つにListがあったります。 ところでコレクションの全体像がどんな感じか気になりませんか? そう思って調べたところ、絶句してしまった。 ここから[Content Hierarchy]をクリッ
今回はSeqについて、リファレンスなノリで紹介するよ。 入門編としてこちらも読んでね(^^)v 第8章:Scalaのコレクション(Seq, Set, Map)入門 scala.collection.immutable.Seq 要素の順序を意識する必要がある場合に、使う箱だ。 JavaのListと役割は似ているね。 ただ色んなことができるんだ。 しかも前回の 第10章:ScalaのTraversableリファレンスで紹介したメソッドも使えるんだ。 前回のソースのほとんどがSeqだったことに気付いたかな? 添字参照 (i) 添字の要素を返す
突然だけど、実は僕はカリーが大好きなんだ! だから、Scalaを勉強していて カリー の文字が見えた時、急に親近感が湧いたんだ。 新宿中村屋のインドカリーみたいでしょ。 でも、インドカリーとカリー化は全く関係ないんだよ。 そこだけは 絶対 におさえてね! そう、今回は カリー化 を語ってみるよ。 JavaScriptでも出てくる話だから、知っている人も多いんじゃないかな? カリー化とは カリー化とは Haskell Brooks Curry に因んで名付けられたんだ。 あれ?このHaskellって?そう、なんと、 Haskell という関数型言語も彼に因んで名付けられたんだ。 で、カリー化とは何か? 良く 部分適用 と同時に語られているんだけど、同じとして語られていることがあったり 説明しているサイト毎にちょっとずつ違ってたりしていて混乱しやすいんだよね。 かく言う僕も、以下の理解で一旦落
今回も型だYO, YO! プリミティブ型について語ってみる。 データ型としては基本だけど、重要だからね! プリミティブ型とは 基本型 という表現もするけど、 プリミティブ型 の方が一般的かな? そもそもの プリミティブ型 の定義をWikipediaで見てみよう。 プリミティブ型(プリミティブがた)とは、計算機科学において、プログラミング言語によって提供されるデータ型であり基本的な要素である。対する語は複合型という。言語やその実装に依存して、プリミティブ型がコンピュータメモリ上のオブジェクトと一対一対応のときもあれば、そうでないときもある。組み込み型もしくは基本型とも呼ぶ。プリミティブ型の種類は、使用されているプログラミング言語に依存する。例えばC言語では、文字列は複合データ型だが、BASICやその派生言語ではプリミティブ型である。 クロージャよりはわかりやすいけど、やっぱり難しいかな。。。
今回は「Map」について、リファレンス風に紹介するよ! 入門編としてこちらも読んでね(^^)v 第8章:Scalaのコレクション(Seq, Set, Map)入門 scala.collection.immutable.Map キーで値(要素)を特定することができる箱だ。 キーの重複はできないからね。 代表的なメソッドを使ってみたよ。 ルックアップ get キーに対応する値をOptionで返す scala> Map(1 -> "a", 2 -> "b", 3 -> "c") get (1) res0: Option[String] = Some(a)
ついに アクター について語る時がきました。 Scalaの醍醐味の一つです。 そして難しいです。。。 でも、アクターを使うと並列処理を扱うことが簡単になります。 ただアクターには色々な種類があるので、そこが簡単じゃないかも。。。 アクターの歴史 2.9のアクターは知らないんだけど、2.10からは標準のscala.actorパッケージが非推奨になっていて 今後削除されるみたいなんだ。 そして、今後はAkkaのアクターを使うことが推奨されている。 The Scala Actors API Akkaとは Typesafe社が開発していて、高い抽象度・並行・スケーラブルなアプリケーションを実装するためのScala・Javaのイベント駆動の分散並列型アプリケーションフレームワークです。 Typesafe社は、Scalaの生みの親Martin Oderskyの会社ですね。 アクターとは ところで アク
はじめに 1部に入る前に、シリーズ全体の目的と構成を簡単に説明します。 このシリーズの目的は、主に次のような知識や技術を提供することです。 データ収集/加工/集計/可視化の技術(ツールインストールから利用方法まで)。 機械学習・統計などの知識・簡単な実用例(一部、数理的な説明もあります)。 これらの知識を実務での活用シーンを念頭に提供することで、ビジネスプロセス の自動化、高速化、安定化、スケール拡大のヒントを提供できればと考えています。 また、できるだけ丁寧な説明を心がけ、実際に自分でツールや分析手法を 使えるようになることも狙いのうちの一つです。 このシリーズは下記目次(変更の可能性あり)のように 入門編、実践編、アドバンストピック(予定)から構成されます。 入門編 第1部 イントロダクション 第1章:分析技術の活用~ビジネス視点から 第2章:分析手法を眺めてみよう! 第2部 エクセル
今回は 抽出子 だよ。 こいつを使えるようになると、更にパターンマッチが便利になるんだ。 こんな感じで進めてみるよ! 抽出子とは 抽出子を使う unapplySeqメソッド applyメソッド applyとunapplyの関係 まとめ 抽出子とは unapplyメソッドが定義されているオブジェクト のことです。 定義としては簡単だね! このメソッドの役割は、受け取ったインスタンスを分解して、 何かを抽出する ことです。 パターンマッチでこのメソッドが使われることが多いです。 抽出子を使う 早速使ってみよう! パターンマッチで使う import scala.Option class User(private val firstname: String, private val lastname: String) object User { def unapply(user: User) =
皆、元気してた?久々の投稿をさせてもらうね。 今回から 応用編 に突入するよ! 今回のテーマは、 型パラメータ だ! こんな感じで語っていくからね。 型パラメータとは 型境界 変位指定アノテーション まとめ 型パラメータとは 型パラメータってなんだろ? 意味分かんないぞ! と思っていたら、Javaで言う ジェネリックス(総称型) のことを、Scalaでは 型パラメータ と呼ぶみたいなんだ。 型自体をパラメータとし使うことができるんだ。 クラスの定義自体はジェネリックスにしておいて、インスタンス化するときに型を決定する。 なんてことができるようになるんだ。 例えば、JavaのArrayListの定義を抜粋するとこんな感じです。
最強!?Ensimeを利用したSublime Text3のScala開発環境(playでもliftでも)ScalaPlayFrameworkSublimeText3 EnsimeはEmacsでScala開発環境を構築するときに使うことで有名ですが、実はSublime Textでも利用することが可能です。 Ensimeはコード補完だけではなく、文法エラー表示、import追加機能、クラスやメソッドへのコードジャンプ、デバッグ機能などもあり、より強力な開発環境を構築することが出来るようになります。 個人的にはテキストエディタで作るScala開発環境では今のところ最強に感じています。 今回の環境 Mac OS 10.9 Sublime Text 3 (Build3059を利用) Scala 2.10.3 sbt 0.13.1 とりあえずplay2.2.1もインストールしておきました。 インストー
今回は パターンマッチ だ!! こいつ凄い奴なんだぜ。 実は最初、全く使い道がわからなかった。 ifで良いんじゃね?とか思ってけど、 ifよりもやれることの幅が広すぎるんだ。 書きながら見てみよう! パターンマッチとは ifやswitchのように条件分岐に分類されるのかな。 ただifやswitchと同等に使うだけではもったいない。 どれだけ凄いか見てみよう!
大規模データについて最後にRedshiftについて書きます。 使い始めたばかりで実践的な話は少ないですが、現場視点の使用感をまとめました。 Redshiftとは AWSが提供するデータウェアハウスです。 いわゆるフルマネージドサービス(RDS、DynamoDBと同様)ですぐに使い始められます。 操作項目はRDSに近いです。 詳しくは、コチラをご覧下さい。 特徴をまとめると 使い勝手は、他のAWSサービス同様に必要に応じて簡単に拡張できます、 データ抽出のためのSQLは、Postgreペースのカスタム版です。 抽出のための機能は揃っているので問題なく使えます。 詳しくは、コチラ をご覧ください。 運用の手間は、バッチ処理の様な比較的時間の余裕がある処理で使う分には問題ないレベルだと思われます。 1時間/週のメンテナンス時間が必要なのでDBが止まっても問題ない(リカバリできる)処理でないと難し
今回から開発編ということで、いままで開発で得た EMR開発の実践的なところを紹介していきます! 開発編を1回で記事にしてしまうとボリュームが多すぎてしまうので、 基礎編、実装編 と分けることにしました。 早速ですが、 投稿スケジュールを以下に変更させていただきます;; ・11月上旬 ~EMR開発基礎編~ ・11月下旬 ~EMR開発実装編~ ・12月上旬 ~EMR開発_運用編~ ・12月下旬 〜Redshiftについて 今回は、基礎編と題しましてEMR開発における 土台 の部分について書きたいと思います。 はじめに 先ずは、EMRを動かすために必要なものを一通り ・AWSアカウント ・アカウントに紐づくアクセスキー/シークレットキー ・処理対象のデータ ・Hadoopを動かすためのMapReduceコード(Hive/Pigの場合は不要) ・CLIツール(Webコンソールでも代用可能) 以上で
Option型って知っているかい?これマジ凄いよ! NullPointerException、通称 ヌルポ 。 少し込み入ったJavaアプリを作って動かすと、大抵発生するよね。 nullチェックを入れてたり、規約で縛ったりして対応することになると思います。 だけど、コンパイル時に見つけることができれば、、、と思ったことない? Option型を上手く使えれば、コンパイル時にnullチェックみたいなことができてしまうんだ。 とても素敵だよね! では、Option型について語ってみます。 Optionとは 値があるかないかを表す型です。箱って言っても良いかもですね。 Optionは更に2種類のサブクラスを持っている。 Some None Some 値があることを表す型。値を持っている。 None 値がないことを表す型。 Optionを使ってみる 淡白に説明してみたので、早速使ってみよう! Opt
初めに、前回から大規模データ処理について連載させていただきましたが、 思ったより多くの方にストックいただき、この分野の関心の高さを改めて実感しております。 われわれも、この分野の事業に力を入れており、 積極的に取り組んで行く所存でございます! それでは 大規模データについて第2回 ~EMR(Hadoop)について、なぜEMRなのか~ ご存じない方は、EMRって何?ということになると思うので 軽く説明させていただきます。 EMRとは、Amazon Web Service社(AWS)が提供している クラウドでのHadoopの実行環境です。 正式名称は「Amazon Elastic MapReduce」になります。 処理対象データをAWSのS3(クラウドストレージ)に配置し、 必要なコンピューティングリソースをを指定して実行すると、 必要な時に必要なだけ、文字通り「Elastic」にHadoop
まずは トレイト の感じを掴んでみYO! 色々な意見があるかもしれないけど、トレイトをこういうモノだと思っている。 機能を切りだして、再利用可能な塊にしたモノ トレイトはJavaのインタフェース(interface)に近いモノという説明もある。 確かに、Javaのインタフェースのように使えると思うんだけど なんかスッと入ってこないんだよね。 まだまだScalaの修業が足りないせいかもしれない。 トレイトの特徴 Scalaのトレイトには、以下な大きな特徴があるよ。 traitキーワードで定義 クラスパラメータを取ることができない メソッドを実装できる クラスや他のトレイトにミックスインできる 任意の数をミックスインできる 純粋ではないが多重継承ぽさがある この特徴に沿って説明してみるね。 traitキーワードで定義 早速トレイトを定義してみよう。
最近、インスタンスの起動/停止の繰り返しやバックアップの ためのスナップ、AMI作成で気付いたら大量のVolumesが。。 EBSが「in-use」でも無いのにたくさん作られて(available)、 Account Activityで課金状態を確認すると、地味に増えてるコレ。 Amazon EC2 EBS $0.12 per GB-month of provisioned storage ..... ボリューム操作と課金について と言うことで試して、肌で感じるのがイチバン! 3つのEBSボリュームがアタッチされているインスタンスから、 AMIを作成するところから。 [a] AMIを削除すると AMI作成 SNAP, Volume確認 SNAPは出来る。 (そしてProgressがバー表示なことに今ささらながら気づく。。) ※当然のことながらVolumeは出来ません。 AMI削除 キレイに
プログラムは動かさないと始まらない!最初は動かなくて嵌るかもしれない。 でも自分の手を動かして書いたソースが動き始めるともっと書きたくなってくるはず! 手を動かすことに喜びを感じたら、プログラミングの才能があるね! 最初はうまく書けなくても良いんだよ。 とにかくソースを書いて動かしてみようぜ!! 事前準備 まずは動作環境が必要だ。Windows7しか想定してない。すまん。 JavaとScalaのインストール・ダウンロード 以下のバージョンでダウンロードしインストールする。 Java SE 7u21 http://www.oracle.com/technetwork/java/javase/downloads/index.html scala-2.10.1 http://www.scala-lang.org/downloads 環境変数の設定 JAVA_HOME JAVA_HOME=C:\P
第一部:やってみる前に!(導入編) 第1章:Hello Worldから始めるScala プログラムは動かさないと始まらない!最初は動かなくて嵌るかもしれない。 でも自分の手を動かして書いたソースが動き始めるともっと書きたくなってくるはず! 手を動かすことに喜びを感じたら、プログラミングの才能があるね! 最初はうまく書けなくても良いんだよ。 とにかくソースを書いて動かしてみようぜ!! 第2章:What is 関数型言語? Scalaの醍醐味は関数型言語とオブジェクト指向言語のハイブリッドだ! 今回はオブジェクト指向をやっている人には馴染みが薄い、 関数型言語について語るよ。 第3章:クロージャに Challenge! 今回はクロージャです。 JavaScriptではお馴染みですが、Javaプログラマーにとってはどうでしょうか。 何でJavaプログラマーかって? meがJavaプログラマーであ
Scalaの醍醐味は関数型言語とオブジェクト指向言語のハイブリッドだ! 今回はオブジェクト指向をやっている人には馴染みが薄い、 関数型言語について語るよ。 関数型言語って何? 関数を駆使してプログラミングできる言語が、関数型言語だ!。 関数とはオブジェクト指向でいうと「メソッド」みたいなもんだ。 意味は違うけどね。数学的な例だと、
このページを最初にブックマークしてみませんか?
『@f81@githubのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く