[Python] : 超絶簡単 Pythonでの正規表現 概要 Pythonでの正規表現の使い方についてまとめます。
r'a'表記 raw string表記を示します。余分な\を省くことが可能です。
例えば改行はr'\n'とすれば正規表現として扱うことが出来ます。 メソッド メソッド 役割 match 正規表現が文字列の先頭と一致するかチェック search 正規表現による文字列を走査 split 正規表現に一致するもので配列に分離 sub 正規表現による置換 subn subと同じだが、個数を制限可能 matchとsearch ※matchとsearchでは役割が異なるので注意が必要です。
[CentOs] : system callのtraceについて system call trace 起動プログラムからOSのシステムコールを呼び出される箇所をトレースするコマンドがあります。
strace / itrace / ktrace / kdumpなど。
単純なPHPのプログラムでは特にトレースする意味はないと思いますが、PHPのエクステンション作成やミドルウェア構築の時にはトレースして状態を確認してみるのが良いかと考えます。 今回はstraceの使い方についてまとめます。
使いそうなオプション strace オプション 意味 -c カウント数やコール、エラーなどを記録し、サマリーも表示 -e 特定のシステムコールのみ拾う -f forkされた子プロセスも拾う -F vforkを拾う -T 処理にかかった時間を表示 -o ファイルに記録する -p プロセスIDを指定する 通常の起動 strace httpd
[Mysql] : MyISAM,InnoDBについて イメージ MyISAM:検索が速い。InnoDB : 障害に強い。こんなイメージしかありませんでしたが、勉強もかねて性能の違いをまとめていきたいと思います。
メリデメ MyISAMのメリット 参照系処理が高速。 全文検索可能。 参照テーブルの圧縮。 MyISAMのデメリット 更新系処理が重い? テーブルロックをかけるので、複数のクライアントからの同時更新でロックが発生する。 外部KEY制約を使うことが出来ない。 リカバリが面倒。 InnoDBのメリット トランザクションが使えるので、リカバリが楽。 行ロックを行うので更新/参照の競合が限定的になる。 外部KEY制約を設けることが可能。 オンラインバックアップ可能。 インデックスの更新/再構築が効率化。 主KEYがクラスタインデックスなので、主KEYでの検索が高速。 InnoDBのデメリット データサイズがMyISAMに比べて大きくなるのでその分ディスク容量が必要。 参照処理がMyISAMに比べて遅い。 余程のことが無い限り全文検索や参照テーブルの圧縮といったことは行わないはずなので、MyISAMのみの性能を重視するメリットは正直薄いのかなと思います。またInnoDBのメリット/デメリットの項目を見ても利用する価値はInnoDBの方が高いと言えそうです。今後はInnoDBを使いましょう。参照する場合のポイントはクラスタインデックスの利用などでしょうか。自分は思いつかなかったのですが、マスターをInnoDBで、スレーブをMyISAMで構築したらいいという話があるようなのですが、http://opendatabaselife.blogspot.com/2009/08/innodbmyisam.html こちらのサイトでロックの観点/スレーブからマスターへ移すときの難点が書かれています。
リンク show table status like 'table_name' Rowsの違い MyISAMからInnoDBへ切り替えるときの注意点
[Python] : 超絶簡単Pythonクラスのまとめ 概要 このページではPythonのクラス定義および使い方について簡単にまとめます。
紹介する項目は次のものです。
クラス定義 継承 階層定義 1.クラスの定義 クラスファイル #! /usr/bin/env python # -*- coding: utf-8 -*- class SuperClass(object): #classの宣言 name = '' #public変数 __callcount = 0 #private変数 def __init__( self ): #コンストラクタ self.name = 'SuperClass' def call( self ): #メソッドのself記述の省略はできません。ちょっと面倒です。 self.__callcount = self.__callcount + 1 return self.name def getCallCount( self ): return self.__callcount def setName( self, name ): #第一引数はself,第二引数から通常引数 self.
[javascript] : innerHTMLのeventに関する罠 罠 innerHTMLの罠を紹介します。
addEventListenerにてtagにeventハンドラを追加している場合、
そのタグの中身をinnerHTMLを使って書き換えを行うと、eventが利用できなくなります。
sampleコード html script varinit = function(){ varsample = document.getElementById('child_id'); sample.addEventListener('mousedown', down, false); } vardown = function(){ alert('mouse down'); } varreplaceHTML = function(){ varparent= document.getElementById('parent_id'); vartmp = parent.innerHTML; parent.innerHTML = tmp; } script bodyonload="init();" divid="parent_id" divid="child_id"div samplediv div inputtype="button"value="push"onclick="replaceHTML();" body html sampleコードの中ではparent_id,child_idが入れ子の状態になっています。
parent_idのinnerHTMLに元々のhtmlをそのまま代入しているだけなのですが、
child_idのeventが失われてしまいます。innerHTMLの値を書き換える場合は注意が必要です。
回避策 必要な要素のみ書き換えを行うようにします。
上の場合ですと、child_idのinnerHTMLだけを書き換えます。
※Safariでは正常動作確認済みです。
html script varinit = function(){ varchild = document.
[Perl] : 超簡単 Perl一問一答学習帳 はじめに Perlの初心者が基本的な内容について学習した内容をQ&A方式でまとめてみました。
間違いや最適化などあればご指導よろしくお願い致します。
目次 コマンドライン系 コマンドラインでプログラムを実行するには? ファイルのバックアップを取って、文字列を置換するには? CPANモジュールをinstallするには? インストール済みのCPANモジュールを表示するには? 処理関連系 配列を単純に出力するには? 連想配列を単純に出力するには? 配列の大きさを知るには? ファイルの中身を逆から出力するには? ファイルの中身から特定の文字を含む行を検索するには? 配列を特定の文字列で連結するには? 配列を文字列の長さで並びかえるには? アルファベットで降順に並び替えるには? 連想配列の値で重複したデータを取得するには? サブルーチンを使ってfizzbuzを解くには? クラス/CPAN系 クラスを継承させるには? APIからXMLを取得してパース、出力するには? ■コマンドライン系
1.コマンドラインでプログラムを実行するには? 以下をコマンドラインで実行するお!
perl -e 'for( $i=0; $i 2.ファイルのバックアップを取って、Perlという文字列をJavascriptに変換するには? 以下をコマンドラインで実行するお!
perl -pi.bak -e 's/Perl/Javascript/g' test.txt 3.CPANモジュールをinstallするには? 以下をコマンドラインで実行するお!
sudo perl -MCPAN -e shell cpan[1] install JSON 4.
[Python] : 5分で理解するPython文字コード 概要 Pythonの文字コード指定による日本語文字化けの問題は誰もがハマるところ。
この記事では文字化けの解決方法を簡単にまとめたものになります。
実行環境はMacです。UnixやLinuxでもPath以外の箇所は同じように動作すると思います。
間違いの指摘などあればよろしくお願いします。
注意すべきこと 簡単にいうと以下の4点になりそうです。
1. ファイルの文字コード指定
2. ファイル内部の行頭での文字コード指定
3. Pythonの内部コードはUnicode(オブジェクト)として扱っている。
4. printなどの出力関数では端末の設定に合わせた文字コードが利用されている
※1,2の文字コード指定は一致させます。
1.ファイルの文字コード指定 サンプルとしてUTF-8で指定する例を挙げます。ファイル名はencode.pyです。
nkf --guess encode.py UTF-8 (LF)もしEUC-JPなどになっていれば以下のコマンドで変換します。
nkf -w --overwrite encode.py 2.ファイル内部の行頭での文字コード指定 encode.pyのファイル内部の行頭に以下のよう設定します。シバンの次の行が文字コード指定になります。
#! /usr/bin/env python # -*- coding:utf-8 -*- 3. Pythonの内部コードはUnicode(オブジェクト)として扱っている。 UTF-8とUnicode(オブジェクト)は違うものであり、必要に応じてそれぞれの変換が必要になります。
Python内部ではUnicodeを使用しているので、文字列置換処理を行う場合などは処理前にUnicodeに変換する必要があります。
以下に簡単なサンプルを書きます。
#! /usr/bin/env python # -*- coding:utf-8 -*- data_orig = "日本語" #日本語代入(UTF-8) print type( data_orig ) #typeはstr data_unic = data_orig.
[javascript] : 20秒で理解するJSONP 1行理解 JSONP(JSON with Padding)とはjavascriptコールバック関数を利用し外部ドメインサーバとJSONデータをやり取りする方法である。
※通常のHTMLでは同一ドメイン以外の通信が行えないという制約があるが、javascriptタグのsrc属性とJSONデータ/コールバック関数を利用して外部ドメインとデータのやり取りを可能にする技術。
やること ■クライアント 外部ドメインのサーバから受け取ったJSONデータを処理するコールバック関数の定義。
※ここで定義するコールバック関数はサーバサイドで定義される関数名と一致させる必要がある。
■サーバ側 JSONデータを引数としたクライアント側のコールバック関数の呼び出し
クライアントサンプル html head scripttype='text/javascript'src='http://www.yutakikuchi.com/jsonp/data.dat?callback=callbackFunc'/ varnumber= Object(); varcallbackFunc = function(data ){ //alert( data ); number= eval(data ); //javascriptの配列データが格納される。 } ※scriptタグのsrc属性でサーバサイドへのJSONデータのリクエストを行います。callback関数名はクライアント側で自由に設定できることを想定しています。
サーバサイドサンプル $callbackfunc = $_GET[ 'callback' ] ; $test_data = array( 'items' = array( 1,2,3 ) ); $json_data = json_encode( $test_data ); echo $callbackfunc .
[programming] : MacUserのためのGitHub登録手順のまとめ 0 手順 GitHub登録方法を載せておきます。
準備 Gitユーザ登録 公開鍵登録 レポジトリ作成 Commit git設定ファイル 1 準備 git-coreのinstallをします。
sudo port install git-coregit-hubに登録する公開鍵をローカルマシーンにて作成しておきます。
cd ~/.ssh ssh-keygen less id_rsa.pub ← ファイルの内容を後でGitHub側に登録します。 2登録 ユーザ登録 翻訳機能で日本語表示できるので迷うことなく登録できると思います。
https://github.com/ 公開鍵登録 以下のページのSSH公開鍵登録より先ほど作成した公開鍵をコピペします。
https://github.com/account レポジトリ作成 GitHubのWeb上で新しいレポジトリを作成できます。
https://github.com/repositories/new Commit Git用のディレクトリの下に各プロジェクト用のディレクトリを作成しておくと良いと思います。※PHPというプロジェクトのレポジトリを作成してみました。
mkdir -p git/PHP cd git git config --global user.name "自分の名前" git config --global user.email メールアドレス cd PHP git init //初期化 touch README //ファイル作成 git add README //ファイルをadd git commit -m 'test commit' README //commit git remote add origin git@github.
[javascript] : javascriptのクラスまとめ クラスの概念 Javascriptにも一応クラスみたいなものといった概念が存在しますが、多言語のクラスに比べると規制が緩いもののようです。 javascriptではprototypeといったものをベースとしたオブジェクト指向として考えられています。(これはあとで説明) prototypeのチェーンといった方法を利用して継承を実装することも可能です。 シンプルなインスタンス化 関数で定義されたクラス的なものをnewすることでインスタンスを生成することが出来ます。下にサンプルコードを記述します。
var Parent = function() { //ある意味コンストラクタみたいなもの this.name = 'Parent'; //クラスのプロパティはthisで表現する。 this.echo = function() { alert( this.name ); } } var instance = new Parent(); //インスタンス化 instance.echo(); // Parent Prototypeの利用 ここがprototypeベースのオブジェクト指向の内容になります。上のインスタンス化の方法にはクラス的なものをnewするときにプロパティやメソッドをまるまるメモリに展開してしまうため、newの数が増えるたびに無駄な領域確保が発生してしまいます。そこでPrototypeといった属性を利用します。Prototypeを利用することにインスタンスからの参照を暗黙的参照に切り替えることが出来ます。コードを例に見てみます。
var Parent = function() { this.name = 'Parent'; } // prototypeを利用 Parent.prototype.echo = functio() { alert( this.name ); // Parent }; var instance = new Parent(); instance.