2013年10月30日水曜日

Let's Note SX2 に Ubuntu をインストールする


新しく買った Let's Note SX2 (CF-SX2DETBR) にUbuntu 12.04 (64bit) をインストールしたのでその作業メモ。トラブルなく割と簡単にさくっと入った。
実際に行ったのは次の手順。
  1. リカバリディスク(DVD2枚必要)を作成する
  2. Ubuntu 12.04のインストールディスクを用意する
  3. Let's NoteのBIOS設定を調整し、CD(DVD)からブートできるようにしてブート
  4. お試しUbuntuが起動するので、キーボードや無線LANなどが使えるか確認
  5. インストーラに従ってインストール

リカバリディスク(DVD2枚必要)を作成する 

 もしものために、購入時の状態に戻せるように、リカバリディスクを作成しておく。作成方法は取扱説明書に書いてあったのでその通りで問題なくできた。

取扱説明書は無くしてしまっても、こちらからダウンロードできるので大丈夫。
http://askpc.panasonic.co.jp/s/download/manual.html

Ubuntu 12.04のインストールディスクを用意する

Ubuntuの公式サイト(英語)から、64bit版のUbuntu12.04 LTS のisoファイルをダウンロード
http://www.ubuntu.com/download/desktop


ダウンロードしたisoファイルをDVDに書き込む方法はこちらを参考にした: ISOイメージをCD-R(W)に書き込むには ›


Let's NoteのBIOS設定を調整し、CD(DVD)からブートできるようにしてブート

 

Let's Noteを起動(再起動)し、「Panasonic」 のロゴが出ているときにF2キーを押すとBIOSの設定画面へ移行する。
購入時にはUEFIという機能が有効になっているため、これを無効にする。そして、起動オプション優先度で、ハードディスクよりも光学ドライブが上に来るようにする。
DVDドライブを開き、さっきのUbuntuインストールディスクを入れる。
F10キーを押して、 「設定を保存して再起動」する。


お試しUbuntuが起動するので、キーボードや無線LANなどが使えるか確認

 

DVDからの起動なので少し時間がかかるが、しばらく待つと「Ubuntuを試す」 or「インストールする」を選ぶ画面が出る。すぐにインストールしたい場合はインストールを選べばいいが、試してみたいだけの場合は「Ubuntuを試す」としてひと通り動きを試してみるのが吉。気に入らなければDVDを取り出して再起動すれば元通り。


インストーラに従ってインストール

インストーラに従ってインストールするだけ。パーティションは全体を使うようにした。Windows 8は消えてしまうが、万が一の場合にリカバリディスクがあるので大丈夫。

2013年8月24日土曜日

Ubuntu 12.04 に Xen をインストールする(失敗)

参考: http://gihyo.jp/admin/serial/01/ubuntu-recipe/0198

Ubuntuをホスト環境としてXenインストールするために xen-hypervisor-4.1 というパッケージを入れればよいと書いてありますが、4.1の部分は変わっているかもしれないので、「xen-hypervisor」という名前を含むパッケージを探すと:

$ apt-cache search xen-hypervisor

xen-hypervisor-4.1-amd64 - Xen Hypervisor on AMD64
xen-hypervisor-4.1-i386 - Xen Hypervisor on i386
と出たので、「xen-hypervisor-4.1-amd64」を入れようと試みました。

$ sudo apt-get install xen-hypervisor-4.1-amd64

以下の特別パッケージがインストールされます:
  bridge-utils libaio1 libc6-xen librados2 librbd1 libxen-4.1 libxenstore3.0
  qemu-keymaps qemu-utils xen-utils-4.1 xen-utils-common xenstore-utils
提案パッケージ:
  xen-docs-4.1
推奨パッケージ:
  xen-hypervisor-4.1
以下のパッケージが新たにインストールされます:
  bridge-utils libaio1 libc6-xen librados2 librbd1 libxen-4.1 libxenstore3.0
  qemu-keymaps qemu-utils xen-hypervisor-4.1-amd64 xen-utils-4.1
  xen-utils-common xenstore-utils
アップグレード: 0 個、新規インストール: 13 個、削除: 0 個、保留: 4 個。
5,200 kB のアーカイブを取得する必要があります。
この操作後に追加で 13.3 MB のディスク容量が消費されます。
続行しますか [Y/n]? Y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main bridge-utils i386 1.5-2ubuntu7 [32.0 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu/ precise/main libaio1 i386 0.3.109-2ubuntu1 [6,648 B]
取得:3 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libc6-xen i386 2.15-0ubuntu10.4 [1,241 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main librados2 i386 0.41-1ubuntu2.1 [817 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main librbd1 i386 0.41-1ubuntu2.1 [53.9 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libxen-4.1 i386 4.1.2-2ubuntu2.10 [141 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main libxenstore3.0 i386 4.1.2-2ubuntu2.10 [20.7 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe qemu-keymaps all 1.0.50-2012.03-0ubuntu2.1 [19.1 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main qemu-utils i386 1.0+noroms-0ubuntu14.10 [383 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xen-hypervisor-4.1-amd64 i386 4.1.2-2ubuntu2.10 [742 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xenstore-utils i386 4.1.2-2ubuntu2.10 [13.4 kB]
取得:12 http://jp.archive.ubuntu.com/ubuntu/ precise/universe xen-utils-common all 4.1.2-1ubuntu1 [96.5 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/universe xen-utils-4.1 i386 4.1.2-2ubuntu2.10 [1,633 kB]
5,200 kB を 4秒 で取得しました (1,121 kB/s) 
dpkg: 警告: ファイル '/var/lib/dpkg/status' を解析。28748 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
dpkg: 警告: ファイル '/var/lib/dpkg/available' を解析。30170 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
以前に未選択のパッケージ bridge-utils を選択しています。
(データベースを読み込んでいます ... 現在 317695 個のファイルとディレクトリがインストールされています。)
(.../bridge-utils_1.5-2ubuntu7_i386.deb から) bridge-utils を展開しています...
以前に未選択のパッケージ libaio1 を選択しています。
(.../libaio1_0.3.109-2ubuntu1_i386.deb から) libaio1 を展開しています...
以前に未選択のパッケージ libc6-xen を選択しています。
(.../libc6-xen_2.15-0ubuntu10.4_i386.deb から) libc6-xen を展開しています...
以前に未選択のパッケージ librados2 を選択しています。
(.../librados2_0.41-1ubuntu2.1_i386.deb から) librados2 を展開しています...
以前に未選択のパッケージ librbd1 を選択しています。
(.../librbd1_0.41-1ubuntu2.1_i386.deb から) librbd1 を展開しています...
以前に未選択のパッケージ libxen-4.1 を選択しています。
(.../libxen-4.1_4.1.2-2ubuntu2.10_i386.deb から) libxen-4.1 を展開しています...
以前に未選択のパッケージ libxenstore3.0 を選択しています。
(.../libxenstore3.0_4.1.2-2ubuntu2.10_i386.deb から) libxenstore3.0 を展開しています...
以前に未選択のパッケージ qemu-keymaps を選択しています。
(.../qemu-keymaps_1.0.50-2012.03-0ubuntu2.1_all.deb から) qemu-keymaps を展開しています...
以前に未選択のパッケージ qemu-utils を選択しています。
(.../qemu-utils_1.0+noroms-0ubuntu14.10_i386.deb から) qemu-utils を展開しています...
以前に未選択のパッケージ xen-hypervisor-4.1-amd64 を選択しています。
(.../xen-hypervisor-4.1-amd64_4.1.2-2ubuntu2.10_i386.deb から) xen-hypervisor-4.1-amd64 を展開しています...
以前に未選択のパッケージ xenstore-utils を選択しています。
(.../xenstore-utils_4.1.2-2ubuntu2.10_i386.deb から) xenstore-utils を展開しています...
以前に未選択のパッケージ xen-utils-common を選択しています。
(.../xen-utils-common_4.1.2-1ubuntu1_all.deb から) xen-utils-common を展開しています...
以前に未選択のパッケージ xen-utils-4.1 を選択しています。
(.../xen-utils-4.1_4.1.2-2ubuntu2.10_i386.deb から) xen-utils-4.1 を展開しています...
man-db のトリガを処理しています ...
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
dpkg: 警告: ファイル '/var/lib/dpkg/status' を解析。28936 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
bridge-utils (1.5-2ubuntu7) を設定しています ...
libaio1 (0.3.109-2ubuntu1) を設定しています ...
libc6-xen (2.15-0ubuntu10.4) を設定しています ...
librados2 (0.41-1ubuntu2.1) を設定しています ...
librbd1 (0.41-1ubuntu2.1) を設定しています ...
libxen-4.1 (4.1.2-2ubuntu2.10) を設定しています ...
libxenstore3.0 (4.1.2-2ubuntu2.10) を設定しています ...
qemu-keymaps (1.0.50-2012.03-0ubuntu2.1) を設定しています ...
qemu-utils (1.0+noroms-0ubuntu14.10) を設定しています ...
xen-hypervisor-4.1-amd64 (4.1.2-2ubuntu2.10) を設定しています ...
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-52-generic
Found initrd image: /boot/initrd.img-3.2.0-52-generic
Found linux image: /boot/vmlinuz-3.2.0-51-generic
Found initrd image: /boot/initrd.img-3.2.0-51-generic
Found linux image: /boot/vmlinuz-3.2.0-49-generic
Found initrd image: /boot/initrd.img-3.2.0-49-generic
Found linux image: /boot/vmlinuz-2.6.32-49-generic
Found initrd image: /boot/initrd.img-2.6.32-49-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Ubuntu 9.04 (9.04) on /dev/sda1
done
xenstore-utils (4.1.2-2ubuntu2.10) を設定しています ...
xen-utils-common (4.1.2-1ubuntu1) を設定しています ...
xen-utils-4.1 (4.1.2-2ubuntu2.10) を設定しています ...
update-alternatives: /usr/lib/xen-default (xen-default) を提供するために 自動モード で /usr/lib/xen-4.1 を使います。
dpkg-query: 警告: ファイル '/var/lib/dpkg/status' を解析。28936 行目付近、パッケージ 'designkit.702840f10216893fc3494b731e825b33666733d6.1':
 バージョン文字列 'v5.0.0' にエラー: バージョン番号が数字から始まっていません
libc-bin のトリガを処理しています ...
ldconfig deferred processing now taking place
xen-hypervisor-4.1xen-hypervisor-4.1

2013年6月17日月曜日

Androidで「艦これ」をプレイする方法


友達に進められて艦隊これくしょん(通称:艦これ)を始めてみました。

しかし、現在対応機種はWindowsとMac OSのみ。UbuntuなどのLinuxでもプレイは問題なくできますが、Androidを使って外でも気軽にプレイしたいところです。

AndroidのFirefoxブラウザはflashが動くので、設定をすればプレイすることができます。私はFirefoxをインストールして次の2つの設定をしました。

FirefoxでPCサイトを見るためのアドオン Phony をインストール

PCサイトモードにチェック

Firefoxを起動してメニューを見ると「PCサイトモード」という項目があるのでチェック!


これで、Firefoxを再起動(Androidも再起動?)して、艦これのサイトへ行くとプレイできるようになりました。たまに 「Flash Playerの実効速度が遅くなっています」とか言われるけれど、キャンセルして待てば大丈夫。



環境
  • Xperia GX: SO-04D
  • Android 4.0.4
  • Firefox 21.0

2013年6月12日水曜日

Google Newsで特定のメディアを消す方法

Google Newsではいろいろなニュースメディアからの記事を一覧できますが、特定のメディアを表示させないようにカスタマイズすることができます。

例えば朝日新聞(asahi.com)からの記事を表示させないように設定する方法は次の通りです。

  1. まず、news.google.comにアクセスし、歯車の設定ボタンを押します。
  2. 次に、「ニュース提供元を調整」とあるすぐ下のテキストボックスに「asahi.com」と入力して、「+」を押します。
  3.  するとすぐ下の領域にasahi.comという項目とスライダーバーが出てきます。
  4.  スライダーを一番左まで寄せて「ほぼ読まない」にすれば完了です。
以上で、 朝日新聞の記事は消えて、表示されなくなります。

2013年4月5日金曜日

PlayのFutureの注意点

Play frameworkでプログラミングするときは基本的にブロックする処理は避けるべきです。
しかし、通信処理や重い計算などでどうしても、一時的にブロックしてしまうことはあり得ます。そんなときはFutureを使えばよいですが、使い方にちょっと注意が必要らしいです。

次の例は5分ごとに"Hello"を返す WebSocket  サーバーの実装です。

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.iteratee.Iteratee
import play.api.libs.iteratee.Enumerator
import scala.concurrent.Future
import play.api.libs.concurrent.Execution.Implicits._
import scala.language.reflectiveCalls

object Application extends Controller {
  
  def index = WebSocket.using {
    req =>
      val in = Iteratee.consume[String]()
    
      val out = Enumerator.repeatM {
        Future {
          create()
        }
      }

      (in, out)
  }
  
  def create () : String = {
    Thread.sleep(5 * 60 * 1000) //重い処理を表現
    "Hello"
  }
}

Future { } に 重い処理を渡していますが、このときに暗黙の引数としてExecutionContextが必要です。ググると「play.api.libs.concurrent.Execution.Implicits._」をimportするとよいみたいな記事が見つかったので、その通りにしたというところです。

しかし、このサーバーを実行した上で、このwebsocketサービスを利用するページをブラウザでたくさん(5~10)のタブでどんどん開くと、Playサーバーが応答しなくなってしまいます。他のサービスや、静的コンテンツなどもplayのものはすべてbusyになってしまいます。

問題の原因はおそらく、Futureでくるんだ処理が実行される環境(ExecutionContext)です。Playのドキュメント「Understanding Play thread pools」を読むとだいたい次のような事が書いてあります。
  • Playでブロックする処理や重い処理を書くときは、それがどのThread Poolで実行されるか意識する必要がある
  • Playには目的に応じていくつかのThread Poolがある
  • Thread Poolの設定はapplication.confでする
そこで、AkkaでThread Poolを用意してそこで重い処理をするように明示的に指定するという方法を取りました。修正後のコードは以下の通りです。
package controllers

import play.api._
import play.api.mvc._
import play.api.libs.iteratee.Iteratee
import play.api.libs.iteratee.Enumerator
import scala.concurrent.Future
import scala.language.reflectiveCalls
import play.api.libs.concurrent.Akka
import play.api.Play.current

object Application extends Controller {
  
  def index = WebSocket.using {
    req =>
      val in = Iteratee.consume[String]()
    
      val executionContext = Akka.system.dispatcher
      val out = Enumerator.repeatM {
        Future {
          create()
        } (executionContext)
      }

      (in, out)
  }
  
  def create () : String = {
    Thread.sleep(5 * 60 * 1000)
    "Hello"
  }
}




環境
  • Play 2.1.1
  • Scala 2.10.1