ASUS T100CHI を買って ubuntu をインストールした話

少し前に ASUS T90CHI を買ったんですが、やっぱり RAM 2GB は厳しかったんですよね。

そこで RAM が 8GB、少なくとも 4GB の Windows Tablet はないものかと探していたところ、T90CHI の兄弟機である T100CHI がリファインモデルで RAM 4GB で 5 万円程度とかなりコスパが良かったので、T90CHI を手放して購入しました。

T100CHI のハードウェア等については正直 T90CHI とかなり近いというかほぼ同じなので省略。

というわけで T100CHI で RAM も 4GB になって快適〜かって言うと、 RAM 4GB 程度で快適なわけないんですよね!!!!!!!! Intellij 起動して SBT なんか走らせようもんなら即死です。

そこで、3度目の正直、T100CHI に Ubuntu インストールバトルをやりました。結果から言うと、ほぼ完璧に動作するところまで持っていくことができました。

T100CHI に Ubuntu 16.04 をインストールする

実は T1oo シリーズについては、Google+ に Asus T100 Ubuntu というグループが存在しており、有志の手でインストール ISO が作られているので、基本的にはそのフローに乗ります。

ASUS-T100TA-Ubuntu1604-64Bit.iso のインストール

ASUS-T100TA-Ubuntu1604-64Bit.iso をダウンロード。

rufus をダウンロード。

rufus を使って、ブート用ドライブ(USB フラッシュディスク等)に、上記の ISO を焼く。パーティションスキーム / ターゲットシステム は MBR パーティション for BIOS or UEFI にする。

デュアルブートにする場合には、ディスクの管理から Windows のパーティションを縮小しておく。8GB ぐらいあれば一応大丈夫な模様。

適当な micro USB => USB Host 変換できるケーブルをつかって先程のブートドライブを接続して T100CHI を起動。起動した(前面のカメラ横LEDが白く点滅する)あと、電源キーと音量 down キーを同時に押すとブートドライブセレクタが起動するので、先程接続したブートドライブを選択。

grub 画面が出たら Ubuntu (try without installing) を選択。Ubuntu が Live boot するはず。

ここまで来たら、一旦無線LANに接続しておく。接続したあと、接続の設定で先程接続した無線LANについて IPv6 を無効化しておく。(無効化しないと不安定でろくに動作しない)

無線LANに接続して通信が安定していることが確認できたら、デスクトップにあるインストーラを起動して、Ubuntu のインストールを開始する。

ネットワークを利用してアップデートをインストールするか?サードパーティのドライバ等インストールするか聞かれるが、全てチェックをつける。インストールするのに、ドライブのアンマウントが必要と言われたら Yes。

インストールタイプの選択では、Windows を消してしまっても良い場合以外はその他のインストールを選ぶ。じゃないと Windows を消し飛ばすことになる。リカバリディスクがあればもとに戻せるけど。

先程縮小しておいたドライブの空き部分に

  • EXT4 700MB /boot
  • EXT4 使いたいだけ /
  • SWAP RAM と同程度

を最低限作る。すべて論理パーティションにしておくこと。物理パーティションは 1 ドライブに 5 個までしかつくれない(読み込めない)という制約が Windows にあるらしく、物理パーティションにしてしまうと、リカバリ領域が読み込めなくなったりするらしい。Linux はとくに制約がないようなのでとりあえず論理パーティションにしておけば問題なさそう。

/home を別パーティションとして分けておいたほうが便利らしいけど必須ではない。自分は /home を SD カードに指定した。

パーティション分けができたらあとは適当にインストーラの指示に従ってインストールを進める。基本デフォルトで問題ないはず。

インストールしたら再起動する。再起動前に有線接続のキーボードを接続しておく。(grub の操作に必要なため)

再起動し、grub2 の画面になったら、Advanced options を選択し、kernel 4.7.1.5 にカーソルを合わせて e キーを押す。そうすると起動設定画面になるので、 /vmlinuz-4.7.1.5.efi.signed の赤字部分を削除して F10 を押す。

これで一旦インストールしたディスクからのブートが完了。

起動したら terminal を起動して、/home/scripts に移動して sudo sh T100-Install.sh を実行。

スクリプトが当たったら、sudo vi /etc/default/grub で grub の起動設定を変更。

GRUB_CMDLINE_LINUX_DEFAULT=”clocksource=tsc tsc=reliable reboot=pci,force”

に書き換える。書き換えたあとは設定を反映させるために sudo update-grub して再起動する。

ここまでで基本的なインストールが完了。

サスペンド・BT 等の機能を使えるようにする(使いたい場合のみ)

あとで書く

 

 

 

 

Windows 環境構築手順書の話

Windows 環境で Play + Scala + Scala.js + MongoDB 開発環境構築の手順書。他の方のショートカットになれば。

  1. Windows Update
  2. Firefox をインストール
  3. Google 日本語入力をインストール
  4. (ChangeKey をインストール)
  5. (TouchKey をインストール)
  6. 管理者権限の PowerShell で
    1. スクリプトの実行ポリシーを変更
      Set-ExecutionPolicy RemoteSigned
    2. Chocolatey とその他諸々をインストール

  7. JDK をインストール
  8. JDK の Path をシステム環境変数に追加
  9. JAVA_HOME をシステム環境変数に追加
  10. sbt をインストール
  11. IntelliJ IDEA をインストール
  12. Node.js をインストール
  13. Node.js の Path を追加
  14. MongoDB をインストール
    1. MongoDB の Path を追加
    2. 設定ファイル mongodb.conf を記述
      systemLog:
         destination: file
         path: path\to\mongodb.log
         logAppend: true
      storage:
         dbPath: path\to\db
      net:
         bindIp: 127.0.0.1
         port: 27017
      setParameter:
         enableLocalhostAuthBypass: false
    3. MongoDB をサービスに登録
      mongod.exe --config "path\to\mongod.conf" --install --serviceName MongoDB
    4. 管理ツール -> サービス から MongoDB を選んで起動
  15. RoboMongo をインストール
    1. Create で新しいコネクションを作成
  16. PhantomJS をインストール
  17. PhantomJS を展開して Path を通す

Service で DB から find する際のキーによって戻り値型を Option と List で変えたい場合にどうしたらいいか考えてみたけどどうなんでしょうという話

Service で DB からあるキーでデータをひろいたい。かつ、キーによって戻したいデータの型が Option だったり List だったりするとする。Service にキーごとのメソッドを生やせばいいけどダサいしたくさん書くのがいやなのでジェネリックに書けないか考えてみたけどいい方法なのかわからないので晒す。コードは Scala です。

※追記あり。いろいろご指摘をいただきました。

“Service で DB から find する際のキーによって戻り値型を Option と List で変えたい場合にどうしたらいいか考えてみたけどどうなんでしょうという話” の続きを読む

サーバーサイド初心者が Play Framework 2.4 + Scala + Silhouette で認証認可動かしてメール認証を自前実装した話

なんか結果的に Play Framework の主要な機能について触れることになったっぽいので、Play + Scala の入門というかチュートリアル的成長譚。Web サービスとかどう作っていいかわからん!という私向け。

Play Framework 2.4 + Scala + Silhouette(認証認可ライブラリ) を使ってWebサービスの基本になりそうなところまで作ってみたお話。永続化は mongoDB でやったよ。

完成形は github で公開してます。

Play Framework ぜんぜんわからん。2.4系から変わりすぎ。Webよくわからんよー。認証認可どうしたらいいいんだ、ライブラリ使ったらいいのか。永続化とかどうするんですかね… という私みたいな初心者向け弾丸ツアーです。特に認証認可ライブラリ Silhouette については日本語での解説が全然ないので、役に立ったらいいな(宣伝)。

“サーバーサイド初心者が Play Framework 2.4 + Scala + Silhouette で認証認可動かしてメール認証を自前実装した話” の続きを読む

Play Framework 2.4 で reverse router の absoluteURL を Controller 外で使ったら RequestHeader がねーよって言われて解決した話

小ネタ。

reverse router (controller.routes クラス)を使って URL を取得しようとした時

val link = routes.HogeController.piyo(fuga).absoluteURL()

これを controller 外で呼ぶと

Cannot find any HTTP Request Header here

とかいってエラーになる。

結論から言うと、absoluteURL のシグネチャは

def absoluteURL()(implicit request: RequestHeader): String

なので、absoluteURL() を呼ぶメソッドが Controller から呼ばれること前提で

def hoge()(implicit request: RequestHeader): String = {
  routes.HogeController.piyo(fuga).absoluteURL()
}

とかするときれいにまとまった。

よかったね。

Play Framework 2.4 Scala + Specs2 + Mockito + Guice DI でテスト素人がテストに挑戦した話

Play Framework 2.4 をちまちま触っているのですが、モダンな開発といえば自動テストはかかせないよな〜〜〜〜〜〜〜と思いつつずっと出来てなかったので触りました。

案の定、いろんなことに引っかかったし、とくに Play 2.4 から本格導入された Guice による動的DIとかと絡んで、どうすれバインダーってなってたし、モックとか Mockito とか聞いたことあるけど、どうやったらいいんですかね〜ってなったし、Futureってどう評価したらいいんだ…とかとか、いろいろあるのでまとめました。

慣れればできそうなので、テストとか Play + Specs2 + Mockito はあんまり、みたいな人、自分みたいな初心者に役に立てばいいなぁ。

“Play Framework 2.4 Scala + Specs2 + Mockito + Guice DI でテスト素人がテストに挑戦した話” の続きを読む

Scala の Future と Promise で Android の Callback 地獄を緩和した話

Android というより Java のライブラリで頻出する Callback パターン呼び出し連鎖

def setImage(id: Stiring) = {
  User.load(id, new OnLoadCallback {
    override def onSuccess(userJson: String) {
      Json.parse[User](userJson, new JsonParseCallback {
        override def onSuccess(user: User) {
          Image.load(user.imageUri, new OnLoadCallback {
            override def onSuccess(image: Image) {
              view.setImage(image)
            }
          }
        }
      }
    }
  }
} // >つらい<

みたいのを Scala 標準のライブラリに含まれる Future と Promise で殺す話。
いわゆる Listener についてはこの方法だと解決しないので、このへんを参照してほしい。

“Scala の Future と Promise で Android の Callback 地獄を緩和した話” の続きを読む