[Apache] : Apacheのチューニング Apacheをより有効的に利用するためのノウハウメモです。設定に用いたマシンはMacOSX、Apacheのバージョンは2.2としています。
http headers http://www.yahoo.co.jp/ GET / HTTP/1.1 Host: www.yahoo.co.jp User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIEMobile 6.5) KDDI-TS01 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KDDI-TS01; Windows Phone 6.5.3.5) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: B=XXXXXXXXXXX HTTP/1.1 200 OK Date: Sun, 09 Oct 2011 03:16:08 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
[PHP] : Date/Timestamp変換のまとめ 2013/07/17追記 ※本記事の内容より詳しいものを書きました。
誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ - Yuta.Kikuchiの日記
概要 Mysqlからアプリケーションで日付情報を引くときDate型Timestamp型の変換を行う事がしばしばある。 今日はPHP/Python/JavascriptのDate/Timestampの型変換についてまとめる。 Javascriptの例ではSpiderMonkeyを利用している。 Date型の日付を出力する php //現在時刻をDate型で出力 //date関数を使う場合 echo date("Y-m-d H:i:s") . "\n"; //結果 2011-10-14 00:00:00 //strftime関数を使う場合 echo strftime("%Y-%m-%d %H:%M:%S") . "\n"; //結果 2011-10-14 00:00:00 python #! /usr/bin/env python # -*- coding:utf-8 -*- from datetime import * #現在時刻を表示 print datetime.now().strftime( '%Y-%m-%d %H:%M:%S' ) #結果 2011-10-14 00:00:00 Javascript //Dateオブジェクトを利用 var d = new Date(); var year = d.
[Shell] : sudoでリダイレクトをしたいとき sudoでリダイレクトに失敗 UNIX/Linuxでコマンドラインで実行した結果をファイルにリダイレクトしたい時があります。(例えばPHPのバッチを実行した時に処理のログとエラーログをファイルに書き込んでおきたい。) ユーザに実行権限がないディレクトリのファイルに対してリダイレクトでデータを書き込みたいとき、sudo をつけても失敗します。 次はリダイレクトが失敗する例です。zsh: permission deniedと怒られます。 $ sudo echo 'redirect' /var/test/hoge.txt zsh: permission denied: /var/test/hoge.txt うまくいく方法 以下に方法を書きます。私が知る限りでは2つ方法があります。
回避策1 : shのオプションに-cを付ける man sudoを見てみます。そうすると以下のように実行せよという記述がありました。-cとして実行したいコマンドを""でくくるみたいです。
To make a usage listing of the directories in the /home partition. Note that this runs the commands in a sub-shell to make the cd and file redirection work. $ sudo sh -c "cd /home ; du -s * | sort -rn USAGE"
[javascript] : SpiderMonkeyでのコマンドラインJavascript Javascriptの実行はWebブラウザ上に限定されたものではない。ターミナル上でもスクリプト言語として実行可能だし、構文チェックも可能。今日はあまり知られていない非ブラウザでのJavascriptの話。SpiderMonkeyをターミナル上で動かすことを中心にまとめる。
SpiderMonkeyとは 世界初のJavascriptエンジンのコード名。 Mozilla Foundationによって保守運用。 C言語で開発され、インタプリタ、コンパイラ/逆コンパイラ、ガーベージコレクション、標準クラス群を提供。 LinuxやMacにinstallするとコマンドラインからJavascriptが操作可能。構文チェックも可能。 install Macにinstallする方法を挙げる。以下2つのどちらかの方法を採用すれば良い。
※sourceからのbuildはmacの場合色々と設定が大変だったのでport installした。
1 portからinstallする これが一番簡単。
$ sudo port install spidermonkey 2 sourceをdownloadしてbuild ※以下は実行していないが念のためダウンロードとインストールについて記述する。
SpiderMonkey Build Documentation ここを参考に設定する。
Mac OS X Build Prerequisites 設定が結構大変。
autoconf213が必要なのでまずはそれを入れておく。
sudo port install autoconf213ソースの取得方法は次の通り。※murcurialからの取得が時間がかかる。
tarballでの取得 $ wget http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz $ tar xzf js185-1.0.0.tar.gz murcurialからの取得 $ hg clone http://hg.mozilla.org/mozilla-central/※ murcurialを操作するhgコマンドが無いと取得できないので設定されていなければportからinstallする。
sudo port install mercurial CVSからの取得 $ cvs -d :pserver:anonymous@cvs-mirror.
[Web] : モバイルサイトを構築するための文字コード知識 はじめに 携帯キャリア向けのサイトを作っている時に必ず発生する文字コード問題(主に文字化けやByte数問題)。この記事では文字コード(文字集合、符号化)に対する内容についても触れつつ、モバイルサイト作りで注意すべき点について詳しく記述する。
そもそも文字コードとは 以下では簡単に説明する。
一つずつの文字を表すためのByte列表現であり、Byte列表現と文字の対応関係でもある。 別の言い方をすると文字コードとは各種文字についての符号の番号を独自の順序と計算式で示したByte列表現。 言語の文化と密接な関係を持っており、例えば英語圏、アジア圏でそれぞれ固有の文字コードが制定されるが、コンピュータ上で正常に表現できない言語も多い。 日本語を表現する有名な文字コードとしてはISO-2022-JP(JIS)、EUC-JP、Shift_JIS、UTF-8などである。 1バイト系文字コード(シングルバイト、半角文字)と2バイト系文字コード(マルチバイト、全角文字) 色々な文字コードが存在するため、システムで変換するときには様々な問題が起こる。変換には処理コストも掛かるし、対応が正確でないこともある。 Unicodeは上の互換性の問題に対応するために作られ、全ての言語を表現する。 文字コードは文字集合(coded character set)と符号化方式(character encoding scheme)という区別がされる。 文字集合JISX0208に対してISO-2022-JP、EUC-JP、Shift_JISなどの符号化方式が存在。 文字集合Unicodeに対してUTF-7、UTF-8、UTF-16などが存在する。 各キャリアサイトの文字コード 各キャリアの技術サイトを見てみる。
DoCoMo imode browser html DoCoMo imode browser xhtml au SoftBank willcom emobile マトリックスでまとめると以下のようになる。
キャリア Shift_JIS ISO-2022-JP EUC-JP UTF-8 備考 DoCoMo ○ × × ○ htmlだとUTF-8が使用不可 Au ○ × × × formのデータ送信がページ文字コードによらずShift_JISになる SoftBank ○ ○ ○ △ UTF-8のサポートは機種による Willcom ○ ○ ○ △ JRCの端末は一部UTF-8未対応 emobile ○ ○ ○ ○ スマートフォン ○ ○ ○ ○ ほとんどPCと同じだが、タグの指定とOSのバージョンで一部文字化けすることも この結果からキャリアのサイトを作る場合はShift_JISで作る事が望ましい。UTF-8は完全に対応できてはいない。DoCoMo,Auの制約が厳しい。 スマートフォンの文字コード制約は特にないので適切なサーバサイドから渡す文字コードとクライアントのContent-Typeの設定を一致させる(UTF-8が一般的か) xhtmlのContent-Type指定のサンプルは次のように設定。 xml version="
[Python] : Pythonでbase64エンコード・デコードする方法 import base64でできる バイナリデータをASCII文字列化する手段の一つであるbase64encode・decodeをpythonでやる方法。import base64によりすごく簡単にできる。エンコード:base64.b64encod、decode:base64.b64decode。Paddingには'='が使用される様子。以下はサンプルサンプルコードでバイナリ形式のimageファイルを読み込み、base64encodeを行い、encodeした文字列からdecode関数で元ファイルのバイナリと同じであるかどうかを確認している。
#! /usr/bin/env python # -*- coding:utf-8 -*- import base64 #file読み込み file = open('./image.jpg', 'rt').read() #base64でencode enc_file = base64.b64encode( file ) #encodeしたascii文字列を出力 print enc_file #decodeしてもとデータに変換 dec_file = base64.b64decode( enc_file ) #decodeしたデータと元データを比較 if file == dec_file : print 'SAME' else : print 'NOT SAME' encode結果(一部)
VQOeSpPIrtIP2jv2f59HklHxv+Eu2QCVI5/F1jGy55IwZMgg9iM1/K9iis4YSKd7jeLk1sf1QTftEfAWeymB+N/wfWRk5P8AwmNhkEjt+9/OstPj/wDAUps/4Xb8I41+YqD4xsQME5wcS9e+PWv5cqKp4WL6k/WZH9REH7QPwGtlljl+NXwmuELlkceMLDPfr++57dajHx8+BlxbO5+NXweiLJgA+M7EHqDn/W8EZNfy90VDwUL7l/W5H9NU/wAefgoJ0D urlsafeをサポート urlにbase64encodeした文字列を含めたい時に有用。なぜならば'/','+'はurlのパスやquery文字列に使用されるので変換が必要となる。pythonの場合は'/'を'_'、'+'を'-'に変換するurlsafe形式を組み込み関数でサポートしている。※他の言語だとdecode/encodeの前後で文字列を自前で変換する。encode:base64.urlsafe_b64encode、decode:base64.urlsafe_b64decodeを利用する。以下はサンプルコード。
#! /usr/bin/env python # -*- coding:utf-8 -*- import base64 #file読み込み file = open('./image.jpg', 'rt').read() #base64でencode enc_file = base64.
[Android] : Android端末のOpenSSL経由でファイルダウンロードができない問題 問題詳細 OpenSSLを使って立ちあげたサーバに設置したファイルに対してAndroidのブラウザからアクセスしても全くダウンロードが始まらない現象が起きていた。サーバのレスポンスとしてのContent-Typeやその他headerについても確認しても特に問題なさそうだったので、試しにhttpでアクセスしてみたらうまくダウンロードできた。httpsの何が原因なのかが分からないが、androidはオレオレ認証を認めてくれないようだ。別にOpenSSLぐらいのアクセスぐらい認めてくれてもいいのに、iPhoneは例外承認すればダウンロードさせてくれますよ。時間があればAndroidブラウザソースを追いたいと思ったが、既にIssueTicketが発行されていたので、そのリンクと内容を張っておく。
Issue 3492
※原文の一部を下に引用
I tried to download a file from a password protected page (AuthType Basic),
which is accessed over https. Accessing the page itself with the browser
works without problems. But when I try to download files from the page, the
Download Manager shortly displays "Starting download..." and the switches
to and keeps saying "Waiting for data connection...". The download is never
[Python] : MongoDBをpythonから利用する MongoDB 特徴 アメリカの10gen社によってC++で書かれたドキュメント指向データベース。 DBへのアクセスはJavascriptによって行う。 ドキュメント指向データベースとは、自由なデータ構造のドキュメントを登録する事が可能。 MongoDBのデータベースはそれぞれ独立している。 テーブルの構造を事前に決めないのでスキーマレス。 1つのデータベースには1つ以上のコレクションとコレクションにはドキュメント(オブジェクト)から成り立つ。 コレクションとはドキュメントのグループ。RDBMSのテーブルに相当。 ドキュメントとは登録データ(オブジェクト)。 RDBMSにオブジェクトを登録することはプログラムが複雑化するが、ドキュメント指向データベースならオブジェクトをそのまま保存。 ドキュメント指向データベースに他にCouchDBがある。 RDMBSと比較して簡単にスケールアウトできる仕組み。 BSONというバイナリ形式のデータを内部で保存。BSONとはJSONを元にしたKey-Value型のデータ構造。 BSONのStringCodeはUTF-8。 indexの設定が可能。 データを複数のデータベースに分割するShardingが可能。 JOIN機能が無いのでテーブルの結合などの必要がある場合はRDBMSを利用する。 BSONのデータ構造 MongoDBの各ドキュメントは_idというuniq keyを保持。 idはBSONのobject idでといった12Byteの値。 idはコレクション内でユニークであり、コレクションがindexを持つ場合はユニークが強制される。 ユーザ自身で_idを指定する事も可能だが、指定しなかった場合は自動で付与される。 idは12バイトの値でほとんどのケースでユニークになるようにデザイン。 MongoDBのシェルとして提供されているObjectId()はidを生成するために使う。Object( 'e4d1a14651d0f018e0000004' )のように使い16進数文字列から生成。 idは4バイトのタイムスタンプ(epoch秒)、3バイトのマシーンID、2バイトのプロセスID、3バイトのカウンターで構成され、計12Byte。 タイムスタンプカウンターフィールドはbig endianで格納。バイト毎に比較した時に必ず昇順になることを保証。 install macOSXに対しての手順を記述する。
1. port install port installは時間が掛かりすぎてやめた。
$ sudo port install mongodb
1. download and install Downloads - MongoDB
$ tar xzf mongodb-osx-x86_64-1.8.2.tar
$ sudo cp -R mongodb-osx-x86_64-1.
[Web] : 各キャリアのメール添付のまとめ 送信 サービス 可能容量 最大ファイル数 ドキュメント DoCoMo SPモード 10M - http://www.nttdocomo.co.jp/binary/pdf/service/provider/spmode/guide/sp.pdf DoCoMo iモード 100K - 2M 10 http://www.nttdocomo.co.jp/service/communication/imode_mail/function/ishot/datasize/index.html EzWeb Eメール 100K - 2M 5 http://www.au.kddi.com/service/email/tsukaikata/kino/index.html SoftBank SMS 2M 5 http://mb.
[javascript] : jQuery Proven Performance Tips And Tricks (翻訳) http://addyosmani.com/jqprovenperformance/
このサイトに書いてある内容をまとめます。英語は苦手なんで適当な意訳が多いです。
Performancetip1 バージョンのお話 可能な限り常に最新バージョンを利用する。 アップデートする前にはかならずregression testを行う事。 最新のバージョンは1.6.2や1.7で、この秋にリリースされる予定。 twitterなどもjquery1.3.0を利用している。 1.6はパフォーマンス改善や 新しい特徴が組み込まれている。 1.6.2はバグのパッチやregressionが修正される。 古いバージョンではこれらお手軽なパフォーマンスを受けることができない。 47%の有名なサイトがJqueryを使っているが、バージョン変更にテストが大変。 アップデートは通常、大変ではないプロセスである。 1.4.2、1.4.4と1.6.2のSelectorを比較してもパフォーマンスの違いは明らか。 .attr( 'value' ), .val()(get)なども1.6でパフォーマンスが改善されている。 しかし特定のselectorは1.4.xより遅くなっている。 使っているselectorのパフォーマンスに注意すれば、大丈夫。 Performancetip2 Selector 全てのSelectorは平等に作られない。 Selectorの生成方法は沢山あるし、それぞれのSelectorは同一のパフォーマンスを出さない。 最速と最遅いSelectorがどれか知っていますか? IDとElementのSelectorは最速。$( '#Element, form, input' ) IDとElementでの指定は裏側でnativeDOMの操作を利用している。(getElementById()) Class Selectorは遅い。#( '.element' ) getElementsByClassNameはIE5-8ではサポートしていない Firefox3、Safari4、Chrome4、Opera10.10以上はこれは速い。 最も遅いのは正しくない指定とattributeでのselector。$( ':visible, :hidden' ); $( '[attribute=value]' ); 上のselectorはnative関数を呼び出す事ができない。 最新のブラウザーにはquerySelector()やquerySelectorAll()などサポートされている。 querySelectorAll()はCSSベースでのSelectorとなる要素をDOMとして検索できる。 JQueryはquerySelectorAll()の利用を試みている。 querySelectorAllを使うSelectorの最適化と:first,:last,:eq等ではないSelectorの最適化との比較。 有効なSelectorこれをより利用する機会がある。 曖昧なselectorは有効ではあるが、使う時には注意が必要。 :hiddenを指定した要素が100個あったとき、JQueryは100個のアイテムをコールする。 :hiddenは有効であるが全ての曖昧な指定は全ての要素に対して実行を試みる。 できれば上の事は避けたい。 jQuery1.