仕事のコツ

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

要点は以下の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


以上。

ローカルプロジェクトをバージョン管理 【GitHub】

ローカルで作成した既存のプロジェクトをGitHubでバージョン管理する

目次
①ローカルリポジトリの作成
②作成したリポジトリにプロジェクトをコミット

環境
eclipse:Kepler 4.3.2
・プロジェクトは作成済みとする


①ローカルリポジトリの作成
・プロジェクトを右クリック → プロジェクトの共用
f:id:hatehate_masaki:20160927232056j:plain

・Gitを選択して、次へ
f:id:hatehate_masaki:20160927232309j:plain

リポジトリーの作成
 ・赤枠にチェックを入れる
 ・青枠を押下 (チェックは入れない)
 ・リポジトリーの作成を押下
 ・完了を押下
f:id:hatehate_masaki:20160927232106j:plain

②作成したリポジトリにプロジェクトをコミット
・プロジェクトを右クリック → チーム → コミット → すべてのファイルを選択 → コミット


★以下の様にプロジェクトのアイコンに筒マークが付いていたら完了
f:id:hatehate_masaki:20160927234013j:plain




※Creation of repositories in the Eclipse workspace is not recommendedについて
リポジトリの作成場所をC:\Users\xxxx\git\リポジトリ名 などに変更すれば本警告は出なくなります。お好みで。

アカウント作成 & リモートリポジトリ作成 【GitHub】

GitHubにアカウント、リポジトリを作る手順

目次
手順① GitHubのトップページにアクセスする
手順② 利用プランを選択してFinish sign upをクリックする
手順③ アカウント登録通知メールのURLにアクセスする
手順④ 必要事項を入力してリモートリポジトリを作成する

手順① GitHubのトップページにアクセス
How people build software · GitHub
・赤枠を入力してSign up for GitHubをクリック
f:id:hatehate_masaki:20160821195423j:plain

手順② 無料版を選択して、Finish sign upをクリック
f:id:hatehate_masaki:20160821195431j:plain

手順③登録したメールアドレスに通知メールが来るので、URLをクリック
 1. 赤枠を入力する。青枠は入力不要
 2. Create repository をクリック
f:id:hatehate_masaki:20160821195435j:plain

 3. リポジトリ作成完了
f:id:hatehate_masaki:20160821195438j:plain

以上。

ajax, servlet連携

・画面側

$(document).ready(function() {
    $("input:button").click(function() {
        if (window.confirm('○○しますか?')) {
            // xxチェック
            var _return = isExistXX();
            var obj = JSON.parse(_return);
            if (obj['message'] == "success") {
                dropzone.processQueue();
            } else {
            alert("~が存在しません。~して下さい。");
            }
        }
    });
});
function isExistXX() {
    var param1 = document.forms[0].xx.value;
    return $.ajax({
    url : '/IsExistXX',
    // async(非同期) : false
    async : false,
    type : 'POST',
    dataType : 'json',
    data : {
        parameter1 : param1
    },
    timeout : 10000,
    success : function(data) {
    // alert("成功");
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
    // alert("失敗");
    }
    }).responseText;
}

・サーバ側

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {

String xx= req.getParameter("parameter1");

String aaa = Util.getZZZ(xx);

String message = "";
    if (!aaa.isEmpty()) {
    message = "success";
    } else {
    message = "fail";
    }
String responseJson = "{\"message\":\"" + message + "\"}";
res.setContentType("application/json;charset=UTF-8");
PrintWriter out = res.getWriter();
out.write(responseJson);
// out.print(responseJson); ← printだとjs側でJSON.parseができないので注意
}