同じSQLでも環境によって上記エラーとなる場合がある
下記のSQLはどの環境でも上記エラーとなる例、年月日時分秒まである日付を年月日でTO_DATEすると発生
select to_date(‘2015/01/01 10:00:00′,’YYYY/MM/DD’) from dual;
同様のことが環境とSQLにより発生する
①環境変数が年月日
NLS_DATE_FORMAT=YYYY-MM-DD
select * from v$nls_parameters where parameter = ‘NLS_DATE_FORMAT’;
日付の確認
select to_char(sysdate) from dual;
2018-07-03
問題なし
SELECT TO_CHAR(SYSDATE, ‘MM/DD’) AS CALENDAR FROM DUAL
問題なし
SELECT TO_CHAR(TO_DATE(SYSDATE, ‘yyyy-mm-dd hh24:mi:ss’), ‘MM/DD’) AS CALENDAR FROM DUAL
②環境変数が年月日時分秒
ALTER SESSION SET NLS_DATE_FORMAT=’yyyy-mm-dd hh24:mi:ss’;
NLS_DATE_FORMAT=yyyy-mm-dd hh24:mi:ss
日付の確認
select to_char(sysdate) from dual;
2018-07-03 17:17:08
問題なし
SELECT TO_CHAR(SYSDATE, ‘MM/DD’) AS CALENDAR FROM DUAL
問題なし
SELECT TO_CHAR(TO_DATE(SYSDATE, ‘yyyy-mm-dd hh24:mi:ss’), ‘MM/DD’) AS CALENDAR FROM DUAL
エラー発生
SELECT TO_CHAR(TO_DATE(SYSDATE, ‘yyyy-mm-dd’), ‘MM/DD’) AS CALENDAR FROM DUAL
PostgreSQLで遅いSQLを見つける
PostgreSQL 8.4以降の場合は統計情報ビューを使って遅いSQL文の特定が可能
SQL の実行回数や実行時間などの統計情報を収集するモジュール「pg_stat_statements」を使用する
この機能は contrib モジュールとして提供されているため「share/contrib/pg_stat_statements.sql」を実行して
別途インストールが必要となる
postgresql.confに下記の設定も必要となる
shared_preload_libraries = ‘pg_stat_statements’
custom_variable_classes = ‘pg_stat_statements’
log_min_duration_statement = 3,000
※log_min_duration_statementパラメータで指定の時間を超えたSQLがあった場合に、
実行時間とログを記録する。上記例では3,000=3秒に設定している。
まず3秒くらいにしてみてログをチェックしてこれでログが出なくなるようにSQLを改善し、
スローSQLログが出なくなったら、パラメータを2秒、1秒と、徐々に設定して1秒でログが
出なくなれば、パフォーマンスも改善していくはず。
「pg_stat_statementsビュー」
userid:SQL文を実行したユーザのOID
dbid:SQL文が実行されたデータベースのOID
query:代表的な文の文字列
calls:実行回数
total_time:SQL文の処理に費やした総時間(ミリ秒単位)
rows:SQL文によって取得された、あるいは影響を受けた行の総数
蓄積された情報を一旦リセットしたい場合は下記でリセットできる。
SELECT pg_stat_statements_reset();
重複の読み方はちょうふく?じゅうふく?
重複の読み方は?
元々は「ちょうふく」が正しい読み方です。
「重」という漢字は「じゅう」という読みで使われることが多いので「じゅうふく」と呼ばれることが増えて
どちらでも問題ないということになりました。
2005年に文化庁が行った「国語に関する世論調査」では
「ちょうふく」が20%
「じゅうふく」は76%
2014年にマイナビがインターネットで行ったアンケートでは
「ちょうふく」が60%
「じゅうふく」40%
アナウンサーなど正しい読み方を求められる場合は、もともとの読み方である「ちょうふく」を用いるようです。
結論としては、もともとの正しい読みは「ちょうふく」で、「じゅうふく」でも問題ないということですね。
アフィリエイトブログサイト作成
WordPressでサイトを作成してから久しぶりの更新となってしまった。
タイトルも「備忘録」から「雑記」へ変更。さらに「Webラボラトリ」へ変更。
アフィリエイトブログサイトはどうすればいいのかを調べていくうちに
記事をコンスタントに作成することが重要でそれを続けることが難しい
ということがなんとなくわかってきた。続けられる人が少ないので
続けられればある程度の広告収入は可能なのではないかと思う。
記事は続けやすく読まれやすい雑記が一番ではないかということで
まずはタイトルを変更した。そしてWordPressのテーマですごく有名な
フリー素材として「STINGER PLUS2+」というものを導入してみた。
ダウンロードしてWordPressで指定すれば簡単に導入できて見た目が
よくありそうないい感じのサイトになった。タイトルロゴを指定する必要が
あったので海外のフリー画像というサイトから取り入れてみた。
https://www.freepik.com/free-photos-vectors/flat
あとは広告のことを少し調べて、記事を増やしてみよう。
忘れがちなEclipseのショートカットキー
インターフェースで親クラスではなく子クラスの実装を開きたい場合
→宣言を開く(Ctrl + クリック)やクイック型階層(Ctrl + T)
リソースファイルを開きたい場合
→リソースを開く(Ctrl + Shift + R)
呼出し元階層を開きたい場合
→呼び出し元階層を開く(Ctrl + Alt + h)
リソースを開いた後にクイックアウトライン
→クイックアウトライン(Ctrl + O)
入力したテキストで検索したい場合
→インクリメンタル検索(Ctrl + J)
エディタを閉じる場合
→エディタを閉じる(Ctrl + W)、すべてのエディタを閉じる(Ctrl + Shift + W)
Javadocコメントを追加する場合
→Javadocコメントの追加(Alt+Shift+J)
スネークケースとキャメルケースを切り替えたい場合
→スネークケースとキャメルケースの切り替え(ctrl + alt + k)
リファクタリングしたい場合
→名前変更(alt + shift + r)
ローカル変数へ代入したい場合
→ローカル変数に代入(Ctrl + 2→l)
対応する括弧に移動したい場合
→Ctrl + Shift + p)
Javaの定数クラスについて
Javaで定数定義はインタフェースとクラスを使う方法があるが、
クラスを用いたほうがよさそう。
public class Constants {
// privateコンストラクタでインスタンス生成を抑止
private Constants(){}
// 定数
public static final String HOGE = “HOGE”;
}
そして、staticインポート機能を使うと冗長な表記を避けれる。
import static constants.Constants.*;
public class Main {
public static void main(String[] args) {
System.out.println(HOGE);
}
}
JavaScriptでif ==(イコール2つ)と if ===(イコール3つ)の違い
==(イコール2つ)は「等価演算子」
===(イコール3つ)は「厳密等価演算子」
で
つまり
var val1 = 1;
var val2 = “1”;
は
if(val1 == val2)
だと同じ
if(val1 === val2)
だと異なる
var val1 = 0;
var val2 = “”;
は
if(val1 == val2)
数値型の0と文字型の空文字だと同じと判断されていまう
CSRF対策とは
CSRF【 Cross Site Request Forgeries 】/ XSRF
クロスサイトリクエストフォージェリ
forgery:偽造、贋造(がんぞう)、偽物、文書偽造罪
CSRFとはWebサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことで
閲覧者に意図せず別のWebサイト上で何らかの操作を行わせる攻撃。
サーバ側でCSRFを防ぐには、サイト外からのリクエストの受信を拒否する必要がある。
ヘッダに含まれる情報を元に参照元が正規のページかどうかをチェックしたり、
フォームの一部にランダムな数値を隠しておいてアクセスの一貫性をチェックしたり、
コンピュータが読み取れないよう画像として表示したチェックコードの入力をユーザに要求するなどの手法があり、これらを組み合わせて対策を講じる必要がある。
クロスサイトスクリプティング (XSS) と似ているが、
XSSは不適切な入力確認によるインジェクションのひとつで全く異なる種類の攻撃。
Androidカメラの連写機能でシャッターチャンスを逃さない
Andoroidのカメラで写真を撮るとシャッターを押してから撮れるまでの時間差があったり、何枚か撮ろうとしても時間がかかるなと思っていた。
iPhoneだったらシャッターを押すと即時に撮影できていいなと思っていた。
ところが、Androidのカメラに連写機能がついているかもしれないと知り試してみた。
なんと、撮影ボタンを長押しするだけ。やってみると撮影ボタンを押してる間、下の方にメーターみたいなのが表示されてカシャカシャカシャと、どんどん撮影されてメーターが左から右に増えていく。手を放すまで連写で撮影できた。
これでベストショットを選択できる。しかもコマ送り再生みたいな機能もあってパラパラ漫画みたいな表示もできた。
これは今まで全然知らなかったが、便利な機能だなと。
Javaのクラスファイル作成で中身が異なる
Eclipseは独自でコンパイラを用意しているのでJREだけでもEclipseはコンパイルすることができる
しかし、Eclipseのコンパイラ(ecj)とJDKのコンパイラ(javac)はまったく別のものなので
生成されるクラスファイルは逆コンパイルしてみてもソースの書き方が若干異っている
<コンパイラ例>
javac オラクルから出ているJava Development Kitに含まれる
GCJ GNUコンパイラコレクション (GCC) の一部
ECJ the Eclipse Compiler for Java, Eclipse JDTに使用されているオープンソースインクリメンタルコンパイラ