忍者ブログ
  ちゃんとカテゴリ分けされておりませんので、 記事をお探しならブログ内検索が便利です。 ご活用くださいませー+.(≧∀≦)゚+.゚
Admin*Write*Comment
[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8

前回カーソル移動はホームポジションを崩さずに移動が可能なので、キータッチのアクセスが良く、開発効率がよいお話をしました。
でも多くの日本人開発者はコメントなどを日本語で記すので変換のため、矢印キーに頻繁にアクセスするんですけどね。(^^ゞ

それはさておき、第二弾~

拍手

PR



レンタルサーバによっては未だに現役のphp4。
多くの場合、管理されるサイトは同じ種類のサーバに乗ることがほとんど。
しかし私の場合は、職業柄、多数の、しかも環境が異なるサーバをいじらなくてはならないことが多いです。

インフラ時代は/bin/shで何とかしようとして、まして、shellだからほとんど環境依存はなかったのだけど、
本格的に開発やるようになるとバッチはPHPがやっぱり便利

しかし、そこで大きな壁になるのがPHP4とPHP5。
今からdevelop環境を整えると大抵PHP5が導入されるでしょう。
場合によっては最新の5.4なんてこともあります。

そんな最新の環境で作られたスクリプトはPHP4の環境ではまず動きません><
コーディングが完了してから本番に持ち込んだらPHP4だった時、、、
改修する間は無いので強引にPHP4に依存している箇所だけパパっと修正してしまいます。

もっち、台数が多ければ改修したほうが早いケースもあるけれど~

拍手




私はVimが好きなのでテキストエディタにVimを使用しています。
しかしこのVim、直感的に操作することができないため、非常にとっつきにくいですね><
でも慣れるととても便利なんです。

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

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

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

拍手




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に続けて(スペースは入れない!)パスワードを直打ちすればインタラクティブなダンプを避けることができます。

拍手



ブログ内検索
カレンダー
08 2018/09 10
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
カウンター
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
バーコード
ブログパーツ
アバター
Copyright © アナログを愛するデジタル生活館 All Rights Reserved.
photo by Kun material by Atelier Black/White Template by Kaie
忍者ブログ [PR]