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

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

Java 例外クラス

Javaの例外クラスの基本についての要点を簡単に記載しておきます。

継承関係

-Throwable
--Error
--Exception
---RuntimeException

-の数が、継承関係を示します。

各種例外の意味するところ

例外クラス 説明
Throwable throw文に指定できるかどうかを表すクラス
Error キャッチすべきではない重大な問題を示します
Exception キャッチされる可能性のある状態を示す
RuntimeException メソッドの実行中にスローされるがキャッチされない例外。非チェック例外

まとめとクラス作成時のポイント

  • throwできる例外のが、Throwable。そのサブクラスがException、RuntimeException
  • Exceptionはキャッチされる可能性があるクラスにextendさせる
  • RuntimeExceptionはキャッチしてはいけないクラスにextendさせる

Atomエディタ 初期設定

矩形選択ができるようにする

初期状態では矩形選択ができないため、Atomのパッケージ管理コマンドを用いて、
パッケージをインストールする。

インストール方法

$ apm install sublime-style-column-selection

Atomを再起動する。

使い方

Alt(Option)+ マウスを動かす(短形選択)

特に設定不要で簡単にできるようになりました。
サクラエディタはキーボードで選択できるが、こちらはマウス(トラックパッド)で選択しないといけない。。
でもわかりかし一般的なコマンドなので、忘れづらくて良いですね。

Unixの各種ログの意味(messages, cron, secure)

ログイン認証、メール送信ログなど様々な用途に応じて、様々な種類のログが存在します。 syslogなどのログ制御システムを介して出力する場合もあれば、プログラム自体が出力する場合もあります。

1. 一般的なログと格納先

ファイル名 用途 主な格納先 ログの出力元
cron cronの実行結果を保存 /var/log syslog
maillog メール関連 /var/log syslog
messages システムメッセージ、各種ソフト /var/log syslog
secure セキュリティ関連 /var/log syslog
access_log Apacheアクセスログ /var/log/httpd httpd
error_log Apacheのエラーログ /var/log/httpd httpd

ほとんどのアプリケーションは、syslogdを利用してログを出力しています。
syslogは、メールサーバプログラムのsendmail用に開発されたものだけど、広く浸透し、当たり前のように利用されている。
プログラム自体が出力するログとしては、WebサーバのApacheなどがある。

2. syslogの設定(syslog.conf)

各アプリケーションのログ設定は、/etc/syslog.confの値で決まります。 syslogdは、この設定ファイルを読み込みログを出力する。

2.1 syslog.conf

syslog.confのフォーマットは、「取得するログの指定」と「取得ログの出力先」の指定を行います。

*.info;mail.none;cron.none                              /var/log/messages

「取得するログの指定」は、facilityとpriorityから成ります。

facility(機能)

ログを出力する機能を指す。 auth,cron,ftp,mailなど

priority(重要度)

ログ出力の緊急度 emerg,alert,err,info,debug,noneなど

取得ログ出力先

どこに出力するかの指定 ファイル名, /dev/console, ユーザー, * など

3. syslog設定例

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;cron.none                              /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  /var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

・
・
・

Java8 LocalDateTimeと旧Dateの相互変換

Java8のLocalDateTimeからDateへの変換は思いのほか、骨が折れる。。
DBfluteのJava8対応で日時項目が、LocalDateTime型としてentity生成されているので、調べたがそもそも使わないというのもありかもしれない。。

LocalDateTimeからDateへの変換 その1

LocalDateTime ldt = LocalDateTime.now();
Date d = Date.from(ldt.toInstant(ZoneId.systemDefault().getRules().getOffset(ldt)));

LocalDateTimeからDateへの変換 その2

ZonedDateTimeを間に挟むやり方。見やすくはなる。

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date rd = Date.from(zdt.toInstant());

DateからLocalDateTimeへの変換

DateからLocalDateTimeへの変換は次のように書けます。

Date d;
LocalDateTime ldt = LocalDateTime.ofInstant(d.toInstant(), ZoneId.systemDefault());

Maven プラグインが落とせない場合の確認ポイント

1. プラグイン取得先

プロキシ設定などがされている場合、人によって、プラグインが取得できない場合がある。

pom.xmlの通常設定

  <repositories>
    <repository>
      <id>central</id>
      <name>Maven2 Central Repository</name>
      <url>http://repo1.maven.org/maven2/</url>
    </repository>

上手くいかない場合は、以下のURLを試してみるとダウンロードできる場合がある。

      <url>https://repo.maven.apache.org/maven2/</url>

2. Mavenのクラスパス変数の設定

設定 ⇒ Java ⇒ ビルドパス ⇒ クラスパス変数 に「M2_REPO」が存在するかどうか確認
なければ、変数を追加する。

クラスパス変数:M2_REPO
パス:C:\Users\user_name.m2 ※mavenディレクトリを指定

3. プロキシの設定

基本的には、設定 ⇒ 一般 ⇒ ネットワーク接続におけるプロキシ設定が反映されています。

ただし、m2e, m2eclipseの場合は、追加の以下の設定が必要なようです。

設定場所
C:\Users\user_name.m2\settings.xml ※ファイルがなければ作成

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <proxies>
    <proxy>
      <id>http_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.test</host>
      <port>12345</port>
    </proxy>
    <proxy>
      <id>https_proxy</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>proxy.example.test</host>
      <port>12345</port>
    </proxy>
  </proxies>
</settings>

もし、エラーが発生する場合は、Mavenコマンドの update projectを実施すると解決する可能性があります。

MacでHome brewを用いて、MongoDBをインストール&初期設定

1. インストール手順

1.1 Home brewパッケージをアップデート

$ brew update

1.2 Mongo DBをインストー

$ brew install mongodb
==> Downloading https://homebrew.bintray.com/bottles/mongodb-3.4.4.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring mongodb-3.4.4.yosemite.bottle.tar.gz
==> Caveats
To have launchd start mongodb now and restart at login:
  brew services start mongodb
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf
==> Summary
🍺  /usr/local/Cellar/mongodb/3.4.4: 18 files, 269.8MB

1.3 バージョン確認

$ mongo
MongoDB shell version v3.4.4

1.4 設定ファイル

/usr/local/etc/mongodb.conf

2. Mongo DBの起動

2.1 初期設定

データ格納ディレクトリの作成を行います。

$ sudo mkdir /var/lib/mongodb

ログファイル作成を行います。

$ sudo touch /var/log/mongodb.log

2.2 Mongo DBを起動

2.2.1 通常起動

先程作成した、データ格納ディレクトリとログファイルを指定します。

$ sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

2.2.2 バックグラウンド起動

--fork コマンドを付与して起動します。

$ sudo mongod --fork --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

停止する場合は、Mongoシェルより行う。

$mongo
> use admin
switched to db admin
> db.shutdownServer()
server should be down...

3. Mongo DBの自動起動設定

サービスを起動する。

$ brew services start mongodb
==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)

サービスリストを確認する。

$ brew services list
Name       Status  User   Plist
mongodb    started tezuka /Users/aaa/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

自動起動設定の確認

$ ls -l ~/Library/LaunchAgents/
total 24
lrwxr-xr-x  1 aaa  staff   50 Jun  2 22:33 homebrew.mxcl.mongodb.plist -> /usr/local/opt/mongodb/homebrew.mxcl.mongodb.plist

サービスを停止する。

$ brew services stop mongodb
Stopping `mongodb`... (might take a while)
==> Successfully stopped `mongodb` (label: homebrew.mxcl.mongodb)

Oracle 前月初日と前月末日を取得する

前月初日

2ヶ月前の末日の次の日で求める。

select TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1)
from dual;

結果

2017-04-01

前月末日

1ヶ月前の末日で求める。

select TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))
from dual;

結果

2017-04-30