<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>しゃいん☆のブログ</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/" />
   <link rel="self" type="application/atom+xml" href="http://shain.blog.conextivo.com/atom.xml" />
   <id>tag:shain.blog.conextivo.com,2010://4</id>
   <updated>2010-08-02T05:02:49Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.34</generator>

<entry>
   <title>空の軌跡　～レッドデータリストに分類される大空の雄～</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/08/post_79.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.896</id>
   
   <published>2010-08-02T04:37:28Z</published>
   <updated>2010-08-02T05:02:49Z</updated>
   
   <summary>みなさん、こんにちは。 コネクティボで、一番の鳥マニアことhogeです。 タイト...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[みなさん、こんにちは。
コネクティボで、一番の鳥マニアことhogeです。

タイトルにある「空の軌跡」と読んで、某作成を連想した方は、
若干ごめんなさい。


今日は、環境省のレッドデータリストにカテゴライズされている、
大空を事由に旋回する鳥さんについて少し書いてみます。


この写真を見てわかった方は、素晴らしいです！
<img alt="ootaka1.JPG" src="http://shain.blog.conextivo.com/ootaka1.JPG" width="640" height="480" />
(撮影：弥富野鳥園　剥製近影)]]>
      <![CDATA[
わかった方は居ますか？


そうなんです。
レッドデータリストの絶滅危惧II類に分類された空の雄といえば、
日本を代表する鳥でもある「オオタカ」です。

猛禽類の一種で、タカ目タカ科に属する鳥さんで、
食物連鎖の頂点に君臨しています。

もともと食物連鎖の頂点を極める動物は絶対数が少ないですが、
その中でも「絶滅の危険が増大している種」になるわけです。


そんなオオタカさんですが、コネクティボの本社がある、
名古屋市内で生息していたりする事をご存知でしたか？

もちろん生息エリアは限られているのですが、名古屋市東部の大空や、
郊外にある愛知万博の周辺に生息しているんですね。

大空高くを旋回していますので、トンビやノスリ等の猛禽類と
見分けが難しい鳥さんでもありますが、エサを捕まえて木上で
食事中の撮影に成功したので掲載しておきます～～～！！！

じゃじゃーん。
<img alt="ootaka2.JPG" src="http://shain.blog.conextivo.com/ootaka2.JPG" width="640" height="480" />

すこーし遠目で、カメラ性能が悪くて申しわけ無い！
愛知県にある弥富野鳥園で3時間経過した時、突然の出来事でした。


大空から急降下して来て、キジバトかヒヨドリを一閃したかと思うと、
すぐに木上で食事タイムに入った所を撮影しました。

この10月に第10回目の生物多様性条約締結国会議が名古屋市で開催されます。
通称、COP10ですね。

鳥さんを知る事で見えて来る、生物多様性が多くあります。
オオタカから興味を持ってもらえる多様性もあるんだと期待しつつ、
次回の鳥さんネタにご期待下さい～～～(笑


以上、最近、某ビジネスセミナーで鳥さんに関する講演依頼をお受けした
コネクティボの鳥マニアことhogeでした。]]>
   </content>
</entry>
<entry>
   <title>Cisco Cius　～～～AndroidベースのCiscoモバイル～～～</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/07/cisco_ciusandroidcisco.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.894</id>
   
   <published>2010-07-22T16:19:02Z</published>
   <updated>2010-07-22T16:59:44Z</updated>
   
   <summary>みなさんお久しぶりです。 コネクティボで鳥さん野郎一直線を突き進んでいます。 町...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="03_ど缶ネットワーク" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      みなさんお久しぶりです。

コネクティボで鳥さん野郎一直線を突き進んでいます。
町中で鳥さんを見かけるだけで、顔がニヤニヤしているので、
もしかしたら怪しさ抜群かも知れません・・・

1日の99%を鳥さんの為に費やして、残りの1%を仕事に捧げます！
今、ここで宣言します！(＾＾；

さて、本題です。
今回は、CiscoSystems社の新製品のお話です。

「Cisco Cius」というモバイル端末についてです！
      <![CDATA[<img alt="cisco_cius.png" src="http://shain.blog.conextivo.com/cisco_cius.png" width="500" height="137" />
「Cisco Cius」は、Androidベースで開発されたハードウェア・ソフトウェア一体型のCiscoのモバイル端末製品となります。
802.11a/b/g/nのWiFiサポートと、3G・4Gのサポートも技術的には包括されています。
日本国内の場合ですと、移動体通信事業者とのコラボレーションが必要になりますが、
まずはこの端末、、、ドッキングステーションに接続するとIP電話器に早変りして、
バーチャルデスクトップ環境システムを構築して、簡易PCとして使用する事も出来るんです！

■簡単に性能ご紹介です

・7インチのハイレゾリューションなカラー対応画面

・前面にズーム機能を兼ね備えたビデオカメラ機能　HD (720p and 30 fps)

・背面にハイレゾリューション対応 5メガピクセルのカメラを常時備え、
　 VGA品質は640 x 480標準となっています。
　もちろんですが、ビデオキャプチャ機能等は標準搭載されています

・モバイル端末としてのバッテリー駆動時間は8時間です

■使用イメージです

<img alt="solution_overview_c22-608594-16_1.jpg" src="http://shain.blog.conextivo.com/solution_overview_c22-608594-16_1.jpg" width="530" height="235" />
製品カテゴリーはCisco Unified Communicationsなのですが、明らかにCiscoSystemsの戦略が見えてるよね・・・

それでは、「仮想化」と「ユニファイドコミュニケーション」です。
画像もそのまんまなのですが、う～～～ん、統合コミュニケーションシステム、
ここに来てリリースされるか！！！

また、お気づきの方も居るかと思いますが、
HDMIによるビデオアウトとUSB・Bluetoothによる、マウスとキーボードがサポートされている。

完璧だ。完璧だ。完璧だ。

ビデオカンファレンス、IP電話、仮想端末、ビジネスモバイル端末と、
あらゆるシーンで活用出来そうですね！

まさに、ユニファイド。

個人的に「Cisco Cius」をとことん追っかけて行きますよ！
↓ここが、Cisco Ciusのリリース掲載サイトです。
http://www.cisco.com/en/US/products/ps11156/index.html


Webシステム開発もネットワーク技術もサーバー技術も駆使して、
東海地方拠点の唯一のCisco認定パートナーとして盛り上げて行くぞ～。
(体調も直しつつ・・・独り言)

★アピール★
コネクティボの場合、様々な高度な技術を正しく提供する為に、
各メーカーの技術認定を受けて正しいサービス提供に取り組んでおります。
OSS等についても同様の体制で技術提供に取り組んでいますよ＾＾

というわけで、本製品に興味を持たれましたら、
興味本位で結構ですので安心してお気軽にお問い合せ下さい。




さて、

鳥さんと上手くビジネスコラボレーション・・・(ボソッ)


]]>
   </content>
</entry>
<entry>
   <title>ワールドカップとビジネス</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/06/post_78.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.882</id>
   
   <published>2010-06-16T04:27:08Z</published>
   <updated>2010-06-16T04:51:59Z</updated>
   
   <summary>ワールドカップ真っ盛りな今日この頃いかがお過ごしでしょうか？ さーです。 さて、...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[ワールドカップ真っ盛りな今日この頃いかがお過ごしでしょうか？
さーです。

<img alt="20100615%E3%82%AB%E3%83%A1%E3%83%AB%E3%83%BC%E3%83%B3.jpg" src="http://shain.blog.conextivo.com/20100615%E3%82%AB%E3%83%A1%E3%83%AB%E3%83%BC%E3%83%B3.jpg" width="150" height="149" />


さて、日本も一勝して良い雰囲気ですが、単純にワールドカップについてここで語っても面白くないので、
ビジネスを絡めたお話を少し。


]]>
      みなさんはワールドカップ出場国のユニフォームが、どこのメーカーが多いかご存知でしょうか？

ちなみに日本はアディダスです。(KIRINではないです)

今大会においては、大手ユニホームサプライヤーの勢力図は
adidas 12国
nike   9国
puma   7国

となります。


また勝負事ではありがちな「ユニホームメーカーの連覇は無い」というジンクスも存在しています。

ただ、今までプーマ製のユニホームの国が優勝したことは無かったのですが、前回のドイツ大会初めてプーマ(イタリア)が優勝しました。

この「プーマ」と「アディダス」。実は創業時は同じ会社です。
その名は、「ダスラー兄弟商会」。
名前の通り、兄弟が始めた会社です。

そして1984年、兄弟間に亀裂が生じます。
二人の関係は修復不可能となり、それぞれが別の道を行くことになります。

創業者　　　会社
アドルフ＝アディダス
ルドルフ＝プーマ

そして皮肉なことにドイツを代表するこの2社はバイエルンのアウラッハ河を挟んで立っています。


個人的には、各国のメーカーが巨大資本の会社に押されて
自国代表にさえ採用されないのは何ともいえず寂しいです。


ちなみにサッカー用品メーカーでは最大手以外で個人的に好きなのは、
Le coq sportif
Lotto
Kappa
Topper
DIADORA
Umbro(nikeに買収されました)

です。


サッカーを純粋に競技として楽しむも、
イケメン探しに見るも、
ファッションから見るも、
サッカー用品サプライヤーのビジネス戦争を楽しむのも良いかと思います。

   </content>
</entry>
<entry>
   <title>iPhone4オンラインショップから学んだこと</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/06/iphone4_1.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.881</id>
   
   <published>2010-06-16T00:45:43Z</published>
   <updated>2010-06-16T01:38:48Z</updated>
   
   <summary>まずは、朝から眠いです。睡眠時間3時間切ったのって、ここ最近はないですから。 昨...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="03_ど缶ネットワーク" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[<p>まずは、朝から眠いです。睡眠時間3時間切ったのって、ここ最近はないですから。
</p>

<p>
昨日(6/15 17:00)から始まったiPhone4の予約。iPhone3GSを持っている私は、iOS4で満足しておけばよいものを、解像度が4倍になるから…とか、エンジニアなのに新しいものを持たないのはあり得ない！とか叫び、購入することにしました。<br />
17:00は会議中であったため、会議終了後に戦友(iPhone4を購入する人をこう定義する)に状況を聞くと、オンラインショップがダウンしてると言われ、言われてもアクセスし続けていました。</p>

<p>
アップルからのメールで、20時までに来店すれば当日お渡しできますよ♪というメールも来たので、今から行こうかとも思いましたが、暑い中外を歩くのもやだな…という情けない状況だったので、オンラインに頼っていました。</p>]]>
      <![CDATA[<p>
帰宅してからが勝負だと、帰り次第に戦闘態勢に。<br />
パソコンを出し、遅い晩ご飯を食べて格闘中、23:33にレスポンスコードに503が出てきたので、本腰モードで戦闘態勢に。</p>

<p>
思い起こせば、オンラインショップで格闘するのって、これで何回目だろうと。<br />
PSPの時も、Wiiのときも、PS3のときも、数えればきりがありません。<br />
毎回、数時間費やしていることのばからしさ？というか楽しさ？は、後になってみれば武勇伝かもしれませんが、不毛なこと間違いなしですね。</p>

<p>
もう寝ようかな、明日会社だし…。と思いながら、格闘していると徐々に見たことのない申し込み画面が1ページ、また1ページと出てきます。<br />
となると、欲深い？もので、またがんばろうとしてしまうんですね。<br />
結局、深夜戦は惨敗ということで床につきましたが、夢の中でもまだ購入し続けているんですね。起きてても寝てても変わらないのがまた笑えるのですが、寝ていないにもかかわらず早起きして見ると、さくっと購入できました。<br />
あの苦労は何だったんだー。とっとと寝て、早起きした方がいいじゃん！と一人で突っ込んでいました。
</p>

<p>
と、戦記はここまでにして。<br />
弊社でも、バースト的にトラフィックが増えるサイトの保守・管理をさせていただいています。<br />
iPhoneとは違い1点ものを取り扱っていらっしゃるので、購入チャンスを逃すと次はないというさらに過酷な中でお客様が購入をされています。<br />
少しでもご迷惑をおかけせずに、スムーズに購入ができるよう、ロードバランサー(L/B)やWeb/DBサーバー、Webアプリケーション自体のチューニングを日々行い、安定して運用できるように昼夜努力しています。</p>

<p>
そんな中で、今回の戦況から学んだこととしては、<br />
<strong style="color:red">「購入遷移中の各ページには、外部ファイルを極力おかない」</strong><br />
に尽きるのだと思います。<br />
アプリケーションの作り上、CSSやJSファイルは外部ファイルにすることが推奨されています。また、画像ファイルも多用されているので、ファイル数は増加傾向にあります。<br />
こんな場合、サーバーがオーバーロード状態になっていれば、ページ表示に必要なすべてのファイルを落としてくることは非常に困難で、CSSが適用されていない状態であったり、画像がない状態であったり、はたまたJSが読み込まれないため、JSエラーになって処理が継続できないなど、使い物にならないページになってしまいます。</p>

<p>
具体的改善策としては、
<ul style="list-style-type: disc">
<li style="margin-left: 1em">表示は非常にシンプルにする<br />
→ 購入できることがすべてで、見た目はどうでもいいです。<br />
→ このようにすれば、画像点数やJSの外部ファイル数を減らせます。</li>
<li>CSSやJSは、メインのhtmlファイル内に埋め込む<br />
→ 1回接続できれば、サーバーはResponseを返します。<br />
→ Responseが正常に返ってくれば、ブラウザは次の処理を継続できます。</li>
<li>L/Bで正規WebサーバーにつながったセッションIDは、購入完了まで確実に保護する。<br />
→ 弊社システムは確実にできているはずなんですが…。<br />
→ フォームに入力して後に、メンテナンス中って言われるとどうかと。</li>
<li>RIAなフォームにする<br />
→ Ajaxで十分ですが、通信量を削減するため、必要な情報のみのやりとりに限定してしまう<br />
→ ユーザーのストレスは大いに削減できるはず。</li>
<li>そもそもの売り方を変える<br />
→ これはビジネスモデルの話になるので難しいのですが、抽選にするとか、購入ページに入るための整理券を配るとか。</li>
</ul>
かなと。多くは意識しているつもりでも、いざバースト状態で自分が体験すると、大切さがより分かってきます。<br />
とはいいつつも、バーストにあわせて物事準備をするのは、非常にコストがかかる話です。<br />
今回のiPhoneなら、購入機会が延びるだけでしょうが、社会インフラではバーストにもある程度備える必要があります。<br />
と考えると、この手の問題はなかなか簡単には解決できないですね。</p>]]>
   </content>
</entry>
<entry>
   <title>【TCPDF】バージョンアップに伴うセキュリティ設定方法の変更(Ver.4系→Ver.5系)</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/06/tcpdfver4ver5.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.878</id>
   
   <published>2010-06-10T10:24:59Z</published>
   <updated>2010-06-10T10:31:35Z</updated>
   
   <summary>以前にも紹介したことがあるTCPDFですが、先月にメジャーバージョンがあがったの...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="01_開発のお部屋" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[<a href="http://shain.blog.conextivo.com/2009/10/tcpdfpdf.html">以前にも紹介</a>したことがある<a href="http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf">TCPDF</a>ですが、先月にメジャーバージョンがあがったので早速試してみることにしました。

半年ほど前にVer.4.8で作成したプログラムが問題なく動作していたので、バージョンアップによる影響はないと思っていたのですが・・・思いがけない部分で仕様変更を発見しました。

Ver.4系からVer.5系へのバージョンアップ時に権限設定の仕様が真逆になっているようなので、注意が必要です。
対象になっているのは、PDFにセキュリティ設定を行う時に使用する関数で <b>SetProtection() </b>です。]]>
      <![CDATA[印刷だけを許可するPDFを作成するつもりで、以下のようにプログラムを書いて実行しました。
<pre class="blue">$pdf->SetProtection(array('print'), $user_password, $owner_password);
</pre>

すると、Ver.5.3では印刷だけ「許可しない」になってしまいました。
<img alt="tcpdf5.png" src="http://shain.blog.conextivo.com/20100610/tcpdf5.png" width="452" height="439" />

ちなみに、Ver.4.8で同じプログラムを書くとこうなります。
<img alt="tcpdf4.png" src="http://shain.blog.conextivo.com/20100610/tcpdf4.png" width="452" height="439" />

マニュアルの通りに実装したのですが想定外の結果になったので、ソースコードを確認すると…
なんと、関数の仕様が全く変わっているではありませんか！！

■TCPDF Ver.4.8の場合
@param Array $permissions the set of permissions. Empty by default (only viewing is allowed). 
<pre class="blue">SetProtection($permissions=array(), $user_pass='', $owner_pass=null)
</pre>
権限の指定方法は引数の説明にある通り、許可するものを配列に追加します。
そのため、第一引数にarray('print')を指定すると、印刷だけ許可されます。

■TCPDF Ver.5.3の場合
@param Array $permissions the set of permissions (specify the ones you want to block):
<pre class="blue">SetProtection($permissions=array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass='', $owner_pass=null, $mode=0, $pubkeys=null)
</pre>
権限の指定方法に関する引数の説明が「ブロックしたいものをしていすること」と書き換わっています。
最初の例では、第一引数にarray('print')を指定すると、印刷が「許可しない」になっていたのです。

Ver.5系で印刷だけを許可したい場合は、以下のように書き直す必要があります。
<pre class="blue">$pdf->SetProtection(
  array('modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble'),
  $user_password,
  $owner_password
);
</pre>


念のため、ChangeLogも確認してみると、以下のような記述を発見しました。
<blockquote style="margin:20px;">5.0.005 (2010-05-12)
    - WARNING: The logic of permissions on the SetProtection() method has been inverted and extended (see example 16). Now you have to specify the features you want to block.
    - SetProtection() method was extended to support RSA and AES 128 encryption and public-keys (see example 16).
</blockquote>

ChangeLogをちゃんと読めということですね。
セキュリティにもかかわることなので、気が付かずに移行していたら大変なことになるところでした。

ちなみに、上記のChangeLog抜粋部分に書いてある通り、RC4 128 bit、 AES 128 bit での暗号化および公開鍵暗号方式にも対応したようです。

どんどん便利になっていきますね～！]]>
   </content>
</entry>
<entry>
   <title>PHPExcelとExcel2007</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/06/phpexcelexcel2007.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.876</id>
   
   <published>2010-06-10T08:30:00Z</published>
   <updated>2010-07-27T02:56:58Z</updated>
   
   <summary>業務効率化を図ろうと、Excel2007で作った書類のデータをうまく取り出し、加...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="01_開発のお部屋" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[<p>業務効率化を図ろうと、Excel2007で作った書類のデータをうまく取り出し、加工して使うことを模索しております。<br />
弊社でWebシステム開発をするときのメイン言語であるPHPには、Excelファイルの読み込み・書き込みを行うことができる<a href="http://phpexcel.codeplex.com/">PHPExcel</a>というものが存在します。<br />
今回は、PHPExcelにまつわるお話です。</p>

<p>PHPExcelでは、Excel2007形式のファイルの読み書きができる優れものです。<br />
大昔、Excel2007が出たときには、xlsxファイルをzip展開してファイルの構造をひもとき、Web側で書き込んだデータをExcel2007形式のファイルで出力するようなシステムを作った物です。<br />
それが、近々リリースする<br /><a href="http://mitsumo-rich.jp/"><img src="/img/bn_logo.gif"></a><br />の原型だったりするのですが。</p>

<p>今回は、CentOS 5にRPMで導入したPHPを使った場合の想定で、遭遇する問題を書き留めておきます。<br />
なお、最新のPHP5.3系を使えばこの情報は不要です。だって、普通に動くから…。<br />
サーバ保守を考えたりすると、RPM版のパッケージを使う方がいろいろとよいと考えていますので（賛否両論でしょうが、私はそう考えます）。</p>]]>
      <![CDATA[<p>まず、PHPExcelは、PHP5.2以上の環境で動作するとあります。<br />
しかし、PECLでいくつかのパッケージを導入すれば、PHP5.1.6の環境（RPM版PHPはこのバージョン）でも動作します。</p>

<p>Office 2007からは、XML形式のファイルをzip圧縮したものを使っています。<br />
PHPExcelでは、Excel2007形式のファイルを処理するためにzipアーカイバを必要とします。<br />
それが、php_zipと呼ばれるパッケージで、PECLにあります。<br />
インストールは単純に
<pre>
# pecl install zip
</pre>
とするだけです。<br />
当然、gccやらphp-develやらが入っている前提です。<br />
</p>

<p>しかし、現在公開されているphp_zipは、バージョンが1.10.xのものです。<br />
このバージョンでは、PHP5.2に依存する定義を使っている箇所があり、コンパイル中に落ちます。<br />
そのため、古いバージョンをインストールして回避します。<br />
<pre>
# pecl install zip-1.8.10
</pre>
このように、バージョンを指定したpear/peclのパッケージ導入が可能です。<br />
一気に最新バージョンにあげることができない場合、一時的に中間バージョンまで上げてから、最新バージョンまであげるということもできます。試してみてください（PEARとか、PEARとか、PEARとか）。</p>

<p>後は、PHPExcelのファイル群を適当において使えるようにしてください。<br />
さ、これでPHPExcelが使えるようになりました。</p>

<p>今回、読み込ませるファイルにはセル中に「○」という文字が一文字だけ入っているものが多々あります。<br />
しかし、PHPExcelでファイルを読み込ませると、そのセルには文字が入っていないと言われます。<br />
しょうがないので、PHPExcelのソースファイルをひもときながら、どこで文字が失われているか探してみました。</p>

<p>まず、Excel2007.phpを確認しましたが、文字列は失われていません。<br />
次に、Cell.phpを確認したところ、215行目～
<pre>
            case PHPExcel_Cell_DataType::TYPE_STRING:
            case PHPExcel_Cell_DataType::TYPE_NULL:
            case PHPExcel_Cell_DataType::TYPE_INLINE:
                $this->_value = PHPExcel_Cell_DataType::checkString($pValue);
                break;
</pre>
を通過した時点で、文字が失われていることが分かりました。<br />
ということで、Cell/DataType.phpを確認すると、88行目～
<pre>
        $pValue = PHPExcel_Shared_String::Substring($pValue, 0, 32767);
</pre>
なんていう記述が…。<br />
文字列長を制限しているようですが、何も自前で作らなくとも…と思ったりもしますが、2バイト圏の我々のことを考えてくれているんだと前向きに捉え、次に進みます。<br />
最後に、Shared/String.php::Substringを見ると、iconv_substrを優先的に使いsubstrを行っているようです。<br />
iconv_substrは、PHP5.1系にはバグがあり、1文字の入力を入れると0文字になるという、嬉しい特典があります。<br />
そのため、560行目～の
<pre>
        if (self::getIsIconvEnabled()) {
            $string = iconv_substr($pValue, $pStart, $pLength, 'UTF-8');
            return $string;
        }
</pre>
をコメントアウト。大好きなmbstringに処理を任せることにしました。</p>

<p>ようやく、まともに動作しました。<br />
これで、とっておきの業務改善ツールが作れます。<br />
ということで、近々弊社の開発が急に早くなっているかもしれません！</p>]]>
   </content>
</entry>
<entry>
   <title>年齢の計算</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/06/post_77.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.875</id>
   
   <published>2010-06-08T01:52:07Z</published>
   <updated>2010-06-08T02:28:59Z</updated>
   
   <summary>さまざまなシステムで頻出する生年月日から年齢の計算。 計算が苦手な私にとっては結...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="01_開発のお部屋" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      さまざまなシステムで頻出する生年月日から年齢の計算。
計算が苦手な私にとっては結果があっているかの判断が難しく、特に閏年関連は厄介です。

今回も年齢計算が必要な機能があったので、閏年が正しく処理できるかテストしてみました。

[目標]
・1980/02/29(閏日)生まれの人の年齢計算が正しく行えること
・もちろん、閏日以外の人も。。。

[想定結果]
・閏年の場合は、2/29に年齢が増える
・閏年以外は、3/1に年齢が増える

      <![CDATA[1. PostgreSQLの場合
PostgreSQLには、age()という便利な関数があるのでどんな結果になるか試してみました。

SELECT
　EXTRACT(YEAR FROM AGE('2010/02/28', '1980/02/29')),
　EXTRACT(YEAR FROM AGE('2010/03/01', '1980/02/29')),
　EXTRACT(YEAR FROM AGE('2008/02/29', '1980/02/29'))

結果は、
-----------
 29 | 30 | 28
-----------

バッチリです。
想定通りの結果になりました。


2. Oracleの場合
Oracleには、MONTHS_BETWEEN()という月の差を求める関数があるので使えるかどうかテスト！

SELECT
　TRUNC(MONTHS_BETWEEN(TO_DATE('2010/02/28', 'yyyy/mm/dd'), TO_DATE('1980/02/29', 'yyyy/mm/dd')) / 12),
　TRUNC(MONTHS_BETWEEN(TO_DATE('2010/03/01', 'yyyy/mm/dd'), TO_DATE('1980/02/29', 'yyyy/mm/dd')) / 12),
　TRUNC(MONTHS_BETWEEN(TO_DATE('2008/02/29', 'yyyy/mm/dd'), TO_DATE('1980/02/29', 'yyyy/mm/dd')) / 12)
FROM DUAL

結果は、
-----------
30 | 30 | 28
-----------

この方法だと、閏年ではない年の場合、2/28に年齢が加算されてしまうようです。
3/1に年齢が増える想定だったので、この結果は<span style="color:red;font-weight:bold;">NG</span>。
残念。


結局、Oracleで想定通りの結果をだすには、以下のような式になります。

SELECT
　TRUNC((20102028 - 19800229) / 10000, 0)
FROM DUAL

要するに、(([基準日] - [生年月日]) / 10000) の結果を整数で切り捨てです。
この計算方法であれば、Oracleに限らず、他のデータベースやプログラムでも同じ計算結果になるようです。

次回から年齢の計算で困らないように覚え書きでした。。。]]>
   </content>
</entry>
<entry>
   <title>工作！</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/post_76.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.870</id>
   
   <published>2010-05-20T09:30:55Z</published>
   <updated>2010-05-20T15:35:54Z</updated>
   
   <summary> 好奇心旺盛なコネクティボ社員。 ある日の光景ですが良く見ると・・・ 壁になんか...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[<p>
好奇心旺盛なコネクティボ社員。<br />
ある日の光景ですが良く見ると・・・
</p>
<p>
<a href="http://shain.blog.conextivo.com/2010/05/20/tape01.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/tape01-thumb.jpg" alt="tape01.jpg" width="300" height="399" />
</a>
</p>
<a href="http://shain.blog.conextivo.com/2010/05/20/tape02.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/tape02-thumb.jpg" alt="tape02.jpg" width="300" height="225" />
</a>
<p>
壁になんか張り付いてますっ？！
</p>
]]>
      <![CDATA[<p>
<strong>なんでも、超強力な両面テープを購入した模様。</strong>
</p>
<p>
<a href="http://shain.blog.conextivo.com/2010/05/20/tape03.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/tape03-thumb.jpg" alt="tape03.jpg" width="300" height="300" />
</a>
</p>
<p>
500mlのペットボトルは接地面が少なすぎたみたいです。<br />
何に使うのでしょうか！
</p>
<p>
こちらでは工作が始まっています。
</p>
<a href="http://shain.blog.conextivo.com/2010/05/20/craft01.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/craft01-thumb.jpg" alt="craft01.jpg" width="300" height="225" />
</a>
<p>
真剣です！！！
</p>
<p>
<a href="http://shain.blog.conextivo.com/2010/05/20/craft02.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/craft02-thumb.jpg" alt="craft02.jpg" width="300" height="300" />
</a>
</p>
<p>
器用なお二人。細かいところまで手を抜きません。<br />
アクリル板と両面テープともろもろの素材を組み合わせ、完成！<br />
上手にできましたー！<br />
コネクティボのロゴ入りパネル！
</p>
<p>
<img src="http://shain.blog.conextivo.com/2010/05/20/craft03.jpg" alt="craft03.jpg" width="300" height="300" />
</p>
<p>
これをどこに使うのかというと。。。。
</p>
<p>
<a href="http://shain.blog.conextivo.com/2010/05/20/craft04.jpg">
<img src="http://shain.blog.conextivo.com/2010/05/20/craft04-thumb.jpg" alt="craft04.jpg" width="300" height="399" />
</a>
</p>
<p>
エントランスです！<br />
受付の電話前にとりつけました。
</p>
<p>
素敵度アップ！してます！<br />
いいな、と思ったら試してみよう、<br />
今日も、社内素敵化計画（勝手に）がひそかに進行しています。
</p>
]]>
   </content>
</entry>
<entry>
   <title>vim リストを代入</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/vim.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.868</id>
   
   <published>2010-05-17T09:33:38Z</published>
   <updated>2010-05-17T06:27:39Z</updated>
   
   <summary> またまたvimのお話です。 vimでは他のいくつかの言語と同じように変数に値を...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="02_サーバ缶" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[<p>
またまたvimのお話です。<br />
vimでは他のいくつかの言語と同じように変数に値を代入するとき、左辺にリストを持ってくる事ができます。
</p>
<pre>
let [ foo , bar ] = [ 10 , 20 ]<br />
echo foo    &quot; 10<br />
echo bar    &quot; 20<br />
let [ foo , baz ] = [ 10 , [ 20 , 30 ] ]<br />
echo foo    &quot; 10<br />
echo baz    &quot; [ 20 , 30 ]
</pre>
<p>
これを使うとmatchlist関数を受け取るときに便利です。 matchlist関数は matchlist({expr}, {pat}[, {start}[, {count}]]) という書式で、評価するとマッチした結果を10個の要素を持つリストで返します。 ※マッチしないと空にリスト[]を返す
</p>
<pre>
let [ match , sub1 , sub2 , sub3 , sub4 , sub5 , sub6 , sub7 , sub8 , sub9 ] = matchlist( &#39;2010/05/17&#39; , &#39;\(\d\{4}\)\/\(\d\{2}\)\/\(\d\{2}\)&#39; )<br />
&quot; [&#39;2010/05/17&#39;, &#39;2010&#39;, &#39;05&#39;, &#39;17&#39;, &#39;&#39;, &#39;&#39;, &#39;&#39;, &#39;&#39;, &#39;&#39;, &#39;&#39;]
</pre>
<p>
上の文の問題は左辺と右辺の数が合わないとエラーになる為、matchlistが必ずマッチしないとダメと言うところですね。その辺は一旦別の変数を経由してマッチしたかどうか調べればよいと思いますが、面倒ですね。 代入が式ではない悲しさを感じます。
</p>
]]>
      
   </content>
</entry>
<entry>
   <title>ERMおぼえがき</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/erm.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.866</id>
   
   <published>2010-05-16T16:55:41Z</published>
   <updated>2010-05-16T17:14:24Z</updated>
   
   <summary>こんにちは。 ciscoのERMの設定について、簡単なものについて少しおぼえがき...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="03_ど缶ネットワーク" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      こんにちは。

ciscoのERMの設定について、簡単なものについて少しおぼえがきです。



      <![CDATA[ciscoのEmbedded Resource Managerは、バッファやCPU、メモリの状態を
機械が自分で自分を見守るものです。


今回、CPUの全体の値を300秒ごとに75%に達してるかどうか観察させたいとき、
例としてCPUという名前で作成しています。今回は全体なのでtotalです。
下記、設定です。


resource policy

policy CPU global

system

cpu total

critical rising 75 interval 300

ciscoのドキュメント見てやっていると、あれ、動かないぞ、と一瞬困ったのですが、
上に併せて、

user global CPU

が必要です。


状態については、rising <数値> falling <数値>と
することや、いくつかルールを連続して記述することも可能です。

ひっかかるとsyslogメッセージが出力されるようになりますが、
例えば今回の例を使うと、EEMにてevent resource policy "CPU"
としてあげれば、細かな動作も設定できます。

]]>
   </content>
</entry>
<entry>
   <title>刺激を受けました</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/post_75.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.865</id>
   
   <published>2010-05-16T15:44:03Z</published>
   <updated>2010-05-16T15:53:28Z</updated>
   
   <summary>AESです。 私事ですが、先日、以前私がアルバイトをしていたところへお邪魔してき...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      AESです。


私事ですが、先日、以前私がアルバイトをしていたところへお邪魔してきました。

久しぶりに会うメンバーもいたので色々と話してきました！


詳しい内容は割愛しますが、メンバーと話す中で

人も職場も、私がいた頃よりも成長しているなぁ、と感じました。


今は一緒にではないですが、皆それぞれ頑張っているのだな、

と刺激を受けるとともに、

私も今後、成長できたと実感できるように

様々なことに取り組んでいこう、と感じた出来事でした。

      
   </content>
</entry>
<entry>
   <title>スウィートバジルを植えました</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/post_74.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.862</id>
   
   <published>2010-05-14T13:25:57Z</published>
   <updated>2010-05-14T13:35:08Z</updated>
   
   <summary>ということで、GW前に宣言した通り、 スウィートバジルの種を植えました↓。 ...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      ということで、GW前に宣言した通り、
スウィートバジルの種を植えました↓。

      <![CDATA[<img alt="%E3%83%90%E3%82%B8%E3%83%AB01.jpg" src="http://shain.blog.conextivo.com/%E3%83%90%E3%82%B8%E3%83%AB01.jpg" width="313" height="391" />

先ほど植えたばかりですので、しばらくは発芽待ちの状態です。
プラ容器に何か<del>非常食</del>書いてありますが、気にしないでください。
]]>
   </content>
</entry>
<entry>
   <title>LPIC 女性キャンペーン</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/lpic.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.867</id>
   
   <published>2010-05-13T11:51:26Z</published>
   <updated>2010-05-17T01:07:19Z</updated>
   
   <summary>LPICがまた女性限定のキャンペーンを行っているようです。 以前にも女性限定でア...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="90_おすすめ商品" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[LPICがまた<a href="https://www.lpi.or.jp/woman_examinee/">女性限定のキャンペーン</a>を行っているようです。

以前にも女性限定でアンケートキャンペンを行っていましたが、
今回のキャンペーンはLPIC認定者または受験者限定です。


]]>
      <![CDATA[<a href="http://shain.blog.conextivo.com/2009/07/lpiclpic.html">前回のキャンペーン</a>では、アンケートに答えてキャンペーンに応募し、なんとぬいぐるみのプレゼントをゲットしました。

今回は応募者全員にストラップが送られるのですが、キャンペーンに応募するにはLPICの受験経験が必要です。

この機会に一度受験してみようかと思ったのですが、キャンペーンの応募期限は5/31。
そして、受験料は一科目だけでも\15,750なので悩みます。
試験範囲を確認したところ、101のUNIXコマンド分野だけなら何とかなりそうですが・・・

動機はかなり不純ですが、こういうキャンペーンは資格取得のよいきっかけになるのでよいですね。
]]>
   </content>
</entry>
<entry>
   <title>PostgreSQLのユーザー定義型</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/05/postgresql.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.860</id>
   
   <published>2010-05-11T00:42:53Z</published>
   <updated>2010-05-11T01:35:35Z</updated>
   
   <summary>PostgreSQLのユーザー定義型を利用して、 内部で暗号化されたカラムを作成...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="01_開発のお部屋" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[PostgreSQLのユーザー定義型を利用して、
内部で暗号化されたカラムを作成したので、その過程でハマったことを
覚書も兼ねて投稿しておきます。

<h3>１． 可変長データのサイズ設定</h3>
<p>
可変長データは、内部的に

<em><strong>/************************/
typedef struct
{
int4 sz;         // 構造体の総サイズ
char val[1];    // データ格納位置(ダミー)
} EncryptedText
/************************/</strong></em>

のように表現されているのですが、

<em><strong>/************************/
EncryptedText a;
a.sz = 100;
/************************/</strong></em>

のように書くとNG。
この場合、専用のマクロを使って

<em><strong>/************************/
SET_VARSIZE(a, 100);
/************************/</strong></em>

としなければいけません。
また、ここで設定した値を取り出す場合も

<em><strong>/************************/
VARSIZE(a);
/************************/</strong></em>
とする必要があり、実際のデータ(val部分)にアクセスする場合も

<em><strong>/************************/
VARDATA(a);
/************************/</strong></em>

とします。全てマクロ経由でアクセスしないとダメということです。
</p>

<h3>２． 他で定義されている関数の呼び出し</h3>
<p>
今回は暗号化するということで、pg_cryptoモジュールで定義されている
pgp_sym_encrypt/decryptを使用しましたが、これらのプロトタイプ宣言は

<em><strong>/************************/
Datum pgp_sym_encrypt(PG_FUNCTION_ARGS)
/************************/</strong></em>

となっています。pgp_sym_encryptの内部では

<em><strong>/************************/
bytea* pgp_sym_encrypt(const char *str, const char *pass, const char *cipher_algo);
/************************/</strong></em>

と同等なのですが、この形式で呼び出すことはできません。
なんとかして暗号化対象文字列をPG_FUNCTION_ARGS形式に変換する必要があるのですが、、
仕方なく、PostgreSQLのソースコードに潜ると・・・
こんなものがありました。

<em><strong>/************************/
Datum DirectFunctionCall3(関数ポインタ, Datum, Datum, Datum);
/************************/</strong></em>

Call3の部分は、渡す引数の数に応じて1～5まであります。
これを使えば、引数がPG_FUNCTION_ARGSで定義されている関数を呼び出すことができます。
</p>

<h3>３．メモリリーク対策</h3>
<p>
PostgreSQLのメモリ確保は、pallocを使用します。
これを使うと、１回のクエリ(トランザクション)終了時に使用していたメモリを解放してくれるので
基本的にメモリリークはありません。
ただし、戻り値以外の変数領域確保にpallocを使った場合は、ちゃんとpfreeで解放する必要があり  ます。
</p>


次回は、作成したC言語関数を登録する際にハマったことを書く予定です。

]]>
      
   </content>
</entry>
<entry>
   <title>Copa Mundial de la FIFA Sudáfrica2010</title>
   <link rel="alternate" type="text/html" href="http://shain.blog.conextivo.com/2010/04/copa_mundial_de_la_fifa_sudafr.html" />
   <id>tag:shain.blog.conextivo.com,2010://4.858</id>
   
   <published>2010-04-30T02:21:44Z</published>
   <updated>2010-04-30T02:39:01Z</updated>
   
   <summary>UEFAチャンピオンズリーグの決勝の組み合わせも決まった今日この頃、仕事に関係な...</summary>
   <author>
      <name>社員のだれか</name>
      
   </author>
         <category term="99_たわいなき社内事情" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://shain.blog.conextivo.com/">
      <![CDATA[UEFAチャンピオンズリーグの決勝の組み合わせも決まった今日この頃、仕事に関係ない話でも。

<img alt="%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB.jpg" src="http://shain.blog.conextivo.com/%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB.jpg" width="241" height="136" />


とうとうやってきましたね！！この時期が！
4年に一度の祭典！！

国と国との代理戦争！！

世界最大のスポーツ大会！！

<strong>それこそがFIFAワールドカップです。</strong>
注）スパイクではありませんよ。
ポルトガル語では、「コパ・ムンディアル」と言います。

日本でもサッカーに詳しい人は、こう言います。

なぜならワールド・カップを省略すると・・・・・、
WC

カッコ悪いです。(トイレか！！)

COPA　MUNDIAL
省略すると、
CM

カッコ良いです！！



ここから更に熱くいきます！！]]>
      <![CDATA[では、サッカーとはなんぞや？！！と言いますと、

ちょっとITを絡めたお話をすると
ITは世界最速のコミュニケーションツールですが、
サッカーは世界最大のコミュニケーションツールです！！

PCなんて高価なモノが買えない貧困層でも誰でも知っています！！

サッカーを知っていれば、アメリカ人(＋オーストラリア人？)以外とは話できます。
「ナカータ！！」と言えれば楽しくお酒が飲めます。
間違いないです。

サッカーがplayできれば、そこに言葉は必要ありません！！！！

サッカーとは人生であり、人生とはサッカーである。
ヨーロッパや南米ではこう言います！

私もそう思います！！


<img alt="260px-FIFA_World_Cup_Trophy_2002_0103.jpg" src="http://shain.blog.conextivo.com/260px-FIFA_World_Cup_Trophy_2002_0103.jpg" width="260" height="347" />


さて、MCの見どころですが、
女性はイケメンを探し、
男はテクニックと組織力を見る
なんて言いますが、

そして、日本に今回あまり期待しておりませんが、


私は、COPA MUNDIALでは「魂」を見るべきだと思います。
国を代表しているという魂を！！

選手によっては、クラブチームに重点を置いている人もいますが、
「国のために」という選手も居ます！！！
彼らはアツいです！！


国への想いが一つになったとき、
チームはバラバラの「個」から一つの意識を持った意識体に変わります。

各々の強烈な個性を、お互いに潰しあうことなく、お互いに限界まで引き出したとき、
「個」は全くフラッドな序列の下、お互いに有機的に連動し出します。
それこそが真の意味での「アイコンタクト」です。
鳥肌モノです。

そんな「奇跡」が今回も起こるかもしれません！！
そして、「奇跡」が起これば、出場国であれば、どこでも優勝できます！！



さあ、南アフリカに行くぞ！！！（え？]]>
   </content>
</entry>

</feed>
