[Apache] : Rewrite/Redirect RewriteとRedirectの違い Rewrite:URLの書き換えが発生しない Redirect:URLの書き換えが発生する 設定ファイル mod_rewriteの仕組みを利用します。
Linux(CentOS)の場合設定ファイルは以下の次のパスになる。/etc/httpd/conf/httpd.conf
今回は上のhttpd.confを少し書き換えて、rewrite/redirectの設定ファイルをincludeさせることを試みる。
httpd.confの最後の行に以下を追記する。Include conf/rewrite.conf
rewrite.confに色々とリダイレクトの記述をして、試してみる。
RewriteEngine,RewriteCond,RewriteRule apacheの設定ファイル(httpd.conf、今回はrewrite.conf)にRewriteEngine On,RewriteCond,RewriteRuleといった記述をすることでリダイレクト/リライトを実現する。
RewriteEngine On : Rewriteを適用しますという宣言。 RewriteCond : Rewriteを行う条件を指定する。たとえばUserAgentがFireFoxだったら以下のRewriteRuleを適用せよといった指定など。 RewriteRule : Rewriteの適用ルールを記述する。たとえば特定のURIへのアクセスは全部一律で別のURIに置き換えるといった指定など。 Rewrite変数 以下はRewriteCond,RewriteRuleで適用できる変数一覧です。
HTTP headers:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
connection & request:
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
server internals:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
[Mobile] : Mobile-UserAgent検索システム 概要 Mobileサイト開発者向けのUserAgentの検索、一覧表示、useragentswitcher用のxml-dumpが可能です。 モバイル端末(SmartPhone含む)をサポートしています。 キャリアの公式サイトなどを自動的にクローリングしてデータを生成しています。 一覧取得のWebAPIを作成中です。 Google App Engine(Python)で作成しています。 URL index http://mobile-ua.appspot.com/
search http://mobile-ua.appspot.com/search
all list http://mobile-ua.appspot.com/list
dump for useragentswitcher http://mobile-ua.appspot.com/download
データ更新 基本的にレスポンスデータの更新は1日1回です。 キャリアの公式/UserAgentのまとめサイトをスクレイプしています。 WillcomはUserAgentの掲載がPDFなので手動で更新します。 SmartPhoneのUserAgentが各キャリアサイトに載っていないので、随時メーカーサイトをwatchして開発者が手動で更新をかけます。 このブログのコメント投稿に皆さんから追加してほしいUserAgentを載せてもらい、それを開発者が随時確認して手動で更新という運用フローにしたいと思います。 開発者めも DBモデル設計 項目 型 データ内容 Carrier String DoCoMo/EzWeb/SoftBank/WillCom/emobile Model String 端末のモデル名 001SHなど Type String Browser/JAR/Appli(DoCoMo) Browser/Appli/Widget/Flash/(SoftBank) UserAgent String SoftBank/2.
[Shell] : ShellScriptのまとめ 概要 ShellScriptについて簡単にまとめます。
私はzsh使いですが、この記事ではshを中心に書いています。
Shellの種類と特徴 Shell名 特徴 sh 最初のシェル(Bourneシェル) csh C言語の文法に似たスクリプト用いることができる bash Bourneシェルを拡張したもの(Bourne Again Shell) tcsh cshを拡張したもの ksh 商用UNIX(SystemV)の標準シェル zsh 最強のシェル(bashやtcshの機能を併せ持つ) 基本コマンド コマンド 説明 Ctrl+H カーソルの左の文字を一文字削除(BSキー) Ctrl+B カーソルを左に移動 Ctrl+F カーソルを右に移動 Ctrl+D カーソル上の文字を一文字削除(Dellキー) Ctrl+K カーソルから右側の文字をすべて削除 Ctrl+S 画面への出力を一時停止 Ctrl+Q 画面への出力を再開 Ctrl+L 画面をクリアー Ctrl+A 行の先頭にカーソルを移動 Ctrl+E 行の最後にカーソルを移動 Ctrl+C プログラムの処理を中止 Ctrl+Z プログラムの処理を一時停止 Ctrl+P 履歴をひとつ前に遡る Ctrl+N 履歴を逆順の遡る !
[javascript] : Javascriptによる正規表現まとめ Index JavaScriptで利用できる正規表現についてまとめました。
最後の後読み、否定後読み以外は利用可能かと思います。
モード修飾子(i,m,g) \n,\r,\u2028,\u2029以外の任意の1文字 空白文字以外( \S ) 数字( \d ) 数字以外( \D ) 先頭( ^ ) 末尾( $ ) 単語区切り( \b ) 単語区切り以外( \B ) 0以上の繰り返し( * ) 1以上の繰り返し( + ) 0または1回( ? ) 最短マッチ( .*? ) nの繰り返し( {n} ) n以上の繰り返し( {n,} ) n以上,m以下の繰り返し( {n,m} ) いずれかの文字( [▲◎■] ) いずれかのパターン( (▲|◎|■) ) 後方参照( \n ) エスケープ( \ ) 先読み( ?
[Math] : Hashの用語まとめ 強衝突耐性 f(x) = f(y) という条件のx!=yという(x,y)というペアを発見するのは難しいという内容。
md5/shaなどで入力の非ユニークな値、すなわちx!=yとなる(x,y)のペアが発見されている様子。
弱衝突耐性 xがNに含まれ、f(x) = f(y)となるx!=yとなることを発見するのが難しいという内容。
例えば、f(x) = A という状態が分かっていて、Aとなるf(y)を見つけることが難しい。
非可逆性 f(x)というHash値からxという入力値を求めることが難しいという内容。
完全Hash コリジョンが発生しないHash関数。
しかしコリジョンが発生しないのはあらかじめデータの個数(N)が分かっているとき。
最小完全Hash N個のKeyに対する完全Hashが最小の状態となる事。
つまりHashの大きさがNとなり、無駄の無い最小な状態である事。
参考 wikipedia
http://ja.wikipedia.org/wiki/MD5
[javascript] : ギャル文字変換Bookmarklet 概要 ギャル文字も新しい日本語表記の一つだと勝手に思っています。
「ギャル文字の方が断然読みやすいです!」ギャルの中でも少数派だとは思っていますが、
そんな方のためにWebページのコンテンツをギャル文字に変換するスクリプトを書いてみました。
変換機能はbookmarkletとして提供します。方法は閲覧中のWebページでbookmarkletを実行するだけです。
※利用は自己責任でお願いします。また何かしら問題が発生したら提供を即中止します。
Bookmarklet ブックマーク ギャル文字変換bookmarklet
※上のリンク先に遷移し、表示されているリンクをbookmarkしてください。
bookmarkソース javascript:void((function(){var%20s=document.createElement('script');s.setAttribute('src','http://mobiles-proxy.appspot.com/statics/js/v1/gmbookmarklet.js');s.setAttribute('id','gmbookmark');document.body.appendChild(s)})()); 上のソースをそのままbookmarkに貼付けてもらっても大丈夫です。
変換後イメージ 某サイトのTopics(iPhone-Safari)
twitterのstatus(safari)
GitHub https://github.com/yutakikuchi/JS/tree/master/gmconv
JSに詳しい方、修正点などありましたらご指摘いただけると助かります。
マルチバイトkeyのhashテーブルを基に変換処理をしているだけです。
ソースも一部blogに張っておきます。
bookmarkletから呼び出されるscript if( !GM ) var GM = {}; if( !IE ) var IE = ( /*@cc_on!@*/0 ) ? true : false; if( !JS ) var JS = {}; (function(){ JS.util = {}; JS.util.getTagName = function( tag ) { return document.
[javascript] : iPhoneのwindow.getSelection()について 値の取得 window.getSelection(document.getSelection)は画面のドラッグにより選択した文字列を読み取るjavascriptの関数です。
以前はsafariなどで利用できなかったようですが、現在はほとんどのブラウザで読み取ることが可能です。
(safari/firefox/chrome/operaでは動作を確認しています。2011/2/15日現在)
iphoneでwindow.getSelectionを利用するときに少しハマったので、メモしておきます。
browser-javascript HTMLに仕込んだjavascriptのwindow.getSelection()はiphoneでも動作します。
HTMLを読み込んだ時点でjavascriptが正しく設定されていると値が取得できるようです。
以下は選択肢た文字列をgoogle検索結果に自動的に飛ばす処理を書いています。
htmlhead metahttp-equiv="content-type"content="text/html; charset=UTF-8"/ metahttp-equiv="Pragma"content="no-cache" metahttp-equiv="Cache-Control"content="no-cache" titleget Selection Testtitle script vardrag = false; vargetText = function(){ if(drag === true){ window.open('http://www.google.com?q='+ encodeURI(window.getSelection())); } drag = false; } varsetDragStatus = function(){ drag = true; } document.addEventListener('touchend', getText, false); document.addEventListener('touchstart', setDragStatus, false); script head body 選択文字列 iPhone テストbr 選択文字列 iPhone テストbr 選択文字列 iPhone テストbr brbr 選択文字列 iPhone テストbr body html bookmarklet-javascript bookmarkletの場合は注意が必要です。※PCのbrowserでは以下のコードが動作しても、iphone上では動作しません。
[Python] : WordPressをGoogle App Engine上で動かす WordPress on Google App Engine WordPressを手軽にGoogle App Engine上で動かすためのOpen Sourceがあります。
PyPress For GAE
http://github.com/mdmcginn/pp4gae
手順は以下に細かく書いてあります。
https://github.com/zrenx/pp4gae#readme
※設定が簡単だったのでローカルで導入してみたところ以下の印象を受けました。
挙動が遅い。web2pyが遅いのか,pp4gaeが遅いのかが今のところ不明。 カスタマイズの方法に関するドキュメントが無い。 特定のブログ形式しか導入できない? WordPress本体自体がPHPで書かれているから、WordPressをそのままGAE for PHPとして動かせないか。← 少なくともGAEはRDBをサポートしていないので、WordPressのMysql部分はGQLなどへの書き換えが必要になりそう。 buddypressのようなプラグインが設定できない? http://ja.wordpress.org/2009/05/01/make-friends-with-buddypress/ 画面キャプチャ シンプルなblogです。通常のWordPressには管理画面などが存在するようなのですが、PyPressには存在しないようです。
導入手順 1. pp4gaeをgithubよりclone
git clone http://github.com/mdmcginn/pp4gae.git2. web2pyのダウンロード/解凍
fetch http://www.web2py.com/examples/static/web2py_src.zip tar -xzf web2py_src.zip3. pp4gaeをweb2py側にコピー
cp -r pp4gae web2py/applications4. app.yaml,routes.pyをコピー
cp web2py/applications/pp4gae/app.yaml web2py/ cp web2py/applications/pp4gae/routes.py web2py/5. app.yamlを編集
先頭の1行目を自分のapplication名に変更します。 application: hogehoge6.
[Mysql] : Mysqlの起動に関するメモ Mac OS Xでの設定 今回はMacOS10.6.5での設定を行いました。
UnixやLinuxとの違いはあると思いますが、多少は参考になるかもしれません。
自動起動設定 起動 /Library/StartupItems/MySQLCOM/MySQLCOM start 停止 /Library/StartupItems/MySQLCOM/MySQLCOM stop 起動/停止 起動 sudo mysqld_safe 停止 mysqladmin -u root -p shutdown 起動確認 mysqladmin ping mysqld is alive rootのpassword設定 これはまず最初にやるべき事ですね。
空passwordはセキュリティ上よろしく無いので、rootのパスワードを変更します。
mysqladmin -u root password 新しいパスワード my.cnf 初期設定時だと/etc/my.cnfが存在しないので、特定のフォルダからコピーをします。
sudo cp /usr/local/mysql-5.1.39-osx10.5-x86/support-files/my-medium.cnf /etc/my.cnf必要に応じて上のファイルをカスタマイズする必要があります。
my.cnfを変更した場合はmysqlを再起動する必要があります。
my.cnfのチューニング log-slow-queries,long-query-timeの設定を行います。
[Python] : Pythonでの暗号化/復号化(AEC-DES,RSA) 概要 Pythonで文字列の暗号化を行う場合は、Python Cryptography Toolkitを利用すると簡単に実装ができます。
Python Cryptography ToolkitはGoogle App Engineでもサポートされています。
http://www.amk.ca/python/code/crypto.html
http://code.google.com/intl/ja/appengine/docs/python/tools/libraries.html#PyCrypto
この記事ではAES-DES,RSAの実装について説明したいと思います。
始めに注意 Google App Engineのサーバに下記のプログラムを配布すれば利用ができますが、
localの場合は最初に
http://www.amk.ca/python/code/crypto.html
からファイルをダウンロード、installする必要があります。
Macでやりましたが、以下の手順でinstallが可能です。
fetch http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz tar -xzf pycrypto-2.0.1.tar.gz cd pycrypto-2.0.1 python setup.py build sudo python setup.py install AES-DES メッセージを特定のkEYで暗号化します。しかしこの方法には以下のようなByte数の制限があります。
KEY : 16,24,32Byteのいずれか
MESSAGE : 16Byteの倍数
以下のサンプルコードでは16ByteのKEYを利用し、unixtimeと文字を結合した文字列を暗号化/復号化しているサンプルになります。
サンプルコード #! /usr/bin/env python # -*- coding: utf-8 -*- import Crypto.Cipher.AES as AES import datetime,time #16,24,32byteの文字列が暗号化KEY CRYPTO_KEY = "