Eclipse エラー・ログの解析

本エントリーでは、eclipseのエラー・ログ ビューに出たエラーを解析していきます。
根本原因までは分かっておらず、発生している原因を特定するところまでの内容となります。
C:\Program Files (x86)\Gow\bin\which.exe: no git in
f:id:hatehate_masaki:20170131225521p:plain

環境

  • Neon.2 Release (4.6.2) win版

発生契機

このエラーで困っていること

  • 特になし


目次

  • エラーをダブルクリックして詳細を確認する
  • which.exeを試してみる
  • 解析結果


手順
1. エラーをダブルクリックして詳細を確認する
f:id:hatehate_masaki:20170131230941p:plain
メッセージの内容をよく見てみると、以下のように読み取れます。
C:\Program Files (x86)\Gow\bin\which.exeを実行したが、no git inである。
(.;c:\pleiades\eclipse\jre\jre\bin\server;c:\pleiades\eclipse\jre\jre\bin;c:\pleiades\eclipse\jre\jre\lib\amd64;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;c:\Windows\system32;c:\Windows;c:\Windows\System32\Wbem;c:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;c:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Gow\bin;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Common Files\Intel\WirelessCommon\;c:\Users\AppData\Local\Microsoft\WindowsApps;.;c:\pleiades\eclipse;.)

つらつら何かのディレクトリが書いてあるが、要はwhich.exeを実行している模様。


2. which.exeを試してみる
何故、私がこの間インストールしたGoweclipseが参照しているのかは謎であるが、
コマンドプロンプトでwhich.exeを実行してみます。
GowコマンドプロンプトでUNIXコマンドを使う。【Gow】 - hatehate_masaki’s blog

f:id:hatehate_masaki:20170201001808p:plain
whichは、引数に指定した値のフルパスを返すコマンドのようです。
4行目:Write the full path of COMMAND(s) to standard output.
"COMMAND(s)の完全なパスを標準出力に書き出します。"

そして、which git で実行すると、eclipseのビューに出たエラーと同じです。
どうやらeclipseが起動の際にGowでコマンドを叩いていたようです。
f:id:hatehate_masaki:20170201001755p:plain


3. 解析結果
おそらく、gitをインストールして、環境変数の設定からパスを通せばこのエラーは出なくなると思われる。


終わり。



追記
eclipseのログを確認する
 困ったときは以下のログも見てみると何か分かるかもしれないです。
 C:\pleiades\workspace\.metadata\.log

Eclipse ダークテーマ 設定まとめ

・完成イメージ
f:id:hatehate_masaki:20170118225428p:plain


本エントリーでは、Eclipseを黒基調にする手順、黒基調に適した設定を記載します。

トピック

  • ダークテーマに変更する
  • エクスプローラまたはナビゲータ内の文字色を見やすい色に変更する
  • お洒落なシンタックスハイライトを設定する
  • コミット前の差分ファイルが背景色と同化して見えないのを解消する
  • 見やすいフォントに変更する


以下、設定の手順を記載していきます。
EclipseのバージョンはNeon.2 Release (4.6.2) win版とします。

  1. 外観をダークテーマに変更する
  2. 色テーマを変更する
  3. ダークテーマ設定時に読み込んでいるCSSを修正する
  4. GitまたはSVNのコミット前ファイルの文字色を変更する
  5. 文字フォント、サイズを変更する


1. 外観をダークテーマに変更する
ウィンドウ → 設定 → 一般 → 外観 からダークテーマに変更する。
f:id:hatehate_masaki:20170118232535p:plain


2. 色テーマを変更する
ウィンドウ → 設定 → 一般 → 外観 → 色テーマ からSublime Text2に変更する。
f:id:hatehate_masaki:20170118233005p:plain


3. ダークテーマ設定時に読み込んでいるCSSを修正する。(設定後は-clean.cmdで再起動)
C:/pleiades/eclipse/plugins/org.eclipse.ui.themes_1.1.300.v20161107-1827/css/e4-dark_win.css

「変更前」
##########
CTabFolder Tree, CTabFolder Canvas {
background-color: #2F2F2F;
/* 灰色 */
color: #CCC;
}
##########
「変更後」
##########
CTabFolder Tree, CTabFolder Canvas {
background-color: #2F2F2F;
/* 肌色 */
color: #ffdf7f;
}
##########


4. GitまたはSVNのコミット前ファイルの文字色を変更する
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント → Git
f:id:hatehate_masaki:20170118234606p:plain


5. 文字フォントを変更する
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント からテキスト・フォントをConsolas, 10pxに変更する。
f:id:hatehate_masaki:20170118234235p:plain



追記。
######################################
1. コメント文字色
2. コンソールの文字色
3. プロポーザルの色
4. "class"フォルダの色
5. スクロールバーをデフォルトにする

1. コメント文字色
構文の色指定で、java, js, CSS, HTML, JSP, XMLのコメント文字色を設定する。

[設定値]
java, CSS : 白 rgb(255, 255, 255)
js, JSP, HTML, XML : 薄グレー rgb(227, 227, 227) 白だとコンテンツと同化するため

[手順]
java : ウィンドウ → 設定 → java → エディタ → 構文の色指定

  • javadoc : その他
  • コメント : タスク・タグ、一行コメント、複数行コメント

CSS : ウィンドウ → 設定 → Web → CSSファイル → エディタ → 構文の色指定

  • コメント : 前景

js : ウィンドウ → 設定 → JavaScript → エディタ → 構文の色指定

  • JSdoc - その他
  • コメント - タスク・タグ、一行コメント、複数行コメント

JSP : ウィンドウ → 設定 → Web → JSPファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容

HTML : ウィンドウ → 設定 → Web → HTMLファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容

XML : ウィンドウ → 設定 → XMLXMLファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容


2. コンソールの文字色
[設定値]
白 rgb(255, 255, 255)

[手順]
ウィンドウ → 設定 → 実行/デバック → コンソール → 標準エラーテキスト


3. プロポーザルの色変更
css, HTMLファイルのコード補完ウィンドウの色を、デフォルトだと黒背景に黒文字で見にくいので変更する。
[設定値]
コンプリート機能によるプロポーザルの背景色:薄黒 rgb(227, 227, 227)
コンプリート機能によるプロポーザルの前景色:グレー rgb(47, 47, 47)

[手順]
ウィンドウ → 設定 → 一般 → エディタ → 構造化テキスト・エディター


4. "class"フォルダの色を他と同様、肌色に変更
[設定値]
無視するリソース(前景):肌色 rgb(255, 223, 127)

[手順]
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント → GitまたはSVN


5. スクロールバーをデフォルトにする
C:/pleiades/eclipse/plugins/org.eclipse.ui.themes_1.1.300.v20161107-1827/css/e4-dark_win.css

###
StyledText {
swt-scrollbar-themed: false;
swt-scrollbar-background-color: #383838;
swt-scrollbar-foreground-color: #494949;
swt-scrollbar-width: 4px;
swt-scrollbar-border-radius: 4px;
swt-scrollbar-mouse-near-scroll-width: 15px;
}
###

######################################



以上。

コマンドプロンプトでUNIXコマンドを使う。【Gow】

コマンドプロンプトUNIXコマンドを使えるようにする方法

ls, mv, cat, tail, grepなど100種類のコマンドに対応する、Gowというツールを導入します。
同様なツールでCygwinがありますが、より手軽で軽量です。

[導入手順]

1. exeを任意の場所に配置して、すべて「はい」でインストールする。
https://github.com/bmatzelle/gow/releases/download/v0.8.0/Gow-0.8.0.exe

2. ユーザの環境変数を追加する。
f:id:hatehate_masaki:20170113023926p:plain

3. 設定ファイル配置
C:/Users/xxxx/gow配下に以下のファイルを作成して配置して下さい。

.bashrc

###
export PS1='\h:\w\$ '
export LC_CTYPE=ja_JP.UTF-8
export EDITOR=vi
alias vi='vim'
alias ls='ls -F'
alias ll='ls -laF'
alias ls='ls --show-control-chars'
###


.inputrc

###
set convert-meta off
set meta-flag on
set output-meta on
set mark-directories off
###


.vimrc

###
set fileencodings=guess,utf-8,iso-2022-jp-3,euc-jisx0213,euc-jp,ucs-bom
set fileencoding=utf-8
set fileformats=dos,unix,mac
set fileformat=unix
set shell=bash
###



[使い方]

1. コマンドプロンプトを実行する

2. bash [Enterキー]

3.UNIXコマンドが使えるようになる。shファイルはbash aaa.shで実行する。

こんな感じです。
f:id:hatehate_masaki:20170113030448p:plain


※以下、使用可能コマンド一覧
############
awk, basename, bash, bc, bison, bunzip2, bzip2, bzip2recover, cat,
chgrp, chmod, chown, chroot, cksum, clear, cp, csplit, curl, cut, dc,
dd, df, diff, diff3, dirname, dos2unix, du, egrep, env, expand, expr,
factor, fgrep, flex, fmt, fold, gawk, gfind, gow, grep, gsar, gsort,
gzip, head, hostid, hostname, id, indent, install, join, jwhois, less,
lesskey, ln, ls, m4, make, md5sum, mkdir, mkfifo, mknod, mv, nano,
ncftp, nl, od, pageant, paste, patch, pathchk, plink, pr, printenv,
printf, pscp, psftp, putty, puttygen, pwd, rm, rmdir, scp, sdiff, sed,
seq, sftp, sha1sum, shar, sleep, split, ssh, su, sum, sync, tac, tail,
tar, tee, test, touch, tr, uname, unexpand, uniq, unix2dos, unlink,
unrar, unshar, uudecode, uuencode, vim, wc, wget, whereis, which,
whoami, xargs, yes, zip
############



以上。

仕事のコツ

どうすれば仕事を効率的に進められるか
という事を書いていきます。先輩社員から聞いて勉強になったので共有です。

要点は以下の3つ。

1. 正確なインプット
2. それを記憶
3. 成果物に落とし込む

日々の業務を進める上で大事なことは、
正確な情報を集める → それを記憶する → 成果物として残す。
という一連の流れです。

フェーズ毎の具体例を挙げると、


1. 正確なインプット
作業を進めるにあたり必要な情報のことを指していて、
ドキュメント(検討資料、基本設計書、詳細設計書)やソース、ログなどが該当します。これらから正確な情報を集めて、入力情報とします。


2. それを記憶
次に、それらインプット情報をしっかりと記憶します。
ここがとても重要で、このフェーズなしに作業効率の向上は図れません。
逆にきちんと記憶してることで、資料を見返す時間が節約出来たり、
同僚、お客さんからいきなり質問を受けた場合にも即答できるでしょう。
最低でも資料の格納されてる場所は覚えておき即座に引っ張り出せるようにしておくと良いです。
デスクトップに付箋が散乱していたり、エクスプローラーのお気に入りがぐちゃぐちゃな人は要改善です。


3. 成果物に落とし込む
最後に、集めて記憶した情報から如何にして成果物を出力するかというフェーズです。
ぱっと思い付く作業内容としては、

  • 検討フェーズから、基本設計として起こす設計書一覧をイメージ、検討資料と基本設計書を紐付けをして完成まで持っていく。(色々すっぽ抜けているが割愛)
  • 集計ログから解析結果をドキュメント化する。(解析ツールを使うのか、比較対象は設けるか、何にまとめるかメモ帳かエクセルかパワポか)
  • 詳細設計書からコードに起こす。(設計パターンは思い浮かぶか。実装イメージは出来ているか。テストパターンを意識したロジックを組めるか。)


以上のことを意識して実践していけば、作業効率は上がっていくのではないでしょうか。
※抽象的なところや、間違っているところもありますが、イメージレベルとご容赦いただきたいです。
書き出してみると当たり前のことばかりになってしまいましたが、
当たり前のことが大切なんだと思いました。


以上。




P.S.
次回は各フェーズのコツ
「1.正確なインプット」のコツ
「2.それを記憶」のコツ
「3.成果物に落とし込む」のコツ

HTTPまとめ


目次
1.HTTPとは
2.HTTPメソッドの種類
・各メソッドの説明と、リクエストパラメータの送り方
3.サーバ側(servlet)での構え方


1.HTTPとは
ブラウザとサーバでデータをやり取りするプロトコルOSI参照モデルにおいて
アプリケーション層に位置する。

OSI参照モデル
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層


2.HTTPメソッドの種類


GET, POST, PUT, DELETなどがあります。


GET
サーバからデータを取得するメソッド。基本的には取得要求を行う。
URLの後ろにクエリ文字を付与してデータを送ることも出来る。最大文字数は全体で2,048文字。


実装例:アンカーリンクなどで使う。

<a href="/xx/war/html/xx.html?inputText=hoge&inputText2=hoge2">



POST
サーバにデータを送る際のメソッド。容量制限なし。
HTTPボディ部のnameとvalueでデータを送る。


実装例:

<form action="/upload" method="post">
    <body>
        <input type="text" name="inputText" value="hoge"/>
        <input type="submit" value="POST送信"/>
    </body>
</form>



PUT
POSTと同じような感じ。ただしPUTはべき等性。
クライアント側から何回この要求を投げても更新結果は毎回同じになる場合に用いる。


実装例:
HTTPフォームではGETとPOSTの通信方式にしか対応していないので、要素"_method"に設定する。

<form method="post" action="/">
    <body>
        <input type="text" name="inputText">
        <input type="hidden" name="_method" value="PUT">
        <input type="submit" value="PUT送信">
    </body>
</form>



DELET
アクションパスで指定したサーバのリソースを消す的な。DELETEはべき等性。


実装例:
POST同様に要素"_method"に設定する。

<form method="post" action="/">
    <body>
        <input type="text" name="inputText">
        <input type="hidden" name="_method" value="DELETE">
        <input type="submit" value="DELETE送信">
    </body>
</form>


3.サーバ側(servlet)での構え方


実装例:
ざっくりこんな感じ。

public class Sample1 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    // getAttributeやらgetParameterでリクエストから取得する。
    request.getAttribute("inputText");
    request.getParameter("inputText");
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    doGet();
  }
}


以上。

google cloud storage ファイル削除 【google app engine for java】

アプリからバケット内のファイルを削除するための実装を記載します。
本投稿では実装方法のみ。アプリからGCSへのアクセスの仕組みや、ソースの解説はまた今度。

目次
①前提条件
②必要なjarを取得、ビルドパスを設定
③実装(ソース)


①前提条件
 以下の設定が行われていること。
 ・webの管理コンソールから課金設定を有効にする
  https://console.cloud.google.com/
 ・バケットを作成する
 ・作成したバケットにファイルを格納する


②必要なjarのビルドパスを設定
 1.以下のjarを取得する
 ---
 ・google-api-client-1.21.0.jar
 ・google-http-client-1.21.0.jar
 ・google-http-client-jackson2-1.21.0.jar
 ・google-api-services-storage-v1-rev88-1.22.0.jar
 ---
 ※mavenリポジトリーからダウンロード
  http://mvnrepository.com/

 2.ビルドパスを設定
  /プロジェクト名/war/WEB-INF/lib配下に配置して、
  プロジェクトを右クリック → javaのビルド・パス → jar追加をクリック
  配置したjarを選択しOK


③実装(ソース)

	// GCS ファイル削除処理
	boolean deleted;
	try {
		for (int i = 0; i < 1; i++) {
			// バケット名, xx/xx.jpeg 先頭に/は不要
			deleteFile(BUCKET_NAME, fileNames);
		}
		deleted = true; // 削除成功
	} catch (Exception e) {
		deleted = false; // 削除失敗
		e.printStackTrace();
	}
	private static void deleteFile(String bucketName, String fileName)
			throws Exception {

		Storage storage = getStorage();

		storage.objects().delete(bucketName, fileName).execute();
	}
	private static Storage getStorage() throws Exception {

		if (storage == null) {

			HttpTransport httpTransport = new NetHttpTransport();
			JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

			List<String> scopes = new ArrayList<String>();
			scopes.add(StorageScopes.CLOUD_PLATFORM);
			scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);
			scopes.add(StorageScopes.DEVSTORAGE_READ_WRITE);

			GoogleCredential credential = GoogleCredential
					.getApplicationDefault();
			if (credential.createScopedRequired()) {
				credential = credential.createScoped(scopes);
			}
			storage = new Storage.Builder(httpTransport, jsonFactory, null)
					.setHttpRequestInitializer(credential)
					.setApplicationName(
							getProperties().getProperty(
									APPLICATION_NAME_PROPERTY)).build();
		}
		return storage;
	}
	private static Properties getProperties() throws Exception {

		if (properties == null) {
			properties = new Properties();
			InputStream stream = DeleteUploadedFiles.class
					.getResourceAsStream("/resources/cloudstorage.properties");
			try {
				properties.load(stream);
			} catch (IOException e) {
				throw new RuntimeException(
						"cloudstorage.properties must be present in classpath",
						e);
			} finally {
				stream.close();
			}
		}
		return properties;
	}

こんな感じで出来ました。^^

リモートリポジトリにプッシュ 【GitHub】

プロジェクトをGitHubのリモートリポジトリにプッシュする

目次
①プロジェクトを右クリック
②リモートリポジトリの情報を入力
③プッシュする内容を選択して完了


①プロジェクトを右クリックする
f:id:hatehate_masaki:20160928002826j:plain

②リモートリポジトリの情報を入力する
 ・URI
 ・ユーザ
 ・パスワード
f:id:hatehate_masaki:20160928002958j:plain

③プッシュする内容を選択して、完了する
f:id:hatehate_masaki:20160928003316j:plain


以上。