jquery エレメントのデバッグを分かりやすくする方法
How do I console.log a jQuery DOM Element in Chrome? - Stack Overflow
デバッグに関する面白い回答があった。
例えば↓のようなhtmlがあったとして、
<div> <label> <input type="radio" class="flat" name="radio1" value="0" />チェック1 </label> <label> <input type="radio" class="flat" name="radio2" value="1" />チェック2 </label> </div>
findの結果を見たい場合、
$(function(){ console.log($("div").find('input')); });
とやるとchromeだと↓の結果が表示される
[input.flat, input.flat, prevObject: n.fn.init[1], context: document, selector: "div input"]
これ前々から思っていたけどスゲー分かりにくい。
そこで↓のlog()を定義する
$(function(){ $.fn.log = function() { console.log.apply(console, this); return this; }; // コンソールに出力 $("div").find('input').log(); });
分かりやすい結果となる↓
<input type="radio" class="flat" name="radio1" value="0"> <input type="radio" class="flat" name="radio2" value="1">
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
jquery bootstrapのiCheckでflat指定したradioボタンを選択する方法
はまったのでメモ。
html
<div> <label> <input type="radio" class="flat" name="radio" value="0" />チェック1 </label> <label> <input type="radio" class="flat" name="radio" value="1" />チェック2 </label> </div>
$(function(){ // ↓flat指定ありの場合 $("div").find('input').eq(0).iCheck('check'); // ↓flatを使わない通常の選択方法 //$("div").find('input').eq(0).prop('checked',true); });
ポイントはiCheck()を使うこと。
Checkboxes and radio buttons customization (jQuery and Zepto) plugin
bootstrap3 グリッドシステム col-sm やら col-xsの意味について
bootstrapのグリッドシステムを利用する際にcol-smやらcol-xsを指定する。
詳細はこちら
CSS · Bootstrap
グリッドって分かりにくいんだけど、ポイントは12分割がベースってこと。
例えば
<div class="col-sm-6 col-xs-12">hoge<div> <div class="col-sm-6 col-xs-12">hoge<div>
みたいな指定をした場合、col-sm即ちタブレット以上サイズ(pc含む)の場合は、6/12即ちdivを一行の半分のサイズで表示するって意味。col-xs即ちスマホ以下の場合は、12/12即ちdivを横一行全部使って表示しますよ、という意味。
<div class="col-sm-3 col-xs-6">hoge<div> <div class="col-sm-3 col-xs-6">hoge<div> <div class="col-sm-3 col-xs-6">hoge<div> <div class="col-sm-3 col-xs-6">hoge<div>
この場合、PCの場合はdivを一行の1/4(3/12)で表示し、スマホの場合はdivを一行の半分(6/12)で表示することになる。
16/9/22追記
「タブレット以上は一行の半分、スマホは一行全部」としたい場合の指定
class="col-xs-6" /* 間違い */ class="col-sm-6" /* 正解 */
16/9/23さらに追記
col-sm-6 col-md-3
と指定したのに、スマホサイズ(col-xs)で一行全部にならなかった。
col-xs-12 col-sm-6 col-md-3
と指定したところ正しく動いたので、やはり明示的にcol-xs-12を付けないといけないかも。
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
mysql5.6が突然起動しなくなった件の原因と対策
昨日まで動いてたmysqlが突然起動できなくなった。以下、ログ周りのオプションを変更してみた時のエラーログまとめ
# error1 /usr/sbin/mysqld: File './mysql-bin.000023' not found (Errcode: 28 - No space left on device) 2016-09-14 08:52:37 23762 [ERROR] Could not open mysql-bin for logging (error 28). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. 2016-09-14 08:52:37 23762 [ERROR] Aborting # error2 /usr/sbin/mysqld: File './mysql-bin.~rec~' not found (Errcode: 28 - No space left on device) 2016-09-14 08:56:13 24546 [ERROR] MYSQL_BIN_LOG::open_purge_index_file failed to open register file. 2016-09-14 08:56:13 24546 [ERROR] MYSQL_BIN_LOG::open failed to sync the index file. 2016-09-14 08:56:13 24546 [ERROR] Aborting # error3 2016-09-14 09:09:32 25665 [ERROR] Can't start server : Bind on unix socket: No space left on device 2016-09-14 09:09:32 25665 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ? 2016-09-14 09:09:32 25665 [ERROR] Aborting # error4 2016-09-14 09:17:20 2022 [ERROR] /usr/sbin/mysqld: Sort aborted: Can't create/write to file '/tmp/MYCUjmDB' (Errcode: 28 - No space left on device)
ディスク容量は問題無い。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda3 28G 17G 9.1G 66% / tmpfs 499M 0 499M 0% /dev/shm /dev/vda1 239M 58M 168M 26% /boot
原因はi-node数だった。
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda3 1819680 1819680 0 100% / tmpfs 127509 1 127508 1% /dev/shm /dev/vda1 64000 44 63956 1% /boot
よくよく調べてみるとphpのセッションファイルが大量に作成されていた。
# ll /var/lib/php/session/ | wc -l 1736291
普通に削除しようとしたところエラー
# rm -fr /var/lib/php/session/* -bash: /bin/rm: 引数リストが長すぎます
ファイル数が多すぎる場合はxargsを使わないといけないらしい。
cd /var/lib/php/session/ echo * | xargs rm -rf
セッションファイル削除までの時間を調べたところ30日になっていた。以前よりもアクセス数が増えた(ほとんどbotだが・・)のでこれだと長すぎたようだ。
php.ini
#session.gc_maxlifetime = 2592000 //変更前30日 session.gc_maxlifetime = 1440 //変更後(デフォルトの24分に戻す)
削除後のi-node数
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda3 1819680 84090 1735590 5% / tmpfs 127509 1 127508 1% /dev/shm /dev/vda1 64000 44 63956 1% /boot
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
メールの符号化について
受信したメールをprocmail経由でphpに渡してゴニョゴニョする時に失敗した件のまとめ。
まずメール送信の仕組みから分かっていなかった。
初期のメールではASCIIの7bitデータのみが想定されていたため、現在でも添付のバイナリやマルチバイトである日本語は7bitに変換(MIMEエンコード)してやる必要があるわけ。MIMEエンコードには主にBase64とQuoted-printableの変換方法がある(Base64とQuoted-printableはともに可逆)。
で、今回失敗したのは、通常procmail経由でphpに渡ってくるメールは7bit(今回はQuoted-printable)で符号化されたデータなのに、日本語であることを前提としていたためメールの解析に失敗したというわけ。
ちなみにメールがどの方法でエンコードされているかはメールのソースを見れば分かる。日本語のメールは最初から日本語で送られてくるわけでは決してない!gmail等のメーラーがメールヘッダーの以下の部分を見てよしなに変換してくれていたってわけ!
Content-Transfer-Encoding: quoted-printable
ここには通常「7bit」が指定されることが多い。7bitだと一概にこれでエンコードされている!とは言えないぽい(少し調べてみたけどよく分からんかった)。
またphpのmb_send_mailとか使うと「7bit」で送信されてその際にmb_languageの結果に基づいてエンコードされるんだけど、languageがJapaneseの場合は、「ISO-2022-JP/Base64」の組み合わせでエンコードされるぽい。
で、今回の件をよくよく調べたところ、メールの本文はMail_mimeDecode::decodeで取得しており、このクラスはContent-Transfer-Encodingを考慮するため、問題が無いはずであることが分かった。
なのでMail_mimeDecodeを要調査。
調査結果
結果的に問題はなかった。phpの解析部分に問題があっただけでMail_mimeDecodeは正しくquoted-printableの本文をデコードしていた。
以降メモ。
Mail_mimeDecodeはヘッダのContent-Transfer-Encodingを元にbodyをデコードする(オプションのdecode_bodies=>trueとすること)。今までbashのmailコマンドでテストしていたんだけどmailだとContent-Transfer-Encodingが指定できない?ぽいのでphpのmail関数を使うこと。以下のような感じ。
<?php $subject = "サブジェクト"; $body = <<<EOF 本文 EOF; $to = "to"; $from = "from"; mb_language('japanese'); mb_internal_encoding('utf-8'); $subject = mb_encode_mimeheader($subject); $body = mb_convert_encoding($body,"Quoted-Printable","UTF-8"); $header = "From: ".$from."\n". "Mime-Version: 1.0\n". "Content-Type: text/plain; charset=utf-8\n". "Content-Transfer-Encoding: quoted-printable"; mail($to, $subject, $body, $header, "-f".$from);
参考サイト
エンコード・コレクション (メール、テキスト関連)
quoted-printable文字列の変換 - [サンプルコード/PHP] ぺんたん info
PHPでメールを送る – ぱんぴーまっしぐら
centos パスワード無しでscpする手順
サーバー1からサーバー2にパスワード無しでscpするための手順
■サーバー1の作業
サーバー1鍵作成
ssh-keygen -t rsa
保存場所やpassphrase聞かれるけど全部エンターでok
デフォルトだと以下の場所に秘密鍵と公開鍵が作成される
.ssh/id_rsa
.ssh/id_rsa.pub
公開鍵をサーバー2にコピー
scp id_rsa.pub user@host:.ssh/id_rsa.pub rm id_rsa.pub
■サーバー2の作業
コピーした公開鍵をauthorized_keysに追加
cat id_rsa.pub >> authorized_keys rm id_rsa.pub
以上でパスワード無しのscpが出来る
参考サイト
SSHで鍵認証を用いて、パスワードなしでログインする方法 – 或る阿呆の記
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
jquery qtip2をレスポンシブ対応する方法
javascript - qTip viewport adjustment not working - Stack Overflow
これを見れば分かる。
要はpositionにviewportを追加しないといけなかった。
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html