ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

LINQによる配列操作

家にはmacchromebookしかないのでc#とは関わりがないのですが
会社に行くとc#を書くお仕事なので、c#の特徴でもあるLINQについて調べたことをjsと比較しながら学びたいと思います

LINQの種類

メソッド式

var ary = {1, 2, 3};
var result = ary.Where(x => x % 2 == 0).Select(x => x * 2);
Console.WriteLine(result);//=> [4]

以下のように改行してもいい

var result = ary
    .Where(x => x % 2 == 0)
    .Select(x => x * 2);

クエリ式

var ary = {1, 2, 3};
var result = (from x in ary where x % 2 == 0 select x * 2);
Console.WriteLine(result);//=> [4]

()で囲む必要はないが書いてた方が見やすい気がする
囲わないとこんな感じ

var result = from x in ary where x % 2 == 0 select x * 2;

これも改行してもちゃんと動く

var result = from x in ary
    where x % 2 == 0
    select x * 2;

js arrayメソッド対応表

javascript c#
map Select
filter Where
reduce Aggregate
forEach

LinqのメソッドにforEachはない
Linq style “For Each” - Stack Overflowによると、ToListListに変換してからList#ForEachを使うとできる
しかしToListListに変換するのは効率が良くないので、できれば Reactive を使って実装するのが良いらしい

Aggregate(reduce)の使い方

aggregate
【動詞】【他動詞】
〈…を〉集合する,集める,集団とする.
【自動詞】
1 集まる.
2〔+補語〕総計〈…と〉なる.

(引用: weblio)

「配列の要素を全部足す」のような集約をするための関数

型定義

public static TAccumulate Aggregate<TSource, TAccumulate>(
    this IEnumerable<TSource> source,
    TAccumulate seed,
    Func<TAccumulate, TSource, TAccumulate> func
)

(引用: Enumerable.Aggregate - MSDN)

実行例

var ary = {1, 2, 3};
var result = ary.Aggregate(0, (sum, x) => sum + x);
Console.WriteLine(result);//=> 6

var result2 = ary.Aggregate(4, (sum, x) => sum + x);
Console.WriteLine(result2);//=> 10

firebase hosting入門

前回からfirebaseを使い始めました。

yuzu441.hateblo.jp

今回は第2弾ということでfirebase hostingを使ってみたいと思う。

tl;dr

  • firebase-toolsインストール
  • firebaseコマンドでログイン
  • firebase consoleでプロジェクト作成
  • firebaseコマンドで雛形作成
  • firebaseコマンドでデプロイ
  • firebaseにデプロイしたものを確認

インストールとか

まずはfirebaseのCLIツールをインストールしてログイン。 今回はfirebaseの説明だけをしたいと思うのでNode.jsのインストールは省略します。

npm i -g firebase-tools
firebase login

firebase loginを実行すると 「Allow Firebase to collect anonymous CLI usage information?」と出て来ると思いますが これはよくある「匿名の情報を収集して良いか」なのでY or N好きな方を選べばいいと思います。

firebase hostingでプロジェクトを作る

firebase consoleにアクセスしてテストプロジェクトを作成する。

適当にプロジェクト名を入力して、「国/地域」は日本を選択。

プロジェクト作成からアップロードまで

インストールと準備が終わったので、プロジェクト以下コマンドでプロジェクトを作成する。

firebase init

f:id:yuzu441:20170227225420p:plain

そこから選択肢をポチポチしていきます

  • 「Hosting: Configure and deploy Firebase Hosting sites」を選択
  • 「What Firebase project do you want to associate as default?」上で作成したプロジェクト名を選択
  • 「What file should be used for Database Rules?」そのままEnter
  • 「What do you want to use as your public directory?」そのままEnter
  • 「Configure as a single-page app (rewrite all urls to /index.html)?」nを選択

初期化が終わったら以下コマンドでデプロイする

firebase deploy

これでdeploy完了!

hostingされているページを確認する

firebase consoleで作成したプロジェクトを選び、hostingのページを選ぶと <project名>-<なんかID>.firebaseapp.comと書かれたものがあるので、それをクリックすると以下のようなページが表示される

f:id:yuzu441:20170227225453p:plain

ちなみに

<project名>-<なんかID>.firebaseapp.com/foo.htmlのような存在しないページにアクセスすると404.htmlが呼ばれます。 これは存在しないページにアクセスしようとした時に404.htmlが決め打ちで返されるようになっているみたい。

firebase hosting document

firebase始めました

firebaseを使ってみようと思い、Webで使える(Android, iOS以外)ものを調べたのでそのメモ。

本社にいてもWebチームだからあんまり関わりないんだけど、Androidアプリとか作ってる会社に努めているし(今派遣先に出向してるけど)、どこかで使えそうだし手出してみるか!というのが動機。
本当は会社に金出してもらってAWS Lambdaとかやりたいんだけど、個人でやるには怖いってのは秘密

firebase.google.com

firebase authentication

認証用のサービス。 多様な認証方法をサポートしている。

珍しいなと感じた点としては"匿名認証"という仕組みがある。

  • 認証方法一覧
    • メールアドレス&パスワード認証
    • フェデレーションIDプロパイダ
      所謂OAuth。Google, Twitter, Facebookなどに対応している。
    • カスタム認証
      既存の認証をfirebaseに組み込み。(これよくわかってない)
    • 匿名認証
      ユーザ登録などをしていないユーザの状態などを保存しておくための仕組み。
      後からユーザ登録を行うことで登録前の情報を引き継ぐことができる。

Firebase Cloud Messaging(FCM)

メッセージ配信サービス。GCM(Google Cloud Messaging)の後継らしい。
最大4KBのペイロードをクライアント(AndroidとかiOSとかPCとか)に送ることができ、httpxmppをサポートしている。

これを利用するとWeb Pushを使ってブラウザに通知を送れるんだと思う(未検証なので今後やってみる予定)。

Firebase Realtime Database

NoSQLのクラウドデータベース。
オフラインでもデータを更新できて、オンラインになったときに更新分をDBとやりとりして、いい感じにデータを更新してくれるのがすごい。

一応無料枠はあるけど、別のサービスと比較すると料金高く感じる。
まだ使ってないけど、ドキュメントとか読んでる感じだとオフラインでの動作や、動機速度などはとても優秀な印象。

Firebase Storage

画像や動画などのデータを保存してくれるサービス。
所謂Google版のAmazon S3だと思う。

Firebase Hosting

HTML, CSS, JSのような静的ファイルをホスティングしてくれる。
デフォルトでhttpsをサポートしていて、firebaseが各CDNエッジからコンテンツを配信してくれる。

カスタムドメインも使えて、サブドメインにもhttps通信を適用できる。

あと間違えてデプロイしてしまったような時もfirebase consoleから簡単に前の状態に戻すことができるみたい。

まとめ

firebaseにはいろんなサービスがあるけど、Web屋さんが使えるサービスとなるとこの辺に絞られてくるみたい。

とりあえず無料枠でいろいろ遊んでみようと思ってる。
ちょうどtwitterがモバイルWeb版をPWA化して、ネイティブと戦える!的なことを発信していたので、HostingとかFCMを使ってPWAの構築を考えてるので、できたらまた記事にしようと思う。