2012年2月23日木曜日

オープンセミナー広島@2012&第二回 岡山php勉強会

参加&セッションしてきました。
実はオープンセミナー広島@2012でも話をしてきたのですがすっかり更新を忘れて多忙だったため更新が滞っておりました。
なので両方合わせて資料をうpします。

両方共資料の作成時間は短かったのですが技術検証はかなりしました。
PhoneGAPはそもそもAndroidアプリの開発事態がど素人なので開発環境を用意したり実際にアプリを作ってみたり。
phpは初めて生のソースをじっくり見ました。
お題にしたechoとprint以外にも色々と実装を見て勉強になりました。
このふたつの経験で強く感じたのは「自分がやりたいことで無理矢理発表すると勉強する理由になる」ってことですね。
周囲の勉強会に参加されてる方は是非機会を見つけて発表駆動勉強を試してみてください。

ということでそんな勉強したとは思えない資料をどうぞ↓↓↓↓
誹謗中傷は#たけとも残念まで。



2012年1月7日土曜日

WEB系の開発をするために必要な10の開発環境 ~Windows~

####2014/09/09 追記####

最近環境が変わって来たので別に書き直しました。

2014年版 WEB系の開発をするために必要な10の開発環境 ~Windows~


最新の事情はこちらをご参考にしてください

####ここまで####

年明け一発目はZENBOOKを買ったのでそれようの開発環境まとめました。
開発の今後のメイン機となるので今までの開発環境を引継ながらも新たに追加してチャレンジしている部分もあります。
WEB系の開発環境を整える人の参考になればと思います。
(もっと便利なツールあるよ!って方は是非コメントください!!)

まずはハードとかOSとか。
PCは上記で紹介したZENBOOK。
安い、早い、薄いなのでWEBの開発には充分かと。
ついでにMBAに酷似してますがトラックパッドの性能はMBAほどではないので開発にはマウス必須だと思います。
僕はLogicool派なので友人のお勧めってことでこれ(末尾のリンク参照)にしました。
ZENBOOKのdefaultのOSはWindows 7 Home Premium(64bit)です。
Business等が良い人はMSDNなりライセンスを購入するなりしてOSを入れ直す必要があります。
僕の友人の@razonさんはZENBOOKにLinuxを入れて普通に運用出来てるらしいので入れ直し自体は問題ないと思います(ドライバーとかの苦労は別として
ということで前提条件としてノートPCのWindowsOSです。

1 IME
IMEはMS-IMEを使われてる方が多いかと思います。
有償ではATOKも良く出来てるしAndroid版の評判も良いですね。
私もずっとMS-IMEを使っていたのですが業務でMACを触る際に「L+A」と打鍵すると「ら」が入力されて随分苦しみましたw
その際に始めたのがグーグル日本語入力です。
サジェストが強力とか顔文字がいっぱい登録されてるなどのメリットがあります。
他にも細かい所で「Z+H」で←が表示されたり郵便番号を-付きで入力すると対象の住所をサジェストするなどあります。
無料としては非常に優れており、多くの環境で用意されているのでお勧めです。

2 ブラウザ
WEBエンジニアは普段使いとは別に動作検証する必要もあるのでIE・Firefox・GoogleChromeはインストールするかと思います。
ただ最近は駆逐されつつあるIE6ですが、IE6はIE9でのエミュレーションが出来ないので対応しなければいけないときはIETesterが便利です。
他にはOperaが良く名前を聞くブラウザですが基本的に対応しないのでインストールしてません。
ついでに普段使いはFirefox派です。
昔はfirebugが必須と言われていましたが最近はブラウザ自体の開発ツールが充実してきてますのでFirefoxに拘る必要はないとも思います。

3 テキストエディタ
私は開発時のコーディングはIDE派です。
なのでテキストエディタは特にこだわりがないのですが国産で評判のいいSakuraEditorを使っています。
その前は秀丸TeraPadを使っていたのですが秀丸はシェアウェアなので辞めました。
TeraPadは特に不満が無かったのですが折角なら国産のエディタを使おうということで使ってます。
実際にテキストエディタを使う場面がlogを開いたりconfを弄ったりする程度なので活躍の場が少なく、比較としては不十分なのが正直なところです。

4 IDE
僕は長らくEclipse、特にPHPを書くときはPDTを愛用しています。
Eclipseと言えばAll In Oenとよく聞きますがノートPCだと重いので軽量なPDTを使っています。
Desktopなどのでマシンパワーがある場合はAll In Oenはダメな選択肢ではないと思いますので初心者にはオススメです。
しかしながら周囲にNetBeansを強く勧められ、インストールしました。
ちょっと触った感じではEclipseより軽量で使い勝手は同様なイメージです。
プラグインで機能追加も出来るところもEclipseと同様なのですがインストールが必要なため複数の環境を作りたい場合やPCの移行などの際はEclipseに比べてがかかるかもしれません。
ただシンプルにphpやRubyなどでWEBアプリを作る場合はEclipseよりも使い勝手が良さそうなのでphpとRubyに関してはNetBeansをしばらく使ってみようと思います。
ついでにvimやEmacsで開発とか僕には無理なのでご勘弁ください^^;

5 ローカル実行環境
WEBアプリケーションの実行環境はXAMPPを利用しています。
セキュリティの脆弱性は沢山あるのですが開発用として利用する分にはとても使いやすく構築が簡単なためオススメです。
簡単なアプリケーションを実行するには充分なのではないでしょうか。
EclipseのAll In Oenを使ったりすると標準でついてきたりするのでAll In Oenを使ってる人はこちらを使う方が簡単かもしれません。

6 RDB
XAMPPでmysqlはインストールされるのですがpostgreSQL派なのでpostgreSQL9.1もインストールしました。
これは必要がない限りは必要無いのでお好みでどうぞ。
実はOracleも入れようか相当迷ったのですがなんとか踏みとどまりましたw

7 DB管理ツール&SQLエディタ
WEB業界の人はphpmyadminなどを使う人が多いのですが(XAMPPを使うと標準でインストールされるし)私は用途に合わせて幾つかツールを使い分けてます。
まずはDB管理ツール。
これはOracleのSQLDeveloperを使ってます。
標準でOracleとAccessとmysqlに対応してくれます。
GUIで色々操作出来る(tableの追加やカラムの変更など)ことができる上にSQLの実行も出来ます。
トランザクションの管理や作ったtableのDDLの発行、出力情報のexport、DBのdumpなどなど便利なのでDBAの人にはオススメです。
ただmysqlに限ってはJDBCのドライバの追加が必要です。
ダウンロードして自分で配置してもかまいませんし、ツールバー→ヘルプ→更新を行い、 選択してインストールしても構いません。
普通はこれで充分なのでしょうがpostgreSQL使いとしてはpgadminも必須です。
pgadminは常に最新場を使えばいいというわけではなく(基本的には問題ないんだけど)使用しているDBのバージョンに合わせてpgadminを使い分けるのが良いです。
理由はpostgresのバージョンアップの機能追加に合わせてpgadminも機能追加していたり、仕様変更されているため、細かい機能を利用しようとするとハマることがあります。
pgadminに関しては高津さんのこちらのブログがわかりやすいので参考にどうぞ。
と基本的にはこれで充分なのですがSQL好きとしてはSQLのコーディングはひとつのツールでまとめたいものです。
なのでSQLエディタとしてA5:SQL Mk-2を使ってます。
これもOracleとmysqlは直接接続出来るのにpostgresだけはODBCのドライバーが必要ですw
ついでに追加時の文字列情報は

Driver=PostgreSQL Unicode;Server=ホスト名orIPアドレス;Database=DB名;UID=ユーザ名;Port=5432;

となります。
A5はER図を作ったり、そこからDDLを生成したり出来るので便利なので是非。

8 ファイル転送ツール
ちょっとSQLエディタが好きな分野なだけに長くなってしまいましたが次はファイル転送。
Macだと元々SCPをFinderで扱えたりしますがWindowsには付いてません。
またFTPもコマンドで送れますが不便なのです。
メジャーなところではFFFTPかと思いますが本来の開発者が開発を停止しているのでWinSCPを使っています。
FFFTPもSFTPやFTPSに対応していくとのことですが既にWinSCPは対応しており、よりセキュアで汎用的なのでこちらを使っています。
あとはさり気なく便利な機能としては同期機能があり、バックアップやファイルの自動転送などが便利です。

9 バージョン管理ツール
バージョン管理ツールはgitをメインに使っています。
正確にはmsysgitTortoiseGitです。
msygitがgit本体となり、TortoiseGitがGUIの部分を補っています。
TortoiseGitは必須ではないのですが視覚的に操作しやすくなるためオススメです。
とは言っても、私はまだまだGitの勉強不足で運用が追いついていないため、コマンドで充分だったりするのですが…
TortoiseGitで差分を比べたりが容易になるのでGUIが必須な人にはオススメです。
また同様にSVNがバージョン管理の柱ですが次の職場がSVNらしいのでTortoiseSVNもインストールしました。
TortoiseSVNも同様に視覚的に操作しやすく便利です。
SVNの方が仕組みがシンプルなため、開発とは別のバージョン管理ならこれで充分かもしれません。
バージョン管理については本当にまだまだ勉強不足のため、今年は重点的に学んでいきたいと思います。

10 SSHクライアント
SSHクライアントが標準で付いてこないWindowsですがメジャーなところはPuTTYかと思います。
WinSCPで接続中にもPuTTYをキック出来るため、複数のサーバを管理する際は便利です。
またサーバの接続情報の一覧もWinSCPと似ている(WinSCPが合わせているのだと思いますが)のでわかりやすいです。
個人的には日本語化が最初からされているPuTTYごった煮版を使ってます。
ただPuTTYはちょっと気軽に繋げたい時などは手間に自分は感じます。
なのでそんなとき(検証系とかの日常の開発)はTeraTerm proを使ってます。
これはTeraTermの後継ですのでご注意ください。
TeraTerm proは使い方はシンプルで独自マクロを使うとかなり強力なことが出来たりします。
その反面サーバの接続情報の管理が面倒だったりします。
なので本番系で使う際はPuTTYの方が便利ですが、こちらはシンプルなので単独で使う際はとても使いやすいと思います。


と10項目並べてみました。
あと特筆すべき点は特にないと思いますが自分の環境構築のメモのためにもちょっと追加。

◯ VM
必須ではないと思いますがVM環境を作るためにOracle(元Sunですが)のVirtualBoxを使ってます。
無料で気軽に使えるのでローカルでちょっとしたLAPPやLAMPを立てたり、検証する際に重宝してます。
巷の噂ではMacOSやWindows8も動くらしいです。
あと補足ですが個人的に本番系でVMを使うときはKVMを使ってます。

◯ ユーティリティツール
自分は良くマインドマップを書くのでFreeMindを愛用してます。
FreeMindはマインドマップを書いた後にhtml(htmlだとノードの開閉が出来る)にしたりPDFとして出力出来るので共有するときも便利です。
あとはVisioを使ったりすると思いますが有料です。
そこでオススメがWEBアプリになりますがCacooです。
図形画像も抱負だったりWEBなのでインターネット越しにファイルを共有しながら作成できたりと便利です。
また同じようにWEBアプリで便利なのがチャットワークです。 
Skypeにタスク管理やファイル管理機能が付いた感じです。
無料枠でも充分使いやすく、個人的なタスク管理等で使っています。
またWEBアプリのメリットはインストールが必要なく、データ管理がクラウドなため容易に移行したり、別PCでも使えることです。
また周囲の人も導入しやすいので仕事じゃなくてもちょっと気の知れた仲間と何かする時に使うのも面白いです。
後は業務に関係なく便利なのがクラウドストレージ。
私はメインにDropboxを使っています。
アプリをインストールするとOS関係なくフォルダの用に中身を共有でき、WEB経由でもアクセスできます。
GitのリポジトリをDropboxの中に作ったり、html等をDropboxのpublicに置くとブラウザで表示出来たりします。
他にも便利なクラウドと言えばEvernoteですね。
メジャーですし説明は不要かもしれませんがテキスト、音声、動画などのメモを保存出来て便利です。

と言ったところでしょうか。
メジャーな物が大多数なので皆様の中で全部知っている方もいらっしゃると思います。
そんな中でもっと便利なモノ・使い方があるよ!ってツッコミは常時募集しておりますw


 というわけでかなり長文になりましたが自分の備忘録も含めてZENBOOKに作った開発環境なのでした。
次はアプリつくらなきゃ(´・ω・`)

2011年12月31日土曜日

今年一年の総括

とうとう今年も本日のみとなりました。
私はエンジニアとして今年は何かとアウトプットを増やそうと考えて活動をしてきました。
そんな私の一年間を振り返ることとまたこの一年で感じたことを総括したいと思います。

まずこの一年で多くの勉強会に参加させていただきました。
去年も勉強会に参加自体はしていたのですが去年の倍以上はLTを含めてお話させていただいたと思います。
このきっかけはやはり去年の年末の#OLOJP(ひがさんが出た時)にmagic3の話をさせていただいたのが大きかったです。
その後の懇親会(忘年会議)で多くの人と知り合いになり、良くも悪くもTwitterで絡んでいただき、それが今年の活動のやりやすさを生んだと思っています。
なので発表の機会やネゴをしていただいたオープンラボ備後の主催者である@lopes_nbさんには本当に返し切れないほどの恩があります。
また会社としても勉強会には比較的に良心的に参加させていただきました。
OSC神戸などの交通費を出してもらうなど、ありがたい話だと思います。
本当に当時の上司であるがみさんには感謝しています。
と色んな方の支援の上で毎月勉強会に参加したりしていたのですがその結果感じたこと、得たことが3つあります。

1 アウトプットを増やすとインプットも自然と増える
これは多くの方が仰っていますが本当のことだと実感しました。
「エンジニアは高いアンテナを持て」とか「常に新しいことを学ばなければならない」とよく目にしますがそのためにはまず「自らアウトプットを増やす」と言うのが一番手っ取り早い対策なのかもと感じました。
このアウトプットは勉強会で話をするだけじゃなくてTwitterでもブログでもなんでもいいと思います。
その結果は自然とインプットとして帰ってきますので自分に合った方法でのアウトプットを模索してみるのがいいと思います。

2 聴衆者と講演者では知り合いの増える数が圧倒的に違う
聴衆者の場合、接点が増える対象が主催者と講演者と懇親会の席の近い方ぐらいなのですが講演者になると対象は参加者全員です。
そうなるとTwitterやらFBやらで色々と繋がりが爆発的に増えました。
これが自然とインプットが増える要因にもなったと思います。
また名刺交換は「交換で終わる」ことが多いと思いました。
それ自体はとても有意義なことなのですがその次のアクションを生みたいor生む場合はもうひとつ別のコネクション(SNSとか)で繋がっているのが重要だと思います。
このコネクションをちゃんと作ることを意識するとスター式というかクモの巣状というかそんな感じで知り合いが繋がっていくのでとても強いコネクションが生まれます。
これがFBが流行る理由なのかなと思いました。

3 自分の立脚点がわかる
当たり前というか当然のことですが比較対象がいないと自分の立ち位置というのはわからないものです。
数学でも空間座標の把握は他の座標との比較で行います。
この他の座標(知り合い)の数が多ければ多いほど「広い視野での自分の立ち位置」が
測れます。
例えば私の場合、エンジニアを志したのが遅かったのでこの業界に入ってからシステム的な勉強を始めました。
なので実質3年程度しか勉強をしてません。
そうなると劣等感はあるけどどれくらい勉強不足かわからない状態でした。
社内の中ではそれなりに分かる人の立ち位置になったけど世間一般的にはどうなのだろうか?という不安が常にありました。
それが色んな人とコネクションを作り、話を聞く上で自分のストロングポイントとウィークポイントが見えてきました。
未だコンパイルが必要な言語は不得意ですし、組み込みの知識はまだまだですが自分もエンジニアを名乗れるようにはなってきたかなと思っています。
また意識と言うのは常に周囲に引っ張られるもので周囲に合わせて最適化されていくのですが「向上心の高い人とつながると自然と自分も向上心が高くなる」と感じました。

ということで3点ほど上げましたが結論として「多くの仲間を得ことが出来る」というのが勉強会に参加して感じたことです。
自分の意見をどんな形であれ、発信することはリスク(誹謗中傷など)を伴うことですが同志を得るためには必須のことなのだと思います。
そして「意識の高い仲間を作ることが自分に対する最大の投資になる」と思います。
このメリットは上記の他にも数えきれないほど多くの効果を発揮します。
ただこれは類は友を呼ぶ部分もあるので気がついたら周囲が変態でいっぱい!ってことに可能性もありますのでご注意ください。

他には今年は企画・運営にも積極的に参加しました。
個人的な趣味である格ゲーではチャリティー大会などを企画したり開催したりしていたので同じようなノリでなんとなくOSC広島の実行委員になったりしました。
OSC広島の開催にはここには書き切れない多くの物語があった(来年もやるので現在進行形の方が正しいかも)のですがこれは人の動き、金の動き、そして企画の動きで多くのことを学びました。
OSC広島自体でも多くの繋がりが生まれ、勉強させていただいたのですが実行委員になることでまた別の視点から多くのものが見えました。
何かを成功させるには色んな力や能力が必要で、それを一人で担うことは難しいと「今更ながら」強く感じました。
実際のところ自分は「やりゃ人間何でも出来る」と思ってる節があるのですがそれだけではない別の切り口に気がつけたような気がします。
もし将来起業したり管理職を目指している方はこのような企画・運営に積極的に参加してみるのがいいと思います。
また「使われる側」の人もリーダーが何を欲しているかと言うの知るには「実際にリーダーを経験してみる」のが最も手っ取り早いと思いますのでオススメです。
なのでOSC広島は実行委員を募集中ですのでご興味がある人は是非(宣伝w

osc-hiroshima@list.ospn.jp

エンジニアとして今年は大きくこの2つかと思います。
当然、反省点も多くあります。
まずはエンジニアとしての成果物をプライベートで全くといっていいほど作ってないこと。
ちょっとbot作ったり、格ゲーの申し込みフォームを作ったりしましたが本腰入れてしたことは皆無です。
これを来年は大きな課題としたいと思います。
ということで来年に向けた布石として読書スイッチさんの技術的な部分のお手伝いをすることにしました。
元々、中の人とは知り合いで何かとお世話になっていたので恩返しも含めて自分に出来ることをしようと思った結果です。
双方にメリットがあるので自分がスマフォ版読書スイッチだったりAPIの作成をすることで成果物を作れればいいなと思います。
すでに動き出している案件ですので早く形にして皆さんの元にお届けしたいと思います。
他にもこんなの一緒にどうですか?思うことがありましたらビジネスライクなこともそうでないことも積極的に形にしていきたいと思いますのでご連絡いただければと思います。
次に課題としてもっと技術的に有意義な活動をするということです。
今年は「面白可笑しく技術っぽいこと」をして観衆を楽しませることに専念していました。
これ自体はとても重要な要素だと思っているのですが「面白かったけど結局なんだったの?」とか「名前は覚えてるんだけど何が得意の人だっけ?」とか「TDDって結局何?」とか「山羊の人」とか「あぁ男の娘!」などとても残念な伝わり方が多かったと思います。
なので勉強会でセッションとしてお話する時は「エンジニアの人に有意義な時間と技術的な知識を提供」するように心がけたいと思います。
これは年明け早々に オープンセミナー広島でチャンスをいただけるので 当 日 に 発 表 資 料 を作成する万全を期すようにしたいと思います。
また今年に負けない爆笑の渦を作れるように妥協せずに頑張ります。
他にも嬉しいことにこのようなチャンスを頂ける話がちらほら出てます。
なので来年は今年同様にアウトプットを増やしながらもその質を上げていきたいと思います。
このブログももっと技術的なメモを残していきたいと思います。
ということで今年の総括としては「意識の高くてすごい仲間」がいっぱい出来ました。
来年は更に仲間を増やしつつ、そんな仲間へのフィードバックを作りたいと思います。
さて今年も残すところ後わずかとなりましたし、転職のこと・具体的な来年の活動などは年明けてからにしたいと思います。
それでは皆さん良いお年を。

2011年12月18日日曜日

postgresqlを使った位置情報の計算について  その2

 PostgreSQL Advent Calendar 201118日目を担当します@soudai1025です。
先日はスーパーエンジニア石井達夫さん鋭意開発中!pgpool-IIのオンメモリクエリキャッシュ機能でした。
そんなわけで本日の内容ですが実ははslonyとPostgreSQL9.0から実装されたレプリケーションの話をしようかなと思ったのですが 第 1 回 Slony-I を使用したシステム構築『Slony-Iを動かしてみよう』などがとても素晴らしい資料が豊富なので断念しました。
PostgreSQLは日本語ドキュメントが豊富なのがいいところですよね。
なので昔にちょっとエントリーをかいたことがあるpostgresqlを使った位置情報の計算についての実践的な内容を記載したいと思います。


まずおさらいですが位置情報をつかった距離の計算はSQLで
SELECT sqrt(power((対象緯度 - 自分の緯度) * 111, 2) + power((対象経度 - 自分の経度) * 91, 2)) AS distance
とすることで計算できます。
そして今いる緯度経度はJavaScriptとjQueryを使って以下のとおりで取ってこれます。

$(document).ready(function() {
    var latlng = getUrlVars();
    if (latlng["lat"] == undefined || latlng["lon"] == undefined) {
        navigator.geolocation.getCurrentPosition(success, error);
    } else {
        if (latlng["lat"] != undefined) {
            clat = latlng["lat"];
        }
        if (latlng["lng"] != undefined) {
            clng = latlng["lon"];
        }
        location.href = 'map.php?lat=' + clat + '&lon=' + clng + '&range=0.5';
    }
    function success(position) {
        var clat = position.coords.latitude;
        var clng = position.coords.longitude;
        location.href = 'map.php?lat=' + clat + '&lon=' + clng + '&range=0.5';
    }
    function error(msg) {
        var clat = 34.4923;
        var clng = 133.3613;
        location.href = 'map.php?lat=' + clat + '&lon=' + clng + '&range=0.5';
    }
});

この例では緯度経度を取得した後にmap.phpに投げてます。
parameterのrangeは検索範囲の距離をキロメートルで指定している形です。
これをphp側で取得しSQLとして使用するとこんな形になります。


SELECT 
    sqrt(power((hoge.lat - 33.333333) * 111, 2) + power((hoge.lon - 133.333333) * 91, 2)) AS distance
FROM hoge
WHERE 
    circle(point(hoge.lon * 91.0, hoge.lat * 111.0), 0.5) @ circle(point(133.333333 * 91.0, 33.333333 * 111.0), 0.5)

ここまで出来るとSQLで取得したデータを連想配列にし、phpでJSONに変換して すれば比較対象の緯度経度、自分の緯度経度、距離でリストからGoogleMAPにピンを挿し込むことも可能です。
さてここまで来るとかなり実践的に業務で使えるお話になりますね。
でも今日はここまで!
続きはこちらで発表したいと思います。

オープンセミナー広島

ここではデモも含めて実践的なコーディングとWEBアプリをスマフォアプリに変換するところまでしますのでご興味がある人は是非お越しください。
あれ?よく見ると昨日のアドベントカレンダー担当の石井さんも発表されるじゃないですか!
というわけで皆さん奮ってご参加ください♪


というわけでORマッパーじゃこんなこと出来ねぇだろ!ってこと位置情報の計算の話でした。
それでは明日はdai_yamashitaさんです。
引き続き PostgreSQL Advent Calendar 2011をお楽しみください。

2011年12月10日土曜日

PHP5.4でのhtmlspecialcharsの仕様変更とセキュリティ

さてさて、PHP5.4 Advent Calendar 2011の10日目を担当する瀬戸内○態クラスタphp部門代表、@soudai1025です。

昨日は@srea2431さんがphp5.4で@(エラー制御演算子)はどう進化したのか?という素晴らしい内容でしたので今日はあっさりざっくりうっすらとphp5.4のhtmlspecialcharsの話したいと思います。

そもそもhtmlspecialcharsを使ってない人のために関数の説明をこちらのサイトから引用してきました。
簡単に言うと
htmlentities -- 適用可能な文字を全てHTMLエンティティに変換する
htmlspecialchars -- 特殊文字を HTML エンティティに変換する
こんなところかなと思います。

ただこちらのサイトにも

htmlspecialcharsの第三引数は、今のところ指定するメリットは無い。

と書いてありますがこれ罠です。
詳細は徳丸浩さんがブログ「PHP5.4のhtmlspecialcharsに非互換問題」で述べていらっしゃいます。
そもそも個人的には不正な文字エンコーディングを利用した攻撃を防ぐためにたとえUTF-8だとしても第三引数も指定する方が良いと思います。

で仕様変更で罠はわかったけどそもそも中でなにやってんの?って人。
良いブログ見つけてきましたよw

htmlentities() と htmlspecialchars() の違い

といわけで文字を出力するときは

1 htmlspecialcharsでエスケープ
2 ENT_QUOTESの引数を付ける!
3 第三引数には文字コードを指定する

ということを忘れずにやってくださいね!!
えっお前は他人の引用してるだけじゃん?って声が聞こえてきましたね。
まさにそのとおりです(キリッ
なので更に引用で大垣さんのセキュリティの基礎の話もしときます。

1 入力時にValidate
2 出力時にエスケープ
3 制御時はベストプラクティス

この話はこちらに資料があります。

ついでに自分はこのエスケープを

foreach ($parameter as $key => $get_data) {
    ${$key} = htmlentities($get_data, ENT_QUOTES, 'UTF-8');
}

としたりしています。
これは簡単に説明すると$parameterに連想配列を突っ込んでたらkey名の変数としてエスケープ後に入れてます。
用途によっては配列に入れなおして戻り値として返すメソッドにすればより使いやすくなると思います。
例えば

foreach ($_POST as $key => $get_data) {
    ${key} = htmlentities($get_data, ENT_QUOTES, 'UTF-8');
}

とかすると$_POST['hoge']の中身がエスケープされて$hogeに格納されるって感じです。

というわけでhtmlspecialcharsの仕様変更から処理内容、そして簡単な使い方でした。
それではツッコミお待ちしております!

また明日は@tpyamamotoさんです。
引き続きPHP5.4 Advent Calendar 2011をお楽しみください♪

2011年11月15日火曜日

Oracle DatabaseのフラッシュリカバリエリアがいっぱいでDBが応答しない時について


昨日ちょうどOracleDBの障害があったので備忘録。
つかOracleDB使ってる人は当たり前かもしれないけどDB知らない人が開発環境でローカルに入れたりした時にハマるかもしれないのであんまり詳しくない人用に(ホントにあったので)

OracleDB(以下Oracle)はフラッシュリカバリエリアの領域をインストール時に指定します。


フラッシュリカバリエリアについてはこちら


推奨としてはこのフラッシュリカバリエリアは物理的に別のHDD(バックアップストレージ)をISCSI等で指定するのが流儀ですがまぁ開発環境とかだとローカルにバシッと数Gで切っちゃったりします。
本番環境でも切っちゃったりすることあるとは思います。
俺もそういう本番環境作ったことありますので。
でこのフラッシュリカバリエリアは「Oracleのバックアップ領域」として使われます。


具体的には

  1. RMAN(Oracleのバックアップの仕組み)で生成したバックアップセット(暗号化されたバックアップ)の保存
  2. アーカイブログ(データベース内の実行ログ)の保存
  3. 初期パラメータなどのその他、必要ファイルの保存

などです。
まぁここらへんはWEBに詳しいことが沢山あるのでDBAの人は調べてください。
Oracleを運用する上では必須の知識です。
なお、このフラッシュリカバリエリアの領域はdbにログインした後に

select * from v$recovery_file_dest;

で確認したり、EM上から確認できます。
参考画像


でここからが本題です。
上記のリンクを最後まで読まれた方はご理解いただけてると思いますが

フラッシュリカバリ領域がいっぱいになった場合には、以下のようにフラッシュリカバリ領域が満杯になったことを示すORA-19815がアラートログに出 力されます。このとき、インスタンスがダウンしたり、バックアップが取得できなくなることにはなりません。Oracleが自動的に古いファイルから削除し てくれますが、あまり好ましいことではないので、手動でのメンテナンスを検討する必要があります。
 と書いてあります。
が、アーカイブログモードでDBを運用している場合DBが落ちます←
そして再起動しようとするとREDOログが更新出来ないためマウントは出来ますがオープンでできません。
つまり起動でこけますm9(^Д^)プギャー
なので常にフラッシュリカバリエリアの領域を圧迫しないようにメンテナンスする必要があります。
なのでOracleにはEMでRMANのバックアップスケジュールを指定した際にお手軽に過去のバックアップ分を削除したり、アーカイブログを削除するように設定できます。
そもそもバックアップの設定の以下の部分で出来ます。

まずEMの可用性を選んで



バックアップの設定を選びます



さらにポリシーの黄色でマークしたところをお好みにどうぞ。


な感じですがこれ簡単だけど罠があります。
「EMでバックアップ設定して一緒にアーカイブログの削除やバックアップの差分も削除できるから安心!」とか思ってるとはまります←今回はこれだった。
これはEMが正常に動いてないとスケジューラーも当然動きません。
コマンドラインで

emctl status dbconsole

と打ってRunningとか返ってくる癖にスケジューラーが動いてないとかよくある話です。
そうなると一見元気にDBは動いているのにある日突然止まります。
そもそも開発環境だと常時DBを起こしておらず、必要な時にDBだけを起動させることもあるでしょう。
そうなるとdboraとか設定してるとかWindows版(全部自動起動するはず)ならいいんですがDBだけ起動させてEM立ち上げ忘れるとかあると思います。
フラッシュリカバリエリアの領域に対して割り当てて無いのにテストデータ作るために大量のinsert文とか流してアーカイブログログを大量に作っちゃうとフラッシュリカバリエリアの領域を食いつぶして止まっちゃうわけです。
で止まったから再起動→立ち上がらない(´・ω・`)となるわけです。

でそんな人はこちらを参考にしながら対応してみてください。
初期パラメータの修正し、フラッシュリカバリエリアの容量を拡げた後にDBを起動させてログの削除を行います。
開発環境なら一時凌ぎでいいですが本番環境の場合はかならずフラッシュリカバリエリアの最検討をしてください。
そもそもフラッシュリカバリエリアの監視をしてなかったor削除のルーチンが無かった場合は早急に対応した方がよいと思います。
そんな人はこちらを参考にしてみるといいと思います。
ついでに私が設計する場合はスケジューラーはEMを使わずにlinuxのcronを使ってバックアップ等を行なっています。
監視も冒頭で触れたSQLとシェルスクリプトを使ってzabbixに値を投げて監視し、閾値を超えた場合はメールを出すようにしています。
ココらへんの運用については需要があれば次の機会に。

と言う訳で本番環境での諸設定もですが開発環境でOracleを使う場合もアーカイブログの運用には気をつけましょう!!

2011年10月24日月曜日

第11回 オープンラボ備後

やってきましたオープンラボ備後。

でブログをまとめるまでが勉強会!ってことでまとめます。
今回は自分がセッションを担当したので大したもんじゃないけど資料を簡単に公開しておきます。
あと、これはOSCで発表した資料です(オープンラボ備後はちょっとだけ加工した
なのでOSCで気になったけど見れなかった人はこれを見て安心してください(はぁと
ついでに司会しつつ最初のセッションでした。

ではOSC当日に作ったという幻の資料をどうぞ


【タイトル】「WEBサイトを作る時のOSSの選び方 ~OSCの使い回しじゃないんだよ!~」
【発表者名】曽根さん
【時間】60分
【概要】OSCで発表した内容をより具体的に掘り下げてお話します。
DBのpostgresql9.1やCMSのmagic3などのインフラからhtml5まで時間の許す限りお伝えします。



でマインドマップをhtmlにしてDropboxで公開しました。
Dropboxなんで容量なくなったら急に消えるかもしれません。
まぁでも年内(2011年内)は保存しておきます。
逆に見たかったのに無くなってるじゃん!みたいなことがあれば連絡したら上げますのでお気軽にどうぞ。

WEBサイトに必要なもの


WEBサイトに必要なもの 2


postgresとmysqlの方向性


クラウドと自社サーバ


Flash VS HTML5


という感じでわりといつも通りグダグダな感じ。
こんな自由な感じのうすーーーい内容で良かったのかと不安になります^^;
毎度のことながら間違ってることなどのご指摘は随時お待ちしています。
資料自体が簡潔につくってあるのでこれを見ただけじゃよく解んないかもしれませんが結論は

・ 地方はLAPPかLAMPでhtml使った上でレン鯖とかPaaSとかIaaSとかよくわからんでも使ってみていいんじゃない?
・ で磯野-!一緒にHTML5やろうぜー!!って感じです。

暇な時にでもどうぞ。

でここで超押してるCMSのMagic3もお時間があれば是非。
導入は超簡単(オープンラボ備後ではデモをした)なので!!
ダウンロードはこちら。(2011/10/24の最新版)
尚、すごい勢いでバージョンアップするので上記のリンクを使わずに、最新版を確認されて落とされるのがいいと思います。

ということで自分のことはここまで。
ここからはオープンラボ備後の振り返り。


【タイトル】「いまどきのASP.NET」
【発表者名】きよくらさん
【時間】60分
【概要】 ASP.NETが登場して来年で10年。当初と今では随分と進歩しています。
特にここ1~2年でさらに大きく強化され、3つのフレームワークを内包する形に進化
し、間口も広がっています。今回はそんなASP.NETの今の姿をお伝えします。
 最近のASP.NETをキャッチアップされていない方、PHPやRails等のLLな環境
を主にお使いの方、また、これからWebアプリケーション開発を始めたい方にも聞
いていただきたい内容でお送りしたいと思います。


資料をこちらで公開してくれてます!

総括としてはMS系の知識はさすがの一言。
自分は.net系は全く触ったことがなかったけど興味を持ちました。
VBとかで業務系を量産されてる方がWEBはよくわからんけど…って時に.netを使うのはアリだと思います。
下手にphpとか使ってセキュリティホール作ったりするよりは生産性も高く、セキュアなサイトが作れると思います。
デモも交えてすごくわかりやすかったので自分も事前の準備しっかりして素晴らしいプレゼンを出来るように頑張ります←やるやる詐欺
まぁ自分はlinux大好きだから業務で使うことないんだろうな…だって運用系の部分の作りこみはlinuxの方が楽なんだもん(´・ω・`)
兎にも角にもMS系を使ってる人は使わない理由がないと思うので是非。


そして最後はデザイナーの彩さん。


【タイトル】 「シュールな街バルセロナとアート」

【発表者名】彩さん
【発表時間】


【概要】バルセロナの街のあり方とアートについて話したいと思います。


ご本人の許可が出れば資料上げます。
すごくバルセロナが魅力的に見えました!
余生はバルセロナで過ごしたいです(*´ω`*)
つかヨーロッパいいなぁ。
イタリアしか行ったことないけど旅行に行きたいと思いました。
円高の今がチャンスなんだろうけど…


ついでにTwitterのハッシュタグもまとめましたので合わせてどうぞ

第11回 オープンラボ備後

ということですごく充実したオープンラボ備後でした。
次回は11月27日です!
お時間がある人はぜひぜひ参加してみてください♪