VMwareを使う勘所
VMwareを使う上で、いくつかポイントがあるので今更ながら自分用のメモとしてまとめておく。
メモリ関連のチューニング
一番パフォーマンスに影響するチューニング。
仮想環境を作ったら、いの一番にこれをコピペする。
構成ファイル(vmxファイル)をテキストエディタで開いて下記を追記する。
mainMem.useNamedFile= "FALSE" MemTrimRate = "0" sched.mem.pshare.enable = "FALSE" prefvmx.useRecommendedLockedMemSize = "TRUE" MemAllowAutoScaleDown = "FALSE"
以下、主なものの説明する。
mainMem.useNamedFile= "FALSE"
標準ではゲストOSのメモリ内容をvmemファイルに出力するが、それを使用しないように設定する。
ディスク容量関連のチューニング
仮想OSを使用していると徐々にディスクファイルが大きくなる(可変長にしている場合)。
時々最適化して圧縮すると良い。
今度はゲストOSからの操作で、コマンドプロンプトを立ち上げて、ゲストOSにインストールされているVMware Toolsの下記コマンドを実行する。
"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk shrink C:\
Dドライブを圧縮するなら
"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk shrink D:\
対象のドライブを表示したいなら
"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk list
実行にはかなりの時間がかかるのと、ホストOSのディスクを一時的に大量消費するので、時間とディスクにゆとりがあるときに実行する。
(ホストOSのディスク容量がなくなったから実行しようとしても、容量オーバーで実行できなかったのは自分)
ちなみにLinuxの場合は
sudo vmware-toolbox-cmd disk shrink /
ドライブの表示は
sudo vmware-toolbox-cmd disk list
Macの場合は
sudo /Library/Application\ Support/VMware\ Tools/vmware-tools-cli disk shrink /
ドライブの表示は
sudo /Library/Application\ Support/VMware\ Tools/vmware-tools-cli disk list
ドラッグアンドドロップ領域の削除
ゲストOSにファイルをコピーするのに、ゲストOSにファイルをドロップしてコピーするが、それは一時的にゲストOSの下記にコピーされる。
C:\Users\%ログインユーザー%\AppData\Local\Temp\VMwareDnD
「%ログインユーザー%」はユーザーごとに読み替えること。
ゲストOSのシャットダウン等、タイミングを見て消してくれるらしいが、たまに残ったままなので気になった時に消すと良い。
前述のディスク容量関連のチューニングをする前には必ず消すこと。
ここが残ってたら圧縮の妨げになる。
ディスクを読み取り専用にする
構成ファイル(vmxファイル)をテキストエディタで開いて下記を追記する。
scsi0:0.mode = "independent-nonpersistent"
指定したディスクとパーティションを「読み取り専用」にして起動してくれる。
UUIDを常に更新する/更新しない
仮想環境には必ずUUIDが割り当てられる。
このUUIDは下記のページによると「物理コンピュータの識別子と仮想マシンの構成ファイルのパスを基に決められます」とあるので、仮想環境を別のPCに移動すると起動時に「この仮想マシンは移動またはコピーされた可能性があります。」とメッセージが表示されて移動したのかコピーしたのか問われる。
この時に「コピーした」と答えると新たなUUIDが生成され更新される(併せてMACアドレスも生成される)。
「移動した」と答えるとUUIDは更新されない。
VMware KB: 移動した仮想マシンの UUID の変更または保持
このメッセージ出力を抑制して常に「コピーした」とするか「移動した」とするかの制御が構成ファイル(vmxファイル)の「uuid.action」の値で制御出来る。
構成ファイルのパスを変更した時にUUIDを常に更新する場合は、構成ファイル(vmxファイル)をテキストエディタで開いて下記を追記する。
uuid.action = "create"
逆に構成ファイルのパスを変更してもUUIDを更新しない場合は、構成ファイル(vmxファイル)をテキストエディタで開いて下記を追記する。
uuid.action = "keep"
Gitの基本的な使い方
Gitを入れた
一般的になりつつあるGitを入れてみた。
Gitのインストール
下記ページを参考にgitを入れた。
http://d.hatena.ne.jp/m-hiyama/20140203/1391381365
Windows環境なので、Git for Windowsをインストール。
Git for Windowsのbashは使えないとのことなので、「Adjusting your PATH environment」は
真ん中の「Use Git from the Windows Command Prompt」を選択。
Gitの設定
社内でやっている以上、プロキシがいるのでプロキシの設定をする。
コマンドプロンクトを立ち上げて下記を実行。
以下がHTTP。
git config --global http.proxy http://host:port
以下がHTTPS。
git config --global https.proxy http://host:port
実行するとホームディレクトリに「.gitconfig」が出来て、上のコマンド内容が反映される。
[http] proxy = http://host:port [https] proxy = http://host:port
今後はこのファイルを変更しても良いということかな。
試しにローカルリポジトリを作ってみる
適当なフォルダを作って、コマンドプロンプトでそこまで行って(Shift+右クリックで「コマンド ウィンドウをここで開く」が便利)、下記コマンドでローカルリポジトリを作成。
git init
どこかのリモートリポジトリからソースを取得してみる。
git clone http://github.com/schacon/grit.git
動き出した・・・。
Cloning into 'grit'... remote: Counting objects: 4051, done. remote: Compressing objects: 100% (2824/2824), done. remote: Total 4051 (delta 1170), reused 4051 (delta 1170) Receiving objects: 100% (4051/4051), 2.10 MiB | 529.00 KiB/s, done. Resolving deltas: 100% (1170/1170), done. Checking connectivity... done.
エクスプローラで見たら、ソースが取得できてた。
Spring Boot/第一回 Spring Boot事始め
Spring Bootを使ってみたのでメモする。
参考にしたのは「はじめての Spring Boot」。
はじめてのSpring Boot―「Spring Framework」で簡単Javaアプリ開発 (I・O BOOKS)
- 作者: 槇俊明
- 出版社/メーカー: 工学社
- 発売日: 2014/11
- メディア: 単行本
- この商品を含むブログ (3件) を見る
Mavenでプロジェクト作成
以下でプロジェクト作成。
mvn archetype:create -DgroupId=tools.springsample.springsample01 -DartifactId=SpringSample01 -Dversion1.0.0-SNAPSHOT
準備(Mavenまわりの設定)
pom.xmlにSpring Boot関係の記述を追加する。
セントラルリポジトリの指定(なぜか指定しないとエラーになる)。
<!-- append start --> <repositories> <repository> <id>central</id> <url>http://central.maven.org/maven2/</url> </repository> </repositories> <!-- append end -->
Spring Bootのテンプレートを親に。
<!-- append start --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.5.RELEASE</version> </parent> <!-- append end -->
Spring Bootの依存関係を追加。
<dependencies> <!-- append start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- append end --> </dependencies>
Spring Bootのプラグインを追加。
<!-- append start --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!-- append end -->
ビルドターゲットは Java8。
<properties> <!-- append start --> <java.version>1.8</java.version> <!-- append end --> </properties>
Spring Bootとは関係ないが、アクセサメソッドを作るのが面倒なのでLombokを使う。
<dependencies> <!-- append start --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.12.2</version> <scope>provided</scope> </dependency> <!-- append end --> </dependencies>
mvn compile
ついでに依存関係ツリーも確認
mvn dependency:tree
以下のようになる。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building SpringSample01 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ SpringSample01 --- [INFO] tools.springsample.springsample01:SpringSample01:jar:1.0-SNAPSHOT [INFO] +- junit:junit:jar:3.8.1:test [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.1.5.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.1.5.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot:jar:1.1.5.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.1.5.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.1.5.RELEASE:compile [INFO] | | | +- org.slf4j:jcl-over-slf4j:jar:1.7.7:compile [INFO] | | | | \- org.slf4j:slf4j-api:jar:1.7.7:compile [INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.7:compile [INFO] | | | +- org.slf4j:log4j-over-slf4j:jar:1.7.7:compile [INFO] | | | \- ch.qos.logback:logback-classic:jar:1.1.2:compile [INFO] | | | \- ch.qos.logback:logback-core:jar:1.1.2:compile [INFO] | | \- org.yaml:snakeyaml:jar:1.13:runtime [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.1.5.RELEASE:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:7.0.54:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:7.0.54:compile [INFO] | | \- org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:7.0.54:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.3.3:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.3.3:compile [INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.3.3:compile [INFO] | +- org.hibernate:hibernate-validator:jar:5.0.3.Final:compile [INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.1.1.GA:compile [INFO] | | \- com.fasterxml:classmate:jar:1.0.0:compile [INFO] | +- org.springframework:spring-core:jar:4.0.6.RELEASE:compile [INFO] | +- org.springframework:spring-web:jar:4.0.6.RELEASE:compile [INFO] | | +- org.springframework:spring-aop:jar:4.0.6.RELEASE:compile [INFO] | | | \- aopalliance:aopalliance:jar:1.0:compile [INFO] | | +- org.springframework:spring-beans:jar:4.0.6.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:4.0.6.RELEASE:compile [INFO] | \- org.springframework:spring-webmvc:jar:4.0.6.RELEASE:compile [INFO] | \- org.springframework:spring-expression:jar:4.0.6.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.1.5.RELEASE:test [INFO] | +- org.mockito:mockito-core:jar:1.9.5:test [INFO] | | \- org.objenesis:objenesis:jar:1.0:test [INFO] | +- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] | +- org.hamcrest:hamcrest-library:jar:1.3:test [INFO] | \- org.springframework:spring-test:jar:4.0.6.RELEASE:test [INFO] \- org.projectlombok:lombok:jar:0.12.0:provided [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.994 s [INFO] Finished at: 2015-01-21T10:20:10+09:00 [INFO] Final Memory: 11M/27M [INFO] ------------------------------------------------------------------------
以上で準備完了。
サービスとコントローラを作る
サービスとコントローラを作る。
サービスでビジネスロジックを記述し、コントローラでビジネスロジックの呼び出しをする。
サービス用のパッケージを「service」として、そこにサービスを作る。
まずはSpringとは関係ない普通のクラスを作成する。
package tools.springsample.springsample01.service; public class SampleService { public String getMessage() { return "Hello world."; } }
これをSpringのサービスクラスにするにはクラス宣言に「@Component」を付ける。
package tools.springsample.springsample01.service; import org.springframework.stereotype.Component; @Component // a public class SampleService { public String getMessage() { return "Hello world."; } }
a -> 「@Component」を付けることにより、インスタンスがDIコンテナによって管理されることになる。
コントローラを作る。
コントローラは自動生成されたAppクラスを流用する。
package tools.springsample.springsample01; import tools.springsample.springsample01.service.SampleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * Hello world! * */ @Controller // d @EnableAutoConfiguration // a @ComponentScan // b public class App { @Autowired // c private SampleService sampleService; @RequestMapping("/") // e @ResponseBody // f public String hello() { return sampleService.getMessage(); } public static void main( String[] args ) { SpringApplication.run(App.class, args); // g } }
DI関係の宣言は下記のとおり。
a -> Springの設定を自動でやってくれるオマジナイ。
b -> @Autowiredで指定したコンポーネントをスキャンする場所(パッケージ)を指定。(自クラス配下なのでパラメータは不要)
c -> DIコンテナからインスタンスを取得する指定。
Web関係の宣言は下記のとおり。
d -> 「@Controller」を付けることにより、コントローラクラスになり、リクエストを受け付けられるようになる。
e -> URLとメソッドのマッピング。
f -> 戻り値をレスポンスとして返すという意味。
g -> Springの起動。Tomcatの起動とデプロイが自動で行われる。
コンパイルする。
mvn compile
起動する。
mvn spring-boot:run
スタックトレースが出なければ起動に成功していると思われるので、ブラウザでアクセスする。
http://localhost:8080/
「Hello world.」が出れば成功。
コントローラからサービスを呼んで、サービスの結果を出力出来た。
Xperia Z3の保護ガラス・シート
これで落ち着いた。
表面
ガラスを貼ってツルツルに。
0.2mmと薄いのも良い。
MS Products Xperia Z3(SO-01G/SOL26/401SO)用ガラスフィルム ゴリラ0.2mmLEPLUS(ルプラス) LP-XPZ3FGLG
- 出版社/メーカー: LEPLUS
- メディア: エレクトロニクス
- この商品を含むブログを見る
裏面
ガラスではなくシートにしてすべり止め。
ガラスだと、ほんのすこしの傾きでも机から滑り落ちる。
- 出版社/メーカー: PDA工房
- メディア: エレクトロニクス
- この商品を含むブログを見る
表と裏に貼ると、充電スタンドのアタッチメントを変えないと収まらないので注意が必要。
アタッチメントは同梱されているものでOK。
今更ながらMavenを使ってみた
大雑把な使い方をメモする。
1.新規プロジェクトを作成
下記コマンドで新規プロジェクトを作成。
mvn archetype:create -DgroupId=(パッケージ名) -DartifactId=(プロジェクト名) -Dversion1.0.0-SNAPSHOT
2.調整
pom.xmlの/project/repositoriesタグに、参照するライブラリの「場所」を記述。
ただし「セントラルリポジトリ」にあるライブラリは記述不要。
セントラルリポジトリに何が登録されているかは下記のサイトで確認する。
http://search.maven.org/#browse
pom.xmlの/project/dependenciesタグに、参照するライブラリの「モノ」を記述。
どのように記述するかは、各ライブラリのサイトで確認する。
例えばSeasarなら、
・repositoriesタグ内に以下を追加
(Seasarはセントラルリポジトリに登録されていないのでrepositoriesの記述が必要)
<repository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven Repository</name> <url>http://maven.seasar.org/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>maven-snapshot.seasar.org</id> <name>The Seasar Foundation Maven Snapshot Repository</name> <url>http://maven.seasar.org/maven2-snapshot</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository>
・dependenciesタグ内に以下を追加
<dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.46</version> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-extension</artifactId> <version>2.4.46</version> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-tiger</artifactId> <version>2.4.46</version> </dependency> </dependencies>
例えばSpring bootなら、
(Spring bootはセントラルリポジトリに登録されているのでrepositoriesの記述は不要)
・dependenciesタグ内に以下を追加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
3.必要に応じて
pom.xmlの/project/build/pluginsタグに、参照するライブラリの「プラグイン」を記述。
例えばSpring bootなら、
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
4.その他
社内でやると十中八九セントラルリポジトリのアクセスがプロキシに拒まれるので、MAVEN_HOMEのconf/settings.xmlにプロキシ設定を追記。
<proxy> <active>true</active> <protocol>http</protocol> <host>xxx.xxx.xxx.xxx</host> <port>xxxx</port> </proxy>