for /R %i in (.svn) do rd /Q /S "%i"
2012/12/13
2012/12/08
[Rails] 現在時刻・1分前の時刻・1分後の時刻
railsコンソールで確認。(鯖はUTC)
1.9.1 :053 > now=Time.zone.now; ago=Time.zone.now.ago(60); after=1.minutes.from_now;
1.9.1 :054 > now.to_s + ' | ' + ago.to_s + ' | ' + after.to_s
=> "2012-12-08 16:09:41 | 2012-12-08 16:08:41 | 2012-12-08 16:10:41"
同じように書けないの・・・・?うーん
2012/12/05
[Rails] 日付データの取り扱い:DB保存のタイムゾーンと、表示時のタイムゾーンを別にしたい時
DB保存はUTCで、画面表示時はそれぞれのタイムゾーンで(例えばJSTで)とか
Rails3 だと config/application.rb で 保存するタイムゾーンと 画面表示時に使うタイムゾーンを分けて設定できる
↓保存時のタイムゾーン
↓表示時のタイムゾーン
ただし、↑この便利な設定の恩恵にあずかるには、保存する 日付フィールドを ただのTimeで保存してはダメ
ActiveSupport::TimeWithZoneクラスにする必要がある
start_at = Time.parse("入力された日付")
↑とかだと Timeクラスになっってしまう(コンソールとかで確認できる)
start_at = Time.zone.parse("入力された日付")
↑常に Time.zone を使うようにしないとダメ
参考)
Rails3系のtimezoneの扱いに関するメモ #Rails - Qiita http://qiita.com/items/68341489a9c5149b815d
[Rials3]Rails3 + ActiveRecord で正しくtimezoneを設定する - Future Journal ~未来志向で行こう~ http://d.hatena.ne.jp/twodollarz/20120703
Rails3 だと config/application.rb で 保存するタイムゾーンと 画面表示時に使うタイムゾーンを分けて設定できる
↓保存時のタイムゾーン
config.active_record.default_timezone = :local
※設定しない場合は default='utc'
↓表示時のタイムゾーン
config.time_zone = 'Tokyo'
※Controllerで ユーザのタイムゾーンを↑切り替えれば 指定のタイムゾーンで表示される(はず)
ただし、↑この便利な設定の恩恵にあずかるには、保存する 日付フィールドを ただのTimeで保存してはダメ
ActiveSupport::TimeWithZoneクラスにする必要がある
start_at = Time.parse("入力された日付")
↑とかだと Timeクラスになっってしまう(コンソールとかで確認できる)
start_at = Time.zone.parse("入力された日付")
↑常に Time.zone を使うようにしないとダメ
参考)
Rails3系のtimezoneの扱いに関するメモ #Rails - Qiita http://qiita.com/items/68341489a9c5149b815d
[Rials3]Rails3 + ActiveRecord で正しくtimezoneを設定する - Future Journal ~未来志向で行こう~ http://d.hatena.ne.jp/twodollarz/20120703
[Advent Calendar][2012] あとで見返すための 2012 Advent Calendarをまとめて貼っておく
毎年 Advent Calendarは 眺めてるだけでも楽しいのね
ということで、今年のめも
(あれ?今年のMySQLのはないの?ないの?)
Advent Calendar 2012まとめ - NAVER まとめ http://matome.naver.jp/odai/2135217818800380701
Advent Calendar一覧 http://qiita.com/advent-calendar
●以下 個人的めも
PHP Advent Calendar jp 2012 : ATND http://atnd.org/events/34462
CakePHP Advent Calendar 2012 http://www.adventar.org/calendars/40
FuelPHP Advent Calendar 2012 : ATND http://atnd.org/events/33753
Ruby on Rails Advent Calendar 2012 / Sep. - Qiita http://qiita.com/advent-calendar/2012/ruby-on-rails
Ruby Advent Calendar 2012 - Qiita http://qiita.com/advent-calendar/2012/ruby
Vim Advent Calendar 2012 : ATND http://atnd.org/events/33746
軽めのjQuery Advent Calendar 2012 http://www.adventar.org/calendars/29
あまり知られていないけど役に立つJavascript tips Advent Calendar 2012 - Qiita http://qiita.com/advent-calendar/2012/javascript-mechanco-tips
ということで、今年のめも
(あれ?今年のMySQLのはないの?ないの?)
Advent Calendar 2012まとめ - NAVER まとめ http://matome.naver.jp/odai/2135217818800380701
Advent Calendar一覧 http://qiita.com/advent-calendar
●以下 個人的めも
PHP Advent Calendar jp 2012 : ATND http://atnd.org/events/34462
CakePHP Advent Calendar 2012 http://www.adventar.org/calendars/40
FuelPHP Advent Calendar 2012 : ATND http://atnd.org/events/33753
Ruby on Rails Advent Calendar 2012 / Sep. - Qiita http://qiita.com/advent-calendar/2012/ruby-on-rails
Ruby Advent Calendar 2012 - Qiita http://qiita.com/advent-calendar/2012/ruby
Vim Advent Calendar 2012 : ATND http://atnd.org/events/33746
軽めのjQuery Advent Calendar 2012 http://www.adventar.org/calendars/29
あまり知られていないけど役に立つJavascript tips Advent Calendar 2012 - Qiita http://qiita.com/advent-calendar/2012/javascript-mechanco-tips
2012/12/03
[Rails] 便利なメソッド
・try()
nilでないときだけメソッドを実行
<%= user.updated_at.try(:strftime,'%Y/%m/%d') %>
・_was
<attr>_was <attr>の変更前の値。変更されてなかったら元の値。
<% if user.updated_at_was.present? %>
<%= user.updated_at.try(:strftime,'%Y/%m/%d') %>
<% end %>
nilでないときだけメソッドを実行
<%= user.updated_at.try(:strftime,'%Y/%m/%d') %>
・_was
<attr>_was <attr>の変更前の値。変更されてなかったら元の値。
<% if user.updated_at_was.present? %>
<%= user.updated_at.try(:strftime,'%Y/%m/%d') %>
<% end %>
2012/12/01
[Mac][MBA(Lion)] Macで誤ってrmしてしまったファイルを復旧・・・してみた
いらないと思って消したディレクトリが実は必要だった・・。
ので 復活を試みる
PhotoRecを試してみる
PhotoRec - CGSecurity http://www.cgsecurity.org/wiki/PhotoRec
↓DLページヘ
ので 復活を試みる
PhotoRecを試してみる
PhotoRec - CGSecurity http://www.cgsecurity.org/wiki/PhotoRec
↓DLページヘ
↓何も考えずに6.14をDLしてしまったけど、あとでよく見たらこっちはβだった・・。
・・・まぁ、とりあえずこれで。
↓解凍ディレクトリ内の「photorec」をダブルクリックで実行するとターミナルが開く
下段に現れている [ sudo ] にカーソルを矢印キー(◀▶)であわせてEnter
sudoで実行する
/dev/disk0 を選択してEnter
↓よくわからないけど、Mac HFSを選択
↓Otherを選んで、
.txtのみ発掘したいので、ファイルオプションで「txt」を指定して検索スタート
ホームディレクトリ配下に「recup_dir.N〜」のディレクトリがどばーーーーっとできる
どんだけできるんですかー
まあ 気長に 失ったファイルの ソースコードを思い出しながら findをかけながら、気長に待つ
grep -r -n "## mod ####################" recup_dir.1*
とかね
気がついたら 検索終わってた
252,314filesだと・・・・・?
サルベージされたファイルは、f29327448.txt みたいな ファイル名にされて
かつ、バラバラに細切れにされているみたい・・・
findでひっかかったファイルを確認したら、コードが途中で切れてた・・・
あとは気長にサルベージしていくだけ・・・orz
参考)
つわものぶろぐ: Macで使えるリカバリーソフトの"PhotoRec"を試してみた http://tsuwamono.blogspot.jp/2012/09/macphotorec.html
2012/11/24
[jQuery] 要素に対して、1つ置きにスタイルを変えたい
以下のようなHTMLがあったとして
<div id="Hoge">
<label>あああ</label>
<label>いいい</label>
<label>ううう</label>
<label>えええ</label>
<label>おおお</label>
</div>
1つ置きに styleを変更したいときは「:odd」、「:even」で指定する
でも、最後の要素だけは 何も指定したくないって時は、「:not(selector)」を使う
<script type="text/javascript">
$(document).ready(function() {
$("#Hoge label:even:not(:last)").css({"width": "135px", "display": "block", "float": "left"});
});
</script>
参考)
jQuery で奇数番目・偶数番目を指定するときの注意点。 | btmup Blog
:not(selector) - jQuery 日本語リファレンス
[CakePHP] Controllerで モデルを指定するとき
・Controller共通で定義
loadModel(string $modelClass, mixed $id)
※単純に モデルを呼びたい時は loadModel() を使うようにする
※Controller以外では ClassRegistry::init('ModelA') も使える
※App::import()は モデルに限らず 指定のソースを読み込みたい時に使うものなので、安易に使わないように。
参考)
App::import と ClassRegistry::init の違い | 1000g
http://1000g.5qk.jp/2011/07/05/appimport-%E3%81%A8-classregistryinit-%E3%81%AE%E9%81%95%E3%81%84/
App::import() は凄い - 24時間CakePHP
http://d.hatena.ne.jp/hiromi2424/20101215/1292379625
var $uses=array('ModelA', 'ModelB');・メソッド(Action)ごとに定義
loadModel(string $modelClass, mixed $id)
$this->loadModel('ModelA');
$this->loadModel('ModelB');
※Controller以外では ClassRegistry::init('ModelA') も使える
※App::import()は モデルに限らず 指定のソースを読み込みたい時に使うものなので、安易に使わないように。
参考)
App::import と ClassRegistry::init の違い | 1000g
http://1000g.5qk.jp/2011/07/05/appimport-%E3%81%A8-classregistryinit-%E3%81%AE%E9%81%95%E3%81%84/
Modelを2個以上読み込む場合は、$usesを使わない方がスピードアップする - cakephperの日記(CakePHP, MongoDB)
http://d.hatena.ne.jp/hiromi2424/20101215/1292379625
2012/11/12
[Chrome][youtube] Youtubeで日本からの接続では、閲覧制限されている動画を見る
youtubeでアーティストのPV等を見ようとすると
「お住まいの国では公開されていません」
ってなって 見ることができない動画があるときは
フリーのプロ串をさせば 閲覧できる
Chromeのextensionで串の切り替えが簡単な「GeoProxy」が最近はお気に入り
Chrome ウェブストア - GeoProxy https://chrome.google.com/webstore/detail/geoproxy/pooljnboifbodgifngpppfklhifechoe
ただし 接続や、読み込みに時間はかかる
早そうな国を見つけてつなげればいいのかな
「お住まいの国では公開されていません」
ってなって 見ることができない動画があるときは
フリーのプロ串をさせば 閲覧できる
Chromeのextensionで串の切り替えが簡単な「GeoProxy」が最近はお気に入り
Chrome ウェブストア - GeoProxy https://chrome.google.com/webstore/detail/geoproxy/pooljnboifbodgifngpppfklhifechoe
ただし 接続や、読み込みに時間はかかる
早そうな国を見つけてつなげればいいのかな
2012/11/09
[OpenSSH] chroot 機能
★OpenSSH 4.9 以降〜 正式サポート
chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。
chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。
2012/11/08
[Mac][Homebrew] MacでPutty用の秘密鍵・公開鍵を変換する
Homebrewでputtygenをインストール
・秘密鍵を変換
$ brew install putty
$ puttygen id_rsa.ppk -O private-openssh -o id_rsa
・公開鍵を変換(こっちは puttygen使わないのか・・・ふむ)
$ ssh-keygen -i -f id_rsa_putty.pub > id_rsa.pub
参考)
MacでPutty形式の秘密鍵を変換する - ZeBeVogue別館 http://d.hatena.ne.jp/zebevogue/20111208/1323282172
ssh-keygen -i -f id_rsa_putty.pub > id_rsa.pub http://www.onemanlab.jp/?p=573
・秘密鍵を変換
$ brew install putty
$ puttygen id_rsa.ppk -O private-openssh -o id_rsa
・公開鍵を変換(こっちは puttygen使わないのか・・・ふむ)
$ ssh-keygen -i -f id_rsa_putty.pub > id_rsa.pub
参考)
MacでPutty形式の秘密鍵を変換する - ZeBeVogue別館 http://d.hatena.ne.jp/zebevogue/20111208/1323282172
ssh-keygen -i -f id_rsa_putty.pub > id_rsa.pub http://www.onemanlab.jp/?p=573
2012/10/24
[Ruby][Rails3] クラスのインスタンスメソッドとスタティックメソッド
rubyでは スタティックなメソッドを クラスメソッドと呼ぶそうだ
参考)
クラスのメソッド - satake7’s memo http://d.hatena.ne.jp/satake7/20090124/p1
その他、参考になりそうなもの)
class_attribute:
class_inheritable_accessorからclass_attributeに移行する際の注意点 - odeの開発メモ日記 http://d.hatena.ne.jp/ode/20110928/1317188311
参考)
クラスのメソッド - satake7’s memo http://d.hatena.ne.jp/satake7/20090124/p1
その他、参考になりそうなもの)
class_attribute:
class_inheritable_accessorからclass_attributeに移行する際の注意点 - odeの開発メモ日記 http://d.hatena.ne.jp/ode/20110928/1317188311
2012/10/17
[Vim] 正規表現で置換
・get_fieldnameをget(:fieldname, @xxx)に置換する
:%s/.get_\([a-z]\+\)\([^a-z]\?\)/.get(:\1, @xxx)\2/cg
2012/10/16
[Rails3] コントローラー名・Model名とか 複数形とか単数形とか
・Controller名
view内
<%= controller.controller_name %>
Controller内
ctrlname = controller_name # コントローラ名
・Model名
<%= controller.model_name %>
・action名
<%= controller.action_name %>
・Controller名を単数形にしたい(.singularize)
controller.controller_name.singularize
・複数形 .pluralize
参考)
Rails3 事始め: [Rails3] Viewでコントローラ名/アクション名を取得する http://rails3try.blogspot.jp/2011/06/rails3-viewcontrolleraction.html
Ruby On Rails | くるくるtech http://kurukuru-labo.com/tech/category/ruby-on-rails/
view内
<%= controller.controller_name %>
Controller内
ctrlname = controller_name # コントローラ名
・Model名
<%= controller.model_name %>
・action名
<%= controller.action_name %>
・Controller名を単数形にしたい(.singularize)
controller.controller_name.singularize
・複数形 .pluralize
参考)
Rails3 事始め: [Rails3] Viewでコントローラ名/アクション名を取得する http://rails3try.blogspot.jp/2011/06/rails3-viewcontrolleraction.html
Ruby On Rails | くるくるtech http://kurukuru-labo.com/tech/category/ruby-on-rails/
2012/10/09
[jQuery] IDやclassがクリックされた時とかのイベントを拾うやつ
以下のID=hogeの中の アンカー(a)がクリックされた時のイベントを拾うとき
<div id="hoge"> <a href="" onclick="return false;">追加ボタン</a> </div>
// ページ表示時 $(document).ready(function() { // リンククリック $("#hoge a").click(function(){ fugafuga(); }); });
動的に作られるエレメントに関しては、live()という便利な関数があるらしい
参考)
「午前様」の日記: [jQuery] live()が激しく便利な件について http://londonhyt.blogspot.jp/2009/05/jquery-live.html
2012/09/18
[Rails3] before_validationとかの中で ARオブジェクトのカラムごとの値を確認する
入力フォームの中に チェックボックスとかあって、
チェックされれば 送信されてくるし、
されなければ 値は渡って来なかったりするときの
値が存在するかー?の確認
if read_attribute('delete_flg').present?
'delete_flg'は formのnameの部分(カラム名的な)
↓こんなな
<input type="checkbox" name="delete_flg" value="1">
write_attributeとかもあるらしい
参考)
ActiveRecordまとめ2 - ほむり http://d.hatena.ne.jp/jksy/20100512/1273658658
respond_to http://d.hatena.ne.jp/rochefort/20110508/p1
チェックされれば 送信されてくるし、
されなければ 値は渡って来なかったりするときの
値が存在するかー?の確認
if read_attribute('delete_flg').present?
'delete_flg'は formのnameの部分(カラム名的な)
↓こんなな
<input type="checkbox" name="delete_flg" value="1">
write_attributeとかもあるらしい
参考)
ActiveRecordまとめ2 - ほむり http://d.hatena.ne.jp/jksy/20100512/1273658658
respond_to http://d.hatena.ne.jp/rochefort/20110508/p1
2012/09/13
[Vim] 複数行 いっぺんに コメントアウトとか
- Ctl+v 矩形ビジュアルモードで 行頭を複数選択
- 大文字I(Shift+i)で インサートモード ・・・通常編集時は小文字i
- 「#」を入力 ・・・このとき1行だけ 入力される
- 入力したら Escキーを押して インサートモード抜ける
- 矩形で選択した部分に反映される
この方法で 一気にインデントとかできる
[Vim] 画面分割
:sp 水平分割
Ctl+w ウィンドウを移動 次へ次へ
:on カレントウィンドウ以外 すべて閉じる
:con カレントウィンドウを閉じる
参考)
nakamura-tech : Vim - 画面分割 http://blog.livedoor.jp/nakamura_tech/archives/51334281.html
Ctl+w ウィンドウを移動 次へ次へ
:on カレントウィンドウ以外 すべて閉じる
:con カレントウィンドウを閉じる
参考)
nakamura-tech : Vim - 画面分割 http://blog.livedoor.jp/nakamura_tech/archives/51334281.html
[jQuery] $.inArray(str value, array)
jQuery.inArray(value, array)
コンソールでデバッグしても 値はちゃんと取れてて、配列にも存在するのに
ヒットしない(-1が返る)現象で悩まされてた
typeofで型を見たら valueもarrayもobjectだった
試しに valueを ""+ で stringに変換したらちゃんとヒットした
valueはstringにしないとだめっぽい?
参考) JavaScriptの型変換ってこうやるんだ・・・ | IDEA*IDEA http://www.ideaxidea.com/archives/2010/03/javascript_type_conversion.html
version 1.2 以降
指定された値を検索し、配列内でのインデックス番号を返します。
値が配列に存在しない場合は、-1 を返します。
値が配列に存在しない場合は、-1 を返します。
引数
- value : 検索する値
- array : 配列
戻り値
- インデックス番号(0から始まる)。検索する値が配列に存在しない場合は、-1。
参考) jQuery.inArray(value, array) - jQuery API 1.4.4 日本語リファレンス - StackTrace http://stacktrace.jp/jquery/api/utilities/jquery.inarray.html
コンソールでデバッグしても 値はちゃんと取れてて、配列にも存在するのに
ヒットしない(-1が返る)現象で悩まされてた
typeofで型を見たら valueもarrayもobjectだった
試しに valueを ""+ で stringに変換したらちゃんとヒットした
valueはstringにしないとだめっぽい?
参考) JavaScriptの型変換ってこうやるんだ・・・ | IDEA*IDEA http://www.ideaxidea.com/archives/2010/03/javascript_type_conversion.html
2012/09/12
[Ruby] 差集合:配列Aから配列Bを取り除く
配列A・・・default_lang から
配列B・・・select_lang を取り除いて、差集合を求める
配列B・・・select_lang を取り除いて、差集合を求める
default_lang = ["ja_JP", "en_US", "zh_CN"] select_lang = ["ja_JP"] unselect_lang = default_lang - select_lang #=>["en_US", "zh_CN"]
2012/09/08
MongoDBでfindデータを見やすく
超絶便利だったのでメモ
↓こちらのdot.mongorc.jsをDL
MongoDB シェルの printjson() を使いやすくする - 文::字 - はてな自習室 http://studyroom.g.hatena.ne.jp/tily/20111007/1317998494
★通りすがりさんの言うように 27行目の[]が閉じ忘れてるので 自分で修正して
↓こんな風にmongoコマンド(コマンドは.bashrcとかで aliasにいれました)
$ mongo dot.mongorc.js --shell
↓データよぶとき
> db.users.find({'_id':ObjectId('5049e42ea4b6ad06ec000034')}).p()
> db.users.find().limit(1).p()
↓フィールド指定もできるから べんり
> db.users.find().p('name','mail')
{ "name" : "test user", "mail" : "(undefined)" }
素敵すぎる
↓こちらのdot.mongorc.jsをDL
MongoDB シェルの printjson() を使いやすくする - 文::字 - はてな自習室 http://studyroom.g.hatena.ne.jp/tily/20111007/1317998494
★通りすがりさんの言うように 27行目の[]が閉じ忘れてるので 自分で修正して
↓こんな風にmongoコマンド(コマンドは.bashrcとかで aliasにいれました)
$ mongo dot.mongorc.js --shell
↓データよぶとき
> db.users.find({'_id':ObjectId('5049e42ea4b6ad06ec000034')}).p()
> db.users.find().limit(1).p()
↓フィールド指定もできるから べんり
> db.users.find().p('name','mail')
{ "name" : "test user", "mail" : "(undefined)" }
{ "name" : "hogehoge", "mail" : "hogehoge@hoge.com" }
素敵すぎる
2012/09/07
Eclipse ワークスペースランチャーから不要なワークスペースを削除
Eclipse起動時の ワークスペースランチャーから
不要になったワークスペースを削除する
Eclipseインストールディレクトリ配下の設定ファイルを直接編集する
わたしの MBAは↓ここにあります
$ ll /Applications/eclipse/configuration/.settings/
total 32
-rw-r--r-- 1 hoge staff 104 3 24 21:03 com.aptana.db.prefs
-rw-r--r-- 1 hoge staff 139 3 24 21:03 com.aptana.usage.prefs
-rw-r--r-- 1 hoge staff 146 8 25 14:25 org.eclipse.core.net.prefs
-rw-r--r-- 1 hoge staff 368 9 7 00:07 org.eclipse.ui.ide.prefs
「%Eclipseのルートフォルダ%/configuration/.settings」配下に、
「org.eclipse.ui.ide.prefs」というファイルが存在します。
ファイルの中身を確認すると以下のような設定が記載されています。
「RECENT_WORKSPACES=D\:\\eclipse\\3.6.1\\workspace\nD\:\\eclipse\\3.6.1\\workspace2」
「RECENT_WORKSPACES」に、ワークスペースのフォルダのパスが記載されています。
この中から、不要なワークスペースのパスを削除すればOKです。
ちなみに、\nが区切り文字となっています。
参考)
Eclipseの小技(不要なワークスペースをワークスペース・ランチャーの一覧から削除する方法) | システム開発ブログ(システム開発のアイロベックス|東京都新宿区の業務システム開発会社) http://www.ilovex.co.jp/blog/system/projectandsystemdevelopment/eclipse-1.html
2012/09/03
2012/08/14
2012/08/05
LL Decade 2012 覚書
今年も Lightweight Languageイベントへ行って参りました
(LLの詳細は 公式で)
去年のPlanetも相当面白かったのですが
今年は 10周年の記念の年だそうで
LL界隈では著名な方とか?ゆかりの方とか?LLの歴史を振り返る的な?
ちょうど自分の開発歴も10年ちょいなので、それともあわせてなかなか楽しめそうな内容で期待大ですぞ
んがしかし、なんせ文章能力低いワタクシなので
技術的な詳細な話とかは、もっとぐっとわかりやすくまとめてくださる方がきっといらっさると思うので、そちらにお任せするとして
講演で印象に残ったこととか、自分的メモがわりに記しておきます
◆基調講演
宮川さん Perlの人
サンフランシスコは夏でも20℃くらいしかないってほんとー?いいなぁ
10年前に比べて 良いコードに触れる機会が増えた
どんどん Github とか 触るべき
Plack/PSGIのはなし
Pythonやら Rubyからだいぶ いいとこ取りさせてもらってる
- 今すぐやることが大切だけど
焦って始めて なにかやらかすより ちょっと待ってからはじめるのもイイ
みたいな言葉が良かったw
言語を超えて 影響しあうのっていいね(PHPが出てこないけどー・・・)
名前をつけるのって大変
Perl名前がカオスなの多い
Python → はじめにpyがつくとか さいごにつくとか
Rubyは 名前見ても何するものなのかわからいもの多し カオス
↓今年も受付で うちわ頂いた
あと、会場のパス(お昼は外に食べに行くので)
◆Language Update Decade
【出演】
Perl:小飼弾
PHP:廣川類
Python:柴田淳(ウェブコア)
Ruby:まつもとゆきひろ
【司会】
法林浩之(日本UNIXユーザ会)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Pythonの柴田さんの おはなしがおもしろい!w
2008年頃のPython・・・珍獣扱い(知ってる人がまだ少なかった)
Zope・・懐かしいな
Pythonもやらないと・・・
ノンプログラマーに パイソンが広まった ・・・シンプルさ
最近のPythonは 研究機関とかで使われてる(金融とか 気象とか)
Pythonベースサービス
Instagram/Pinterest/youtube/Dropbox
パイソンの2から3への移行タイミングは?? →そろそろいいと思うよ
これから3を覚えれば あと10年はこれで飯食っていけるよ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ruby まつもとさん 超早口なんだなぁ・・・
Ruby20周年 来年 2013 2月に 2.0でます!
2.0は 多言語の痛い目にあってるさまをみならって、 あんまし変なことはしないように
互換性を重視して出します!(的なことをおっしゃってたような・・)
・・・キーワード引数とか、ライブラリGem化・・・いろいろ 性能上がるはず
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
午後の部
◇プログラミング言語処理系を自作してわかったこと
ココらへんのセッションから どんどこコアなお話になってゆきます
・「next Perl5プログラミング言語Toraの設計と実装」@tokuhirom
perl触ってて date(日付表示とか)に係る処理がめんどくさ~い ってのは 常に思ってた
myってかくけど べつに変な愛着はないです
・「世界で最も仕様に忠実なECMAScript言語処理系」@Constellation
序盤に足つるハプニング!!Σ
ECMAScriptって なんだろー
JavaScirptにも仕様があるんですよ
コンストなんとかさんおもしろいよー
・「型安全なJavaScript処理系JSXを作ってみた」@kazuho
jsの問題点
遅い
デバッグに時間が掛かる ex)プロパティ名の間違い
読みにくい
以下 JSXのご案内
・「組み込みを意識したmrubyを作ってみた」@yukihiro_matz
組み込み向けに 開発されたRuby
− 組み込みAPI
− 移植性 ・・・コアは超シンプル ほぼ何もない(FileI/O とかもない) 必要なオプションは 環境に応じてextensionで追加していくって設計仕様
− 省メモリ
インクリメンタルGC採用
応用例
太陽光発電管理システム・自動販売機メンテナンスシステム・Ruby対応インテリジェントルーター
将来 rubyでうごく 何かしらの端末がでてきたり?スマホ的な?
(?)フットプリント・・・ってなんすか
そういえば 小飼さんが 壇下の座席からふつーに 大声で松本さんとかに質問(会話)してておもしろかったw
◇俺たちの継続的hogehogeは始まったばかりだ!
・「Pythonプロフェッショナルプログラミング」を執筆する上でのCI的な何か(仮) / cactusman (BeProud.inc、日本Jenkinsユーザ会)
スフィンクスで cronで自動で ドキュメントビルドしてるそうな
・JenkinsableじゃないプロジェクトをJenkinsable にするまで Perl編 / 太田健一郎 (TDD研究会、Androidテスト部)
自動テスト環境を組み込むには・・・・0からはじめるのは大変なのですよ
・ルビコンペレストロイカ(Ruby on rails Continuous integtration Perestroika)~RubyOnRails開発におけるオレオレCI改革~ / 高倉利明 @TrinityT (アピリッツ)
・JSのCIで椅子を投げられないため方法 / @kyo_ago (KAYAC)
jsのテスト興味ある
Test.js
Sinon.js(非同期系 モックツール)
Swarm系のツール(?)
このあたりで・・・・眠気Max( ゚Д゚)ネムヒー
JsTestDriver(簡単 おすすめ)javaでできてる
− ブラウザのマネージメントツールみたいな感じ
・PHPでJenkinsをはじめるための108の方法(仮) / 山城 裕 @yamashiro
StageHandTestRunnerおすすめ
PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料 - Yamashiro0217の日記 http://d.hatena.ne.jp/Yamashiro0217/20110619/1308491991
yamashiroさんの講演でめがさめた!
・継続的コミット-エンジニア的ライフログ- / きょん
ファイル変更を検知して 勝手にビルドしてくれる便利なもの
定期的にコミットしてくれるもの
IDE使うほうが頭いい!
じぇっとぐれーぶ?(正解)→ http://www.jetbrains.com/
◇Lightning Talks
【出演】
ゆーすけべー
角谷信太郎
川崎有亮
庄司嘉織
法林浩之
LLNOCチーム
yuroyoro
ただただし
髙橋征義
竹迫良範
どの方のTLも すばらしく たのしかった!!!!
わたしも 紫色の何かがほしい
LLの中のかたの あんな話も すごく面白かった
◆お楽しみ抽選会!!!!
スタッフの方たちが 壇上から一斉に投げるカラーボールをキャッチできた人が当選
わたしのところに 黄色いボールが降ってきたー!!!
そして 近くに緑のボールが飛んできたので 更にキャッチ!(みーとくんにあげました)
9番の景品は↓WordPressの 本でございました ヤッタ~(いつか使う)
みーとくんにはPerlの本があたりました(会社で使おう)
そんなこんなで、とても楽しい一日なのでしたよー
とにかく このLLイベントは
裏方さんからスタッフみなさんの心意気の感じられる 素敵なイベントだし
イベント後の懇親会も すごく楽しい(らしい)し
なにより 言語の垣根を超えてのお祭りなので
ぜひ LLに携わる(興味のある)若者に どんどこ参加していただきたいのですよ
以下 参考リンク)
LL Decadeのツイート - Togetter http://togetter.com/li/350207
LL decade のプログラミング言語処理系を自作してわかったこと & 俺たちの継続的hogehogeは始まったばかりだ!のまとめ - Togetter http://togetter.com/li/350301
#lldecade に参加したら楽しかった - 941::blog http://blog.kushii.net/archives/1767276.html?utm_source=dlvr.it&utm_medium=twitter
2012/07/25
[MySQL] テンポラリーテーブル&「INSERT ... ON DUPLICATE KEY UPDATE」構文
集計バッチで
MySQLのテンポラリーテーブルと
「INSERT ... ON DUPLICATE KEY UPDATE」構文の合わせ技を使ったので
メモ
まず テンポラリーテーブルを使うにあたって、MySQLのメモリ関係の設定値を確認する
メモリ上に作成される テンポラリファイルは max_heap_table_size内まで
超えるとISAMテーブルとしてディスクに書き出されます。
(デフォ)max_heap_table_size グローバル 16MB
で、
テンポラリーテーブルを使った 処理について
まず データの出力イメージは
商店Aテーブル、商店Bテーブル があります
それぞれの テーブルから 日付を絞って、商品番号でGroupByした集計を取得して、
それをマージします
↓こんな感じ
まず 商店Aテーブルを集計して テンポラリーテーブルに データインサート
SELECT文内の 「0 as 店舗B 購買数」のところは
次に集計する 店舗Bの購買数が入る部分を あらかじめ
0で埋めて先に作っとく的な感じ
次に 商店Bテーブルを集計して
先ほどのテンポラリーテーブル「tmp_summary」に マージしていきます
この時 「INSERT ... ON DUPLICATE KEY UPDATE」構文を使うと
MySQLが
既にPKが存在している時は UPDATE
なかったら INSERTしてくれます
これで あとは テンポラリーテーブルをよしなに処理すればOK
MySQLのテンポラリーテーブルと
「INSERT ... ON DUPLICATE KEY UPDATE」構文の合わせ技を使ったので
メモ
まず テンポラリーテーブルを使うにあたって、MySQLのメモリ関係の設定値を確認する
参考) MySQLのメモリ関係のシステム変数 - 祈れ、そして働け ~ Ora et labora http://d.hatena.ne.jp/tetsuyai/20111006/1317873012
メモリ上に作成される テンポラリファイルは max_heap_table_size内まで
超えるとISAMテーブルとしてディスクに書き出されます。
(デフォ)max_heap_table_size グローバル 16MB
それから、今現在のDBのテーブルデータサイズから
テンポラリーテーブルのおよそのデータサイズを出す
参考)データベースとテーブルのサイズを確認する方法 - ふってもハレても
http://d.hatena.ne.jp/sho-yamasaki/20120405/1333640589
DB調べたら
Avg_row_length=151で、200としても
平均4万レコードくらいの データをテンポラリーテーブルにするから
200x4万レコード=800万byte → 7.63MB ・・・もんだいなすっぽ
で、
テンポラリーテーブルを使った 処理について
まず データの出力イメージは
商店Aテーブル、商店Bテーブル があります
それぞれの テーブルから 日付を絞って、商品番号でGroupByした集計を取得して、
それをマージします
↓こんな感じ
┌────┬───┬───┐ │商品番号│商店A │商店B │ ├────┼───┼───┤ │ 11111│ 3│ 2│ ├────┼───┼───┤ │ 11112│ 0│ 5│ ├────┼───┼───┤ │ 11113│ 2│ 0│ └────┴───┴───┘
まず 商店Aテーブルを集計して テンポラリーテーブルに データインサート
CREATE TEMPORARY TABLE `tmp_summary` ( `商品番号` varchar(10) NOT NULL, `商店A購買数` int(11) NOT NULL DEFAULT 0, `商店B購買数` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`商品番号`) ) SELECT 商品番号 ,count(商品番号) as 商店A購買数, 0 as 商店B購買数 FROM 商店Aテーブル WHERE del_flg = 0 AND 購買日 >= 'YYYY/MM/DD 00:00:00' AND 購買日 <= 'YYYY/MM/DD 23:59:59' GROUP BY 商品番号 ;
SELECT文内の 「0 as 店舗B 購買数」のところは
次に集計する 店舗Bの購買数が入る部分を あらかじめ
0で埋めて先に作っとく的な感じ
次に 商店Bテーブルを集計して
先ほどのテンポラリーテーブル「tmp_summary」に マージしていきます
この時 「INSERT ... ON DUPLICATE KEY UPDATE」構文を使うと
MySQLが
既にPKが存在している時は UPDATE
なかったら INSERTしてくれます
INSERT INTO tmp_summary SELECT 商品番号 , 0 as 商店A購買数, count(商品番号) as 商店B購買数 FROM 商店Bテーブル WHERE del_flg = 0 AND 購買日 >= 'YYYY/MM/DD 00:00:00' AND 購買日 <= 'YYYY/MM/DD 23:59:59' GROUP BY 商品番号 ON DUPLICATE KEY UPDATE 商店A購買数=tmp_summary.商店A購買数+values(商店A購買数), 商店B購買数=tmp_summary.商店B購買数+values(商店B購買数);
これで あとは テンポラリーテーブルをよしなに処理すればOK
select * from tmp_summary;
参考)
複合UNIQUEキーでも「INSERT ... ON DUPLICATE KEY UPDATE」構文は使える - 岩本隆史の日記帳
http://d.hatena.ne.jp/IwamotoTakashi/20080329/p1
テンポラリテーブルの作成MySQL|プログラムメモ
http://logic.moo.jp/memo.php/archive/11/
他のテーブルのデータを追加(INSERT ... SELECT文) - データの追加と削除 - MySQLの使い方
http://www.dbonline.jp/mysql/insert/index6.html
2012/07/24
SELECT結果からテーブルを作る
↓こんな感じのね
CREATE TABLE [table_name] SELECT * FROM TBL_A WHERE del_flg = 0 AND regist_date <= '2012/07/23 23:59:59' ;
2012/07/12
jQueryで同じIDを持つ 複数要素を選択する
<div id="hoge">hoge</div>
<div id="hoge">hoge</div>
<div id="hoge">hoge</div>
↑だったら
<div id="hoge">hoge</div>
<div id="hoge">hoge</div>
↑だったら
$(
"[id=hoge]"
).html('fuga');
参考)
$("[id=bar]"). http://www.kinopyo.com/blog/jquery-select-multy-element-with-same-id
コンポーネントでモデルを使うとき [cakePHP2]
↓メソッドの中で 使うモデルを定義しましょう
public function component_method() { // Model呼び出し $this->controller->loadModel('UserInfo'); $user = $this->controller->UserInfo->find("first", array("conditions"=>array( : :
2012/07/06
mysqldump いろいろ
・特定のテーブル(複数可)のレコードのみダンプ テーブル作成情報は出さない
$ mysqldump -u [username] -p[password] -t [database_name] [table_name1] [table_name2]・・・> [file_path]
・データベース全体のテーブル構造のみ
ダンプ レコード情報を一切書き込まない)
$ mysqldump [username] -p[password] -d [database_name] > [file_path]→ createtableとinsert文も一緒に出すときは −dオプションを外す
参考)
MySQLのダンプ(エクスポート)、インポート、バックアップ - Tips and Memo
mysqldumpで複数テーブルもしくは特定のテーブルなど条件指定でレコードを出力する方法
2012/07/04
memcache だらだらめも
■memcacheの状態を確認する簡易ツール「memcached-tool」コマンド
↓実行例
参考)
memcached の中身を確認するなら memcached-tool コマンド | バシャログ。 http://c-brains.jp/blog/wsg/10/07/30-105035.php
memcached-toolの使い方 - あるプログラマーの後悔日誌 http://d.hatena.ne.jp/taka512/20110830/1314698515
■memcachedに繋げて確認する
・telnetで入る
$ telnet ホスト ポート番号
$ telnet localhost 11211
・statsコマンド ↓出力例
limit_maxbytes 最大メモリサイズとか
curr_items 現在登録されているアイテムの数
total_items 今まで登録されたアイテムの数(累計)
evictions 容量がいっぱいになって 追い出されたアイテムの数
▲memcachedは 最大容量に達すると、期限切れや一番古いアイテムの領域を新しい領域に当てる
・キー一覧取得 stats cachedump [slab id] [limit]
[slab id]=上記のmemcached-toolコマンドで出る 「#」の列がソレ
↓出力例(#15のアイテムたちを表示する)
参考)
memcachedを知り尽くす:第2回 memcachedのメモリストレージを理解する|gihyo.jp … 技術評論社 http://gihyo.jp/dev/feature/01/memcached/0002?page=3
[memcached] memcachedコマンド一覧 - Life with IT
http://l-w-i.net/t/memcached/command_001.txt
その他参考)
★インストール
memcachedを知り尽くす:第1回 memcachedの基本|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/memcached/0001?page=2
★めむきゃっす すてーたすみる
http://gihyo.jp/dev/feature/01/memcached/0002?page=3
↓実行例
# memcached-tool localhost:11211 # Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM 9 552B 2674s 1 1 no 0 0 0 14 1.7K 1394s 1 2 no 0 0 0 15 2.1K 1386s 1 3 no 0 0 0 29 48.1K 2695s 1 21 yes 5 1404 0 30 60.2K 2745s 1 6 no 0 0 0
参考)
memcached の中身を確認するなら memcached-tool コマンド | バシャログ。 http://c-brains.jp/blog/wsg/10/07/30-105035.php
memcached-toolの使い方 - あるプログラマーの後悔日誌 http://d.hatena.ne.jp/taka512/20110830/1314698515
■memcachedに繋げて確認する
・telnetで入る
$ telnet ホスト ポート番号
$ telnet localhost 11211
・statsコマンド ↓出力例
stats STAT pid 29344 STAT uptime 12450 STAT time 1341381935 STAT version 1.4.5 STAT pointer_size 32 STAT rusage_user 0.017997 STAT rusage_system 0.026995 STAT curr_connections 13 STAT total_connections 54 STAT connection_structures 15 STAT cmd_get 44 STAT cmd_set 38 STAT cmd_flush 0 STAT get_hits 6 STAT get_misses 38 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 1587472 STAT bytes_written 305878 STAT limit_maxbytes 1048576 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT bytes 1341195 STAT curr_items 33 STAT total_items 38 STAT evictions 5 STAT reclaimed 0 END
limit_maxbytes 最大メモリサイズとか
curr_items 現在登録されているアイテムの数
total_items 今まで登録されたアイテムの数(累計)
evictions 容量がいっぱいになって 追い出されたアイテムの数
▲memcachedは 最大容量に達すると、期限切れや一番古いアイテムの領域を新しい領域に当てる
・キー一覧取得 stats cachedump [slab id] [limit]
[slab id]=上記のmemcached-toolコマンドで出る 「#」の列がソレ
↓出力例(#15のアイテムたちを表示する)
stats cachedump 15 100 ITEM key_1[1747 b; 1341457279 s] ITEM key_2 [1715 b; 1341374471 s] ITEM key_3 [2042 b; 1341374471 s] END
参考)
memcachedを知り尽くす:第2回 memcachedのメモリストレージを理解する|gihyo.jp … 技術評論社 http://gihyo.jp/dev/feature/01/memcached/0002?page=3
[memcached] memcachedコマンド一覧 - Life with IT
http://l-w-i.net/t/memcached/command_001.txt
その他参考)
★インストール
memcachedを知り尽くす:第1回 memcachedの基本|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/memcached/0001?page=2
★めむきゃっす すてーたすみる
http://gihyo.jp/dev/feature/01/memcached/0002?page=3
2012/07/02
[PHP] Memcache 簡易スクリプト
◎簡単な 確認やら、セットやらできるやつ
→ コマンドラインから、php -f chk_memcached.php get_list みたいに実行
→ コマンドラインから、php -f chk_memcached.php get_list みたいに実行
・get_list 表示例
# php -f chk_memcached.php get_list ============================== command:get_list ============================== * = old cache --------------- expire = 0 | size = 10 | cache_key = foo expire = 0 | size = 20 | cache_key = hoge --------------- key count:2 total cache size: 30byte *old total cache size: 0byte
#define('MEM_HOST', 'localhost'); define('MEM_HOST', '127.0.0.1'); define('MEM_PORT', 11211); if ($argc < 2) { showUsage(); exit; } $output = array(); $keys = array(); $value = ''; //Memcache $memcache_obj = new Memcache; $memcache_obj->connect(MEM_HOST, MEM_PORT); array_shift($argv); $command = array_shift($argv); switch ($command) { case 'get': $keys = $argv; $re = $memcache_obj->get($keys); break; case 'get_list': $re = getKeyList($memcache_obj); break; case 'set': $keys = array_shift($argv); $value = array_shift($argv); $re = $memcache_obj->set($keys, $value); break; case 'delete': $keys = array_shift($argv); $re = $memcache_obj->delete($keys); break; default: showUsage(); break; } $output[] = '=============================='; $output[] = 'command:' . $command; if (is_array($keys)) $keys = join(',', $keys); if ($keys) $output[] = 'key(s):' . $keys; if ($value) $output[] = 'value:' . $value; $output[] = '=============================='; $output[] = ''; echo join("\n", $output); if (is_array($re)) var_dump($re); else echo $re; echo "\n"; function showUsage() { $usage = basename(__FILE__) . " -- Usage >>>>\n"; $usage.= " :get_list\n"; $usage.= " :get [key1] [key2] [key3] ... [keyN]\n"; $usage.= " :set [key] [value]\n"; $usage.= " :delete [key]\n"; echo $usage; } /** * 統計情報からすべてのキーを抜き出す */ function getKeyList($memcache_obj) { $result = array(); $tmp_keys = array(); $all_keys = array(); $total = 0; $old_total = 0; $slabs = $memcache_obj->getExtendedStats('slabs'); $stats = $memcache_obj->getStats(); $memcached_started_time = $stats['time'] - $stats['uptime']; $stats_item = $memcache_obj->getStats('items'); $items = $stats_item['items']; foreach ($items as $slabclass => $item) { $stats_cachedump = $memcache_obj->getStats('cachedump', $slabclass, $item['number']); $tmp_keys = array_merge($tmp_keys, $stats_cachedump); } ksort($tmp_keys); foreach ($tmp_keys as $cache_key => $v) { $size = (int)$v[0]; $time = ($v[1] == $memcached_started_time)? 0: $v[1]; $expire = (!$time)? $time: date('Y/m/d H:i:s', $time); $old_flg = ($time && $time < time())? '*': ' '; $total+=$size; if ($old_flg == '*') $old_total+=$size; $all_keys[] = 'expire = ' . $expire . $old_flg . ' | size = ' . sprintf("%8s", $size) . ' | cache_key = ' . $cache_key; } $result[] = '* = old cache'; $result[] = '--------------- '; $result[] = join("\n", $all_keys); $result[] = '--------------- '; $result[] = 'key count:' . count($all_keys); $result[] = ' total cache size:' . sprintf("%10s", $total) . 'byte'; $result[] = '*old total cache size:' . sprintf("%10s", $old_total) . 'byte'; return join("\n", $result); }
2012/06/20
twitterアプリ作成時のメモ アプリ認証登録編
◎ツイッターアプリを デベロッパーサイトに登録
https://dev.twitter.com/
→ Create an app
https://dev.twitter.com/apps/new
・必要事項入力
Name: アプリ名
Description: アプリ概要
Website: ウェブサイト(架空でOK)
Callback URL: ※コレが大事 ツイッターのアプリ連携認証が完了して 戻る先のURL
規約を読んで同意して送信
◎My applications-登録されたapplication確認
右上のアカウントのプルダウンメニューからも確認できる
◎アプリで使う keyとかの確認
Access level ←デフォはread onlyになっているので twitter投稿とかしたい場合は
About the application permission model(https://dev.twitter.com/docs/application-permission-model)
パーミッション設定画面で「Read and write」を設定しておく
Consumer key ←アプリに設定
Consumer secret ←アプリに設定
2012/06/15
[CakePHP2.0] 複数アプリが混在するサービスで生じた問題メモ
複数appが必要なとき、1.3の時には 何もきにせず
app_1/
app_2/
:
って作っていたので
2.0でも 同じ構成で作っていたら
app_1とapp_2の appController.phpに同じメソッド名があると、
app_1のappControllerを呼び出したら
app_2でappControllerをよんでも app_1のappControllerを見に行ってしまうとか
1と2に 同じ名前のControllerを置くと うまく動かないとか
いう声を聞いたので ちょっと調べたけど、未だ具体策はつかめず
いちおう メモがわりに 貼っとく
CakePHPで複数アプリケーション管理|マリンロード
http://www.marineroad.com/staff-blog/3159.html
CakePHP2.0で現状の問題点などまとめました。 | Fusic Developers' Weblog
http://blog.fusic.co.jp/archives/2207
eat cake, 複数のapp 同居
http://miztools.so.land.to/php5_list/eat_cake/ac_off/cake2.php/edit/multi_app
app_1/
app_2/
:
って作っていたので
2.0でも 同じ構成で作っていたら
app_1とapp_2の appController.phpに同じメソッド名があると、
app_1のappControllerを呼び出したら
app_2でappControllerをよんでも app_1のappControllerを見に行ってしまうとか
1と2に 同じ名前のControllerを置くと うまく動かないとか
いう声を聞いたので ちょっと調べたけど、未だ具体策はつかめず
いちおう メモがわりに 貼っとく
CakePHPで複数アプリケーション管理|マリンロード
http://www.marineroad.com/staff-blog/3159.html
CakePHP2.0で現状の問題点などまとめました。 | Fusic Developers' Weblog
http://blog.fusic.co.jp/archives/2207
eat cake, 複数のapp 同居
http://miztools.so.land.to/php5_list/eat_cake/ac_off/cake2.php/edit/multi_app
2012/06/05
同じネットワーク内でのvhosts設定
※まんま みーとくんからの転載 めもさせていただいた。
バーチャルホストの設定 - 肉になるメモ
http://d.hatena.ne.jp/kazumeat/20120130/1327918879
バーチャルホストの設定 - 肉になるメモ
http://d.hatena.ne.jp/kazumeat/20120130/1327918879
・/etc/httpd/con.d 以下にアプリ用のconfを作成
NameVirtualHost 192.168.1.111:80 # # app1 # <VirtualHost 192.168.1.111:80> DocumentRoot /var/www/app1 ServerName app1.com ErrorLog logs/app1_error_log CustomLog logs/app1_access_log common <Directory "/var/www/app1"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> # # app2 # <VirtualHost 192.168.1.111:80> DocumentRoot /var/www/app2 ServerName app2.com ErrorLog logs/app2_error_log CustomLog logs/app2_access_log common <Directory "/var/www/app2"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
・ローカルのhostsファイル設定
C:\Windows\System32\drivers\etc\hosts
192.168.1.111 app1.com 192.168.1.111 app2.com
2012/05/30
file_get_contentsで外部ファイルを読み取る
file_get_contentsで、外部のXMLや画像、webページなどを取得できる
◎普通に取得する場合
$homepage = file_get_contents('http://www.example.com/'); echo $homepage;
◎ファイルの一部の読み込み
// 21 文字目から 14 文字ぶん読み込みます $section = file_get_contents('./people.txt', NULL, NULL, 20, 14); var_dump($section);
◎Basic認証
file_get_contents("http://user:password@www.example.com/");
◎ストリームコンテキストの使用
・ストリームコンテキストでのBasic認証
// ストリームを作成します $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Authorization: Basic " .base64_encode("user:password"). "\r\n" ) // 上で設定した HTTP ヘッダを使用してファイルをオープンします $file = file_get_contents('http://www.example.com/', false, stream_context_create($opts));
・特定のヘッダで送信
// ストリームを作成します $header = Array( "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", "Accept-language: en", "Cookie: foo=bar" ); $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>join("\r\n", $header), ) ); $context = stream_context_create($opts); // 上で設定した HTTP ヘッダを使用してファイルをオープンします $file = file_get_contents('http://www.example.com/', false, $context);
◎POSTで送信
$data = array( 'param1' => 'hoge', 'param2' => 'hogehoge', ); $opt = array('http' => array( 'method' => 'POST', 'content' => http_build_query($data), )); $contents = file_get_contents('http://www.example.com/', false, stream_context_create($opt));
クエリーキャッシュ関係を調べる
◎クエリーキャッシュが有効になっているか確認する
◎キャッシュのサイズを確認する
「have_query_cache」が「YES」になってても、この↑キャッシュサイズが0だったら キャッシュはされない。
◎キャッシュサイズを設定する
my.cnfで設定
設定後にMySQL再起動 : service mysqld restart
◎クエリーキャッシュされたかを確認する
キャッシュされると「Qcache_hits」とか「Qcache_queries_in_cache」とかの値が増える
SHOW VARIABLES LIKE 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+ 1 row in set (0.00 sec)
◎キャッシュのサイズを確認する
show variables like 'query_cache_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | query_cache_size | 0 | +------------------+-------+
「have_query_cache」が「YES」になってても、この↑キャッシュサイズが0だったら キャッシュはされない。
◎キャッシュサイズを設定する
SET GLOBAL query_cache_size = 41984;
my.cnfで設定
query_cache_size = 32M
設定後にMySQL再起動 : service mysqld restart
SHOW STATUS LIKE 'Qcache%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Qcache_free_blocks | 0 | | Qcache_free_memory | 0 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 0 | +-------------------------+-------+ 8 rows in set (0.00 sec)
キャッシュされると「Qcache_hits」とか「Qcache_queries_in_cache」とかの値が増える
2012/05/27
CakePHP での ログ設定 (CakePHP 1.3.6)
◎config/core.php↓
//PHP エラーレベルで指定Configure::write('log', E_ERROR | E_WARNING | E_PARSE);
[Mode]
debug=0 の時
Fatal → Apacheエラーに出る
WARNIG → appエラーに出る
debug=1 の時 ↑上記のエラーに加えて、
Notice → appデバッグログに出る
◎ログファイル指定
[apache] vhostで設定 /etc/httpd/conf.d/vhosts/[user].conf
CustomLog /var/log/httpd/app_name_access_log common
ErrorLog /var/log/httpd/app_name_error_log ←PHPエラーとかが出る。
→config/設定ファイル.phpで指定する
// ログPATH設定
CakeLog::config('custom_path', array(
'engine' => 'FileLog',
'path' => '/var/log/httpd/[app_name]_'
));
【出力先】
→ 「debug.log」、「error.log」は Cakeがエラーレベルに応じて出しわけます
→ Controller内とかでLogクラス使って出したものが出ます
LOG_DEBUG:/var/log/httpd/[app_name]_debug.log
LOG_ERROR:/var/log/httpd/[app_name]_error.log
【エラー出すときに使う↓メモ】
#var_dump(srlen(array())); //Fatal Errorvar_dump(srlen('',)); //Pars Errorevar_dump(strlen(array())); //WARNIG#var_dump($a); //Notice
文字列フィールドの 平均バイト数を出す
select avg(b.length) from (SELECT length(comment) as length from blogs where del_flg=0) as b;
Carbon Emacs
◎Carbon Emacs (おまけ)
Ctl+X+F で file find モード
※Ctl押しながら 「X」 続けて「F」と押す
※ユーザのhomeディレクトリ配下を見てる
Carbon Emacsパッケージは、銭谷誠司氏が開発を続けているMac OS X向けのEmacsパッケージである。有用なスクリプト等がデフォルトで含まれているほか、日本語環境向けのパッチなども導入されており、日本語環境で利用するならもっともおすすめできるEmacsパッケージである。
参考)Emacs超入門[1]:Emacsの基本的な使い方とショートカットキー - SourceForge.JP Magazine : オープンソースの話題満載 -http://sourceforge.jp/magazine/09/04/06/1138226/2
登録:
投稿 (Atom)