ゆずめも

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

chromebookにnodebrewをインストールして使おうと思ったらハマった

chromebookで開発者モードを使うとできることが広がることに気づいて開発者モード始めました

使ってるchromebookとは違う。pixel欲しい…
今回の検証に使ったchromebookHTML5 Conferenceで頂いたものです

yuzu441.hateblo.jp

開発者モード

他に記事がいっぱいあるので省略

nodebrewインストー

github.com

普通にインストースクリプトを実行すると$HOME/.nodebrew
要するに/home/chronos/user/.nodebrewというディレクトリにインストールされる

この状態でPATHを通してnodebrew installとか実行すると.nodebrew以下にnodeのプログラムがインストールされるんだけど、Permission deniedで怒られる(chmod 777とかやってみたけど駄目)

原因?

未だに原因よくわかってないけど、$HOME以下に書き込めない? (でもnodebrewはインストールできてるからそういうことでもなさそう)

== 2017/06/17 追記 ==

golangのインストールページ見てたら、実行権限つけて再マウントしてた。
chromeosのファイルシステムは基本的に書き込めないものらしい

sudo mount -i -o remount,exec /home/chronos/user/

github.com

とりあえずの解決方法

nodebrewはNODEBREW_ROOTを指定すると任意のディレクトにインストールすることができる

なので.bashrcに以下の内容を書き込んだ

export NODEBREW_ROOT=/usr/local/.nodebrew

この状態でインストースクリプトを実行すると/usr/local/.nodebrewにインストールされて、そこにPATHを通してやると普通にnodebrew install v8.1.2とかできる

まとめ

なんとなくできるかなーと思って始めたら思ったよりハマってしまった。。
いろんな記事見てたらnvmでインストールしてるものばかりで、nvmができるならnodebrewでもできるでしょって気持ちだったからできてホッとした

nodebrewはなんとか動いたけどcurlがアップデートできなくて、僕らの戦いは始まったばかりだ…

rustupのアンインストール方法

インストール方法はいろんな所で書いてるけど、アンインストールってどうやるのかなって気になった

やりかた

よく見たら普通に書いてた

github.com

rustup self uninstall

これでパスを自分で消せばおしまい

さて本当に消えるのか実行して確かめたのでこれから入れ直します…w

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