EL式はpublicフィールドを参照できない

 JSTLで利用するEL式はオブジェクトのpublicフィールドを参照できないので、getterやsetterを実装しなければいけない。さすがにgetter/setterを手書きするのは大変なので、Eclipseの自動生成機能を利用する。しかしやはりパブリックなアクセスをする目的においては無意味なコーディングだと思う。

例えばこんなクラスがあったとした場合、
public class Entity {
  public String name;
}
JSPファイルでこのようにアクセスできない。getNameメソッドが必要。
Entityクラスのnameプロパティ: ${entity.name}

 しかしSeasarプロジェクトのSAStrutsではJavaBeansはMapに、配列はListにラップすることでpublicフィールドを参照できるようにしているらしい。これは何かのヒントになりそう。

Windows環境のlog4jでlog4j.appender.A.Fileにハマる

 Windows環境のlog4jでハマってしまった。Tomcat + Log4jの過去に実績のある設定なのにログが出力されない。いろいろ消去法でトラブルシューティングして、最後に行き着いたのがlog4j.appender.A.Fileのパスの区切り文字。うっかり\(バックスラッシュ)そのまんまを与えていたが、\\でエスケープするか、/(スラッシュ)を使う必要があった。ついついうっかりミス。

すべてのJSPに共通のJSPインクルード

 JSPファイルの先頭で、すべてに共通のJSPファイルをインクルードさせるには、web.xmlのjsp-config設定でinclude-preludeを定義する。
<jsp-config>
  <jsp-property-group>
    <include-prelude>/WEB-INF/jsp/common.jsp</include-prelude>
  </jsp-property-group>
</jsp-config>
これはタグライブラリを宣言するときに便利。各々のJSPファイルでタグライブラリを宣言し、可読性も上げようとすると、出力結果の先頭に無意味な空行が入ったりして困るので、これは重宝する。

人月単価による見積りの実情

 ソフトウェアの世界では人月単価による見積りがよく行われる。某メーカーでは下請け業者からの見積りに対して、SEとPG(プログラマー)に分けた作業工数と、SE単価○○円、PG単価○○円と明記した内訳を記載するよう指示する。この指示に従った見積書を提出しないと調達部門の承認が下りないのだ。しかもSE単価とPG単価には某メーカー側で一定の基準があり、下請け業者側で決めるものではない。まるでシステム開発を機械的な単純労働のように考え、絶大な権力で下請け業者の統制を図ろうとしている印象を受ける。昨今のシステム開発は非常に高度化、複雑化している。たとえばある機能の実現方法を熟知しているエンジニアであれば1ヶ月程度でできる作業も、そうではないエンジニアであれば2ヶ月、3ヶ月と時間が掛かってしまうものだ。そのため一律にSE単価×工数で見積もるのはあまりにも安易だ。
 しかし実際の現場では、作業工数を膨らませることで業者側の提示額と見積上の総額が一致するよう調整することが多い。つまり会社の仕組みがどうであれ、最終的には需要と供給のバランスがどこかで作用している。むしろ古い体質のメーカー側が実情に対応しきれていない。

ログアウト画面は広告枠の設置場所

 このFC2もそうだけど、ログアウト画面のようなページは広告枠の設置場所として最適なのかも。アプリケーションを作る側の立場からすると、ログアウト画面のように何かの操作の完了を通知するページはメッセージを1行2行しか表示する必要がなく、無意味に空いた余白の処置に困る。このようなページに広告枠を設置することは、まさに余白の有効活用。しかもそれどころかログアウトした画面ということは、ユーザーが次にどこに行くか白紙の状態だと言える。そこにちょっと心クスグル広告があると、その広告をクリックする可能性はかなり高いのではないだろうか?ひょっとするとこれってインターネット広告の世界では常識???

Wordのビットマップとビットマップ(DIB)の違いは?

 Microsoft Office 2007のWordで画像を[形式を選択して貼り付け]すると、「ビットマップ」にしますか、それとも「ビットマップ(DIB)」にしますかと問われる。この違いがよくわからん。DIBはDevice Independent Bitmap、つまりデバイス独立ビットマップのことで、Windowsの標準的なビットマップ形式。ドットの色表現を羅列したビットマップに、Windows独自のインデックスカラー情報などを付加したデバイス間の独立性が高い画像形式だ。だけどこれはソフトウェア内部の表現形式であって、Wordに「ビットマップ」と「ビットマップ(DIB)」を問われる意味が分からない。どちらを選んでも同じ結果のように思える。ひょっとすると「ビットマップ」を選ぶと、何かのデバイス表現で色落ちやクラッシュでもするのだろうか?

Struts2のURLは.doじゃなくて.action

 Struts2ではURL内のアクション拡張子は〜.doじゃなくて、〜.action。うっかりしてると目的のアクションがNot Foundでまったく実行されず、ハマってしまう。この〜.actionはデフォルト値なので変更することも可能。その場合はstruts.propertiesファイルをCLASSPATHに用意して、
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
struts.action.extension=action
を変更する。

Yahoo!モバイルへのカテゴリー登録

 Yahoo!モバイルへのカテゴリー登録方法。Yahoo!モバイルのカテゴリー検索ページに行き、登録したいカテゴリーに移動して、[サイトの登録]ボタンを押す。その後の指示に従って、登録内容を入力する。掲載可否の審査が行われ、審査OKであれば掲載される。

 iモード用のYahoo!モバイル、カテゴリーページ(PC閲覧向け)

Yahoo!へのクローラ登録

 Yahoo!への検索エンジン・クローラ登録方法。まずYahoo!のアカウント(Yahoo! JAPAN ID)を取得する。Yahoo!にログインした上で、次の検索エンジン用ロボット、巡回先への推奨ページからホームページのURLを登録する。ログインが必要なので要注意!

 Yahoo!検索エンジン用ロボット、巡回先への推奨ページ(Yahoo!アカウントのログインが必要!)

ファビコンの作成方法

 ファビコン(favicon)を作成するには、ico形式のファイルを用意する。最近ではGIFやPNGにも対応したブラウザがある。適切な解像度と色数を使用する必要があり、ico形式では16x16、32x32ピクセルのものを4ビット16色、8ビット256色、24ビット1600万色のマルチアイコンとして格納する。GIF形式では16x16ピクセルで256色、PNG形式では16x16ピクセルで8ビット256色または24ビット1600万色とする。

 ico形式のフォーマット

 ico形式のファイルを作成するには、GIFなどの画像ファイルから変換するソフトを利用すると良い。フリーソフトも数多く存在する。たとえばtowofuさん@アイコン変換が有名。

日本の平均年収(平成18年度分)

 国税庁発表の平成18年度分 確定申告による日本の平均年収は、総所得金額が443,205億円、申告納税者数が8,233千人なので、538万円。
平均所得: 443,205億円 ÷ 8,233千人 = 538万円/人
 主要な地域別で計算すると、北海道は439万円、関東は703万円、関西は549万円、沖縄は546万円。

 また給与所得者の平均年収(平均給与額)は全国で435万円。地域別では北海道は381万円、関東は511万円、関西は438万円、沖縄は332万円。

PHPをコマンドラインから実行する

 PHP関数の挙動を簡易的に確認するために、コマンドライン上からPHPファイルを作成せず、直接 PHPコマンドを実行する方法。ズバリ、“-r”オプションを使えば良いだけ。
コマンドラインでPHPを実行: php -r "<実行するPHPコマンド>"
 Windowsのコマンドプロンプトではシングルクォート(')がエラーになるので、ダブルクォート(")にしなければいけないことに注意。逆にLinuxではダブルクォート(")ではエラーになるので、シングルクォート(')にしなければいけないっぽい。(ホントか?単なるシェルの問題やな)
 実行するPHPコマンドの部分は<?php 〜 ?>を除いたもの。もちろんセミコロン(;)も必要。なので例えば、
php -r "$a='test';echo $a;"
のような使い方。

SSL+Basic認証(基本認証)は安全か?

 特定ディレクトリへのアクセス制限を掛けるためにBasic認証(基本認証)を使う場合、そのままではユーザーID/パスワードが平文で流れるため、SSLでHTTP全体を暗号化することがある。このこと自体は技術的に安全で、通信経路上のデータは暗号化されている。しかし運用を間違えると、かえって危険かも知れない。

 たとえば非SSL(HTTPな通信)によるアクセスも許可している場合、誰かが非SSLでアクセスしてしまうとそこから情報が漏洩するかも知れない。ありがちなサーバー設定の現場では、まずはHTTPでの挙動確認、次にHTTPSの設定と挙動確認というように段階的にことを進めると思うので、HTTPでもアクセスできる設定がそのまま残っている場合が多いのではないだろうか?
 加えてアクセス制限を掛けたディレクトリ上でCGIを動かしている場合、非SSLでフルパスなURLのリンクがどこかに存在し、知らないうちに非SSLになっているケースもあると思う(←ブラウザが何らかの形で警告してくれるだろーけど)。オープンソースのWEBアプリを使っていると、案外とSSL<-->非SSLを行ったり来たりしているのではないだろうか?

 SSL+Basic認証そのものは決して悪い手段ではないと思うが、「SSL+Basic認証さえ使っていれば安全だ!」という考え方は危険だと思う。技術的なアプローチだけではなく、運用も含めた安全性を確認しなければいけない。と思う今日この頃・・・。

Basic認証(基本認証)の仕組み

 Basic認証(基本認証)はHTTP上で特定のディレクトリへのアクセスを制限、認証する仕組みだ。ネットワーク上にはパスワードが暗号化されないまま平文で送信されるため、簡易的な認証機能と位置づけられている。

 WEBブラウザなどからBasic認証で制限されたディレクトリにアクセスすると、HTTPサーバーからステータスコード401(Authorization Required)が返る。一般的なブラウザはこのステータスコードを受け、ユーザー名とパスワードを入力するダイアログを表示する。ブラウザは入力されたユーザー名とパスワードを次のようなヘッダ情報として付加し、再びリクエストを発行する。
Authorization: Basic <「ユーザー名:パスワード」をBase64でエンコードした文字列>
HTTPサーバーはこのヘッダ情報を認証し、正しければ指定のページを返す。
 一度 Basic認証をパスすると、一般的なブラウザはそれ以降のリクエストに最初からAuthorization情報を付加するので、何度もユーザー名とパスワードを入力する必要はない。

SEO対策の方法、URLの工夫

 SEO対策の方法として、URLもロボット型検索エンジンのキーワード対象となる。MovableTypeではタイトル文字にアルファベットが含まれている場合、標準的にはそれらのアルファベットを含んだURLを生成するのでSEO対策に有利である。
 またCGIなどにより動的にページを生成するサイトでは、index.php?id=123のようにパラメータでページを切り替える場合がある。このようなURLではクローラーの巡回が積極的ではないと言われている。(とは言え、クローラーが辿ることができればちゃんとインデックスされるようだ。) そのため、Apacheのmod_rewriteモジュールなどを利用して index123.htmlのようにURLを書き換えてしまうテクニックも利用される。最近ではサイトマップをクローラーに通知する方法もある。

PERは株価収益率のこと

 PER(Price Earnings Ratio)は株価収益率のことで、一株あたりの当期利益(EPS)に対する株価の割合を測る指標。
株価収益率(PER) = 株価 ÷ 一株あたりの当期利益(EPS)
 PBR(株価純資産倍率)が純資産額に対する株価の指標に対して、PER(株価収益率)は利益に対する株価の指標。そのため会社の成長率を表す指標といわれる。PERは単独の数値では判断が難しく、その会社の過去から現在、そして予測値のPERを比較することや、同業他社との比較で判断する必要がある。
 PERは株価が下がればPERも下がり、逆に株価が上がればPERも上がる。また当期利益が上がればPERを押し下げる要因となり、逆に当期利益が減ればPERを押し上げる要因となる。

EPSは一株当たりの利益のこと

 EPS(Earnings Per Share)は一株当たりの当期利益(当期純利益)のこと。
1株当たり当期利益(EPS) = 当期利益(当期純利益) ÷ 発行済み株式数

PBRは株価純資産倍率のこと

 PBR(Price Book-value Ratio)は株価純資産倍率のことで、一株あたりの純資産額(BPS)に対する株価の割合を測る指標。アメリカではP/Bと表記するのが一般的。
株価純資産倍率(PBR) = 株価 ÷ 一株あたりの純資産額(BPS)
 PBRが1.0のとき、一株あたりの純資産額と現在の株価が等しいことになり、市場が評価した価値(時価総額)と会計上の解散価値が等しいことを意味する。市場全体のPBRは理論上、1.0を上回る水準で形成されているらしいが、逆にPBRが1.0を下回ると割安の株価となり、お買い得な株、あるいは何らかの問題要因をはらんだ株であると考えられる。

BPSは一株当たりの純資産のこと

 BPS(Book-value Per Share)は株当たりの純資産のことで、その会社が解散した場合に株主に還元される資産。その株の解散価値ともいう。
1株株主資本(BPS) = 純資産 ÷ 発行済み株式数

日経平均株価とTOPIXとは

 日経平均株価は東証1部上場の主要225銘柄の平均株価。日経225ともいう。必要に応じて流動性の低い銘柄から高い銘柄への入れ替えが行われる。
 TOPIX(トピックス)は東証1部上場の全銘柄の時価総額について、基準日である1968年1月4日の時価総額を100として算出した指数。東証株価指数(Tokyo Stock Price Index)の略。新規上場や上場廃止、増減資などがあった場合には連続性維持のための修正が行われる。

東証の取引時間と呼び方

 東証の取引時間(立会時間)は9:00〜11:00までの前場(ぜんば)と、12:30〜15:00までの後場(ごば)。ただし年始発会日と年末納会日は午前のみの取引となる。土日祝日はお休み。12月31日と年始の3日間もお休み。大証は15:10まで。
 前場の開始時間帯は寄付き(よりつき)、終了時間帯は前引け(ぜんびけ)という。後場の開始時間帯は後場寄り(ごばより)、終了時間帯は大引け(おおびけ)という。寄付きと引けの間の時間帯はザラ場(ざらば)という。

HGほにゃなら創英角というフォント

 仕事上、お客さんと文書ファイルを受け渡しする手前、先方のPCにインストールされていないであろうフォントを使うのは極力避けたい。お客さんへはフォント埋め込みでPDF化すれば良いといっても、社内のフォント環境も足並みが揃わないので難あり。結局、MSゴシックとMS明朝しか使えないのか?と思いつつ、以前から気になっていた「HGほにゃなら」というフォントを調べてみた。これっていつの間にインストールされたのか?

 どうやら「HGほにゃなら」というフォントはOffice製品にバンドルされているフォントらしい。リコーが販売しているようだ。なかでも「HG創英角ゴシック」は創英企画というシブイ会社が開発したらしい。「HG創英角〜」は等倍フォント、「HGS創英角〜」は和文のみ等倍フォント、「HGP創英角〜」はプロポーショナルフォントという意味。これらのHGほにゃならフォントを使うと、比較的Windows標準な範囲でフォントの表現力を増やせそう。

IME2007の誤変換がひどい!

 仕事で使っているパソコンの入れ替え後しばらくして異変を感じた。どうもIMEの変換がオカシイ。誤変換が多すぎる。まさに退化している。OS自体は以前と同じWindows XP Professionalなので、この違いは明らか。どうやらバンドルされてきたOffice2007のIME2007がおかしいようだ。設定をいろいろ変えてみたけど改善する気配がない。そもそも誤変換なのでそんな設定で簡単に直るものではないのだが。
 Office2007もすっかり退化してしまったので、これはきっとこの製品バージョンの背景にある政治的な問題だと思い、IME2002を使うことにした。まったく最近のMicrosoftはどうしたものかと思っていると、マイクロソフトの元社長である古川享さんのブログで同じようにIME2007のお馬鹿ぶりを綴っている記事を見つけた。

 古川 享 ブログ: ℃トウのご変換、館無料

 あー、次はなんとか方向修正してくれると良いのだが・・・。

株式市場の種類

 日本の主な株式市場の種類。東京証券取引所。いわゆる東証。大企業向けの市場である東証1部と、中堅企業向けの市場である東証2部。関西を中心とした大阪証券取引所。いわゆる大証。こちらも1部と2部がある。そのほか、名古屋(1部と2部)・札幌・福岡に証券取引所がある。
 ベンチャー企業向けの市場として、東証のマザーズ、大証のヘラクレス、名証のセントレックス、JASDAQ証券取引所のジャスダックがある。

SQLインジェクションの原理。レコードを削除する

 SQLインジェクションの原理。入力された値を何かのテーブルから検索する場合、
SELECT * FROM items WHERE name='<商品名>';
のようなSQLだとすると、商品名に「'; DELETE FROM items WHERE 'a'='a」と入力されると
SELECT * FROM items WHERE name=''; DELETE FROM items WHERE 'a'='a';
となり、任意のテーブルのレコードすべてを削除できてしまう。テーブル名を知っておかなきゃいけないけど・・・要するに任意のSQLを実行できてしまうということ。

 入力値(ここでは商品名)のシングルクォート(')をエスケープしなければいけない。

SQLインジェクションの原理。認証をパスする

 SQLインジェクションの原理。入力されたユーザーIDとパスワードがusersテーブル内のレコードに合致するかどうかでユーザー認証する場合、
SELECT * FROM users WHERE id=<ユーザーID> AND password='<パスワード>';
のようなSQLだとすると、ユーザーIDに「1」、パスワードに「' OR 'a' = 'a」と入力されると
SELECT * FROM users WHERE id=1 AND password='' OR 'a' = 'a';
となり、パスワードを知らなくてもSQLが成立してしまう。

 入力値(ここではパスワード)のシングルクォート(')をエスケープしなければいけない。

Javaの可変長配列クラスはVectorかArrayListか?

 その昔、Javaの可変長配列クラスはVectorクラスだった。しかしJ2SEでArryaListクラスが登場、今後はVectorではなくArrayListを使いましょう、ということになった。何故???
 いまだによく分からんが、ハッキリしていることはVectorはスレッドセーフなのに対し、ArrayListはスレッドセーフではないということ。マルチスレッド環境での同期は自分で実装しなければいけない。それならVectorを使った方が良さそうな・・・。いやいや同期しないので、ArrayListの方が処理スピードが速い。しかも配列を拡張するとき、Vectorは2倍ずつ拡張するのに対し、ArrayListは1.5倍ずつ拡張する。あまり大した話しではない・・・。
 要するにVectorはスレッドセーフだと言っても、実際のマルチスレッド環境で同期が必要な場合はRead/WriteそのものをSyncするだけでは意味がなく、配列全体の一連の操作をSyncしなければいけないので、J2SEでよくよく考え直してみた結果、Vectorの存在価値が薄いよね、ってことかも?

SEO対策の方法、サイト内部のリンク

 SEO対策のもっとも基本的な方法の1つ、サイト内部のリンク。リンクはページとページ、サイトとサイトを結ぶ重要な役割があり、SEO対策のみならずWEBマーケティング上で重要な存在だ。ロボット型検索サイト(GoogleやYahoo!など)のクローラーは何らかの基点からページのHTML構造を解釈し、リンクされているページのインデックス(検索サイトへの登録)を順に進めていく。このクローラーの巡回をスムーズに行わせるため、サイト内の相互リンクやショートカットをうまく設けるべき。もちろん最近ではサイトマップをクローラーに通知する方法も有効だが、これはどちらかと言うとCGIなどによる動的ページでの利用に適している。
 またリンクの文字(Aタグで囲まれた文字)はリンク先のページに対するキーワードとして重要視される。つまりサイト内部の相互リンクと、そのときのリンク文字に「こちら」のような文言を使わず、キーワードにしたい文字をしっかり書くことが重要だ。HTMLページの文章を考えるときに十分意識する必要がある。

Powered by FC2 Blog

FC2Ad

FC2ブログ 紹介予定派遣FC2管理用
  1. 無料アクセス解析

Copyright © 2008 タンクローリー猫田 All Rights Reserved.