読者です 読者をやめる 読者になる 読者になる

セカイモンの裏側

★毎週木曜日更新★ 海外ショッピングサイト『セカイモン』のブログです。私たちスタッフの仕事風景や日々の出来事など、     “セカイモンの舞台裏”とも言える日常を綴っていきます。

セカイモンLinux テクニック

その1 ディレクトサイズを知りたいコマンド

フォルダ・ディレクトリのサイズを一覧で出したい時のコマンド

意外とぐぐっても出てこないんで記載しておきます。

du -sh

例:

du -sh /var/www/forum/*

14M /var/www/forum/app
4.0K /var/www/forum/artisan
16K /var/www/forum/bootstrap
4.0K /var/www/forum/Capfile
4.0K /var/www/forum/composer.json
120K /var/www/forum/composer.lock
1.8M /var/www/forum/composer.phar
36K /var/www/forum/config
816K /var/www/forum/lib
4.0K /var/www/forum/phpunit.xml
51M /var/www/forum/public
8.0K /var/www/forum/README.md
4.0K /var/www/forum/server.php
59M /var/www/forum/vendor

その2 ログを見るコマンド

ログをLinux上で見るときはおなじみのtail コマンド等があると思いますが、それぞれメリットデメリットがあります。

そこで一番個人的によく使うコマンドはlessです。なぜかという理由を記載しながら書いていきます。

・tailコマンド

デメリット

tailコマンドは上ボタンでそれ以上見れない

引数がややこしい

あとtailfに比べると遅い

メリット

行数を指定できる

リアルタイムで監視できる

tailfコマンド

デメリット

上ボタンでそれ以上見れない

メリット

tailに比べると早い

なのでリアルタイム監視をしたい時はtailfコマンドをよく使っています。

・viコマンド

デメリット

遅い

メリット

編集できる

大量のログを見るときはviだととても遅いので見れない場合が過去にありました。

編集できてもログファイルなのであんまりいみないですね。

・viewコマンド

デメリット

編集できない、なので大事なファイルをいじるときはメリットとも言えるかも

メリット

特にない?

・catコマンド

大量ログのファイルをcatすると考えたら恐ろしくてできない。

・lessコマンド

デメリット

編集できない

メリット

高速

自由にスクロールできる

なのでlessコマンドでいいんじゃないでしょうか?

www.softel.co.jp

その3 文字化けに困ったら

viによるShift-JISのファイル開き方

OracleSJISメッセージをだし、文字化けをするのでsjisの開き方とか少々便利かと思い、念のため記載。

vi
ファイルを開く
# vi logs/test.log

その後、基本viでは直接編集はできないコマンドモードと呼ばれる状態でファイルを開いており、【:】を押すとコマンド受付になる。

:e ++enc=sjis

:eはファイルをオープンする命令で++encで文字コードを指定できる。

ORACLE SQL テクニック

実行計画のススメ

まず、大前提としてSQLを修正する際には書いたSQLを実行計画で確認することをお勧めする。

実際のSQLを投げるのと違い、直ぐに応答があるため動作チェックの意味でも投げることをお勧めする。

自分の書いたSQLがどのように動くかも含め確認するとよい。

また、実行計画ボタンの隣に自動トレースボタンがあるが、こちらは実行計画だけではなく

  • SQL再帰回数
  • 読み込みブロック数
  • ソート回数
  • 処理行数

等の内容も加えて表示される。(現状、権限がないので実行できなかった)

 

 

修正その1:EXISTSと相関サブクエリ

 

上記の画像のように本クエリとサブクエリ間で互いに参照をしているクエリを相関サブクエリと呼びます。

この相関サブクエリでは互いにデータを参照しあう関係上、データのアクセス数が膨大になりやすく、SQLの処理時間が

増大しやすくなります。

対応法は上記のように内部結合処理への書き換えを推奨します。

引用:EXISTSが速いという誤解

kkoudev.github.io

修正その2:ウィンドウ関数

SQLにて集合関数は重い処理にあたる。理由はその性質上、データの集計を行うため、基本全てのデータにアクセスする必要があるためである。

したがって、よくある履歴データ等の最新データを拾うために結合×集合関数(Max)等の処理を行う場合には

 駆動テーブルのデータ数 × 結合テーブル(Max対象テーブル)の全データ数

の処理が行われ、処理が重くなりがちである。

上記データに関するSQLの差分はSubversionのrevision:11372を参照のこと。

修正その3:IN句の失敗例

詳細は記載しないが、PHP等のプログラム側で条件項目を保持して、SQLを組み立てる場合がよくある。

その時に条件項目が膨れ上がり1000件を超えると下記のようになる。

また、上記エラーの件を除いても下記理由から避け、プレースホルダに変更すべきである。

  • 単純にIN句はパフォーマンスが低い
  • PHP側で展開するとSQLの文が異なり、キャッシュにヒットしない
  • SQLインジェクション対策 等

番外:複合インデックスについて

複合インデックスは複数のカラムを指定し、単一のインデックスよりより詳細な絞込み対象を作ることで高速化を行うインデックスとなる。

複合インデックスのカラム指定は単純に記載しがちだが、記載順序が重要となる。下記2項を特に注意すること。

  • 複合インデックスは先頭のカラム要素のみ使用といった具合に、部分的に使用可能なため頻度が高いものは先に記載するとよい
  • 逆に先頭のカラムを使用しない場合は、その後のカラムがインデックスにあっても使用されることがないため注意する
  • 範囲検索を行うと後続のインデックスは使用されなくなるため注意(Date型等は特に後ろに回した方がよい)

詳細なデータ検索範囲は下記ページに例がある

http://itdoc.hitachi.co.jp/manuals/3000/30003F5500/EEXD0043.HTM

手習いHTML5 (2)

整理がし切れていないが、直近で使用したHTMLタグの覚書きを記す。


省略のできないタグ
■<TITLE>
該当の文書にタイトルを付ける場合、任意の文字列を挿入する。

<TITLE>ここにタイトルを入力する。</TITLE>
検索結果として表示されるため、分かりやすいタイトルが求められることもある。

ページを構成する基本的なタグ
■<HEAD>
前回の<HTML>と同じく、文書の構造に深くかかわる。

ヘッダーに似た名称だが、実際のページには表示されない要素を多く含む。
主にGoogleをはじめ検索サーチエンジン文字コードなど、文書の全体に影響を及ぼす情報が含まれる。

<HEAD>が使用された場合は、</HEAD>も同じく使用されている。

■<BODY>
<HTML><HEAD>につづく文章構造を定めるタグの一つ。

ページの内容を表示するためのタグであり、実際にページに表示される要素が含まれている。

確認できた限りでは、これらのタグは1ページ当たり1組のみが使用されている。

手習HTML5 (1)

ホームページ作成を始め、手探りながら理解できたことをまとめてみる。。


1.タグやコードはしっかりと閉じる。
HTMLにはさまざまなタグやコードが使用されているが、“<>”“{}”をはじめとしてしっかりと閉じる必要がある。
基本的なところだが、すでにいくつかのエラーはこれらのどちらかが欠けていたことにより発生していた。

いくつかの共通したタグやコードで、どれか特定のコードがエラーを起こしている場合は、記号の欠けが発生している場合がある。


2.最初に<!DOCTYPE html>の宣言を行なう。

HTML形式でのファイルを作成する場合は、当たり前のようだがHTMLドキュメント形式であることを指定する必要があるとのことだ。
何か別のHTMLがデータを引用づる場合などを除き、HTML形式となるファイルのほとんどは、HTMLであることが宣言されている。

過去のHTMLのバージョンは長い宣言が必余だったようだが、HTML5は<!DOCTYPE html>で事足りるようだ。


このようにその都度気づきをまとめていき、整理ができることで、理解が深まるのではないかと思い、少し試してみようと思う。

手習いHTML(準備号)

20年前、Windows95が普及し始めた頃、黎明期のインターネットで自作ホームページや掲示板などで盛んな交流が行われていた。

当時のバージョンはHTML2.0であったと思われる。

タグ入力で掲示板の文字の色やサイズが変わり、ホームページはあまねくソース表示ができ、構造の理解こそできないが、何らかの不思議なからくりによって、彩りに満ちた空間が映し出されていることだけは強く記憶している。

そこからしばらくHTMLと無縁の生活を送っていたが、ふとしたことから再びHTMLと向き合うこととなった。

今や基本的なこともおぼつかない始末、これを機にいま一度HTMLについて、少しずつではあるが理解を深めるべく、ここに覚書をまとめていきたい。

プログラミングテスト3

問3

http://www.sekaimon.com/pbapi/search.do?searchCountry=us&keyword=BMW

http://www.sekaimon.com/pbapi/search.do?searchCountry=us&keyword=nike

でアクセスしてもわかるようにJSON形式でおのおのの情報が取得できます。

 

http://153.126.153.193:8888/test3/

で開いたページのサンプルのようにしてください。

手順は

①検索した文字列をキーワードにAPIを呼び出す

②category1テーブルに入っているカテゴリのみをリストに表示させる

③BANの値が1の場合は「you can not buy」と表示する

 

サーバーアクセス手順はこちらを参考にしてください。

category1のデータの登録、更新は自由に行ってください。

デフォルトで入っているデータは削除しないでください。

sekaimon.hatenablog.com

 

プログラミングテスト2

FTP接続情報
Host(IP): 153.126.153.193
User: test1
Password: テスト時に通知します。
Port: 29870

File Transfer Protocol: SFTP 

 

WinSCPを使った接続設定例 

f:id:sekaimon-staff:20170308135116j:plain

 

■DB情報

phpMyAdmin からはいって

'database' => 'sample1',
'username' => 'sample',
'password' => 'pass',

 

■ヒント

Laravel Framework version 4.2.17を使用しています。

Laravelのリファレンスはweb上にたくさんありますので調べながら行っていただいて構いません。

 

------------------------------------------------------------------------------------------------

問1

http://153.126.153.193:8888/test2

上記URLにアクセス

 

現在商品IDしか画面に出力されていないので

商品名(item)と価格(price)を画面に出力せよ。

 

・編集対象ファイル

/var/www/test_8888/app/controllers/Test2Controller.php

 

 

------------------------------------------------------------------------------------------------ 

問2

商品名(item)価格(price)の値を入れてDBに登録できるようにする。

 

・登録先DB

DB: sample1

テーブル:test1

 

・編集対象ファイル

/var/www/test_8888/app/controllers/Test2formController.php