気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Bash 処理経過時間を計測する

計測用テストシェル

#!/bin/bash

startTime=`date +%s%3N`

# 計測処理
for ((i=0; i < 10000; i++)); do
    echo $i
done

endTime=`date +%s%3N`
elapsedTime=`echo $(($endTime - $startTime))`
echo "elapsedTime: $elapsedTime msec"

出力結果

1
2
・・・
9999
elapsedTime: 330 msec

MySQL Indexの作成、参照、変更、効果確認コマンド

Indexの作成

-- 通常インデックス
create index idx_name on table_name (name);

-- 複合インデックス
create index idx_group_id_name on table_name (group_id, name);

Indexの参照

作成したIndexを確認する

show index from table_name;

Indexの削除

誤って作成したIndexを削除する

alter table table_name drop index idx_group_id_name;

Indexの効果の確認

EXPLAIN select * from table_name where name = 'test';

bash ファイル圧縮、S3転送を行うスクリプト

s3設定済みの前提。

#!/bin/bash

for file in `ls dump_*.sql | cut -d'.' -f1`; do
  tar --remove-files -zcvf "$file".tgz "$file".sql
  aws s3 cp "$file".tgz s3://dump/
  STATUS=$?
  if [ $STATUS = 0 ]; then
    rm -fr "$file".sql
  fi
done

gitクライアントツールのssh設定

TortoiseGit、SorceTreeのssh設定をまとめてみます。
2つ使う理由としては、TortoiseGitが差分が見やすい、 SorceTreeは現状が視覚的に見えるので。

TortoiseGit

参考URL

秘密鍵と公開鍵を生成

TortoiseGitをインストールした後に、 TortoiseGitのディレクトリ内にある「PuTTyPuTTYgen」を起動

Generateを押した後にマウスをぐりぐりと動かし、キーを作成。

Save private keyでを押して、praivat.ppk(秘密鍵)を作成。
Save public keyを押して、public.ppk(公開鍵)を作成。

TortoiseGitでの設定

右クリで表示する「Git Clone」のメニューを開いて

Load Putty Keyのところで、作成したprivate.ppkを設定。
これでリポジトリにある公開鍵で鍵がかかった情報に秘密鍵で鍵を開けに行き、
情報を取得できるようになる。

あとは、取得先のリポジトリURLを指定すればOK

Source Tree

秘密鍵と公開鍵を生成

「メニュー」→「ツール」→「SSHエージェントを起動」
PuTTYを立ち上げる。TortaiseGitと同じ要領でKeyを作成。

秘密鍵の登録

「メニュー」→「ツール」→「Launch SSH Agent」→「Pagentを起動」

Add Keyボタンで作成した秘密鍵を登録してパスワードを入力

Pagentは、pullやpushの際に毎回、パスワードを聞かれなくしてくれるツールです。

Git Clone設定

元のパス:リモート先のリポジトリURL
保存先パス:ローカルリポジトリのパス

以上です。

Javaシステム開発、新しい現場で押さえておきたい情報

サービス、アプリ

広告系、ECサイトandroidアプリなど
サービスによって、求められる技術が変わってくる。

社風

残業推奨か、残業制限か。
社員の顔色はどうか笑。顔色が悪い場合、サービスやシステムも思わしくない場合が多い。

業種にも寄るが、髪型・服装・喋り方などでもある程度わかる。

使用言語

Java, JavaScript(JQuery), Perlなど。RubyC++などサブで使っているかなども押さえておきたい。
どのくらいの割合で使うのか。

Junit単体テスト書いているか。書いているところは、企業体力ある気がする。
テストに工数さけるってことだから。

使用フレームワーク

フロント、サーバー、DBアクセスなどフレームワーク
独自フレームワークでないことを願いたい。

ソース管理

CVS(もうないか)、SVN、Git。 最近、ずっとSVNだったけど、Gitになったから復習しないとわかんね。

ビルド、デプロイ

Ant, Maven, gradle ビルドツール。大事だよね。gradleって便利なのかな。使ったことない。
Jenkins。Javaで他にCIツールってあるのかな。

ミドルウェア

Apche、Tomcat、Nginx。サーバー周り。
OraclePostgreSQL これはどれでもいいかな。DBMS毎のクセのあるSQLの書き方はいけない気がするし。

公開鍵暗号方式とは?

インターネットで安全に情報をやり取りするための暗号化の仕組みとして、
公開鍵暗号方式と、共通鍵暗号方式が上げられます。
違いは、暗号化や復号化する際に、「公開鍵」を使うか、「共通鍵」を使うかの違い。

公開鍵暗号方式

情報の暗号化と復号化に別々の鍵を使うのが特徴。
データの暗号化の際に、「公開鍵」を用い、復号化の際に、「秘密鍵」を用います。

公開鍵はその名の通り、公開されている鍵で、公開鍵を入手すれば、だれでも秘密鍵を持っている人に
安全に情報を贈ることができます。
逆に秘密鍵は、公開されず、厳重に保管することで保持している人だけが情報を見ることが
できるようになっています。

Apache Tomcatの基本を復習してみる

Java ServletをWebサーバー上で動作させるための「サーブレットコンテナ」の一つ。
作成したJava Servletの動作確認をするための簡易的なWebサーバーとしての機能も備えています。

本格的にWebサービスを作成する場合は、Apache(Webサーバーソフト)をサーバーにインストールして
サーバーを動作させます。

ディレクトリ構成

Tomcatで重要なディレクトリとファイルを記載します。

tomcat($CATALINA_HOME)
  ∟ bin ・・・Tomcatプログラム格納先
  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml
  ∟ lib ・・・必要なAPIを格納。DB接続など
  ∟ logs ・・・ログ格納先
  ∟ temp
  ∟ webapps ・・・作成アプリの格納先(デプロイ先)
    ∟ ROOT ・・・http://localhost:8080/でアクセスできる(ROOTの名前の通り、ルートでアクセス可)
      ∟ index.html
      ∟ WEB-INF ・・・WEB-INF以外は公開される。WEB-INF以下は、公開されない。設定ファイルなどを配置
        ∟ web.xml ・・・classes以下のクラスファイルへどのようなURLでアクセスさせるかを記載
        ∟ classes ・・・コンパイル済みファイルを格納
    ∟ docs・・・http://localhost:8080/docs/でアクセスできるアプリ
    ∟ examples
    ∟ host-manager
    ∟ manager
  ∟ work

設定ファイル

次にTomcatの設定ファイルの概要について確認していきます。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml

実際の設定ファイルの配置先は、conf¥Catalina¥localhost以下になります。 localhostはホスト毎のディレクトリ。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ Catalina
      ∟ localhost
        ∟ ROOT.xml  ・・・ 静的ファイルを保持するプロジェクトの読み込み使ったりする
        ∟ sampleApp.xml ・・・実際に作成したアプリのcontext.xml

context.xml

コンテキストの登録を行うファイルです。
アプリの配置先とその呼び出し方を設定します。

<Context path="/hello"
docBase="c:/sampleApp/helloworld"/>

docBaseにアプリケーションのルートディレクトリを指定。
pathには、アプリケーションを呼び出すための文字列を指定します。

helloworld以下にindex.htmlが配置されている前提とすると。
呼び出す際は以下のようなURLとなります。

http://localhost:8080/hello/index.html

sever.xml

サーバー単位の設定ファイルです。
Webアプリケーションの登録、ロギング、アクセス方法などが指定してあります。

EnginタグのNameでCatalinaが指定してあったり、defaultHostでlocalhostが指定して
あったりします。Catalinaがサーブレットコンテナ。

昔は、Context pathの指定もこのファイルに存在していたが、現状は、context.xmlとなっている。

tomcat-users.xml

Webアプリケーションマネージャーを使う際にお世話になるファイル。
Webアプリケーションマネージャーは、ウェブ画面でサーバーの配備や起動、停止を行えるツールです。

ウェブ画面にログインするためのアカウントを設定したりします。

以下のアカウントを設定する場合、は以下のように設定します。
ユーザー名:admin
パスワード:pass

<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="pass" roles="manager"/>

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
-->
</tomcat-users>

web.xml

コンテキストの登録により、静的ファイル(.html)などは参照できますが、
Servletなどは、別途web.xmlに指定が必要です。

フレームワークを導入していると、独自の設定ファイルやアノテーションやクラス名からの推測で設定が不要だったりします。
フレームワークなしの場合の設定を押さえておくことで、Servletを用いていた際の基本設定を理解しておきます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/helloworld</url-pattern>
  </servlet-mapping>
</web-app>

上記のようにサーブレットのクラス名とサーブレット名、サーブレット名と呼び出しURLに付与するパス名を 紐付けるように指定します。

以下のように呼び出します。

http://localhost:8080/hello/helloworld