WEBエンジニア社長のブログ -15ページ目

1904年1月2日 エクセルに何があったのか

Microsoft Office の Excelを開いて確認してみて欲しい。


[ツール]メニュー-[オプション]を開き、[計算方法]タブを開く。
すると[1904年から計算する]というチェックボックスがある。

さらにヘルプを見ると「日付の開始日を1904年1月2日に変更します」とある。

実はこのオプションはとても重要なのである。


WEBエンジニア社長のブログ-Excel 1904年オプション


こんなことがあった。

エクセルのファイルAを開いてある1行をコピーし、エクセルのファイルBへ貼り付けた。
すると、

2009年12月20日 だった値が 2005年12月19日 になってしまった。
2010年2月10日 だった値が 2006年2月9日 になってしまった。

4年と1日ずつずれるのである。


ファイルAはMac OSがインストールされたPCで作成されたもので、
コピー&貼り付け作業はWindowsで行っているという違いがあった。


さらによく調べるとファイルAの先のオプションはチェックが入っていて、ファイルBにはチェックが入っていなかった。


どうやらMac版のエクセルではチェックが入っているらしい。

そしてさらに調べると、エクセルはWindows版よりもMac版の方が先で、[1904年から計算する]というオプションはその互換性を保つためのものだという。



さて、1904年1月2日 に何があったのか。


実は何もない。


うるう年の計算は意外とややこしい。
だから、プログラミングの手間を省き、プログラムが消費するメモリを節約するためらしい。
1904年はうるう年。1904年1月2日から12月31日まで365日になるからというのが答え。



さて、先ほどのファイルAからファイルBへどうやってコピーするには、
一度ファイルAでコピーした日付の列をメモ帳に貼り付ける。
次にメモ帳でコピーしてファイルBに貼り付けることで解決できる。


鳩山政権の郵政改革とグーグル中国本土撤退の裏にあるもの

鳩山政権の郵政改革法案


今国会に提出する「郵政改革法案」の概要が明らかになった。

  • 政府出資の親会社が株式の3分の1超を保有。
  • ゆうちょ銀行の預け入れ限度額をこれまでの2倍の2000万円に。
  • かんぽ生命の保障限度額をこれまでの2.5倍の2500万円に。

つまり、政府が郵政事業を子会社化し、富裕層を取り込めるようにするわけだ。
政府保証をつけて富裕層を保護する結果になる。
利用者としては、政府の保証付きだから、ゆうちょ銀行とかんぽ生命は使わない手はない。
まずはじめに検討すべき金融商品となるだろう。


それだけではない。

日本郵政グループ内の取引で生じる500億円程度の消費税も免除する。

法律でコストを下げるというのである。
それもこれも、「全国一律サービスを提供するための資金を得るため」だというが、本当にそれだけであろうか。


小泉元首相が衆議院を解散して国民の信を得て民営化を進めたその前でも、十分に全国一律サービスが提供できていたはずだ。
今度やろうとしているのは、それよりももっと有利な条件で市場で立ち振る舞えるようにすることである。


この大きな問題点は、創意工夫と努力でコストを下げ、顧客創造により利益をあげる必要のない組織が巨大化することである。

長い目で見れば、顧客の利益に反する可能性があることである。



グーグルの中国本土撤退

情報統制ありきの中国政府と決裂した結果だが、一企業が中国の考えを変えさせることなどできなかった、ということである。

私は、グーグルが中国に進出したときからその行動に疑問があった。
情報を整理しようという企業が、整理された情報しか公にしない国でできることがあるのか、と。
グーグルがやろうとしていることを中国政府は既に実現しているのである。


グーグルと中国政府との違いはなんだろう。


探してみたが、強いて言えば情報統制の強度だろうか。
どちらもそれぞれの判断で情報を出す、出さないを決め、実行できる
中国政府は社会秩序維持のため、不適切と認めたサイトへアクセスできないようにする。
グーグルはネット社会秩序維持のため、不適切と認めたサイトを検索エンジンのインデックスから削除することができる。削除しなくても検索結果のずっと後ろの方へ追いやることができる。


官 vs 民 の構図
やることは同じだがどちらが主導権を持ってやるかの戦い。


先の郵政改革と同じだ。

日本政府は民でもできる事業を、自己に有利に働くように法を変え、主導権を握ろうとする。
大きな政府へとハンドルを切り始めている。


ただ、中国は統制から自由と責任へ緩やかに移行していくだろう。
それが中国の繁栄をサポートすると考えるならば、日本にも適用されないはずはない。
中国だって一人っ子政策により高齢化は必至である。



予断だが、日本では、自由が前提のネットへの規制と監視が強化され続けている。
自由から統制へ向かっているわけだ。
中国は統制から自由へと向かっているだけであって、どこかで出会うことになるだろう。






ツイッター スパム 140 King of Pop

ツイッターで、ダイレクトメッセージが届いた。


Hey, I just added you to my band in 140 King of Pop. It is a tribute game to Michael Jackson. You should accept my invitation! :) Click here: http://www.140kingofpop.com/?platform=twitter&refuid


しかも、このメールの送信者を確認すると日本人。

日本人に英語でダイレクトメッセージを送ることは、普通ないだろう。


それに、「Hey」なんてまた気安い。

勝手に140 King of Popなんてバンドに入れられて。。

マイケルジャクソンに捧げるゲームか何かしらないけど、最後の「You should accept」なんて、絶対に怪しい。


最後についてあるリンクをクリックしない方がよいだろう。


これは、以前書いたブログ「ツイッター ダイレクトメッセージを利用したツイッタースパム 」とまったく同じ手口のようだ。

よく読んだらほとんど同じメッセージだ。明らかに同一人物の仕業だ。


時間の無駄遣い

THE MOVIE NEW TYPE HERE!

YOU CAN BE MY HERO as well


仕事に疲れたWEBエンジニア、または社長だけご覧ください。それ以外の方はご遠慮ください。きっと、もっと疲れますから。













Facebook と TDR の共通点は?

米国にて、3月の第2週、訪問者数が一番多かったWEBサイトは...

Facebook だったそう。

(米ヒットワイズ発表)


これまで首位の米グーグルをついに追い抜いた。

「検索サイト=ポータル」という方程式が崩れつつあるのかもしれない。


検索サイトがネットのポータル(入り口)でなければならないということは、当然ない。

これまでは、ネットに何があるのか、探し物がどこにあるのかわからなかったから、検索サイトがその手助けをしてきた。

だから、必然的に検索サイトがネットのポータルという役割も持つことになっていた。


だが、ネットがある程度整理され、また、分散していた情報が集約され、いくつかの大きなサイトで用が足りるようになってしまったら検索サイトの存在感は薄れてしまうだろう。



次は、日本。

顧客満足度ランキングの1位は...

東京ディズニーリゾート(TDR)。

(サービス産業生産性協議会発表。小売・サービスなど29業種291社が対象の調査)


2位以降に低価格が売りの企業が続いているのを見れば、TDRが別格だと言える。

それなりにコストを払うことになるんだけど、それを超えて満足させているというのは、多くの企業が目指したいと思うんじゃないでしょうか。

それはつまり、とても高い付加価値を創出している、ということだから。



さて、Facebook と TDR の共通点は何だろうか?


1つは「場」である。

Facebook は人を知り、つながる場。

TDR は夢のような体験ができる場。

どちらも、物やサービス、情報自体の価値が高いわけではない。お客の積極的な行動を伴って価値が生まれる「場」であろう。

TDRは「そこに居るだけで幸せ」という人は少なくない。


そのほかの共通点は、えーと、それだけかな。


任せることのできない管理職、結局時間があるから

権限を与えたら、それに対し全責任を持たせるのと同時に、信頼して任せることが大切だ。

なぜって、まず何よりやる気になるじゃないですか。


「後はお前に任せた、お前が決めろ」


と言われたら、

俄然やる気になる。自分のため、組織のため、最良の結果を出そうと最善を尽くす。

後で、良かった点、悪かった点を反省し、次につなげることで成長する。

重圧を乗り越えた経験が自信につながる。


それだけじゃない。

任せた方も仕事量が減り、別の領域に進出できる。

周囲の人たちも、上へ引っ張られる。



しかし、しかしである。


「任せた」と言いながら、意思決定が自分の意向に沿わないと認めない。

「そんなのダメだ。こうしろ。」と指示する(アドバイスじゃなく)。

出来上がったものを手直ししてしまう。

他の人にやらせてしまう。

「俺がやる」と言い出す。

...無責任な行動です。


いったん任せたんなら、要件を満たしている限り、任せとおすのが人としての筋でしょう。



結局、任せられない人が少なくない。

これが続けば、やる気は失せ、成長は見込めず、自分は「忙しい、忙しい」と言い、次の一手が後手に回る。



スカイマークの機長(派遣)が風邪のため声が出せないCAの交代を求めたら、社長と会長が出てきて機長の方を交代させた。

社長と会長は暇なのかな?

機長の権限が明示されているんだから、任せるべきである。


機長は事故が発生したら、誘導するときに大声が出せないと安全が確保できないという理由でCAの交代を求めた。

特に、パイロットは、万が一のとき、自分だけが助かるという策はない。乗員も乗客も互いに命を委ねている側面もある。地上にいる人たちとは状況が違う。

なおさら、権限を尊重すべきだ。



権限を与える時に、もう1つ必要なのはチェック機能です。

要件(目標)を決めて、チェック(測定)する仕組みを持つことです。


Oracle SQL Serverのsp_helpみたいの

Oracleでは、SQL Serverのsp_helpのような便利なプロシージャがないので(作ればいいんでしょうが)、毎回これを使ってます。


SQL*Plusを使います。

USER_TABLES を使ってますから、調べたいテーブルの所有者のアカウントでログインする必要があります。

テーブル名」の部分を調べたいテーブル名に置き換えて使います。




--テーブルスペースを確認
select table_name, tablespace_name from user_tables where table_name='テーブル名';


--テーブルの列名、データ型などを確認

desc テーブル名


--インデックスを確認

col COLUMN_NAME for a40
select i.index_name, ic.column_name, i.uniqueness from user_indexes i, user_ind_columns ic where i.index_name=ic.index_name and i.table_name='テーブル名';


--制約を確認

select c.constraint_name, c.constraint_type, cc.position, cc.column_name,c.search_condition from user_constraints c, user_cons_columns cc where c.table_name=cc.table_name and c.constraint_name=cc.constraint_name and c.table_name='テーブル名';


ドラッカーよりも高校野球の女子マネージャーがうんちゃらという本

昨日、ドラッカーの著書の翻訳者として著名な、上田惇生氏のセミナーに参加してきました。


ドラッカーの考えをまとめると次の3つに集約されるということです。
・経営論
・社会論
・プロフェッサー論


なるほど。


さらに、企業は利益追求だけではダメだし、簡単に人を首にしないように利益がだせるようじゃないとダメだし、そこで働く人が幸せにならないとダメだという。
「なすべきこと」ではなく「なされるべきこと」をして社会に貢献する、企業が唯一社会の発展に貢献しているという。




それよりも、一番盛り上がっていたのが、


「どの本が一番お勧めですか?」という質問に


高校野球の女子マネージャーがドラッカーをうんちゃらという本


と答えたことに上田氏の凄さを見せ付けられた。



とてもいい、


本当に良かった。


本を読んで泣くことはほとんどないのに泣けた、


良かったなぁ。

誰かにいい本だよ、読んでみて、と言いたいのだけど、この本は手放したくないんだよなぁ。


手元において置きたい本なんだ。



と大絶賛。さっそくアマゾンで注文しました。


楽しみ。

イーモバイル体験レポート JR東海道線 横浜-東京

時速80Kmほどで快走する東海道線。
途切れることもなく、難なく使えます。


途中にある、鶴見川や多摩川といった幅の広い川の上の鉄橋を走っているときは、
少し不安定になることがありますが、以前よりはよくなったような気がします。

あと、品川の電車車庫を通り過ぎるときも電波が弱いようですね。


ASP ストアドプロシージャを実行し、結果をcsvでダウンロード

何とも欲張りなタイトルになってしまった。
ASP から SQL Server のストアドプロシージャを実行して、その結果表示されるデータをcsvでダウンロードしよう

というのである。


まず、ストアドプロシージャの実行と、csvファイルのダウンロードは分けて説明する。



【ストアドプロシージャの実行】


*ストアドプロシージャについて
まず、実行するストアドプロシージャがどういうものかというと、
顧客データベースから指定した都道府県の住所を持つレコードだけを抽出し、最後に、その抽出されたレコードを表示するというもの。
1レコードには、顧客ID、氏名、住所、TEL、Emailなどがあるり、複数レコードが最後に表示されるということであ

る。


*ASP
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=<SQL Serverの名前>;USER ID=<DBユーザー名>;PASSWORD=<パスワー

ド>;DATABASE=<最初に接続するDB>"


param1 = "20"
strSQL = "getting_user " & param1 & ""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, cn, 3


Do Until rs.EOF
strcsv = strcsv """"& rs(0) &""","""& rs(1) &""","""& rs(3) & """" &vbCrLf
rs.MoveNext
Loop
rs.Close



*解説

・ストアドプロシージャが返す値を取得するには、rs(0)、rs(1)、rs(3)...とする。

・カンマ区切りだが、各列はダブルクォーテーション区切り(列中にカンマが含まれる場合を想定して)。

・レコードの最後に vbCrLf (改行) を入れる。



【csvファイルのダウンロード】

*ASP
csv_file_name = type & date & num
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment;filename=" &csv_file_name& ".csv"
Response.Write strcsv
Response.End


この2つを合体させるとこうなる。

【ストアドプロシージャを実行してcsvファイルをダウンロード】

csv_file_name = type & date & num
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment;filename=" &csv_file_name& ".csv"
strcsv = """顧客ID"",""氏名"",""住所"""


Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=<SQL Serverの名前>;USER ID=<DBユーザー名>;PASSWORD=<パスワー

ド>;DATABASE=<最初に接続するDB>"


param1 = "20"
strSQL = "getting_user " & param1 & ""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, cn, 3

Do Until rs.EOF
strcsv = strcsv """"& rs(0) &""","""& rs(1) &""","""& rs(3) & """" &vbCrLf
rs.MoveNext
Loop
rs.Close


Response.Write strcsv
Response.End



*注意点
・ストアドプロシージャの先頭に「SET NOCOUNT ON」を配置すること。
Transact-SQL ステートメントで処理された行数を示すメッセージが結果の一部として返されないようにする。
じゃないと、ASPにてエラーになり、「オブジェクトが閉じている場合は、操作は許可されません。」と表示される。


・このaspファイルに、HTMLタグは不要。


・ストアドプロシージャがキャッシュされ、毎回同じデータが表示されてしまう。
IEの一時ファイル削除、ファイル名変更、WWWサービスの再起動、サーバー自体の再起動、IISサーバーのレジストリ HKEY_LOCAL_MAHCINE\\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters にDisableMemoryCache「1」を追加、などしたが解決されなかった。


結局、ストアドプロシージャの中で使う作業テーブルを「#」で始まる一時テーブルにしたら解決した。どちらにしても、複数の人が同時に使うことを想定したら、一時テーブルにすべきなので、これで良しとする。

と思ったが、どうやら原因は、パーマネントの作業テーブルの所有者を指定していなかったことが原因のようだ。WEBアプリが使うログインの名前でテーブルが作成されていたが、SELECTするときには、dbo所有のテーブルが使われていたのだろう。

ということで、ストアドプロシージャ内でテーブルを作成する場合は、所有者を指定すべきだということを改めて実感(久しぶりで忘れてた。)。