サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
mrgoofy.hatenablog.com
複数ディレクトリをfindで検索する場合、特定のディレクトリを検索対象外にする方法です。 findコマンドの「-prune」と「-o (-or)」オプションの組み合わせで実現することができました。 UNIXの部屋 コマンド検索: find より -prune それ以上ディレクトリを降りない。特定のディレクトリ以下を除外する場合に有用。 http://x68000.q-e-d.net/~68user/unix/pickup?find -o または -or 検索条件を OR で結ぶ。 % find . -name abc -or -type d ⇒ abc という名前のファイル・ディレクトリか、あるいはディレクトリを検索 http://x68000.q-e-d.net/~68user/unix/pickup?find 例)1つのディレクトリを対象外として、ファイルを検索する 「-path ".
HTML等をgitで管理していると、サーバーへのアップロード用のファイルとしてコミットした差分のファイルだけを抽出したい事があります。 「git diff」で差分の表示は出来るのですが、ディレクトリ構造を保持した状態でのファイル抽出みたいな事は出来ないようだったので、Perlでスクリプトを書いてみました。 ※bashとかでも書けると思いますが、なんとなくPerlで書いてみました。 「git diff --name-only」で差分のファイル名を取得 普通にgit diffを使うと・・・ gitでの差分の表示には「git diff」を使用しますが、そのまま使うとファイルの内容まで表示されてしまいます。 $ git diff HEAD^ diff --git a/bar.txt b/bar.txt new file mode 100755 index 0000000..9e74262 ---
最近rsyncを使う機会があったので、備忘録として書いておきます。 rsyncとは? rsync は、ファイル・ディレクトリのバックアップやミラーリングを行うコマンドである。ミラーリングやバックアップを行うだけなら cp コマンドでも実現可能だが、rsync コマンドには以下のようなメリットがある。 ミラーリングが可能 (単純な cp だと、削除されたファイルがコピー先に残ってしまう) リモートマシンへ/リモートマシンからのバックアップが可能 2回目以降の実行では、前回実行時との差分を調べ、必要なファイルのみ転送するため高速である UNIXの部屋rsyncより つまりはディレクトリの同期を行うためのコマンドになります。 同期元のディレクトリ構造 今回同期を行うディレクトリ構造は以下のような形のものを使用します。 /home/user/work/ -- css `-- style.css -
mod_rewriteを使用してクエリ文字列(URLパラメタ)があるURLを変換してリダイレクトしようとしたときに少しハマリかけたので、備忘録として書いておきます。 今回リダイレクトしたURL 今回は、以下の旧URLから新URLにリダイレクトさせるケースでやってみました。 内容としては、旧URLのクエリ文字列(URLパラメタ)の「id」「name」に設定された値が、新URLではディレクトリとファイル名として使用できるようにするといったものです。 旧URL 新URL 形式 /foo/index.html?id=数字列&name=文字列 /foo/文字列/数字列.html サンプル /foo/index.html?id=123&name=bar /foo/bar/123.html RewriteRuleで試す まずは「RewriteRule」で正規表現を使ってリダイレクトする設定を書いてみまし
diffとpatchコマンドを使うとファイルの変更を別のファイルに簡単に適用することができます。 例えば、サイトでWEBサーバーを複数台で運用していて1台のWEBサーバーに行った設定ファイルの変更を他のサーバーに適用するときなどに使えます。 基本的な作業の流れ ファイルへのパッチ適用を行う際はこんな感じです。 diffコマンドでパッチファイルを作成 作成したパッチファイルを元に、patchコマンドでパッチを適用 パッチファイルの作成 パッチファイルの作成にはdiffコマンドを使用します。コマンドの書式は以下のような形になります。 $ diff -u(または -c) 変更前のファイル 変更後のファイル > パッチファイル名オプションの「-u」はパッチファイルを、unified diff形式で出力するという指定です。 「-c」の場合はcontext diff形式での出力になります。 「-u(ま
Apacheで.htaccessを使ってPCサイト/携帯サイトの振り分けを行う方法をまとめてみました。 ユーザーエージェントでの振り分け 携帯電話ブラウザからアクセスされた場合、ユーザーエージェントとして「DoCoMo」「KDDI」「SoftBank」などが含まれています。 これらの文字がユーザーエージェントに含まれている場合は「携帯電話からのアクセス」と見なすことでPC/携帯サイトの振り分けを行うことが出来ます。 ユーザーエージェントの判定には「HTTP_USER_AGENT」を使用します。 「HTTP_USER_AGENT」の判定と判定後のPC/携帯サイトそれぞれへの振り分けには、「mod_rewrite」を使用します。 「mod_rewrite」を使用するためには、http.confまたは.htaccessでディレクトリに「Options +FollowSymLinks」を設定する必
圧縮/解凍コマンドって結構使うことが多いのですが、使い方を忘れることが多いので、よく使うコマンドをまとめてみました。 tar.gzで圧縮(tarアーカイブしてgzipで圧縮) tar.gzで圧縮する場合は、「tar」でファイルをまとめた(アーカイブした)ものを、パイプ(|)で「gzip」に渡して圧縮します。 「tar」でアーカイブに含まれるファイル名を情報として表示させたい場合は、オプション「v」を指定してバーボーズモードにします。 アーカイブされるファイル名を表示する(バーボーズモード) $ tar cvf - dirname | gzip -c > dirname.tar.gz アーカイブされるファイル名を表示しない(通常モード) $ tar cf - dirname | gzip -c > dirname.tar.gz tarのオプション 命令: 以下の中から必ず1つだけ指定しなけれ
getElementByIdとgetElementsByNameってよく使い方を間違えます。(私だけかもですが。) ということで、基本中の基本のgetElementByIdとgetElementsByNameの使い方をまとめてみます。 ※「getElementByName」では無く「getElementsByName」だってところがちょっと重要です。 getElementByIdの基本的な使い方 getElementByIdの基本的な使い方は以下の通りです。 ◆ document.getElementById(id) (D1/e5/N6/O6) id 属性で指定した名前で要素を参照します。 oElement = document.getElementById("id1"); とほほのJavaScriptリファレンス - ドキュメントオブジェクトモデル(DOM) 「id 属性で指定した名前で
PHPで処理に時間のかかるスクリプトを実行すると以下のようなエラーメッセージが表示される場合があります。 Fatal error: Maximum execution time of 60 seconds exceeded (日本語訳 -> 致命的な誤り: 超えられていた最大60秒の実行時間) 簡単に言うと、「60秒待ったけど応答が戻ってこないからタイムアウトエラーにします。」という感じです。 これを解決するにはPHPの設定オプションである「max_execution_time」の設定値を変更します。 php.iniで設定する 「max_execution_time」はphp.iniでデフォルト値が設定されています。 デフォルトは60秒なので、これを120秒や180秒にすることで、タイムアウトまでの時間を延ばす事が出来ます。 0秒を指定した場合は、「タイムアウトをしない」という設定になり処
サイトからファイルをダウンロードさせるには、「<a href="ダウンロードさせたいファイル名"・・・」のようにファイルに直接リンクさせることでも可能ですが、以下の2点が気になります。 ダウンロードさせるファイルは公開ディレクトリ(htdocsとかhtml以下)におく必要がある。 ブラウザによっては「右クリック→名前をつけて保存」など操作がちょっと面倒。 これを解消するために、PHPを通してファイルをダウンロードさせる方法をやってみました。 PHPのちょっとしたTIPSさんのページの様に「try/catch」を使わなくても実装出来るのですが、今回はあえて「try/catch」を使用した実装を試してみました。 エラーハンドラの設定 まず、ダウンロードをさせるにあたってファイル操作を行うので、ファイルオープン等の例外をキャッチするためにエラーハンドラを設定します。 ユーザー定義のエラーハンドラ
JavaScriptのreplaceの第2引数には関数(function)を使用することが出来ます。 その簡単な使い方と簡単な説明です。 ※ずっと前にも一度書いたことがあったのですが、読み返したときに意味不明状態になるような内容だったので、情報を整理して改めて書いています。 以前のエントリ:JavaScriptのreplaceの関数オブジェクトを渡せることを知った 一般的なreplaceの使い方 一般的なreplaceの使い方は、 第1引数 : 置換え前の文字列(正規表現も可) 第2引数 : 置換え後の文字列(正規表現のグループは、$1,$2,…で指定) になります。 一般的なreplaceのサンプルコード var str = 'hoji1hoji2hoji3'; var str2 = str.replace(/(ho)ji([0-9])/g, '$1ge$2'); alert(str2)
今更ながら、PHPのセッションIDのハッシュアルゴリズムの変更と、セッションIDに使用する文字種を設定する項目があることを知りました。(PHP5以降のみ) session.hash_functionとsession.hash_bits_per_character 今回設定する項目は、 session.hash_function => セッションIDのハッシュアルゴリズムの設定 session.hash_bits_per_character => セッションIDに使用する文字種を設定 になります。 詳し説明はこちら↓。 session.hash_function session.hash_function によりセッション ID を生成するために使用されるハッシュアルゴリズムを指定することが可能です。 '0' は MD5 (128 ビット) で、'1' は SHA-1 (160 ビット) を
.htaccessを使って、HTTPでアクセスされたページをSSLでリダイレクトする方法と、SSLでアクセスされたページをHTTPでリダイレクトする方法です。 今回は、以下の2パターンで試してみました。 環境変数「HTTPS」を使用する。 環境変数「SERVER_PORT」を使用する。 環境変数「HTTPS」を使用する場合 ※メイビンラボさんのページを参考にさせてもらいました。 一番簡単で分かりやすい方法はコレだと思います。 「RewriteCond」で環境変数「HTTPS」の値を判定します。 「HTTPS」がoffの場合 → HTTPでのアクセスなのでSSL(HTTPS)でリダイレクト 「HTTPS」がonの場合 → SSL(HTTPS)でのアクセスなのでHTTPでリダイレクト .htaccessを全てのディレクトリに置くのは管理が煩雑になってよろしく無いので、DocumentRoot直
preg_splitを使用すると、指定した正規表現によって文字列を区切って配列を作ってくれます。 サイト等で入力された検索キーワード等をスペースで区切って検索条件の設定をするのにスゴク便利に使えます。 が、ちょっとだけ落とし穴があったので、備忘録として書いておきます。 preg_split使用のダメな例 以下のコードは2つの問題を含んでいます。 preg_splitで全角スペースも含めて分割しているが、preg_splitは全角文字に未対応のため、文字化けが発生する。 連続したスペースが入力された場合、配列に空文字(null)が設定される場合がある。 1.の問題点は、事前に全角→半角変換を行うことで対処できます。 2.の問題点は、正規表現の書き方 or preg_splitのオプションパラメタで対処できます。 コードサンプル(ダメな例) <?php $ary_keyword = preg_
git commitを実行あとでコミットをやり直したり、コミット自体を取り消す方法です。 直前にしたコミットをやり直す(git commit --amend) 直前にしたコミットをやり直す場合、「git commit --amend」を使用します。 例えば、直前のコミットログが以下のような状態だったとします。 実は直前のコミットに含めるべきであった「hoge.txt」が含まれていませんでした。 コミットログ(git commit --amend 実行前) $ git log commit cca638b48b4c8be7ad5432f7882497534b04e2b4 Author: mrgoofy <hogehoge@example.com> Date: Wed Sep 8 23:03:57 2010 +0900 2nd Commit.-> New Add File : bar.txtこ
git add を実行あとで修正していなかった部分に気づいてしまった場合や、 「git add .」で間違って.swpとかのバックアップファイルがステージングに入ってしまった場合に、 git addをキャンセルする方法です。 コマンドの構文 ファイルをキャンセルする場合 git rm --cached ファイル名 ディレクトリをキャンセルする場合 git rm -r --cached ディレクトリ名 git rmは、Working Tree (作業コピー)と index からファイルを削除するコマンドですが、 --cachedを指定する事で、 indexからのみファイルを削除する事ができます。 http://blog.s21g.com/articles/960 指定する、ファイル名やディレクトリ名にはワイルドカード(*.swp等)が使用できます。 間違って要らないファイルをgit addし
OracleでINSERT/UPDATEの処理を書くのってなかなか面倒なので、なにか良い方法は無いかと探してみたらMERGEって方法がありました。 何気に便利だったので、覚え書きとして書いておきます。 ※MERGEはOracleでしか使えないようです。 MERGEの基本構文 MERGE INTO データ投入先のテーブル名 USING データ元のテーブル名 ON (条件式) WHEN MATCHED THEN UPDATE SET UPDATEする項目 WHEN NOT MATCHED THEN INSERT (INSERT対象項目) VALUES (INSERT対象データ) 同一構造のテーブルを元にMERGE 同一構造のテーブルを元データとしてMERGEする場合は、 USING句に「元データのテーブル名」 を記述します。 SQL文 MERGE INTO foo USING bar ON (
以前にまとめたUbuntu10.4でRedmineを元に記述間違いや新たな問題が発生したので、新しいエントリとして、情報を整理してまとめ直してみました。 以前との違いは Ubuntuはデュアルブートでインストール → 前回は仮想環境(VirtualBox) Redmine1.0.1 → 前回は0.9.4 インストールの流れ RedmineをApache上で動作させるまでの流れは以下のような形になります。 MySQLのインストール Rubyのインストール Railsのインストール Apacheのインストール passengerのインストール Redmineのインストール MySQLのインストール apt-getでmysqlをインストールします。 インストールの途中でmysqlでのrootのパスワードを聞かれるので、任意のパスワードを設定してください。 MySQLのインストールコマンド $ s
前回、MacPorts から Homebrew へ移行しましたが、せっかくなので、nginx + PHP 環境を作ってみました。 nginx を触ってみたかったので、勉強がてらにインストールしたときのメモ書きです。 nginx のインストール 設定 起動 これは、前回もやったのですが、一応おさらい。 nginx のインストールオプションを確認 インストールする前に、「brew options」でインストールオプションを確認しておきます。 $ brew options nginx --with-debug Compile with support for debug log --with-passenger Compile with support for Phusion Passenger module --with-webdav Compile with support for WebD
PHPでハッシュ配列をJSON形式の文字列に変換する関数を作ってみました。 通常、PHPで配列をJSON形式に変換するには「json_encode」を使用するのですが、この関数は「UTF-8 エンコードされたデータでのみ動作」という制約があるため、SJISの場合などは使用できません。 今回個人的にUTF-8以外(SJIS)で処理を行わなければならない事があったため、id:kovaioさんとid:fbisさんのブログを参考にして、自前で関数を作成してみました。 ハッシュ配列型かどうかを判定する関数 実装するにあたって、普通の配列とハッシュ配列を判定したかったので、id:fbisさんのブログにあった「is_hash」を使わせていただきました。 ハッシュ配列かどうかの判定方法はいろいろとあるようで、とても参考になります。 以下が使わせていただいたソースコードになります。 配列か連想配列かを判別す
csvファイルやtsvファイルでデータ作成をする場合、過去に作ったファイルと新しいファイルとの差分だけを抽出したファイルを作成したいことがあります。 ※私の場合、DBに登録するデータをtsvで相手先に2回に分けて送る必要があり、2回目は差分だけのデータを送らなければならないことがありました。 通常のdiffコマンドだけだと出来ないので、grep(egrep)とperlを使って実現してみました。 差分を抽出するデータ(サンプル) では、以下のfoo.csvとbar.csvを対象にして差分を抽出してみます。 ファイルの中身は以下になります。(csvファイル) foo.csv 01 りんご 02 みかん 03 すいか bar.csv 02 みかん 03 めろん 04 ぶどう このfoo.csvとbar.csvを普通にdiffで比較してみると差分を確認します。 foo.csvの相違点には行の先頭に
前回のエントリでは、csvファイルのある列を境にしてのファイル分割をしましたが、 今回は逆に2つに分かれているファイルを1つにマージする処理をPerlで書いてみました。 ※ハッキリ言って、たいした内容じゃないです。 前回のエントリ:PerlでCSVファイルやTSVファイルを列で分割する データサンプル base.csv(元ファイル その1) Key Deta2 1 A2 2 B2 3 C2 4 D2 5 E2 add.csv(元ファイル その2) Key Deta1 Deta3 1 A1 A3 3 C1 C3 5 E1 E3 ↓ マージ後 ↓ new.csv(マージされたファイル) Key Deta1 Deta2 Deta3 1 A1 A2 A3 2 B2 3 C1 C2 C3 4 D2 5 E1 E2 E3 Perlで実装 今回もテキストファイルということでPerlで実装してみました。
たくさんあるディレクトリの中からファイルが一つも無いディレクトリ(いわゆる空ディレクトリ)を削除する方法です。 削除する方法としては、findで空ディレクトリを探して、見つかったディレクトリを削除するという方法になります。 空ディレクトリの検索はfindでファイルタイプを指定(-type d) + 空(0byte)のファイルやディレクトリを検索指定(-empty)をします。*1 ディレクトリ削除については、「xargs」「-exec」「-delete」を使う方法があります。 xargsを使用したサンプル find . -type d -empty | xargs rm -rf -execを使用したサンプル find . -type d -empty -exec rm -rf {} \; -deleteを使用したサンプル ※「-delete」オプションはBSD系(FreeBSD,Mac OS
あるディレクトリ以下のファイルの文字列を一括置換する方法。 find,xargs,perlで一括置換 カレントディレクトリ以下のテキストファイル(*.txt)の文字列"hoge"を"foo"に置き換えする場合。 $ find . -type f -name '*.txt' | xargs perl -i -pe 's/hoge/foo/g' 置換前のファイルをバックアップとして残しておきたい場合、perlの-iの後ろにバックアップファイルの拡張子を付けます。 (サンプルでは.bakとしてバックアップファイルを作成) $ find . -type f -name '*.txt' | xargs perl -i.bak -pe 's/hoge/foo/g' $ $ ls -l total 32 -rw-r--r-- 1 foo bar 1100 8 21 00:57 test.txt -rw-
前回エントリ PHPセッションをDBで管理 - OracleでのAutoIncrement用テーブルを作成編 の続きです。 前回はOracleでセッション管理用のテーブルを作成するところまで行ないました。 今回は、そのテーブルを使って実際にPHPからセッション管理を行うのをやってみます。 ※参考にさせてもらったページ PHPのセッションをDB管理するにあたり、全体的な部分は「Web Artisan Blog」、OracleでAutoIncrementについては「イイ!! プログラミング Blog」、OracleのCLOBの更新方法等については「あるプログラマーのつぶやき」を参考にさせていただきました。 Web Artisan Blog - PHP:セッション情報をDBに持つ イイ!! プログラミング Blog - OracleでMySQLのAutoIncrement あるプログラマーのつぶ
apt-getコマンドをProxy経由で使用しなければならない状況になってしまったので調査してみました。 設定方法としては、環境変数(http_proxy,ftp_proxy等)に設定する方法と、/etc/apt/apt.confに設定する方法の2パターンで実現が可能でした。 以下の2つのページがとても参考になりました。 Little Penguin - プロキシ経由のapt使用法 http://members.jcom.home.ne.jp/mitakelp/old/vineapt.html apt-getコマンドのプロキシ設定について http://mkserver.dip.jp/vinelinux/perform/network/0135.html 環境変数を使う場合 環境変数(http_proxy,ftp_proxy等)にProxyサーバーのアドレスを設定することでapt-getが
前回の記事 Ubuntu10.4でRedmine 以前にUbuntu10.4にRedmineをインストールしましたが、Gitとの連携が出来ていなかったので、やってみました。 環境的には、RedmineとGitはインストール済みの状態から始めています。OSは前と同じでUbuntu10.4です。 今回は、id:ntakuさんのブログがとても参考になりました。とても丁寧でわかりやすく解説されています。 プログラミングノート - RedmineとGitで作るプロジェクト開発環境 http://d.hatena.ne.jp/ntaku/20090526/1243327903 では、さっそくやってみます。 Redmineから参照するGirリポジトリの作成 Redmineから参照するためのGitリポジトリを作成します。 今回は、/varにgitディレクトリを作成して、そこ以下に作成してみました。 $ m
サイトでGoogleAnalyticsを使うことになって、全てのページにタグを埋めこまなきゃいけないことになった。 「grep一発で全置換」は、あまりやりたくないなーと思っていたら、「mod_google_analytics」なるものを発見w。 早速試してみました。 インストール環境は、Ubuntu10.4、Apache2.2。 mod_google_analyticsってなに? GoogleAnalyticsのタグを自動的にHTMLに挿入するApacheフィルタモジュールです。 と書いてありました。 mod_google_analyticsのダウンロード 下記のgithubページからソースをダウンロードします。 mod_google_analytics http://github.com/dragon3/mod_google_analytics mod_google_analyticsの
前回のエントリ(d:id:mrgoofy33:20100608)でマテリアライズド・ビューを作りましたが、リフレッシュ方法などが良くわかっていなかったので、調べてみました。 今回は、自動でのリフレッシュは必要なかったので、手動での完全リフレッシュを試してみました。 リフレッシュの方法 refresh complete 完全リフレッシュ refresh fast 高速リフレッシュ refresh force 高速リフレッシュ or 完全リフレッシュ(デフォルト) never refresh リフレッシュをしない リフレッシュのタイミング on commit コミットされたときにリフレッシュ start with・next 指定時刻でリフレッシュ on demand 手動でのリフレッシュ 記述例 手動での完全リフレッシュを行う場合 create materialized view TEST_V
次のページ
このページを最初にブックマークしてみませんか?
『hogehoge foobar Blog Style Beta』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く