2014年6月25日水曜日
テキストファイルに含まれる文字列をGREPする
Linux 古いコマンドのキャッシュ削除
ソースからGITを入れた時に起こった現象 git --version bash: /usr/bin/git: No such file or directory どうも、削除した古いバージョンのGITの影響らしいので以下でキャッシュ削除 hash -r
swfed.so configure option
phpize
./configure --with-png-dir --with-gif-dir --with-zlib-dir
FireFoxの console.log 最高!
FireFoxプラグインのFireBugsで利用できる console.log って便利だ。IEにも同じ機能が欲しい。
単なるログ出力だけでなく、オブジェクトの中身が見れたりして
Javascript開発におけるわかりにくかったところが一度に解決されます。
console.log さまさまです。
しかし、FireFoxで開発を進めて、いざIEで試すとまったく動かない。。。
そんな絶望感は計り知れない。。。
まぁ、とりあえずってことで、
IEでは、if(typeof console == 'undefined') console ={};
とかやって、consoleを書いたままでもエラーが出ないようにしています。
スクラップブックマーク
はてなブックマークのjavascriptをお気に入りに登録させてしまう仕様をみて
ほーそんなこともできるんですね。
灯台下暗しといいますか、クリック一発で登録の手軽さをこういった形で実現してしまうとはさすがです。
そこで、新発見があったのですから応用して、スクラップブック(本文中の記事だけを取得する)用に
出来ないかと考えてみました。
FireFox用
<a href='javascript:
var h = window.document.getElementById("bkmark");
if(!h){
var f=window.document.createElement("form");
f.method="POST";
f.target="bkmark";
f.action="○○○.php");
f.innerHTML="<input type=\"hidden\" name=\"doc\" id=\"bkmark\"><input type=\"hidden\" name=\"title\" id=\"bkmark_title\"><input type=\"hidden\" name=\"url\" id=\"bkmark_url\">";
var ifr=window.document.createElement("iframe");
ifr.name="bkmark";
ifr.width=0;
ifr.height=0;
window.document.body.appendChild(f);
window.document.body.appendChild(ifr);
h = document.getElementById("bkmark");
}
h.value = escape(window.getSelection().getRangeAt(0)) || "";
window.document.getElementById("bkmark_title").value = escape(document.title);
window.document.getElementById("bkmark_url").value = escape(location.href);
if(h.value){f.submit();}
void(0);
'>スクラップブックマーク(FireFox用)</a>
上記のURLをはてなブックマークと同じように、ブラウザのお気に入りに登録します。
始めは、XMLHttpRequest を使っていたのですが、別ドメインへのアクセスが出来ないことが
すぐにわかり(使う前に気がつけよ。。。)断念しました。
はてなブックマークは、local.href でGETでタイトルとURLを送っていましたが
データを一方的に送信するだけでよいので、iframe枠内に見えないところでPOST送信することにしました。
(一番下に黒いぽちがでてますけど。。。)
スクラップブックで長めの文章を送るとなるとGETではバイト数が足りなくなる場合があるからです。
指定の文章の取得には、window.getSelection().getRangeAt(0)
でマウスで選択したテキスト部分をPHPプログラムへ送信します。
PHP側は、適当に DBに保存するなり、ファイルに書き出すなりして
後で自分で確認できるように作っておけば良いかと思います。
IEの場合は、window.getSelection().getRangeAt(0) の代わりに
(window.document.selection.createRange())[0] を使えばできるような気がします。(試してません)
自分のサイト以外でこういったJavascriptを実行させるテクニックは面白いですね。
(FireFoxのアドオンとかは基本的にこれなんですけどね。。。気がつけよ。。。)
Greasemonkeyとかがなぜ流行るのかようやくピント来た気がします(遅)
PHPの日付の加算、減算の備忘録
// 現在日付から○日の取得
echo "1日前" . date("Y/m/d", strtotime("-1 day" ));
echo "1ヶ月前" . date("Y/m/d", strtotime("-1 month"));
echo "1年前" . date("Y/m/d", strtotime("-1 year" ));
echo "1週間前" . date("Y/m/d", strtotime("-1 week" ));
// 指定日付から○日の取得
echo "1日前" . date("Y/m/d", strtotime("2007/12/20 -1 day" ));
echo "1ヶ月前" . date("Y/m/d", strtotime("2007/12/20 -1 month"));
echo "1年前" . date("Y/m/d", strtotime("2007/12/20 -1 year" ));
echo "1週間前" . date("Y/m/d", strtotime("2007/12/20 -1 week" ));
こういうのって、すぐに書き方を忘れてしまうので
書き留めておくと便利かも。
関連リンク:PHPで、先月、翌月などのを扱うときの注意
Beep音
1行テキストに onkeyup onkeydown onkeypress などのイベントハンドラーを設定し
リターンキーの挙動をデフォルトと変えた場合に、Beep音(ビー)がなります。
FireFoxでは、出なかったのですが、IEでスピーカーをつけたときに気が付きました。
function sampleKeydown(event){
var key = event.charCode || event.keyCode || 0;
if(key == 13){
// 何らかの処理
return false;
}
}
<input type="text" onkeydown="return sampleKeydown(event);">
リターンキーが押されたときに key == 13 のときに 処理後に return false ; してやれば、
Beep音は出ませんでした。
IEのBeep音もいろいろ種類があるけれども、Javascriptで制御できる
Beep音っては、どのくらいあるんだろう。
マウスクリックしても、「カチッ」音がするし、あれって制御できるもんなんだろうか。
普段、あんまりスピーカーとかつけてないもんで以外に盲点でした。
IE6 でロールオーバーがちらつく問題
CSSの background-image の position を変化させて
ロールオーバーを実装したときに、画像が表示されるたびに
ちらちらと画像が消えては表示される、ちらつきがでる場合があります。
background-position を変更するたびに画像を再読み込みしているのが
原因らしいです。また、この現象は、IE6特有で他では起こらないとのことです。
対処法としては、
CSSのみで対処する場合
html {
filter: expression(document.execCommand("BackgroundImageCache", false, true));
}
Javascriptで対処する場合
try {
document.execCommand(”BackgroundImageCache”, false, true);
} catch(e) { }
expression はもっぱら処理が遅いとのことなので
Javascriptで対処するほうが良いのかな。
background
CSSの background属性の取得について、だめだった報告。
Javascriptで以下のように 単純な jQuery を利用したソースを書く。
(Firefox2,IE6にて)
<html>
<head>
<style type="text/css">
#hoge{
background: transparent url('hoge.gif') no-repeat 10px 10px;
width: 10px;
height: 10px;
}
</style>
</head>
<body>
<div id="hoge"></div>
<input type="button" id="btn" value="background get!">
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
alert( $('#hoge').css('background') );
});
});
</script>
</body>
</html>
上記で ボタンを押すと、アラートが表示されるが、FireFoxは空欄が表示され、IE6は、undefined が表示される。
次に backgroundを 個別の属性に分けて試してみると
値が取得できた属性
- background-image
- background-repeat
- background-color
- background-attachment
- background-position-x(IEのみ)
- background-position-y(IEのみ)
値が取得できない属性
- background-position
background-position を backgroundPosition としてみても取得はできなかった。
なぜ、background-position だけ取得できないんでしょうかね?
特別な意味でもあるのかな?
はてなで質問してみてるけど、どうも仕様的にそうなってるみたいな雰囲気???
mod_proxy mod_proxy_balancer と mod_dirを使う時の注意
mod_proxy を使って、バックエンドサーバーにリクエストを振り分けていたときの話です。
ServerName www.example.com
ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/
<Proxy balancer://cluster/>
Balancermember http://bk1.example.com loadfactor=50
Balancermember http://bk2.example.com loadfactor=50
</Proxy>
上記のように設定して、www.example.com → bk1.example.com と bk2.example.com にリクエストがそれぞれ渡されます。
ここで、bk1 や、bk2 側で、mod_dir を利用したリダイレクトが起こった場合に
クライアントに戻されるURLが問題になりました。
クライアント → http://www.example.com/test → http://bk1.example.com/text
↓ mod_dir
クライアント ← http://bk1.example.com/test/ ← http://bk1.example.com/test/
mod_dir は、URLがスラッシュ(/)で終わっていないときに、スラッシュをつけたURLに変換してくれます。
ただし、リダイレクトのURLがどうも http:// からのフルパスで変換するみたいで
バックエンドサーバーのServerNameのままクライアントにリクエストを返してしまいました。
ProxyPassReverse / balancer://cluster/
上記を設定しているのでURLの書き換えをしてくれると思ってたのですが
どうも書き方が違うらしく
ProxyPassReverse / http://bk1.example.com/
ProxyPassReverse / http://bk2.example.com/
こう書くことで、意図したURLの書き換えをしてくれました。
しかし、ProxyPassReverse / balancer://cluster/ この記述は、何をしてるんですかね?
URLを書き換えてくれなければ、意味がないと思うのですが。。。
JQueryで連続した半角英数字を任意の場所で改行するプラグイン
長い半角英数字が改行されず思いのほかレイアウトが崩れることってありますよね。
特に掲示板みたいなユーザに入力してもらうようなシステムの場合
開発時に想定してなかった長い半角英数字なんかをいれられて、
後から「おおおなんじゃこりゃぁああああ」なんてことがたまにあります。
ただ、最近までレイアウトが多少崩れても「まぁいっか」くらいの気持ちでして(←だめだね)
どうしても解決しなければいけないときは、textarea を強引に流用したり誤魔化してきたような。。。。とはいえ、そんなずぼらなことではいけない気もするのでjQueryのプラグインを作ってみました。
IE系のCSSには、独自に拡張した word-break: break-all; を使えばすぐに解決できるのですがそれ以外のブラウザがまだ対応してないみたいでここがちょっとネックですね。
CSS3くらいには標準になるのかな?
いろいろ、調べてみると任意改行文字 8203を使うのがなんとなく意図した内容に近いみたいです。
各テキストの1文字ずつにこれを挟んでようやく解決。(しかし、テキストの量が多くなると処理に時間がかかりすぎるかも)
(追記)2009/12/09 version 0.2 以下の参照ページでご指摘いただいた修正をしました。
【jQuery】word-break:break-all;をie以外でも実装するjQueryプラグイン
げことじさんありがとうございました。
jQuery(function($){
$.wb = {
version: 0.2
,sep: String.fromCharCode(8203)
,remake: function(elm){
var h = elm.contents();
elm.html('');
$(h).each(function(){
if(this.nodeType == 3){
elm.append($.trim(this.textContent.split('').join($.wb.sep)));
}else if(this.textContent == ''){
elm.append(this);
}else{
elm.append($.wb.remake($(this)));
}
});
return elm;
}
}
$.fn.wb = function(){
if(/msie/i.test(navigator.userAgent)){
$(this).css('word-break', 'break-all');
}else{
$.wb.sep = (/firefox\/2/i.test(navigator.userAgent)) ? '<wbr />' : String.fromCharCode(8203);
$(this).each(function(){ $.wb.remake($(this));});
}
return $(this);
}
});
参考:FirefoxとOperaでword-break:break-allを実現する「wordBreak.js」
しかし、この任意改行文字のような特殊文字って結構あるんですね。
ぜんぜん知りませんでした。
※作ったもののJavascriptがONじゃないと使えないですねぇ。。。
MySQLの書き順による、カラムの処理順序
MySQL系で以下の update文を実行して驚いた!
table xxxxx
pkey | col1 | col2 |
---|---|---|
1 | aaaaa | ccccc |
上記のようなテーブルにデータがある場合に以下のSQLを実行すると
update xxxxx set
col2 = col1
,col1 = 'bbbbb'
where
pkey = 1
;
以下のように更新される
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | aaaaa |
ところが、SQL文を以下のように書き換えると
update xxxxx set
col1 = 'bbbbb'
,col2 = col1
where
pkey = 1
;
結果がこうなる。
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | bbbbb |
えええええええ、そうなの????
pkey | col1 | col2 |
---|---|---|
1 | bbbbb | aaaaa |
じゃないの???
PostgreSQLだと、同一クエリー内で書き順は関係なく
並列に処理されましたが、MySQLの場合はそうではないんですね。
書いた順番のカラムごとに処理をしていくから、
下位の処理は上位の処理の影響をもろに受ける。
処理は並列ではなく直列でした。
知らなかった。。。。
今まで書いてたSQL文に一抹の不安を覚えた。
大文字と小文字を区別しないで like 検索する
PostgreSQLで、大文字と小文字を区別しないで like 検索する場合は、ilike にすればよい。
select * from tableA where col1 like 'a%';
↓
select * from tableA where col1 ilike 'a%';
これで、a~ と A~ の両方にマッチする。
DirectoryIndex と mod_rewrite を使うときの注意
DirectoryIndex と mod_rewrite を使うときに / で終わるパス(ディレクトリ)を指定したときの動作には注意が必要です。
mod_rewrite で、index.html → index.php とか index.rb とかしている場合
http://example.com/index.html
にアクセスすると
http://example.com/index.php
と通常はURLがリライトされます。ところが
http://example.com/
とindex.htmlを省略してアクセスすると
403 forbidden
が出る場合があります。
http://example.com/ → http://example.com/index.html → http://example.com/index.php
上記のような連続したURLのリライトを期待したのですが 403 と怒られました。
どうもこれは、DirectoryIndexの設定で index.html を参照するように設定しているためで
単にURLを index.html とリライトするのではなく
実際に index.html ファイルの有無を判断するようで
mod_rewirte でURLの書き換えが起こる前に
先にindex.htmlのチェックし、ファイルがないので 403 forbidden となるようです。
手っ取り早く対処するには、ダミーのindex.htmlを置くのが簡単です。
PINGが通らないときにまず疑うことは、iptablesの設定
ネットワークの設定もひと通りすませて
いざPINGを飛ばしてレスポンスを確認したときに
まったく応答がなく四苦八苦したときは、
接続先のiptablesを確認してみることをおすすめします。
無用な接続を弾くためにiptablesをしっかり設定したつもりが
接続許可する予定のクライアントまで遮断していたなんてことはないですか?
とりあえず、PINGが通らないときは、/etc/init.d/iptables stop してみましょう。
それでも通らないときはどこかネットワークが切れてると思います。
LANケーブルかHUBルーターが故障ってのが次の確認箇所。
ネットワークがつながらないときは無限あり地獄のような
出口の見えない焦燥感に苛まれますので、誰かのお役に立てば幸いです。
URLに、username,passwordを含める方法
http://username:password@example.com
"@"を含む場合はエスケープして"%40"にする
Basic認証や、GitのRemoteにPUSHするときに使えるl
2014年6月24日火曜日
softeather vpnclient Linux版の仮想LANカードにIPアドレスを割り当てる
ifconfig を使って割り当てるといい
/sbin/ifconfig vpn_vpn 192.168.30.5 netmask 255.255.255.0 broadcast 192.168.30.255
/sbin/ifconfig vpn_vpn 192.168.30.5 netmask 255.255.255.0 up