最近(最近じゃないとも言う)おなかのお肉が気になるのびーにょです。
コンバンハ
さて、本題。
最近OSSのものを触っています。
色々内部変更してやってますけども、マジックナンバーが多すぎて解析に時間がかかります。
マジックナンバーだけが原因ではないですが。
※マジックナンバーとは
コードを保守する必要がある場合や、追加、メンテ等を行う場合には、誰が見ても分かるように書くべきだと思います。
常に、何年も、何十年も自分が保守するつもりなら自分だけがわかるように書いても問題ないと思いますが、
仕事とはそうではありません。
担当が変わった、別の仕事してるから別の人に頼む、仕事を辞めた 等など
色々な理由で自身がずーーっと保守し続けることは難しいです。
でも、作ったものはそれなりに長い時間残ります。
自分の手を離れてしまっても、誰かが面倒みているわけです。
そんな人達に迷惑をかけないよう、笑われないように、誰が見ても分かるように書いておくべきだと思います。
どれだけエレガントに書こうとも、その物を保守する人達が見てわからない物だとその人達は苦労しますよね。
ソースのエレガントさ等は別に否定するつもりもありませんが、万人が見てわかる状態が一番望ましいと思います。
レベルが低く見える書き方でも問題ない、むしろ推奨すべきではないかと。
そんな感じで、僕はこれからも誰が見ても分かりやすいようにコードを書き続けたいと思います。
のびーにょ その他
チョコボールです。
WEBアプリでの名前などの登録の際、『山<hr />田』のように、必ず<hr />を加えて表示が崩れないかの確認をしています。
そんな意地悪な名前で登録する人は普通はいないとは思いますが。。
目的はもちろんXSS(クロスサイトスクリプティング)対策です。
<hr />で表示が崩れる程度だったらまだいいのですが、悪質なスクリプトを埋め込まれるとセキュリティ的に穴になります。
ベタ書きの場合だと表示側で、
< ?php echo htmlspecialchars($name, ENT_QUOTES); ?>
smartyの場合だと、
{$name|escape}
という風にエスケープ(サニタイズ)してあげなければいけません。
htmlspecialcharsの第二引数にENT_QUOTESをつけてあげないと、’(シングルクォーテーション)をエスケープしてくれませんので注意です。
WEBアプリではXSS対策として常識的なことですが、意外と忘れてたりすることもあるので気を付けなきゃですね。
MoriMoriMoriMori PHP
チョコボールakaモリモリ~です。
7月から携帯コンテンツの開発に加わることになりました。
今までは管理画面系が多かったので携帯に関する知識はほとんど無かったのですが、携帯3キャリアに対応していくためのコーディングやセッションの引き回しについてなど、少しずつ覚えてきました。
今回はデータベースについて思うこと…を。
今まではDB操作はずっとphpMyAdminに頼ってたんですが、コンソールを使うようにと指示が出て、最近はひたすらSSHでカタカタとやってます。
慣れてくるとサクサク処理出来て快適ですね。
早いというか、それが通常の処理の早さってことなんでしょうけど。。
個人的に作ってるサイトはSSHが使えないレンタルサーバーなのでDB操作はphpMyAdminを通してやるしかないのが残念です。
自分は業務でデータベース設計をすることはありませんが、実際に使う時のことを考えて、できるだけ複雑なJOINやサブクエリをさせないようにうまいこと設計しないと、のちのちレコードが増えてきた時にパフォーマンスにモロに影響が出る、と実感しました。
あまりにも関連テーブルを分けすぎるとSQL組む時、かなり複雑になります…。
データが1000レコードでSELECT文、オフセット10でデータひっぱってくるのに10秒以上かかる。
こんなシステムに遭遇。。
発行されたSQL文を見てみると、JOIN、サブクエリが複雑に絡み合って恐ろしいことになってました。
一つの複雑なSQL文で全てやろうとするよりもSQLを何回かに分けてプログラム側でごにょごにょやると取り敢えずパフォーマンスは改善しそうな予感です。
今後データベース設計する機会があったら活かせるとよいなーと思います。
MoriMoriMoriMori Linux, MySQL, PHP, データベース
はい、アンセキュアなボクです。
ちょいとSSLまわりをいじってたら気がついたこと。
SoftBankのSSLはhttps://secure.softbank.ne.jp/へ強制的にリダイレクトされるようです。
例えば、https://exanple.com/exanple.phpへアクセスしようとすると、
https://secure.softbank.ne.jp/exanple.com/exanple.phpというURLに強制リダイレクトされます。
なんかURLにSoftBnakってはいってるー!ってビビった先にはこういう仕様があったようです。
しかし、何故かブックマークからhttps://exanple.com/exanple.phpへアクセスしてもリダイレクトが行われないっぽいです。
exanple.com内のリンクからアクセスすることではじめて上記仕様のようなリダイレクトが行われるようです。
下音タヌキ 携帯電話
はい、ボクです。
最近の携帯電話って、だいたいGPS機能とかそれに近い機能がついてます。
そもそも、GPSって使ってますか?
家の電子レンジにもついてますGPSが。
GramPositionSystemだそうでzzzz
はい、GPS違いですね。
そんなわけで、GPS機能を使い、GoogleMapsと連携してみました。
携帯端末からGPS情報を読み込む場合AリンクやFORMにて以下のようにします。
以下はAリンクの場合。
Softbankの場合:
<a href="location:auto?url=http://example.com/">Link</a>
docomoの場合:
<a href="http://example.com/" lcs>Link</a>
EzWebの場合:
<a href="device:gpsone?url=http://example.com/">Link</a>
http://example.com/は遷移先のURLです。
キャリアによりそれぞれ異なるので、キャリア判定する必要があります。
docomoの場合のみ?未対応のURLは勝手に非リンクにしてくれるのですが、他のキャリアでは普通にリンクがはられ正しく推移できません。
推移先へは、GETやらPOSTで位置情報などが送られてきます。
docomo/EzWebの場合は、lat/緯度(latitude)、lon/経度(longitude)に各種情報が入ります。
SoftBankはposにNxxx.xxx.xxxExxx.xxx.xxxという感じのフォーマットで情報が入ってきます。
各キャリア、WGS84の世界測地系で来るので、日本測地系へ変換してあげないと微妙に違った位置になってしまいます。
ここらへんは、数学苦手な自分にはさらっと流しておきます。
温かい風の噂によれば、緯度から0.003236111111111111をマイナスして、経度に0.0032027777777777775をプラスしてあげれば大雑把な値は出るとか出ないとかという都市伝説。
あとは、これらの情報をGoogleMapsAPIに流してあげればいいわけです。
<img src="http://maps.google.com/staticmap
?center=緯度,経度
&zoom=15
&size=200x200
&maptype=mobile
&markers=緯度,経度,redr
&key=API_Key" />"
こんな感じでzzzz
下音タヌキ PHP, Tips