変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

【Java】あのテーション

EnumとキャストでInvokeしまくるソースよりは・・・
Strutsの様にその実装をXMLで隠蔽した方が数段マシ。
しかし、StrutsのXMLよりは・・・
SpringというかJAX-RSのアノテーションを使った方がマシ。
とは云うものの自分でアノテーションを書く機会がほとんどなく、すっかり忘れてしまったので

また調べてみた。

Java 独自のアノテーションを作成して値を取得するサンプル
がレイアウトが見やすく、サンプルで使い方を説明していて好感が持てた。
しかし、実際に使うにはサンプルのクラスの中が混ざりすぎ、更に調べてみると
Java Java リフレクションとアノテーションを組み合わせて使用する
の記事が、そのまま使えそう風のサンプル・ソースが付いていたが、特定のクラスしか調べられない。
なので更に調べてみた。
java パッケージ配下のクラス一覧を取得 外部ライブラリは使用しない
特定のパッケージのみだが、そこにあるクラスをザザっと調べるので、使えそう。
ここで、2番目の記事のソースのReflectionUtil.output(Object obj) { … } のパラメータを Class<?> cc に変えてみたバージョンを追加。
途中で後悔しそうになったけど、
Eclipseのエラった時のヘルプの誘導でクリアできた。
書き込んだアノテーションは全部列挙するようになっている(ハズ
でも、f.get(cc.newInstance()); の部分はどうにかならないかな?(と思っている。
途中で本当にドン詰まりになってしまってから・・・
「プロジェクトのJavaのランタイムがJDK5」のままだったことに気が付き、
JDK8に切り替えたので、そこまでの部分は無駄が多いかもしれない。

	public static void output(Class<?> cc) {
		if (cc == null) {
			return;
		}
		System.out.println("クラス名:" + cc.getName() + "{");
		Field[] fieldList = cc.getDeclaredFields();
		for (Field f : fieldList) {
			f.setAccessible(true);
			String name = f.getName();
			System.out.print(" プロパティ名:" + name + " ");
			try {
				/*Object fieldObj =*/ f.get(cc.newInstance());
			} catch (IllegalArgumentException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			} catch (InstantiationException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			}
			// RetentionPolicy.RUNTIME以外はここがnullになります。
			if (f.getAnnotation(CustomAnnotation.class) != null) {
				Annotation[] anoLst = f.getAnnotations();
				for (Annotation ano : anoLst) {
					Annotation element = f.getAnnotation(ano.annotationType());
					System.out.print(" " + " アノテーションの設定値:"
							+ f.getAnnotation(CustomAnnotation.class));
				}
			}
			System.out.println("");
		}
		System.out.println("}");
	}

これを3番目の記事のソースからちょっこと呼び出してみる。

	public static void main(String... args) throws Exception {
		String packageName = PK_NAME;
		List<Class<?>> classes = getClasses(packageName);
		for (Class<?> class1 : classes) {
			System.out.println(class1.getName());
			//ここから
			Class<?> cc = Class.forName(class1.getName());
			ReflectionUtil.output(cc);
			//ここまで
		}
	}

でも、配下のパッケージとかも対象にして欲しかったのでちょっと追記してみた。

			// ディレクトリ配下のファイル数分ループ
			for (String path : dir.list()) {
				// ".class"で終わるファイルのみ返却用のリストに追加
				if (path.endsWith(".class")) {
					classes.add(Class.forName(packageName + "." + path.substring(0, path.length() - 6)));
					//
				} /* ここから */ else {
					// サブ・パッケージ
					classes.addAll(getClasses(packageName + "." + path));
				} // ここまで
			}

そして実行結果
※検索するパッケージのパスはSampleに変えてあります。

Sample.CustomAnnotation
クラス名:Sample.CustomAnnotation{
}
Sample.demo1.Hoge2
クラス名:Sample.demo1.Hoge2{
 プロパティ名:name アノテーションの設定値:@Sample.CustomAnnotation(value=aaaa)
 プロパティ名:value アノテーションの設定値:@Sample.CustomAnnotation(value=bbbb)
}
Sample.GetClassList
クラス名:Sample.GetClassList{
メソッド名:PK_NAME
}
Sample.Hoge
クラス名:Sample.Hoge{
 プロパティ名:name アノテーションの設定値:@Sample.CustomAnnotation(value=aaaa)
 プロパティ名:value アノテーションの設定値:@Sample.CustomAnnotation(value=bbbb)
}
Sample.ReflectionUtil
クラス名:Sample.ReflectionUtil{
}
Sample.TestMain
クラス名:Sample.TestMain{
}

まだ、調査が甘いけど、アノテーションを使ったワークフレームの雰囲気をちょっとだけ触れた気がしてきた。
もっと理解が進めば、WEBアプリのワークフレームやJUnitモドキを作れるようになれるのかな?(大笑
しかし、一番気になるのはSpringとかアノテーションをたっぷり使ったワークフレームのサンプルだったら、実行やデバッグの準備に半日(かな漢変換すると「反日」がデフォな変な日本語IMEだな)かかったりするんだよね(大笑
やっぱり実装はEnumとキャストでInvokeしまくってるか?良くてもジネリックな<?>や<T>な?ソースだろうから、依存パッケージの微妙なバージョンの違いで、微妙な実行結果が出てしまうんだろうな・・・(トホホ
上のソースにも Class cc) なんて書いてしまってるけど、これなんかはJDKのアップデートが来ただけで、動かなくなることは十分にあり得る。(と思う。
※ソース中の < や > が < や &rt; に化けていたので修正。
※ソース中の メソッド名を プロパティ名に 訂正。
メソッドとプロパティって内包するデータの構造がチョット違う程度なので、今でも同じに見えてしまう。
C言語のStructやClassがJavaではみんなClassな様に、だったらJavaのEnumやinterfaceもClassしても良さそうなものだが、実行時の事前分析がとてもメンドクサイことになり起動がもっともっさりしてしまうに違いない。



【Thorntail】project-defaults.ymlの置き場所

ドキュメント
Auto detection picks up project-defaults.yml from src/main/resources
と書いてあるので、src/main/resourcesフォルダを作って、project-defaults.ymlを置いておけばいいのかな?
その下の
ClassLoader cl = Main.class.getClassLoader();
URL stageConfig = cl.getResource(“project-defaults.yml”);
がベタ過ぎてこまる気がする。
どう書くのかは、この辺
でもデータベースとかポートとかは、この辺かな?
JUnit風にテストするには、arquillianを使うらしい。
本家のドキュメントには
pom.xmlに

<dependencies>
  <dependency>
    <groupId>io.thorntail</groupId>
    <artifactId>arquillian</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies> を付け、さらにproject-defaults.ymlにデータベースの設定(例)が
swarm:
  datasources:
    data-sources:
      MyDS:
        driver-name: myh2
        connection-url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
        user-name: sa
        password: sa
    jdbc-drivers:
      myh2:
        driver-class-name: org.h2.Driver
        xa-datasource-name: org.h2.jdbcx.JdbcDataSource
        driver-module-name: com.h2database.h2 と続き、
package org.wildfly.swarm.howto.incontainer;
@RunWith(Arquillian.class)
@DefaultDeployment(type = DefaultDeployment.Type.JAR)
public class InContainerTest {
@ArquillianResource

InContainerTest context;

で、インスタンスを確保して、

@Test
public void testDataSourceIsBound() throws Exception {
    DataSource ds = (DataSource) context.lookup("java:jboss/datasources/MyDS");
    assertNotNull( ds );
}

が走るようになればいいのかな?

}

これで、InContainerTestをGoすればいつもの様にJDBCの設定のテストができるっぽい。
でも、記憶を遡ると、JBOSSのJDBCの設定って通算で4通りくらいあったし、最近のJBOSS系の設定はサッパリだ。
違うドキュメントにはJUnitっぽい方法が書いてあったり、この辺は実際に動かしてみたいと(><; ) わかんないんです!なぁ。
実際のSQLは、どうなるのかな?とググってみると
Connection con;PreparedStatement prepStmt ;ResultSet rs ;
        try {
            Context context = new InitialContext();
            DataSource ds = (DataSource) context.lookup("java:jboss/datasources/${DS名}");
            con = ds.getConnection();
            String selectStatement =  "select * from ${table名} where ${field名} = ?";
            prepStmt = con.prepareStatement(selectStatement);
            prepStmt.setString(1, "*");
            rs = prepStmt.executeQuery();
            while (rs.next()) String title = rs.getString(0);
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            rs.close(); prepStmt.close(); con.close();
        }
のように書けばいいらしい。
というか
<dependency>
  <groupId>io.thorntail</groupId>
  <artifactId>camel-mybatis</artifactId>
</dependency>
を使った方がいいかな。
ここを見たけど、挫折しそう。ここはMyBatisの本家がいい。
本家のドキュメントには The task of the JDBC driver is communicating with the database while providing a constant API to application developers. An application must supply its own JDBC driver because of the wide range of available databases and the driver version. Usually, the application does not directly interact with the JDBC driver; instead, the underlying runtime manages creating a datasource, which provides an efficient way to share and manage a discrete connection or a pool of connections to a particular database using the driver. と書いてあるから先の様にDataSourceを参照すれば、自動的にPostgreSQLConnectionPoolDataSourceが使われてコネクション・プール化されるような気がする。 ただし、postgreSQLの場合はdataSourceNameやinitialConnectionsやmaxConnectionsも必要らしいので、project-defaults.ymlの設定項目が swarm: datasources: jdbc-drivers: org.postgresql: driver-class-name: org.postgresql.Driver xa-datasource-class-name: org.postgresql.xa.PGXADataSource driver-module-name: org.postgresql data-sources:   ${DS名}: driver-name: org.postgresql connection-url: jdbc:postgresql://localhost:5432/postgres user-name: postgres password: postgres で十分なのか?不安がある。 ログ用の書き方はとても長いけど、ちゃんと作らないと困りそう。
swarm:
  logging:
    pattern-formatters:
      LOG_FORMATTER:
        pattern: "CUSTOM LOG FORMAT %p [%c] %s%e%n"
    periodic-rotating-file-handlers:
      FILE:
        file:
          path: path/to/your/file.log
        suffix: .yyyy-MM-dd
        named-formatter: LOG_FORMATTER
    root-logger:
      handlers:
      - CONSOLE
      - FILE

 
 



【nginx】設定ミスでハマる

大方のボンミスはエラるので判るが
初期設定で、
location = /50x.html {
root html;
}
の様な部分がある。
ここだけは、=があっても動くが、
ここをコピってproxy_pathの設定を作ると
location = /rest/ {
proxy_pass http://localhost:8080/;
}
となってしまいがち。
=付なので、/rest/ に完全に一致した場合のみヒットするルールになる様で
/rest/xxxxx/yyyyyなどはヒットせず、
恐らく
location / {
root html;
index index.html index.htm;
}
に沿って探していって、404。
ログには${NGINX}/html//rest/xxxxx/yyyyy not found.となるハズ。
location /rest/ {
proxy_pass http://localhost:8080/;
}
と、気が付いて直すまで結構時間を食ってしまった。
え?ヘボいミスだって?
いっぱいルールを書いた後は、まず気が付かないと思うよ?



nginx(エンジンエックスっぽく発音するらしい)

素で、読み方が判らない。
今回は、このnginxThrontailを繋いでみる。
nginxはv.1.12.2、Throntailはv.2.2Final。
Throntailのプロジェクトを専用のGeneratorで作成するとpom.xmlの<version>1.0.0-SNAPSHOT</version>となるが、
<properties>をみると<version.thorntail>2.2.0.Final</version.thorntail>なのでMavenからは最新のものをダウンロードしているのだろう。
デバッグしやすいようにpom.xmlは

<dependency>
<groupId>io.thorntail</groupId>
<artifactId>bom-all</artifactId>
<version>${version.thorntail}</version>
<scope>import</scope>
<type>pom</type>
</dependency>

の後ろに

<dependency>
<groupId>io.thorntail</groupId>
<artifactId>thorntail-devtools</artifactId>
</dependency>

を、

<groupId>io.thorntail</groupId>
<artifactId>thorntail-maven-plugin</artifactId>
<version>${version.thorntail}</version>

の後ろに

<configuration>
<mode>thin</mode>
</configuration>

を追記しておく。
Eclipseでリモートデバッグする場合は、プロジェクトのフォルダで、以下のコマンドを実行しておく。

cd /d %~dp0
echo on
echo "java.exe 強制終了"
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
pause "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"
echo "Throntailリモートデバッグ実行(自動リロード付き)"
mvn thorntail:run -Dswarm.debug.port=8000
pause "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"

これでThrontailの方は準備完了。
リモートデバッグを使わないなら、 -Dswarm.debug.port=8000を消す。
nginxは、ダウンロードページから落としたnginx-1.12.2.zipは展開しておく。
nginx.exeを起動するとnginx -s stopで停止、nginx -s reloadで再設定。
らしい。
nginx.confは、

location /rest/ {
proxy_pass http://localhost:8080/;
}

を追記して、/rest/で始まるリクエストは全部/rest/部分を除いたURLでThrontailへ飛ばす様にした。
/rest/login の場合は loginに短くなった後、http://localhost:8080/が頭に付くので、Throntailに渡るURLは、http://localhost:8080/loginになる。

参考ソース
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css" >
<script src="script/jquery-3.3.1.js"
<title>Test</title>
</head>
<body>
<h1 class="center">ログイン</h1>
<form class="center">
<table class="center">
<tr>
<th>ユーザID:</th>
<td><input type="text" id="userid" ></td>
</tr>
<tr>
<th>パスワード:</th>
<td><input type="password" id="password" ></td>
</tr>
<tr>
<td class="center" colspan="2"><input type="button" id="send" value="ログイン"></td>
</tr>
</table>
</form>
</body> </html>

CSSはこれだけ。

.center { text-align: center; }
.colspan2 { colspan=2; }
table { margin-left: auto; margin-right: auto; }

ただこのままでは誰が送ってきたのか判らないので、
JAX-RSの @HeaderParam アノテーションを使ってみる。

@Path("/login")
public class LoginEndpoint {
	@GET
	@Produces("text/plain")
	public Response doGet() {
		String msg="ログインしましたget";
		System.out.println(msg);
		return Response.ok(msg).build();
	}
	@POST
	@Produces("text/plain")
	public Response doPost(@HeaderParam("User-Agent") String userAgent,
            @HeaderParam("Accept") String accept,
            @HeaderParam("Accept-Encoding") String encoding,
            @HeaderParam("Accept-Language") String lang) {
		String msg="ログインできるかな?";
    	Map<String,String> map = new HashMap<String,String>();
    	map.put("message", msg);
    	map.put("User-Agent", userAgent);
    	map.put("Accept", accept);
    	map.put("Accept-Encoding", encoding);
    	map.put("Accept-Language", lang);
		System.out.println(map);
    	return Response.ok(map).build();
	}
}

これでHTML+JavaScript+RESTのWebサービスのとっかかりが出来た。



WildFly SwarmはThrontailに改名したらしい

WildFly Swarm

というのが、なかなか見つからなかったり・・・
やっと見つけたジェネレータでプロジェクトを作って実行させようとすると
mvn thorntail:run
と入力する様になっていたり、
結果が
Hello from Thorntail!
だったり、
何か変だと思ってたら、Throntailに改名していたらしい。
mvn thorntail:runに-Dswarm.debug.port=8000を付ければリモートデバッグできるらしい。
試しにrunしてみるとjava.exeが2つ起動する。
コマンドラインで、CTRL+Cすると

バッチ ジョブを終了しますか (Y/N)?

が表示されるので、(/ω\)イマイチ感が半端ない
ここに落とし穴があった。
もう1回、mvn thorntail:runすると、いっぱいログが流れて失敗する。
よーく探すと、
ERROR [stderr] (main) Caused by: org.jboss.msc.service.StartException in service org.wildfly.undertow.listener.default: Address already in use: bind /0:0:0:0:0:0:0:0:8080
なんてのが混ざっていて、リソースモニターを見ると、java.exeが1つ残っていた!
CTRL+Cしたら、毎回リソースモニターを開いてjavax.exeを止めるか、taskkill /im java.exe /f しないといけない。(難物
でも、うまくリモートデバッグすれば、Eclipseのデバッグビューから【終了】のボタンを押すと、コマンドラインもちゃんと終了する。【切断】しても【再起動】すれば【終了】のボタンを押すと、コマンドラインもちゃんと終了するので、コマンドラインからCtrl+Cで止める時だけ気を付ければいいようだ。
https://docs.thorntail.io/4.0.0-SNAPSHOT/(※賞味期間が長くなさそうな名前)の方のドキュメントに

9. Developer Tools

と云うのがあって、pom.xmlの<dependencyManagement>の中の<dependency>の最後に

<dependency>
<groupId>io.thorntail</groupId>
<artifactId>thorntail-devtools</artifactId>
</dependency>

を付けて、コマンドラインで

> set  THORNTAIL_DEV_MODE=debug
> mvn thorntail:run -Dswarm.debug.port=8000

して、
Listening for transport dt_socket at address: 8000
と出てくるまで待ってから、
Eclipseからデバッグを開始してみる。
すると、デバッグ・ビューにいっぱいプロセスが出てきたら、おもむろに【STOP】。
この沢山あるプロセスの中から、それっぽいプロセスを選択してソースを開いてブレークポイントをセットするのがミソらしい。
そして、【再開】。
でも、どこにでも神様はいるらしい。
pom.xmlの<plugins>の中の<plugin>~</version>の後に
下の赤い文字部分を追加すると、THORNTAIL_DEV_MODE=reload相当の機能が追加されるらしい。

<configuration>
  <mode>thin</mode>
</configuration>

なので、こんなremoteDebug.batを作ってみた。

echo on
echo "java.exe 強制終了"
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
taskkill /im java.exe /f
pause "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"
echo "Throntailリモートデバッグ実行(自動リロード付き)"
rem set THORNTAIL_DEV_MODE=debug
rem set THORNTAIL_DEV_MODE=reload
mvn thorntail:run -Dswarm.debug.port=8000
pause "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"

これで、java.exeの残骸も気にせずに、Ctrl+Cが押せるし、Eclipseでソースを修正して保存して、ブラウザからデバッグページを開けば新しくなる。
リモートデバッグさまさま。
ついでにブレークポイントを使える様になった。
ブレークポイントでうまく止まらない場合は、ヒマしてるスレッドにあててしまっている可能性が高いので、

  • デバッグビューの【中断】ボタンを押して実行中のスレッドを止める。
  • スレッド(中断中)の左端の「>」を押して停止中のスタックの一番上をクリックし、ソースにブレークポイントを貼りなおして【F8】でGO。
  • ブラウザからデバッグするソースんもURLを開いても、ブレークポイントがスカったら、また【中断】し、一つしたのスレッドにトライ。

ソースを修正する度に、テストが面倒なJUnitっぽいテストについては
先のサイトの最新ドキュメントに方法が書いてあるので、
ビジネス・ロジックあたりのデバッグは支障無いようだ。
 

今回の所感

pom.xmlに
<mode>thin</mode>
を追記すれば解決!(笑顔
でも、こんな書き方では

ドコに入れればいいんだよ?(泣

になってしまった訳で・・・
そんな間の抜けた書き方をするDocumentが
もう少しマシだったら誰も困らないんだろうなぁ・・・
 
とつくづく思った。



【RaspberryPi 2 B】NASってみる

youtobeでRaspberryPi 3 BにOpenMediaVaultを入れてNASを作った動画があったので
RaspberryPi 2 Bでやってみたら、micro-SDカードのOpenMediaVaultのイメージがエラってしまい、ブート中にカーネルパニックで終了してしまった。
一応、OpenMediaVaultのサイトにあったRaspberryPI 2 Bでも動くはずのイメージのハズなんだけどね?
普通にRaspbian Stretch Liteで、sudo apt-get install  OpenMediaVault すると、apt-get中に依存パッケージ(php5-fpm等)のセットアップに失敗。
PHP5依存なのは・・・ちょっと驚いた。
しかし、カーネルをお古(Jessie Lite)に変えても、結局はセットアップのコマンドの最後の仕上げあたりで失敗(Fail)。
$ sudo apt-get update や $ sudo apt-get upgrade で、最新にしてしまうと失敗するようだ。
OpenMediaVaultのサイトにRaspberryPI用のイメージで起動できなかったらスッパリと諦めた方が良さそうだ。
以下、古くある方法で、NTFSでフォーマットしたHDDをマウントすることにする。

  1. SAMBAをインスト
    • sudo apt-get install samba
  2. NTFSフォーマットを認識できるようにする。
    • sudo apt-get install ntfs-3g
  3. とりあえずここでリブート
    • sudo reboot
  4. SATA-USBアダプタにHDDを繋ぎに、USBをRaspberryPiに接続。
  5. どこに繋がったのかを確認する
    • sudo fdiak -l
    • いっぱい出てくるので/dev/sdで始まるトコを見る。※今回は2個つないでいる。
    • Device Boot Start End Sectors Size Id Type
      /dev/sda1 2048 3907026943 3907024896 1.8T 7 HPFS/NTFS/exFAT
    • /dev/sdb2 2048 3907026943 3907024896 1.8T 7 HPFS/NTFS/exFAT
  6. 見つかったら、UUIDを調べる
    • sudo blkid /dev/sda1
    • /dev/sda1: LABEL=”******** ” UUID=”********” TYPE=”ntfs” PARTUUID=”*******-**”
    • sudo blkid /dev/sdb2
    • /dev/ssb2: LABEL=”******** ” UUID=”########” TYPE=”ntfs” PARTUUID=”*******-**”
  7. UUIDを使って、ログインするユーザのホームディレクトリの下にマウントするようにする。
    • sudo vi /etc/fstab で追記
    • UUID=”********” /home/{ユーザ名}/NAS1 ntfs-3g nofail,uid=1000,gid=1000,umask=0022 0 0
    • UUID=”########” /home/{ユーザ名}/NAS2 ntfs-3g nofail,uid=1000,gid=1000,umask=0022 0 0
    • ※nofailは、起動時にHDDを反応しない時にブートで待ち続けることを避けるため。
    • ※uid=1000,gid=1000,umask=0022は、piユーザなら書き込みできるようにするため。デフォルトではrootのみ。
    • ※mkdir で/home/{ユーザ名}/NAS1と/home/{ユーザ名}/NAS2 を作っておく。
  8. sambaを設定する
    1. smb.confはsmb.conf.orgにバップアップした後にsudo vi /etc/samba/smb.conf
      • [global]
        • security = user
      • [homes]
        • comment = Home Directories
        • browseable = no
        • writable = yes
        • valid users = %S

ユーザ専用NASはユーザのホーム・ディレクトリィ下にマウントしないとダメな仕様らしい。
でも、接続時にアカウント認証しないみたい(PC起動直後はアカウント入力あり)で、ゲストOK状態に観える。
ラズパイはオーバークロック、LANは1Gbps(ラズパイはWifi接続)、HDDはUSB-HDD(USB2)で、これくらい。

ラズパイからWindowsへコピー

Windowsからラズパイへコピー

高速ではないけれど、NAS経由でMPEG動画を見ても見苦しくない。(AVI形式は厳しい)
 
ゲストOKなら、
HDDをマウントするのは/mntの下の方がいいだろう。

[global]
security = share

[public]
path = /mnt/NASxxx
public = yes
writable = yes
hosts allow = 192.168..

あたりで大丈夫だろう。



【MS Office】ログインするとEXCELやWORDが勝手に起動する

いつのまにか?
ログインするとEXCELやWORDが勝手に起動している。
Windows 10 の「設定」の「アプリ」のリストから「MS Office」を選択し、「詳細リンク」をクリックすると、「修復」や「リセット」または「アンインストール」から「インストール」しなおすと、直ることもあるらしい。
しかし、成功率は余り高くない。大抵は失敗(つまり、やはりログインすると勝手にEXCELなどが起動)してしまう。
なぜ、こうなるのかと云うと、最初にEXCELやWORDを起動しようとすると、とても時間がかかるので、ログインした時に「こっそりとEXCELやWORD」が自動的に起動される仕組みが設定されているのだ。
なぜか、「最近のMS OFFICE 360」は、この「こっそり」のオプションが抜けやすくなっている様で、堂々と「白紙」でウインドウを表示してしまい、イライラさせるわけだ。
それなら、「ログインした時にEXCELやWORDを起動する」の設定を「タスクマネージャのスタートアップにあるはずの【MS OFFICE】」をOFFってしまえばいいハズだが、姑息にも表示されない様になっているので始末が悪い。仮にOFFできても、「最初のEXCELやWORDの起動はとても時間がかかる」ので、いざMS OFFICEを使おうとすると、「とても待たされてしまう」ので、何度も起動してしまい、一度にいくつも無駄なウインドウが出てしまい。やはり面白くない。
確証は無いけど、
ログインした時に「勝手に開いたEXCELやWORD」が開く。
「勝手に開いたEXCELやWORD」のウインドウの「メニュー」の「ファイル」の「閉じる」を押して、何も文書を開いていない状態にする。
「勝手に開いたEXCELやWORD」のウインドウの右上の×ボタンをクリックして閉じる。
こうすると、起動オプションが再設定されて・・・次のログイン時には表示しないことがある。
但し、うまくいっても、暫くすれば、再発するのは間違いない。
推測だけど、「最初のEXCELやWORDの起動はとても時間がかかる」せいで、自動起動したEXCELやWORDがこっそり起動するのか?白紙を表示するのか?見極めが難しいんだと思う。
サブスクリプションのライセンス有効期間のチェックとか、お得な2PCで利用可にする処理とか、
初期起動が重くなってしまう要因は色々ありそう。
海外版だけらしいけど、実用的な線で、5ユーザまで同時利用可能になるという噂をネットで観た。
便利だとは思うけど、起動チェックが更に重くなってしまいそう。
それとも、初期起動が重いのは仕方が無いと・・・開き直ったのかな?



【Windows 10】Hyper-VにFedoraをインストしてみる

今回は、Fedoraをインストしてみた。
Hyper-Vの仮想マシンは、第一世代バージョン、メモリは1GB、ネットワークはいつもの「新しい仮想スイッチ」。
CDはダウンロードしたFedora-Workstation-Live-x86_64-28-1.1.isoを指定。
いざ起動。
Anacondaのチェックリストがちょっと流れた後、画面が∑(・∀・) コワレタ !!
そして、それっきり。
(強制的に)停止。
仮想マシンの設定を見直してみると・・・
ハードウェアの追加に「RemoteFX 3Dビデオアダプター」というのがあったので追加してみた。(解像度はHD解像度がリストアップされなかったので、1920x1200は不安があったので、1280 x 1024)
再度、起動。
すると、さっきの∑(・∀・) コワレタ !!画面の後、しばらく待つと・・・
LiveUserをクリックすると、また真っ黒な画面で待たされ・・・
しびれを切らして、右クリックしたら・・・
インスト画面が表示された。
再起動させてみると、
また、インスト画面が・・・
ここは、Hyper-Vからシャットダウンさせた。
再び、起動。
時計の画面・・・
また、しびれを切らして、右クリックしたら・・・
というか「何かキーを押せばよかったらしい」
動作確認のため、Hyper-Vからシャットダウンさせ、起動。
画面に「・・・」だけが出てきた。
画面をキャプチャしようとAlt+PrintScreenを押すと、Anacondaのログが流れ出す。
どうやら、かなり遅いようだ。
ユーザ登録を適当に済ませると・・・再び画面が壊れる(今回は縦筋がいっぱい出る)
Hyper-Vからシャットダウンさせ、起動。
やっと、デスクトップは拝めた。
やはり、何事も慣れが必要な様だ。
 
 
 



CPUベンチ

CINEBENCH R15で手元のPCを調べていなかった(ハズな)のでやってみた。
CPUはマルチ・コア、OpenGLはグラボやSSEを利用。

CPU 性能
Intel Core i7-3770T(3th:Ivy Bridge) 549
Intel Pentium Gold G5500(7th:Coffee Lake) 401
Intel Pentium CPU G4560(6th:Kaby Lake) 357
Intel Celeron CPU G3900(5th:Skylake) 218
Intel Pentium CPU G3258(4th:Haswell) 230
Intel Core 2 Duo CPU E8400 164
Open-GL GPU(CPU) 性能(fps)
Geforce GTX 1060 6GB/PCIe/SSE2 (i7-3770T) 62.26
Intel(R) UHD Graphics 630 (G5500) 47.97
Intel(R) HD Graphics 610 (G4560) 20.07
Intel(R) HD Graphics 510 (G3900) 24.33
Intel(R) HD Graphics (G3258) 16.59
AMD Radeon HD 5670 (E8400) 24.07

スティックPCもやってみたかったが、Windowsが32ビット版だったので走行不可だった。
手持ちの放置G3900はマザボと相性が悪くなってしまいブートすらしなかった。
結果をサラっと見ると、CPUの方は順当に上がってる感じ。
手元で最速のCore i7-3770T(4C8T)は、すぐ傍までG5500(2C4T)に背後を脅かされているし、最近のCore-i7 (8700Kはスコアが1500台らしい)とは、かなり差が開いている気がする。
GPUはIntel Pentium Gold G5500のIntel(R) UHD Graphics 630が結構頑張ってる感じがした。
DirectX11ではGTX1060とは差が開くかもしれないが、これくらいならオンボでもいいような気がする。
※但し、G5500のCPUファンとすぐ傍にあるケースの激安っぽいファンの音が干渉しブンブン五月蠅くなってきたのであまり使っていない。簡易水冷にしようかな?
未だにE8400やHD 5670があるが、もう捨ててもいいレベル。昨今のWindows10の大規模アップデートを辛うじてやっとの思いでクリアしている姿は、痛々しい限りであるが、そのPCケースはHDDレコーダの台としての盤石な地位にあり、まだまだ末長く長生きしそうである。
ちょっと気になるのがGTX1060である。最近ファンが回っている様子が無い。今回も・・∑(・∀・) コワレタ !!かな?
ps.2018/10/26
DELL Latitude 3560がかなり遅い。CPU Core i5-5200U @ 2.20GHz 2.20 GHz Cinebench CPU 173cb GPU 30.90fps
ただ、気になった中古ノートのCore i5 6300U(2.4GHz)も300ぐらいなので、あんまり変わらないのかもしれない。
しかし、今日はあの有名なウイルス監視ソフトの問題で30分以上もHDDをフルアクセスされてしまい、数文字のIMEの反応すらサッパリな状況になる。
ググってみると、延々とC:\Program Files\Trend Micro\AMSP\debugにログを吐き続けることがあるそうな。アンスコしてこの辺のファイルがバッサリ消えたことを確認して再インストすると一旦はファイルの総量が激減するので症状が緩和されるらしい。試しにやってみると、ウソのように起動直後のもたつきが収まった。再発したら、また再インストするしかないか。



反重力物質

だらだらとyoutobeを観ていたら
反物質⇒反重力⇒反重力物質⇒反重力エンジン
という流れになっていた。
反物質は自然界に極普通に存在すると考えられているが、目にする機会はほとんどアリエナイ。
なぜなら、普通の物質と接すると共にエネルギーに変換されてしまうので、目に映る程の反物質の塊が目の前に存在する可能性が無いのだ。
ただ、反物質と物質がエネルギーに変換された結果として発生したガンマー線を測定したという噂はあり、極短時間なら反物質は自然界に存在するようだ。
反重力は、重力の反対の力場、つまり引力ではなく物質間で斥力が発生する場のことだが、手近な磁界や電荷でも同様な斥力も発生するので該当するのか?と思いきや、身近な力場であるし、引力も発生しうるから不可らしい。どうやら、どんな物質間でも斥力が発生する力場ということの様だ。
反重力物質は、普通に重力が発生する物質と同様に普通に反重力が発生する物質である。と思ってたけど、今はわずかでも重量を減少させる効果がある物質なら反重力物質・研究対象の範疇らしい。大体、重力物質と反重力物質を接近させると、重力物質は反重力物質に多くの重力子を放出し、反重力物質の方へ移動したがる様な気がするものの、重力場と反重力場が互いに力場を相殺すると考えれば、近傍まで接近させれば重力場の傾斜度が高くなり急に逆方向に移動したがるような気もする。
反重力エンジンは、先の重力物質と反重力物質の対を応用し、加速・減速・停止が可能なものだ。と思ってたけど、今はわずかでも重量を減少させる効果がある装置なら反重力エンジンの研究対象の範疇らしい。
 
 
 
 
 
 
 




top