忍者ブログ
Admin / Write / Res
ちゃんとカテゴリ分けされておりませんので、 記事をお探しならブログ内検索が便利です。 ご活用くださいませー+.(≧∀≦)゚+.゚
ブログ内検索
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カウンター
アクセスカウンター
最新コメント
[11/22 รูปพวงหรีดแสดงความเสียใจ]
[11/22 ดอกไม้ งานศพ]
[11/22 ช่อดอกไม้ตามสั่ง]
[11/22 ร้านดอกไม้บรรยากาศอบอุ่น]
[11/21 Robertret]
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
バーコード
[2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10
私はVimが好きなのでテキストエディタにVimを使用しています。
しかしこのVim、直感的に操作することができないため、非常にとっつきにくいですね><
でも慣れるととても便利なんです。

と、いうことでVimの魅力を伝えていきたいな、ってことを始めてみます。

Vimの基本的な使い方についてはこのへんを見て下さい。
http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html

でもこれではどうして便利なのか、全く伝わらないので100回くらいに分けてしょーかいしよー
がんばろー

拍手

PR
PHPでログに変数の中身に何が入ったのか、記録したい場合がありますよね。
これが単純なStringなら問題ないけど、配列だった場合、
Array
とだけ出てしまい、ログとして使い物になりません。
調べたところPerl だと Data::Dumper()で簡単にできるのですが、PHPでは関数で用意されていないようです。
そこでob_start()関数を使ってちょっとテクると同様のことが実現できました。
ob_start();
var_dump($arr);
$ret =ob_get_contents();
ob_end_clean();

よく使うと思うのでclass化か、functionとして持っておくと便利かも?

class Util
{
  function getDumpInVariable($arr)
  {
    ob_start();
    var_dump($arr);
    $ret =ob_get_contents();
    ob_end_clean();

    return $ret;
  }
}

$write_file = "/path/to/file";

$util = new Util();
$arr = file($argv[0], FILE_IGNORE_NEW_LINES);
$res = $util->getDumpInVariable($arr);

$fp = fopen($write_file, "w");
fwrite($fp, $res);
fclose($fp);

readfile($write_file);

自分自身をDumpするとか・・・なかなかひどいスクリプトですけどね(^^ゞ
例としていい配列が思い浮かばなかったのよー ><

参考サイト
[PHP]var_dump関数の出力結果をファイルに保存する

拍手

タイトルのとおりなのですが、QFixGrepを使用したGrepが便利なのです。
もちろんこれはVim使いにしか当てはまらないのですが・・・

Vimはその操作性こそ独特ですが、慣れてしまえば最強のツールです。

まぁ、とにかくVim使い、もしくは使い始めた方などは使ってみてはいかがでしょうか?

参考サイト
QFixGrep - プレビュー&絞り込み検索付きvim用grepプラグイン

拍手

私の勉強不足だと思うのですが、Excelって普通にセル関数だとisNumericってできないですよね?
じゃぁ、セルに入力された項目の内、どれが数字型かって判定したい時はどうしましょう?

とりあえずこんなコトしてみました・・・



判定したいセルに対し、四則計算を行うのです。
入力されたセルが数字型であれば計算が成功しますし、違えば「#VALUE!」になります。
あとはこの「is numeric?」に対しオートフィルタをかければ数字型だけ拾えるかなー?

かな~り、強引だし、スマートじゃないけど、簡単にできるのでー (^^ゞ
もっといい方法があれば教えてー><

ってってって・・・
なかなか数字と文字列が混在し、かつ、数字だけ抜きたい局面なんて訪れないんですけどね☆

拍手

Linuxのターミナル上でSSHを利用して他のサーバに初めて接続すると、
The authenticity of host '***.****.*** (nnn.nnn.nnn.nnn)' can't be established.
RSA key fingerprint is d2:54:f5:85:5c:74:ea:0f:db:42:fa:f3:88:1e:08:fa.
Are you sure you want to continue connecting (yes/no)?
のように確認メッセージが表示されます。
これ、「yes」コマンドも通用しないのでとても煩わしいのですね。
でもこのinteractiveな操作も設定次第だということがわかりました。
そしてその設定はssh_configに書かなくてもオプションで指定できるんですねー
使用するオプション:
-oStrictHostKeyChecking=no

例
ssh -oStrictHostKeyChecking=no user@hostname

詳細はmanpageや仕様をー、ってそれを見て理解できる人ならこんな所に来てないってね☆

参考サイト
【ssh】未知のホスト鍵に対して、いちいちyes/noを訊かれないようにするオプション

拍手

perlのメンテナンスで最も苦しめられるのがCPANモジュールのバージョンです。
私の知識不足もあると思いますが、CPANモジュールはバージョンを指定してのインストールができません。
そのため、元から開発環境/本番環境と用意されていれば何ら苦労はしませんが、本番稼動しているものの開発環境がない場合。
開発環境を作成する必要が出てくるかもしれません。
 
その場合ネックなのが、本番環境と開発環境の差分です。
埋められるものは極力埋めるにしてもCPANがネックになることが多いのです。
今回はその中でもかなり苦しめられたLogHandlerについて対処方法を記述します。
 
LogHandlerは少なくとも0.68と0.72で書式が変更されています。
ドキュメントも残されていないため、どのバージョンでどのように変わったのか、正確に出すことができません。
ですので今回はバージョンが0.71以下の場合は0.68の書式で。
0.72以上であれば新書式でオブジェクトを生成するように、プログラム修正します。
 
--------------------
オブジェクト生成例
--------------------
# ログ出力の際の接頭詞情報の取得
my $hostname    = hostname;
my $pid         = $$;
my $progname    = $0;
 
# LogHandlerの基本プロパティ
my %logopts =(
    filename => "/path/to/logfile",
    #filename => \*STDOUT,  # 標準出力
    mode => 'append',
    newline => '1',
    maxlevel => '7',
    minlevel => '0',
    prefix => "$hostname $pid [<--LEVEL-->] $progname: "
);
 
# オブジェクトの作成
my $log;
if( $Log::Handler::VERSION >= 0.71 )  {
    delete $logopts{prefix};
    $log = Log::Handler->new();
    $log->add( file => \%logopts );
}
else {
    $log = Log::Handler->new(%logopts);
}
--------------------
 
もちろん0.71が新書式だというのであれば、適宜変更すれば良いと思います。
指定できるオプションももっとありますのでドキュメントを参照してください。
今回は接頭詞(prefix)の書式が新旧で異なるため、対応を施しています。
 

拍手

ユーザ作成も最初に実施すると後から頻繁に行うものではないので、すぐに忘れてしまいます。
と言うことでメモです。

■接続ユーザ作成基本構文例
GRANT ALL ON *.* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■実行できるSQL制限付き構文例
GRANT SELECT , INSERT , UPDATE , DELETE ON *.* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■接続先DBを指定する場合
GRANT ALL ON [dbname].* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■接続先DBとテーブルを指定する場合
GRANT ALL ON [dbname].[TableName] TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■ユーザを削除する場合
DROP USER [UserName]@"[HostName]";

■SQL投入後最後にユーザ管理テーブルを更新する
FLUSH PRIVILEGES;

ユーザは接続ホスト単位で作成されます。
そのため、ユーザは接続元ホストの数だけ存在することになります。
1. dbuser1@"localhost"
2. dbuser2@"localhost"
3. dbuser2@"192.168.0.2"
上記は3ユーザ存在していることになる。
ややこしいのはパスワードはユーザ名単位で管理されることです。
またアクセス出来るDBの権限はそれそれで別物になります。
気を付けたいのは、ユーザを削除するとき上記の場合で言えば、
dbuser2を削除するには2構文実施する必要があるのです。

それが面倒な場合はユーザ管理テーブルからどかっと削除してしまう方法もありますが、お勧めしません。
DELETE FROM mysql.user WHERE user='[UserName]' AND host='[HostName]';
FLUSH PRIVILEGES;

また、後から権限を追加する場合は新たにGRANT文を投げます。
変更する場合はユーザ@ホストが一致すれば更新になります。
パスワードに変更がなくても毎回指定しましょう。
忘れると空パスになり、非常に危険です。

ユーザを作成する、という意味ではMySQLではCREATE USER構文もあります。
ですが、権限を意識しないDBの設計はいかなる場合もないでしょうし、ユーザが存在しない場合作成と同意義になるGRANT文で統一するのが良いのではないでしょうか。
というのが私の意見です。

もちろんこの他にも多種多様なオプションが存在しますが、実用的ではないと思っているので記載しません。

拍手

以前にも投稿したのだけどざっくりしすぎていたのでちょっとだけ修正します。
※以前のは非公開にしまーす

MySQLのダンプ方法とリストア方法をいつも忘れるのでメモ。

■特定のテーブルをダンプする場合
mysqldump --skip-extended-insert [db name] [table name] -u[db user] -p > /path/to/filename

--skip-extended-insert
を指定することにより、INSERT文は冗長化します。

■特定のデータベースのテーブルを全てダンプする場合
mysqldump --skip-extended-insert [db name] -u[db user] -p > /path/to/filename
mysqldump --skip-extended-insert -B [db name] [db name] -u[db user] -p > /path/to/filename

■すべてのデータベースをダンプする場合
mysqldump --skip-extended-insert --all-databases -u[db user] -p > /path/to/filename

いろんなやり方があると思うけど、私はいつもINSERT文でリカバリ出来るように--skip-extended-insertオプションを指定します。
これは長いINSERT文ではロードが遅くなるのと引換に1行ずつコミットされるからです。
※ただし、AUTOCOMMITのON,OFFによる

業務などの実運用時のバックアップでは間違えてダンプを行ない現行のデータが損失してしまうのを防ぐため、
DROP構文は抜くように指定するのもいいと思います。
--skip-add-drop-table

もちろんオプションは多彩に用意されているのでこれだけではありません。
しかし、常にごちゃごちゃオプションを指定する必要があるわけではないと思いますので、ささっとダンプしたい方は参照してね。

ユーザ指定の「-u」とパスワード入力の「-p」は忘れやすいので気をつけよー
また、-pに続けて(スペースは入れない!)パスワードを直打ちすればインタラクティブなダンプを避けることができます。

拍手

sftpでサーバに接続を試みた時、FileZillaだと接続に失敗することがあります。
そしてなぜかWinSCPだと成功する場合があります。

今回はこの2クライアントのみで発生しましたが、もっと多くのクライアントでも同様のケースはあるかもしれません。

原因は
/etc/ssh/sshd_config
の中でsftpを使用するためのライブラリ(サブシステム)が読み込まれてないこと

#Subsystem sftp /usr/libexec/sftp-server

デフォルトでは有効になっているのですが、何らかの都合で管理者がコメントアウトしてしまうとsftpが使えないようです。
それならば、WinSCPでも同じ事象が起きそうですけど・・・

もちろん普通にSSHは出来ます。

クライアントによって事象が異なるのでかなり手を焼きましたが、困っている人がいたら参考にしてみてください。

拍手

テーブルダンプとは違い必要なデータだけをファイルに書き出す方法です。 MySQL5.1.xをターゲットにしていますが、おそらく5.x系なら出来ると思います。 それ以前のバージョンは互換性を確認できていません。
SELECT
  * 
INTO OUTFILE '/full_path/to/load_data.csv' 
  FIELDS TERMINATED BY ',' 
  OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY "\n" 
  ESCAPED BY '\'
FROM
  tbl_example
WHERE
  id IN ( 
    SELECT
      id 
    FROM
      tbl_reration
    WHERE
      status = 'true' 
  ); 
SELECTとFROMの間に出力先の指定を行なっていきます。
FIELDS TERMINATED BY フィールドを何で区切るか。カンマを指定すればCSV。タブ(\t)ならTSVになる。
OPTIONALLY ENCLOSED BY フィールドを何でくくるか。フィールドにカンマがあった場合、データなのかフィールドの区切りなのかの区別が付けられる。 OPTIONALLYをつけると文字列型のデータのみに付与することが出来る。
LINES TERMINATED BY 1レコードを何で区切るか。通常は改行"\n"か"\r\n"が使われる。
ESCAPED BY 特殊文字をエスケープする場合、エスケープシーケンスを指定できる。

拍手

Copyright ©  アナログを愛するデジタル生活館 All Rights Reserved.
* material by Pearl Box   * Template by tsukika

忍者ブログ [PR]