IT業界は3Kに7K

 IT業界は「きつい、帰れない、給料が安い」のニュー3K。学生にとても不人気らしい。これに加えて「規則が厳しい、休暇がとれない、化粧がのらない、結婚できない」の7K。すばらしい!あまりにも的確だ!しかしまぁー、こんな3Kや7Kを右から左へ受け流しながらIT業界を漂っている私はかなり“変人”だと思う。それどころかこれは願ってもないチャンスだと思っている。
 実際、今の世の中を見渡してみると、あらゆる物にソフトウェアが関与している。ソフトウェアは物理的なカタチとして現れないので日常生活の中で気が付かないが、確実に人間社会を取り囲んでいる。その依存度がより大きくなり、より一般の人々の間で身近に使われるようになると、IT技術者の希少性が高まり、3Kや7Kが一機に逆転するに違いない。そこにチャンスがある。まだまだIT業界そのものが古い体質なので表面には現れていないが、もう一部の技術者は密かにその恩恵を受け始めているのではないだろうか?そんな技術者は3Kや7Kを右から左へ受け流している・・・。

外部設計書か基本設計書か?それともソフトウェア設計書か?

 ウォーターフォール・モデルで言うところの外部設計で記述する仕様書は、人によって「外部設計書」と言ったり、「基本設計書」と言ったりする。若干のニュアンスの違いはあるが、基本的に同じ目的のドキュメント。Googleでそれぞれどれくらいヒットするのか調べてみた。
「外部設計書」・・・約8,300件
「基本設計書」・・・約20,000件
「ソフトウェア設計書」・・・約700件
「外部仕様書」・・・約2,800件
「基本仕様書」・・・約3,800件
「ソフトウェア仕様書」・・・約2,800件
 「基本設計書」が断トツでヒットした。続いて「外部設計書」。

 多くのソフトウェア開発が外部設計⇒内部設計⇒実装の流れに従っていた時代は「外部設計書」が主流だったかも知れないが、最近では設計全般⇒プログラム設計+実装+単体テストという開発フェーズの括りがほとんどだと思われるので、「基本設計書」と設計全般を思わせるコトバがしっくり来るのかも知れない。

GPLライセンスの定義

 GPLライセンスはフリーソフトウェアなライセンスと考えられているが、具体的なところを把握しておく必要がある。まずGPLライセンスのソフトウェアを入手して、実行することは自由だ。また改変することも許され、それ故にソースコードも入手できる。さらに複製物の再頒布も認められている。ただここからが要注意。コピーレフトという考え方が組み込まれていて、再頒布物にもGPLライセンスが適用される。つまり再頒布物のソースコードも入手できる状況におかなければならない。
 ではGPLライセンスなオープンソース・ソフトウェアの一部に改変を加えたものを実行し、その上で実現される機能をサービスとして提供している場合は、改変したソースコードを公開しなければならないか?どうやらコピーレフトの考え方としては、出力物に対して適用しているのではなく、そのソフトウェアそのものの再頒布を指している。つまりGPLライセンスのソフトウェアを利用・改変したソフトウェアで実現しているサービスだからといって、そのソースコードを公開しなければならない訳ではない。

バナーサイズの国際規格

 バナーサイズには国際標準があるようだ。IAB(Interactive Advertising Bureau)という機関がバナーサイズのガイドラインを定めていて、レクタングル&ポップアップ、バナー&ボタン、スカイスクレーパーとカテゴリー分けされている。
300 x 250: Medium Rectangle
250 x 250: Square Pop-Up
240 x 400: Vertical Rectangle
336 x 280: Large Rectangle
180 x 150: Rectangle
300 x 100: 3:1 Rectangle
720 x 300: Pop-Under

468 x 60: Full Banner
234 x 60: Half Banner
120 x 90: Button 1
120 x 60: Button 2
88 x 31: Micro Bar
120 x 240: Vertical Banner
125 x 125: Square Button
728 x 90: Leaderboard

160 x 600: Wide Skyscraper
120 x 600: Skyscraper
300 x 600: Half Page Ad
 IAB(Interactive Advertising Bureau)

日本語のWHERE条件がヒットしない

 Tomcat5.5 + MySQL5.0の環境でMySQL Connector/J(JDBCドライバー)越しに日本語のWHERE条件を発行したところ、これがなんと全くヒットしない。日本語ではなくアルファベットなら問題ない。どうやら文字コードが一致していないみたいだ。
 ログを見てみると SET NAMES utf8 は実行しているようだが、この場合はこれだけではダメみたい。MySQL Connector/JのcharacterEncodingを明示的に指定してみた。(省略すると"autodetect"となるようだが、それではうまく行かないようだ。)
<Resource name="jdbc/ClassioleDB" auth="Container" type="javax.sql.DataSource"
username="xxx" password="xxx" driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/xxx?autoReconnect=true&noDatetimeStringSync=true&characterEncoding=UTF8" maxActive="8" maxIdle="4"/>
 Connector/JのDriver/Datasourceクラス名、URL シンタックス、および構成プロパティ

カンプとかモックとかドラフトとか

 カンプとかモックとかドラフトとか、どれもよく似た言葉。カンプは広告や印刷の世界で制作物のデザインやレイアウトも含めた全体像を示した見本のこと。モックはモックアップ・モデルの略で、外観を実物そのものに似せた模型のこと。ドラフトは文書や規約などの草案のこと。最近はどれもソフトウェア開発のなかで登場する言葉。

MySQLにクエリログを出力する

 Windows版のMySQLを何も深く考えずにインストールすると、そのままではログが出力されない。ログを出力するためにはMySQLデーモンを起動するときにオプションを与えれば良い。
バイナリーログ: --log-bin
エラーログ: --log-error
一般クエリーログ: --log
スロークエリーログ: --log-slow-queries
 もっと簡単に出力するには、MySQL Administratorツールの[Startup Variables]で、[Log files]タブの[Activate Logging]にあるチェックボックスをチェックすると良い。

Struts2でGETリクエストの日本語を正しく取得するには?

 Tomcat5.5 + Struts2の環境でJavaScriptからJSONPなGETリクエストを送信したところ、ちゃんとencodeURI()でURIエンコーディングしている日本語なのに、ActionSupportクラスが受け取るGETリクエストのパラメータが文字化けしてしまう。struts.propertiesにstruts.i18n.encoding = UTF-8のような記述をしたり(←これはデフォルト設定と同じなので意味がないと思いつつ)してみたのだが、やはり文字化けする。
 どうやらTomcat5.x以降では、GETリクエストのパラメータに対してsetCharacterEncodingメソッドのようなサーブレットフィルタ処理がデフォルトでは適用されないらしい。それを有効にするため、 useBodyEncodingForURI="true"やURIEncoding="UTF-8"といった属性をserver.xmlのConnector要素に追加する必要がある。Struts2のデフォルトの文字エンコーディングはちょうどUTF-8になっているので、これで文字化けは改善。SJISとかだともうひと手間いるのかな?

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" />

FirebugでCSSの微調整

 CSSを微調整するとき、FirefoxのプラグインであるFirebugを使うのが便利。Inspectで目的のタグを選択し、右側のStyleタブにあるCSS値を編集すると、その属性に従ってブラウザの表示が更新される。新しく属性を足すこともできるし、消すこともできる。さらにLayoutタブにはオフセットやマージン、ボーダー、パディングといったCSS値で直接与えるには少し慣れが必要な属性も簡易的なGUIで確認、編集できる。ここでCSS値が決まれば、それを実際のCSSファイルなどに反映すれば一発で調整完了。

裏紙をメモ用紙としてお使いください

 『裏紙をメモ用紙としてお使いください』。永遠に溜まり続ける裏紙の山。自分が生みだした裏紙を他人に処理させる、見事な責任転嫁。この裏紙の山はどこまで溜まり続けるのだろうか?彼らにはコスト意識が欠如しているように思われる。

カンプとは見本のこと

 WEBデザイナーの人と話していると、「カンプ」という言葉が出てくる。要するにドラフト(下書き)のようなことを言っているのだが、調べてみると「comprehensive layout」、つまり「包括的な位置決め」という英語の略のようだ。広告や印刷の世界において、制作物のデザインやレイアウトも含めた全体像を示す見本のことを指すようだ。

Firebugの代用をIEで

 Firebugはすばらしいツールだが、残念ながらFirefoxのプラグインのみで提供されている。しかもIEに比べるとFirefoxのシェアが少ないのは更に残念。開発者としてはIEでの入念な動作確認を余儀なくされる。JavaScriptやDOM、CSSはブラウザによる挙動の違いがもろちょんに発生してしまうので、開発者としてはIEでもFirebugと同等のツールが欲しくなってしまう。

 なかなかFirebugのように完成度の高いツールは見当たらないのだが、IE版のFirebugと称されるツールとしてDebugBarがある。商用利用ではライセンス料が必要だが、個人利用ではフリーだ。

 DebugBar - IE extension for web developer

 Ajax通信を含めた発行リクエストのヘッダ情報をトレースするなら、ieHTTPHeadersという選択肢もある。

 ieHTTPHeaders - Blunck Software

 またDOM構造やCSSを解析するツールとしては、MicrosoftからInternet Explorer Developer Toolbarが提供されている。

 Internet Explorer Developer Toolbar

WEB開発のバグ調査はFirebugで

 WEB開発におけるバグの調査は最近、Firebugに頼ることが多くなってきた。仕事の範囲がAjaxやDOM操作を多用したリッチクライアントUIや、CSSを調整してデザイン的な手直しまでを担当するようになってきたからだ。こうなってくるとサーバーサイドのログとにらめっこするよりも、クライアントサイドで発生している問題を追跡する方が多くなってしまう。そんなときにFirebugの機能はかなり強力だ。
 Consoleタブでは発生しているエラーを確認、HTMLタブではHTML構造とCSS定義を解析、NetタブではAjax通信の内容を確認する。ツールとしてのユーザーインターフェースもなかなか洗練されている。今までにFirebugでどれだけのバグを退治できたことか。

 Firebug - Web Development Evolved

ぐるぐるローディング中のアイコン集

 Ajax通信中などに表示するローディング中アイコンの素材集。3種類のサイズと任意のフォアグランドカラー、バックグランドカラーを指定でき、アニメーションGIFを生成してくれるサイト。いろいろなデザインを取り揃えてくれているけど、よくある基本形だけでも十分イケテル。

 Load Info - gif generator

無駄なサーバーで部屋が暑い。

 ソフトウェア業界の人間はどうして気軽にサーバーを増やしたがるのだろうか?24時間365日、ほとんど意味もなく電源が入りっぱなしのサーバーがある。当然、電気代は掛かるし、ファンの排熱で部屋の温度は上昇、そして冷房するという悪循環。本当にそのサーバーは必要なのだろうか?彼らにはコスト意識が欠如しているように思われる。

Ruby on Railsの短所を探る

 私がプロジェクトリーダー(兼、コーディングから何から何まで)を勤めるプロジェクトで2回ほどRuby on Railsを組み入れてみたが、これはなかなか素晴らしいフレームワークだ。Ruby自身の言語仕様の心地良さもさることながら、WEBアプリケーション開発に必要なエッセンスを絶妙なゆるさ加減で用意しつつ、かと言ってPHPのように構造化プログラミングな考え方ではない。JavaやPHPでは困難だったアジャイル開発が本当の意味で実現できるフレームワークだと思う。しかしそんなベタ褒めのRuby on Railsにあえて短所を挙げるとしたら、どのような点だろうか?
まず技術者が少ない。技術情報も少ない。場合によっては自分でパッチを作る必要もある。
 ――自分で挙げておきながらなんだが、これを短所とするのは間違い。Javaだって最初は技術者が少なく、技術情報も少なく、企業は導入を躊躇する時代があった。Railsの実績を重ねるにつれて自然と改善される問題だろう。自分でパッチを作る必要があるというのも、まだまだ成長段階であるということに過ぎない。では何が短所か?
エンタープライズ向けのAPPサーバーがまだまだ出揃っていない。
Railsフレームワークは単純なCGIとしても動かすこともできるし、Mongrelを使って高速に動作させることもできる。ただここに落とし穴が・・・。Rails2.0はスレッドセーフではないので、どうやらMongrelはJavaサーブレットのように同時に複数のリクエストを処理することができないようだ。つまり1つのリクエスト処理に長い時間を掛けてしまうと、その処理が終了するまで別のリクエストが待たされてしまう。「そもそも1つのリクエストに長い時間が掛かってしまうのは設計が間違っているのだ!」と言う人もいるが、トラフィックが大きくなってくるとそうは言ってられず、エンタープライズ向けのWEBアプリケーションとしてはかなり致命的な問題だと思う。これを回避するためにMongrel Clusterを組み合わせて複数のMongrelで待ち受けておくのだが、現状ではまだまだ信頼性やスケーラビリティに力不足な印象を受ける。
 とは言え、この問題もSun MicrosystemsがJRubyに本格参戦しているので、将来的にはRuby/Ruby on Railsが備える生産性の高さと、Javaが開拓してきたエンタープライズ向けの信頼性やスケラービリティを兼ね備えた開発スキームが手に入るかも知れない。

Excelでセルの文字列を結合する方法

 Excelでセルとセルの文字列を結合して新しいセルに設定する方法。2つの方法があって、ひとつは演算子の&を使う方法。
セルC2にて・・・ =D2&H2
もうひとつの方法は関数CONCATENATEを使う。。
セル3にて・・・ =CONCATENATE(D3,H2)
このままでは計算式のままなので、形式を指定したコピー&ペーストで値として貼り付ける。

コピーライトマークをHTMLで表現する

 コピーライトマーク(©)をHTMLで表現するには、
&copy;
と書く。
Copyright (c) 2008 タンクローリー猫田 All Rights Reserved.
のように(c)と書くよりも、
Copyright © 2008 タンクローリー猫田 All Rights Reserved.
の方がちょっとカッコイイー。

一般社員を執行役員へ大抜擢

 有能な社員がいた場合、その社員を執行役員などの経営に近いポジションに大抜擢することがあるらしい。これは優秀な人材ほど水面下で次なるスキルアップや報酬アップを考えているため、社内の小さな出来事をキッカケに他社へ流出してしまう可能性が高いから、それをけん制する手段のひとつとして、特に小規模な会社の経営者は一般社員を執行役員に大抜擢することがある。
 執行役員に抜擢された社員にとっては、一定の報酬アップとモチベーション向上がもたらされる。しかしその引きかえに、役員として会社に対するシバリが強いられる。安易に転職を考えることが難しくなる。経営者にとっては、組織変更という大義名分さえあれば社員一人の報酬を突出させることはそれほど難しい話ではない。その上、有能な社員の流出を防ぎ、その社員の能力を経営にプラス作用させることができるということだ。

フラットな組織構成は組織にあらず

 以前に勤めていた会社ではフラットな組織構成をひとつのアピールポイントに掲げていた。少数精鋭ですべての社員がある種の経営者的な意識レベルで営業・生産活動に取り組もうとする考えが根底にある。しかし新卒社員の採用や社員間のスキル、モチベーションの差が大きくなるにつれて、フラットな組織構成は成立しなくなる。優秀な社員に軸足を置けば、社員の淘汰が進み、脱落する者も現れる。逆に若い社員に軸足を置けば、会社の成長は鈍化する。この時点でフラットな組織構成は成り立たない。階層的な組織体系を形成し、社員を育てる組織づくりへと方針の切り替えが必要だ。

システム開発もハコモノ行政

 行政機関は往々にしてハコモノを作る。行政が行うシステム開発のばらまき投資も同じくハコモノ行政だ。ITの知識を持たない役人がコンテンツのないサイトを立ち上げ、それっぽいWeb2.0的な要素を組み込んでおけば利用者が集まると思い込んでいる。まさにハコモノを用意するだけ。そんな意味のないIT投資を行うだけなのにIT推進課といった肩書をぶら下げている。ハコモノの作成はITベンチャーやITクリエーターに任せ、行政はその立場を利用したコンテンツの作成に日々の労力を注ぐべきだと思う。行政は多くのコンテンツを持っているのだから。

Office2007のUIはひど過ぎる!

 マイクロソフトのOffice2007はユーザーインターフェースが一新された。“リボン”というインターフェースが採用されている。私はOffice製品で仕事上の仕様書などを10年以上、書いてきた。ExcelやPowerPointはそうでもないが、ことWordに関してはスタイルやセクションなどの機能をかなり使い込んだユーザーだと思う。そしてバージョンアップのたびに不安定な動作が改善され、機能的な改善も図られ、Office2003はかなり満足のいくツールだと評価していた。ところがこのOffice2007は最悪!まったく自分のやりたい操作ができない。新しいUIに慣れるまでの辛抱と、この半年間、ずっと批評を控えてきたが、いつまで経ってもこの新しいUIの良さが分からない。それどころか目的の操作方法を探すのに無駄な時間を費やしてしまう。最悪だ!誰かどうにかしてくれ!

 とは言え、「だからマイクロソフトはあーだ、こーだ」と偉そうに批判しても仕方がない・・・。それよりもここには機能的に十分に成熟したアプリケーションと、それらを材料に利益を追求しなければいけない企業の苦しさがあるのも知れない。従来のマーケティング手法ではバージョンアップのたびに大きな目玉機能が必要なのだろうが、成熟したアプリケーションで更にビジネスを拡大するためには、ビジネスモデルの発想転換が必要なのかも知れない。私自身も開発の現場で同じような営業プレッシャーを掛けられたことを思い出す。そんな機能を一生懸命つくったところで誰が喜ぶの?と・・・。

 しかしまぁーそんなこんなで、Googleはマイクロソフトにとって本当に脅威だと思う。

Web2.0を掲げるソフトウェア会社

 Web2.0を掲げているシステム会社ほど信用のならないものはない。その会社はリッチなユーザー体験を実現するソフトウェア技術を提供するのだろうか?それともユーザー参加型のサービスを開発するのだろうか?あるいはロングテイルを実現するサービス手法を提供するのだろうか?そもそもそのシステム会社自身、Web2.0的なサービスをどれだけ提供し、はたしてそのサービスは成功しているのだろうか?Tim O'Reilly氏の論文「What is Web 2.0」を読み、妄想だけでWeb2.0を掲げた営業展開をしているとしたら、まったく信用ならない会社だ。

ページビューの誤差が9倍!

 サイトのPV数(ページビュー数)はインターネット・メディアとしての強さを判断する基準となり、広告単価の判断材料としても利用される。しかしこの月間PV数の誤差の大きさに驚いてしまう。お客さんが提示する月間PV数、サーバー構築者が口にする月間PV数、アプリケーション開発者が認識する月間PV数、三者三様だ。

 実際に私が運営するサイトで確認してみた。このサイトはよくある観光情報サイトで、Yahoo!やGoogleなどのクローラにインデックスされている。RSSフィードを配信し、代表的なRSS収集サイトにも登録している。ケータイ向けのページも存在する。このサイトのある月の月間PV数をアクセス解析ソフトでカウントしてみると1900PVだった。笑かすほどの少なさ。一方、Webalizerが示す月間PV数は1万7000PV。その差は実に9倍。ほぼ1桁違う。
 しかしこれはページビューのカウント方法が違うので当然だ。アクセス解析ソフトではJavaScript
とIMGタグによるカウントを行っており、クローラによるアクセスは集計から除外されている。またRSSフィードやrobot.txtなどのHTMLページ以外のアクセスも集計から除外されている。一方、Webalizerはフィルター条件に手を加えていない、なんでもかんでもページビューとカウントしてしまう設定。その結果、10倍近いPV数の差が発生してしまった。

 WEB制作会社の人やソフトウェア・エンジニアがアクセス解析を設定したから確かな数字だと思われるかも知れないが、そのような現場で仕事をしている立場から思うに非常に怪しい。彼らの知識や考え方ひとつで味付けが変わってくる。「私のサイトは月間30万PVあります!すごい!」といっても、実際にはその10分の1にも満たないかも知れない。

政治と経営、メッセージを打ち出すこと

 政治の世界では、経済に対して明確なメッセージを打ち出さなければいけないと誰かが言っていた。企業の経営者もまったく同じ。経営者が社員に対して明確なメッセージを打ち出さなければ、社員のモチベーションは下がり、日常の業務をただこなすだけの人材で満たされ、優秀な人材は次なる活躍の場を探し始める。企業の成長はここで停滞する。

Struts2でLog4jのログが大量出現

 Log4jで自分のソースコード以外のログが大量に出力されることを抑制するために、log4j.logger.〜=ERRORのように特定のパッケージに対してログレベルを設定する。Jakarta-commonsやStruts1.xを使っている限りは、
log4j.logger.org.apache=ERROR
とでもしておくと問題なかったが、Struts2ではcom.opensymphonyも必要みたい。
log4j.logger.com.opensymphony=ERROR
これでとりあえず大量のログ出力がなくなった。

JSTLのforEachタグの説明はちょっと不親切

 JSTL(おそらく1.1からだと思う)のforEachタグにはvarStatusという属性があるが、タグライブラリのリファレンスマニュアルがちょっと不親切。このvarStatusで与えたオブジェクトにはループの回数を示すindexや初回のループを示すfirstなどのいくつかの属性値を持つのだが、リファレンスマニュアルには「javax.servlet.jsp.jstl.core.LoopTagStatusクラスのオブジェクトに割り当てられる」のような説明しかない。なのでいちいち別のAPIリファレンスを調べなきゃいけない。

 LoopTagStatusクラスのAPIリファレンス 
index: 0から始まるループ回数
count: 1から始まるループ回数
current: カレントのオブジェクト
first: ループ開始フラグかどうか
last: ループ終了フラグかどうか
begin: begin属性で指定された値
end: end属性で指定された値
step: step属性で指定された値

getColumnTypeNameの戻り値じゃイマイチわからん

 JavaのResultSetMetaDataインターフェースでgetColumnTypeNameメソッドは結果セットのカラム型を文字列で返してくれる。しかしgetColumnTypeメソッドが返してくれる値ほど詳しい型を返してくれない。MySQLとの組み合わせだからか?ん〜イマイチよくわからん。java.sql.Typesクラスのソースコードを見て、フィールド名とその値を確認してみないことには。
BIT = -7
TINYINT = -6
SMALLINT = 5
INTEGER = 4
BIGINT = -5
FLOAT = 6
REAL = 7
DOUBLE = 8
NUMERIC = 2
DECIMAL = 3
CHAR = 1
VARCHAR = 12
LONGVARCHAR = -1
DATE = 91
TIME = 92
TIMESTAMP = 93
BINARY = -2
VARBINARY = -3
LONGVARBINARY = -4
NULL = 0
OTHER = 1111
JAVA_OBJECT = 2000
DISTINCT = 2001
STRUCT = 2002
ARRAY = 2003
BLOB = 2004
CLOB = 2005
REF = 2006
DATALINK = 70
BOOLEAN = 16

Powered by FC2 Blog

FC2Ad

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

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