スマートフォン時代の企業ネットワークについて

数年前からスマートフォン時代の到来に向け、調査や検証を行ってきたが、最近の答えはスマートフォンでアクセスする情報は社内ではなく、クラウド上に置くべきだと思うようになっています。


ネットワーク技術者としては簡単かつ安全に社内システムに接続させてあげることが目標だと思っているのですが、BYODをはじめとする非セキュア端末を社内に接続するのはリスクが高くなるとともに、利用者の利便性が低下するのではと考えています。


社内ネットワークに接続するには、一般的にはSSL-VPNやVPN(L2TP+IPSec)やキャリアサービスを利用するのですが、SSL-VPNやVPNは接続するという操作が必要で、スマートフォンらしい常時接続利用が難しいです。キャリアサービスを使った場合は、常時接続環境を構築することは簡単ですが、その他キャリアを選べない問題やBYODが難しいなど、コスト的な負担が増える傾向にある問題があります。


その点、一定の費用とセキュリティーポリシーの改定が必要だったりしますが、クラウドサービスを利用すると、常時接続やキャリア問題などが簡単に解決できます。
しかも、サーバーは冗長化されており、一社では到底不可能な信頼性を持たせるとこもできます。


パソコンのみなら、DirectAccessなど新しい技術を使う手もありますが、スマートフォンを含めると、VPN系は一気に選択肢が狭くなります。いくらスマートフォンは不要と上司や経営者がおっしゃっても、無視した設計をするのは問題でしょう。


全ての端末が簡単に接続できる環境。それはクラウドサービスだと思います。
まぁ、独自開発アプリや不向きな業務はありますが、メール、スケジュール、ToDo程度なら、データが何処にあろうとユーザーにとってはあまり問題ではないでしょう。それよりも、出張先や外出先でアクセスできることの方が喜ばれるでしょうね。


ただ、クラウドサービス提供会社に問題が発生した時のことも考慮する必要があり、万が一サービスが停止しても、社内からの利用は問題ないような構成が望ましいですね。データ損失は最も注意すべきポイントだと思います。


そんな感じで、正常時はクラウド上のサービスを使い、非常時は社内のサーバーといったハイブリット環境を構築することが、今の時代なのかなぁ~なんて思ってます。


いうのは簡単だけど、設計、構築するとなると難しいんですけどね。



IPアドレス設計について

 IPアドレスは企業のネットワーク拡張に合わせて柔軟に対応できる余裕を持った設計が必要です。
一般的には3種類のプライベートアドレスから自社に似合ったものを選択し、拠点や部署、機能別にセグメントを分けると思いますが、個人的にはクラスAを使っちゃえば?って思います。

クラスA 大企業が採用する
クラスB 中規模
クラスC 小規模または個人

なんて勝手に思っている方は多いと思います。(たぶん・・・)
私のイメージは

クラスA 企業で使う
クラスB マニアックな人が使う
クラスC 家庭用ブロードバンドルーターから始めた?

って感じ。
クラスCの中でも192.168.0.0/24や192.168.1.0/24を使っていると、絶対に設計をやっていないな~と思ってしまいます。(何かとトラブルの原因にもなるので避けたほうがよいセグメントです)

クラスBは172.16.0.0~172.31.255.255となんとなく中途半端で分かりにくような気がします。
分かりにくさが、一般人を寄せ付けず、変な機器を勝手に接続したりする事を防ぐことにつながるかもしれません。

それに比べ、クラスAは10.0.0.0~10.255.255.255と数字的にもわかりやすい。
とりあえず10は固定で、次のドットまでは拠点、次は部署、次が端末って感じで人間にわかりやすい番号体系が簡単に作れます。ビル番号、フロアでもいいです。

とりあえず、クラスAはアドレス数が豊富なので自由で分かりやすいアドレス設計が可能だと思います。
だから、お勧めします。サブネットマスクも24bit(255.255.255.0)でじゃんじゃん切っちゃえばいいと思うよ

あえてクラスBやクラスCをWAN(VPN)側で使ってメリハリ付けるのもいいかも、LANはクラスA、WANはクラスBとか・・・ネットワークの違いをアドレスの違いで表現することでわかりやすさにつながると思う。

 

ネットワークって時間とともに拡張され、分かりにくさが増してくるので、初めはとにかくシンプルにしてた方がよいと思います。

とりあえず、声を大にして言いたいのは「192.168.0.0/24や192.168.1.0/24だけは使うな!!」
そして、「アドレスを節約する設計をするな」

節約する必要がない規模の企業なら、人間から見たわかりやすさを追求すべき。



Syslogを活用しよう

 

ネットワーク機器はログという機能が備わっているけど、意外と再起動すると消えてしまう物が多い。

RAM上に記録するので当然なんだけど、結構これが困った仕様なんだよね。

たとえば再起動を繰り返す不具合が発生したとき、Telnetやコンソールを使ってログにアクセスが難しいくらい短時間で再起動しているとみることはできない。

だけど、もしかしたらログに再起動の原因となっているエラーが記録されているかもしれないよね。

だから、こういう時に備えて、Syslogサーバにログを転送するようにしておくことが重要。
これなら、たとえ短時間で再起動を繰り返していても、Syslogサーバにエラーログが記録されている可能性がある。

再起動を繰り返すNW機器とにらめっこせずに、ゆっくりSyslogサーバのログを読めばいいのだから、とっても楽だよ。

でも、一つ問題があって、Windowsの場合、無償でサービスで動作するSyslogサーバの選択肢がないってこと。



うまく説明できた経験は・・・ゼロに等しい。

 

日頃、上司や一般の方にネットワークの話をするとき気を付けている「できるだけ専門用語を使わない」は無駄な努力では?と思うことがあります。

慣れない言葉で説明するほうが相手を混乱させてしまうことがありました。

こちらがわかりやすいようにと専門用語を避けると、余計にわからなくしてしまうのです。専門用語を使うとその単語が意味わからず名詞として聞き流せるけど、理解できる言葉で説明されると、NWに関する基礎知識がないと言葉は理解できるけど内容はさっぱりという状態になってしまいます。

また、説明する側も慣れていない言葉を使うので、うまく説明できずに墓穴を掘ってしまうのです。

だから、話をするときに気を付けるのは、専門用語をうまく使う。

悪い言い方だと、適度に専門用語を使って煙に巻く。ごまかす。

専門家が素人に専門分野を短時間で理解させるなんて無理なんです。
もし、理解できればその部分において専門家はすでに不要。

相手に理解させる部分は専門分野ではなく、目的と費用と作業概要です。
詳細説明は添付資料にするくらいが丁度よい。

もし、相手が添付資料の説明を求めてきたら、「うまく説明できないかもしれない」といってから、相手が納得するまでとことん付き合いましょう。墓穴を掘る可能性も高いですが・・・熱意は伝わると思います。



ARPテーブルほど厄介なものはない

 

ネットワーク間の接続を行う際に設定するのはルーティングテーブル。これを固定にするかダイナミックにするかは、規模や機能や管理者のポリシーなどです。

この設定を間違えると「繋がらない」や「ループ」といったトラブルにつながります。
でも、ルーティングテーブルはトラブルが起きても修正すればOKだし、設定が間違っていなければ恒久的に安定運用ができるはずなんですよね。(たまに問題が発生するけど・・・)

で、タイトルのARPテーブルってやつなんですが、基本的に自動学習です。
一応固定で書けるけど、書くシチュエーションが思いつきません。学習した情報を見ることはよくあるのですが・・・
でね、この自動学習ARPテーブルが曲者なんですよ。
とくに、トラブル時にIPアドレスを持った機器を交換した時に繋がらないってなります。なんでか?それはARPテーブルに新しい機器が登録されないから。で、なんで~~って騒いでいたら自然回復(ARPテーブルが更新された)。
とか、うまく更新されずにず~~~っと接続できないとか・・・

一番困ったのはNW機器の管理範囲外のARPテーブルを更新してほしい時。こっちは原因がわかっているのでARPテーブルの更新を依頼しても答えは「NO」。絶対にダメなんだって~。まぁ、普通だったら数分待てば更新されるはずなので待ってても一向に学習されない。結局IPアドレスを別のに変更した経験があります。


トラブル時のジレンマ

 

ネットワークトラブルが発生したときどうするか?

  1. 復旧を優先し、原因究明手段を捨てる
  2. 原因究明を優先し、復旧を遅らす
大きく分けると、この2つになると思います。
ユーザーからすればさっさと復旧してほしいという思いが一番だと思うのですが、ネットワーク管理者としては、再発防止、適切な対応をする必要があり、復旧作業と合わせて状況把握、原因調査を行いたいと思ってしまいます。
おそらく機器の再起動、交換で治ってしまうことがほとんどだと思いますが、再起動するとログが消えてしまったり、カウンタがリセットされるなど、原因調査や報告書作成が困難になることがあります。
そのため、原因究明を行うと必然的に復旧が遅れてしまうのです。

そんな時に役立つコマンドは機器によって違いますが「Show Tech」です。
このコマンドはいくつかのステータス表示コマンドを一つで実行可能な便利なコマンド。
再起動や交換をする前に、このコマンド実行する時間くらいなら用意できると思います。

あとは、Telnetなら操作ログを残しておく。
あとから見直すのは醜いですが、あとからあのタイミングではどうだっただろう?なんて時系列を追いたくなった時は意外と役立ちます。Web設定だと難しいですけどね。

私がおすすめするトラブル時にやることは、操作ログを記録する。Show Techコマンドをとる。そして再起動で治りそうならさっさと再起動してしまう。

ユーザは一秒でも早い復旧を望んでいるのですから・・・
 それに応えるのが、ネットワーク管理者だと思います。


NMSを活用しよう

 

NMS(Network Management System)って何?

 ネットワーク上の機器に対してPingやサービス死活、状態を監視、記録してくれるとっても便利なシステムです。

しらない・・・って人はとりあえずTWSNMPをググれ!!

ExPingとかで死活監視をしている人もいるかもしれないけど、それだったらTWSNMPを導入したほうが良い。

何がいいって、NW図で監視できるって便利じゃない?NW図に表示されたノードに問題が発生したら、そのノードが点滅して教えてくれるから、上司に「ここが問題なんですよ」ほら光ってるでしょっていうと「なるほど~」って納得してくれるので、説明に時間がかからない。

あと、Pingだけでなく、DNSやDHCP、HTTP、FTP、SMTPなどサービスレベルの監視ができるので、ExPingでは見逃していた問題も発見できる。

ただ、NMSってピンきりで無償のTWSNMPからHP Network Management Centerなど高価なものまで色々。
私のお勧めは、見た目が良くて比較的安価なNetCrunch

知らない人にとっては見た目がとっても重要みたいで、TWSNMPで十分だったのに、こんなしょぼい画面だと使い物にならないって決めつけられてしまいました。HP NNMだってこんな画面ですよ。見た目じゃないし~って紹介したらこれもだめ!!だって・・・たぶん、導入実績No.1だと思うのですが・・・

TWSNMPの気に入っている機能。それはインタフェースの状態によってノード間を接続している線が点滅してくれるので、ポートより先のエラーが可視化できるため、SNMP対応機器に接続しているSNMP未対応機器まで監視できること。監視対象がちょっと広くなります。
多くのシステムはポートレベルまで監視はできるのですが、いまいち表現力が低いんですよね~



段階的ボリュームディスカウント

某大手ウイルス対策ソフトのサーバ対策製品の費用を一覧にしてみた。
このサーバ対策製品は、サーバにアクセスするクライアント数によって費用が決定するため、小規模は小規模なりのコストで良心的な価格設定となっている。
管理者側の立場からして扱いやすく、世間のイメージとは違い私は好きな製品だということを宣言しておく。
今は知らないが、コンシューマ向けは一番嫌いな製品かも・・・
この製品はクライアント数5~24, 25~49,50~99 と増えるごとにレベル分けされ、個々の単価が設定されている。
何も知らないユーザーと気の利かない営業担当の場合、正直にクライアント数でライセンスを購入することでしょう。
たとえば、クライアント数が450台だった場合、まじめに買えば110万円支払うことになる。
でも表を見るとわかると思うが、500台分購入すると69万円で済む。



さて、貴方が購入するときどうするのか?50台分多く見積もるだけで安くなる。
厳密にいえばNGかもしれないが、近々購入予定があるとか適当な理由を付けて買ってしまえばよいと思いませんか?


ネットワークはMRTGで見よう

 

ネットワークって正直通信ができれば問題ない。そう思ってます。

でも、ネットワーク管理者としてはそれだけじゃ勤まらないと思います。

医者がカルテを作成するように、ネットワークも経過観察が重要です。

ネットワークの状況を見るというのは瞬間のパケットを見るではなく、トラフィックの推移や各機器のCPU利用率などを長期的に観察し、「いつもと違う」を発見することです。

そこでおすすめなのが「MRTG」Perl上で動作するので、Windowsでも利用可能です。私はWindows2008R2上で要所ルータ、サーバを監視しています。(会社方針でPC UnixがNGなんです)

さらにメールサーバや各機器からのLogをSyslogで集め、特定メッセージをカウントすることで、メールの流量やエラーの数なども監視し、トラブルが発生したときの状況把握に役立てています。

メールのエラー量を監視していると、ユーザアカウントが乗っ取られて迷惑メールを送信しだしても、あれ?いつもと比べて送信数が多いし、User Unknownが多ければ無差別に送信していることが目に見えてわかるのです。

これを数値ではなくグラフという形で表現してくれるのが、MRTGなのです。

ただ、MRTGは1つのグラフに2種類の整数しか表示できない点が、グラフ化において問題になることがあります。

そんな時はRRDTOOLを利用すると複数の値を表示できるのでお勧めです。
でも、その分いろいろ設定する必要はありますけど・・・

最後に、いくつかの専門書などではMRTGで設備増強のタイミングを予測するなんてありますが、一般企業で問題なく使えているネットワークではこの目的で役立った経験はまだありません。(サーバのメモリやCPU、ハードディスク監視では大活躍ですけどね)



Pingの応答時間は参考だ

 

Pingを打つと応答時間がわかる。

これは素人でもしっている人が多く、ホームページの表示が遅かったりしたときに、「Pingで応答時間が数百ミリ秒かかっている。ネットワークが遅いんだ!!」って文句を言ってくる人がごく稀にいる。

まぁ、間違っているとは言わないけど、Pingの応答時間だけで判断するのは安易すぎます。

PingってLANだと<1msなんて結果が返ってくるので、時間がかかる=ネットワークが遅い。って思いがちですが、Pingの応答時間はその機器の処理能力によって変化することを知るべきです。

たとえばCPU使用率が100%の機器にPingを打つと応答がないとか、非常に時間がかかることがあります。

だから、

応答時間が長い= ネットワークが遅い または Ping先に問題がある

と思った方が正しいと思う。

技術者としてはユーザ意見として受け止め、輻輳なのか障害なのか、サーバ側、ネットワーク側などと切り分けを行い、原因を特定し、解決および解答すべきですね。
なぜPing応答が遅かったのか?その答えを探ることが出来るのは技術者であるあなたです。

 

あとNW導入工事の完了試験項目で Ping応答数ミリ秒以下なんて基準を決めたら、これで不合格になって困ってしまうこともあります。 あくまでPingは応答があること。にしておいた方が安全です。あくまで疎通確認のコマンドだということです。
上司や取引先などから応答時間を条件に求められた場合は、慎重にPing先と応答時間を検討すべきですね。
出来れば、サーバやルーターを避け、負荷の非常に低い専用端末を用意することをお勧めします。
また、試験中は他のトラフィックが流れない状態で実施するべきです。
あと、Ping回数も最低限にすること。「50回でタイムアウトが発生しないこと」なんて条件を付けると、試験だけで50秒は必要ですし、たまたま1回タイムアウトが出ると、もう一度やり直し。試験時間が無駄に増えるだけです。

 

ネットワークが開通した直後って、興味のある人はどのくらい早いのだろうか?とか調べて通常より負荷が高い状態になっていることが多いのです。そんな条件の悪いタイミングに試験を行って、万が一不合格となった場合どうしますか?



故障切り分けのPing

 

どこかでトラブルが発生したとき、その原因となる機器を見つけたり、回復(疎通)確認に便利なのが、Pingコマンド。

Pingがなぜ便利なのか? 多くのOSに標準で実装されているので他人のパソコンでも利用できる点だと思ってます。

Pingの使い方

1.目的の機器の疎通確認

これはよく使うのですが、「○○サーバにつながらない」なんて連絡があったらとりあえず、そのサーバに対してPingを打つことで、サーバの死活確認を行う。応答があればアプリ側の問題。そうでなければNW側と思って良い。

2.応答時間によるNW状況の把握

Pingの応答時間は応答する機器のCPUの状況によって大きく変化するので、参考程度にしかならないが、遅延が大きい時や輻輳が発生しているときは、その機器はほかに比べて時間がかかることが多い。

3.故障機器を探す

NW構成図を参考に、手前または遠くからPing応答可能な機器に疎通確認を行い、どの機器と機器の間に問題があるかを探すことができる。手前から調べれば、応答がなくなった機器とその前の機器が怪しいことになる。

4.DNSの確認(nslookupコマンドの代わり)

nslookupやdigコマンドを使うのが本当だけど、名前解決がちゃんとできているかを確認したり、このサーバのIPアドレスなんだっけ?と思った時に使える。 Ping \\Server や Ping server.local など打てば、IPアドレスを教えてくれる。



RS232Cよ永遠に・・・

ネットワーク技術者として必要なパソコン。何でもいいです。
現場で作業することがあるのでラップトップであれば・・・

あとはシリアルポート。

いわゆるRS232C。

これ、本当に必要です。
LANポートより重要です。

多くの企業向けのネットワーク機器は初期IPアドレスは設定なし。
DHCPクライアントの設定も入っていません。

ファイアウォールならDHCPが動いていたり、初期IPアドレスが設定されていたりしますけど、
ルータやスイッチ製品は全く設定が入っていない状態が多い。

だから、シリアルポートで設定を始めます。
最近のラップトップパソコンにはシリアルポートはついていません。
だから、USB接続のRS232Cポートは必須です。

 

これってめんどくさくない?って思われると思いますが、
どんなIPアドレスが設定されているかわからない機器をするときに楽なんですよ。
ドキュメント見ても初期設定しかわからないよ
現在のIPアドレスがわからないってことは、どうやって同じセグメントにパソコンを設定するの?
WireSharkでパケットキャプチャして調べますか?
自発的にパケットを出さない機器だったらどうします?

シリアルなら通信速度を9600bpsにすればほとんどの機器は応答があります。
応答なくても、いくつかの速度に切り替えればよい。
あとはコネクタを見ればケーブルがストレートかクロス、RJ45が分かるので3種類持ってればよい。
ね。楽でしょ?

まぁ、複雑な設定を行うときはブラウザのほうが楽ですけど、
設定が分からない時はまず、シリアルでコンソールポートにつなげてみる。
いち早く自分の制御下に置くってことが重要なんですね。



WEBページを作成するにあたって・・・

今はMovable Typeを使って本文以外は自動生成していますが、その前は手書きだったり、フリーのCGIを使った日記だったりと、結構な手書き部分がありました。ブログ中心になる前はそうだったと思います。

まずはHTMLを手書きするのですが、店頭に並ぶ書籍はIE4/6専用とかNNのみとかタグに情報が付加されて、このブラウザだったらこういう書き方をするとか、特定ブラウザに向けた内容が多いので、ページの下のほうに「このホームページはIE4で確認しています。」とか書いていました。

今ではそういうブラウザ指定をすることが減ってきいると思うのですが、ソースを見ると、ブラウザ個別のスクリプトがあったりして苦労しているなぁ~と思います。特に高機能化しているので、その辺の努力は感心しますね。

 

私も以前はそういった本を見ながら作成していた時期があったのですが、途中からそういう本は一切見なくなりました。で、そのきっかけとなったのが「正しいHTML4.0リファレンス&作法」って本。
この本を読んで、W3Cを参照するようになりました。

で、その時に使っていたのが、「Another HTML-lint」というサイト。
文法チェッカーを使うことで、可能な限り正しい文法で手書きする。
正直、コンテンツより、この文法チェッカーで高得点を取ることが目的になって更新するという状態。

 

「このサイトはAnother HTML-lintによるチェックを行い正しいHTMLで記述しています」なんて書いてしまって・・・

今思えば、○○ブラウザに最適化していますってのと一緒ですね。
知人に「なんかレイアウトがおかしいところがあるよ」って指摘されても、「ブラウザが悪い」って解答してたあたりは最悪ですね。

俺は正しい文法で記述しているんだから、きれいに表示できないのは、正しい表現のできないブラウザの責任

まさに、宗教。
お恥ずかしい・・・

しばらくすると、ブログが流行りだして、日記をネットに公開するようになりました。でも、はじめのころは手書き、そのうち日記CGIを使って、携帯で更新できたらいいなぁ~ってyaplogを使い始めて・・・。このころから正しいHTMLを記述することが事実上不可能になり、Movable Typeに移行してからはすべてのページについて「気にしても何もできない」状態になりました。

そして今。また、正しいHTMLを再開しようかなぁ~と思い始めています。
facebookなども使い始めると、システム間の連携が必要となります。
連携を行うためには、システム間で正しい情報をやり取りする必要がある。

だからこそ、「正しいHTML」の記述が必要になってくる。
今は対人間ではなく、対システム用にテンプレートを編集しています。

目に見えない編集作業ですが、結構面白いです。
マニアックです。

やっぱり宗教です。



管理外のProxyサーバーはやばい?

以前 Google Play Music のサービスを開始するにあたって、Googleサーバーに対して日本からのアクセスではなく、サービス提供国からのアクセスと偽装する必要がありまして、まぁ、利用したわけなんですが・・・
よく考えると、セキュリティー的には最悪の行動って感じですね。

Proxyサーバーって何ぞや?という方に簡単に説明しますと、通常はWebブラウザーがWebサーバーと通信をするのですが、Proxyサーバーを中継することによって、Webブラウザーが直接通信できない相手でも、Proxyサーバーが双方と通信できるなら、通信できるって仕組みなんです。??? 一言でいうと伝言ゲームの伝言役のひとですね。

Proxyサーバーは伝言すべきではない命令や情報を相手に伝えないことが出来たり、複数のパソコンが同じ情報を取得しようとしたときに、一度だけ相手から取得してコピーを受け渡すなど、セキュリティー面やトラフィック面で導入すると良い面があるのです。
そのほかにも、アクセスログを取得したり、暗号化通信の中継を行ったりできます。
ってことは、ProxyサーバーはWebブラウザーとWebサーバーの通信内容はすべて見えるってことです。
IDとパスワードを入力すれば、それも取得できます。
ってことは漏れたってことですよ。

まぁ、一応、その辺のリスクも考慮して、Proxyサーバーを利用する前に認証を済ませておき、機能ONする作業だけProxyサーバー経由に切り替えたんですけど、平文のパスワードは流れなかったと思うけど、符号化されたパスワードは当然記録されている可能性があるってことです。

だからこそ、最近はHTTPSアクセスが増えてきたと思うのですが、これも付け替えってことが可能なので、Webブラウザーに表示される電子証明書がProxyサーバーの物だった・・・なんてこともないとは言えない。

そういうわけで、自分が構築したまたは信頼できるProxyサーバー以外を利用したときは、さっさとパスワード変更をすべきなんじゃないかと思います。信頼できないProxyサーバーを利用中にパスワード変更やユーザー情報の表示なんて、住民票のコピーをばら撒いているのと同じ行動と思っていただけると良いかと。

ってことで、Google Play Musicは素晴らしいサービスですが、有効化するのは海外旅行中にするのが一番良いってことです。
クラウド(個人利用)万歳!!



クラウドが便利な携帯端末

貴社のシステムをクラウド化しませんか?

最近よく聞く定番営業メニューですが、正直なところ自社データセンターを構築している企業にとって目に見えた効果が出るとは言い難いと思っています。
データセンターのネットワークがボトルネックになっているとか、既存システムが新しいOSに対応できないなど問題を抱えているならば、トラフィックの分散、システムのWeb化によるOS制限の緩和などメリットがあるかもしれません。

それでも、クラウド化することによって、データセンター拠点のユーザーから見ればサーバーレスポンスは確実に低下するので、同じ業務をするための待ち時間が増えるなどにより、思ったほど評価を得られない結果となるかもしれません。

クラウドが便利だと感じる瞬間。それは携帯端末や複数端末で同じ作業を行おうとしたとき。たとえばGoogle Play Music。日本ではサービス提供されていませんが、このサービスを利用すると、CDから私的複製を行ったmp3データをGoogleに転送することで、世界どこでも、ブラウザが使える環境さえあれば同じ曲を聴くことができる。

Google DriveやWindows Live SkyDriveを使えばExcel(エグザイルと読もう)ファイルをどのパソコンからでも参照、編集ができるので、会員番号やよくないけどパスワードを保存しておけば、どこでも参照可能です。

メール、予定表、連絡先もGmailなどで管理すればさらに便利です。

 

クラウドが現れる前は「端末=1アカウント」という使い方が主流だったと思いますが、クラウド化された世界では「個人=1アカウント≠端末」という関係になって、適材適所な端末を選択できるようになりました。

まだ、携帯電話番号は端末と結びついていますが、050Plusなどを使えば端末との結びつきも弱くなるでしょう。

そうやって利用サービスを変えずに、端末を自由に選べる。それがクラウドの良さだと思います。もう、携帯電話の機種変で電話帳や音楽データの移行を悩まなくてもいいよっていう時代が来ています。

 

まぁ、クラウドがいかに便利でも、もしクラウドサービスが停止したり運営会社が破たんしたりした時のリスクを考慮して、手元にバックアップを行っておくということは重要ですが、この素晴らしい世界を利用しないのはもったいない。

私はそう思います。

企業にとってクラウドは魔法の杖ではありませんが、個人の携帯電話にとっては魔法の杖に限りなく近い存在だと思います。
いま、スマートフォンからフィーチャーフォンに変更を検討している人って、たぶんクラウドを利用していない人なんだろうなぁ~もったいない。

スマートフォンを選ぶときは、グローバルモデルにしなさい。
国内の多機能モデルにはない新しい世界が待っていますよ。

 

 



SCCM2012でのMVLSライセンススプレッドシート

 相変わらずSCCM2012を検証中ですが、いろいろ変わってて、既定の設定も少なくなったので、自分ナイズしやすくなった半面、何かと参考になる情報が減ってしまいました。

レポートフォルダを作成できないので管理がチョットしにくくなったなど微妙な悪改もあったりして、同じことをできるようにするまでちょっと時間がかかりますね。

さて、System Center Configuration Manager 2007でMVLSライセンススプレッドシートファイルの取り込みではMVLSサイトからCSVファイルをダウンロードして、Excelを使ってXMLファイルに変換する必要があったので、文字情報と数字情報の指定なんかでエラーになったりすることがあったのですが、System Center 2012 Configuration Managerになってから、ダウンロードしたCSVファイルのまま取り込みができるようになっています。

始めっからこうしてくれればよかったのに~と思うのですが、これは良い改善ですね。

それにしても、早くローカライズされたドキュメントが出てほしいです。
英語と機械翻訳を読むのは疲れます。



Export,Import-SPWebのちょいテク

もっと良いほかの方法があったらごめんね。

リストやディスカッションの移動を行うとき、PowerShellのExport-SPWebコマンドレットを使ってエクスポートして、移動先のサイトにインポートするのが通常の作業だと思いますが、リストやディスカッションをインポートするときのItemURLがエクスポート元のURLを引き継ぐ仕様で困ったことってありませんか?

初期のアイテムだと /List/List1/ だったりして、移動先にもすでにList1があって、どうすれば~~とか悩むことがあるかもしれません。または別の名前に変更したいとか

そういう時は Export-SPWeb で -NoFileCompression パラメーターを付けてエクスポートすると、アイテム個々のファイルといくつかのXMLファイルが生成されます。

でXMLファイルの中を見ると /List/List1/ など移動元のItemURLが記述している場所がいくつかあるので、これを新しい名前 /List/NewList/ とかに置換してからインポートすると、そのURLでリストが作成されます。

これで綴りを間違ったりしたときもこれを使って修正することもできますね。



System Center 2012ライセンス変わりすぎ~

変わったってのは英語の資料で知ってたけど、こんなに早くリリースされると思ってなかったので適当読みしてたけど、いざ正式リリースして構築しようとしたらビビった。

System Center Configuration Manager 2007のサーバーライセンスを購入した時はSQL Serverのライセンスをどうするかで悩んで、既存のSQL Serverを利用することにしたんだけど、今回からサーバーライセンスがサーバーMLに変更されて、管理サーバライセンスは含まれるようになったんだよね。(MSに確認とっていないので若干不安ですが・・・)

ってことは・・・System Center 2007 With SQL Serverってサーバーライセンスを買っていたら、SQL Server分の費用が丸損ですか?

MSVLからのダウンロードにもSystem Center 2012にSQL Server 2008 R2が含まれるってことで、無料じゃないけど、無料でSQL Serverが付いてきます。もしかしてライセンス値上げしてる?

今までは単一機能を使ってたわけだけど、ほかの機能も使えるようになったってのはうれしいです。資料だけ見ててもこれがあるとなんか便利そうって機能あるしね。
System Center 2012の資料はすべて英語ってのが理解度に問題が発生するのですが・・・



ISBNのチェック

先日投稿した jQueryで本の表紙画像を表示してみる はエラーチェックもなかったので、ISBNの正常性チェックする関数を作ってみた。


内容はチェックデジットを再計算して比較するという簡単なもの。
一応ISBN-10及び13の両方に対応できるようにしています。


 


function checkISBN(str) {
 var isbn = "";
 var checkDigit = 0;
 switch(str.length) {
  case 10:
   for (i = 10; i > 1; i-- ) {
    checkDigit += parseInt(str.charAt(10 - i)) * i;
   }
   checkDigit = (11 - (checkDigit % 11)) % 11;
   isbn =  str.substr(0,9) + (checkDigit == 10 ? 'X' :checkDigit.toString());
   break;
  case 13:
   for ( i = 0; i < 12; i++) {
    if( i % 2 == 0 )
     checkDigit += parseInt(str.charAt(i)) * 1;
    else
     checkDigit += parseInt(str.charAt(i)) * 3;
   }
   checkDigit = (10 - (checkDigit % 10)) % 10;
   isbn = str.substr(0,12) + checkDigit.toString();
   break;
 }
 return str.toUpperCase() == isbn ? true : false;
}


いつもの決まり文句ですが、このコードを使って何が起きても責任は持ちません。
素人が作ったスクリプトだということを忘れずに・・・



jQueryで本の表紙画像を表示してみる

動くものが、とりあえずできた。


何をやっているかというと、<td>ISBN||*****<td>と書かれたHTML文を<td><img></td>に置き換える処理をやってます。


で、*****の部分は書籍ISBN番号の10桁または13桁を書く。


そうすると、画像を用意しなくても、楽天Web Serviceから表紙画像を取得できるようになる。


 


じゃぁ、スクリプト部分ね。
ちなみにISBNの桁変換は、観測気球さんのHPを参考にしています。


 


<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
//セレクター部 
$("document").ready(function(){
  $("td:contains('ISBN||')").each( function(i){
   var code = this.innerText;
   booksearch( code.slice(6,code.length), this);
  });
 });


//ISBNの10桁を13桁に変換する関数
function convISBN10toISBN13(str)
 {
  var c;
  var checkDigit = 0;
  var result = "";
  c = '9';
  result += c;
  checkDigit += (c - 0) * 1;
  c = '7';
  result += c;
  checkDigit += (c - 0) * 3;
  c = '8';
  result += c;
  checkDigit += (c - 0) * 1;
  for ( i = 0; i < 9; i++ ) {
   c = str.charAt(i);
   if ( i % 2 == 0 )
    checkDigit += (c - 0) * 3;
   else
    checkDigit += (c - 0) * 1;
   result += c;
  }
  checkDigit = (10 - (checkDigit % 10)) % 10;
  result += (checkDigit + "");
  return ( result );
 }


//実際に検索して画像に置き換える関数 
function booksearch(ISBN,Output)
 {
  if(ISBN.length == 10){
   ISBN13 = convISBN10toISBN13(ISBN);
   } else {
   ISBN13 = ISBN;
   }
  $.ajax({ type: "GET",
    url: "http://api.rakuten.co.jp/rws/3.0/json?callBack=?",
    data: { "developerId":"楽天から取得してね",
     "operation" :"BooksTotalSearch",
     "version": "2011-07-07",
     "isbnjan" : ISBN13},
    dataType: "jsonp",
    success: function(data){
     switch (data.Header.Status){
      case "Success":
       var Items = data.Body.BooksTotalSearch.Items.Item;
       $(Output).html("<img src=" + Items[0].mediumImageUrl + ">");
       break;
      case "NotFound":
       $(Output).append("検索結果が存在しない");
       break;
      case "ServerError":
       $(Output).append("サーバエラー");
       break;
      case "ClientError":
       $(Output).append("クライアントエラー");
       break;
      case "Maintenance":
       $(Output).append("メンテナンス中");
       break;
     };
     },
    error: function(data){
     $(Output).append("リクエストエラー");
     $(Output).append(data.Header.StatusMsg);
    }
  });
 };
</script>



でHTML文は適当に・・・


<table border=1>
  <tr>
   <td>978-4822294625 </td>
   <td>ISBN||9784822294625</td>
  </tr>
  <tr>
   <td>4873113903</td>
   <td>ISBN||4873113903</td>
  </tr>
</table>


こんな感じで書きます。
すると、ISBN||*****の部分が置き換わるって感じです。


とりあえず動いたって感じなので、うまくいかないところとかあると思いますが、自由に使ってやってください。 


あと、無駄に関数化している部分はjsファイルとWebパーツ部に分割してSharePointで使う予定なので気にしないでください。



IEでF12を押せ!!

SharePointでjQueryやCSSで画面カスタマイズを行うときは、目的のタグを指定することが重要です。
これができないと、的確な場所を制御できないので、いらんところまで変化してしまうので、カッコ悪い状態になってしまいます。
ってことでどうやってその目的のタグを指定するかってことですが、Internet Explorerには管理者ツールってのが用意されてまして、これを起動するのがF12なんですね。
まぁ、とりあえず、F12を押してみてください。

あとは、マウスカーソルのアイコンをクリックして、目的のタグがあると思う場所をクリックすれば、HTMLソースの該当部分を開いてくれます。
その前後を見て、タグの構造やClassやIDを調べ、それしかない組み合わせをセレクターとして指定すれば成功。
うまくいくまで頑張れば、目的の場所だけ装飾したりすることができます。
まぁ、これが面倒なんですけどね。
ちなみにトップリンクバーは .menu-horizontalでサイドリンクバーは.menu-verticalの中に記述されています。
本文部?は#MSO_ContentTableあたりで囲めばいいのかな?
この辺は目的によって異なりますけど・・・
頑張って探してください。



サイドメニューをアコーディオン化する

SharePoint2010のサイドメニューをアコーディオン化してしまうスクリプトを作ってみた。

基本的には使わないほうがいいと思うけど、管理されたメタデータのツリーが画面からはみ出てしまう場合、ちょっと小っちゃくなってくれると使いやすくなります。
 
2012/02/15 追記
SP改 by ANK(@SharePoint_X)さんからアドバイスツイートがありましたので、変更しました。
jQuery(document).Ready(~)では動かないことがあるので、_spBodyOnLoadFunctionNames.push("~");を使うほうがいいらしいです。
このコマンドの仕様が見当たらなかったのですが、みなさんこの記述にしていますね。
それにしても、セレクターが美しくない・・・

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
  _spBodyOnLoadFunctionNames.push("AccordionMenu");
  function AccordionMenu(){
    jQuery('div.menu-vertical ul >li > ul').hide();
    jQuery('DIV.menu-vertical UL.root > LI').hover(
      function(){jQuery('ul:not(:animated)',this).slideDown(500)},
      function(){jQuery('ul',this).slideUp(1000)}
    );
  };
</script>
 
 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
  jQuery(function(){
    jQuery('div.menu-vertical ul >li > ul').hide();
    jQuery('DIV.menu-vertical UL.root > LI').hover(
      function(){jQuery('ul:not(:animated)',this).slideDown()},
      function(){jQuery('ul',this).slideUp()}
    );
  });
</script>


オフラインでSharePoint


未読、既読やオフラインでSharePointを利用するにはSharePoint WorkspaceやOutlookとの接続機能を使いますが、リストやライブラリのテンプレートによって使えるアプリが異なります。

ってことで実際に調べてみました。


機能に違いがあるのは分かりますが、分担しなくてもいいのにって思います。




SharePoint Usersカンファレンスがあるぞ~

2012年3月23日は六本木アカデミーヒルズに集合だ!!
SharePoint Usersカンファレンス Japanが開催されますよ!!

って宣伝してみます。私が参加するかは未定ですけどね。

 

昨日はJapan SharePoint Groupの記念すべき第一回目の勉強会が開催されましたが、
今度はAvePointさん主催で350人規模のユーザーカンファレンスが開催されます。

もちろん、講演者はSharePoint MVPや第一線で活躍されている方ばかり。
とっても濃い内容になることは間違いなし!!

しかも参加費はタダ。

さぁ、今すぐエントリーだ!!

 

午後からのセッションはTech系と非Tech系に分かれて行われるので、一人で迷うもよし!二人で分担するもよし! どれを受講しても損はないと思います。
個人的には前半は非Techで後半2つはTechかな~でもEUC業務についても聞きたいし~2回公演とかありませんかねぇ~

 



Japan Sharepoint group勉強会

Sharepointを愛する方々が集結した大阪。
それぞれ立場は違えどSharePointをキーワードに集まった勉強会。こんなに集まったんだ?という驚き、仲間がいるって実感でき、とっても嬉しかった。
素晴らしいスピーカーと協賛者、そして主催者に感謝です。

SharePointに栄光あれ!

15A-標準ライセンス調整レポートに載ってないリスト

MVSL以外のライセンス管理って結構面倒なことが多いですよね。
何が面倒ってインポート用のCSVファイルを作成すること。

インベントリデータの製品名を一致させないとカウントできない。

正直、製品名を統一してくれれば問題ないんですけど、製品名にバージョン情報を書き込んでくれたり、言語名入れたりと様々。
そのたびにCSVに追記してインポートしないとダメ。

これじゃぁ運用的に破たんしかねないですね。
ってことで、CSVに登録されていないソフトウェアインベントリの一覧を出力するレポートをつくってみました。
名づけて「15A-標準ライセンス調整レポートに載ってないリスト」

これを定期的に眺めれば、新しいバージョンが追加されたりしたときも登録漏れによるライセンス不一致も防げますね。

--SQLステートメント
SELECT
    soft.ProductName0 as [Product Name], 
    soft.ProductVersion0 as [Version],
    soft.Publisher0,
    count( soft.ResourceID) as [Inventory Count]
FROM
    v_GS_INSTALLED_SOFTWARE soft
    LEFT OUTER JOIN 
    ( SELECT Name , Version as ver FROM v_AI_NON_MS_LICENSE) lic
    ON lic.Name = soft.ProductName0 AND dbo.fn_MatchLicenseVersion(Lic.Ver, soft.ProductVersion0) = 1
WHERE
    lic.Ver IS NULL
GROUP BY
    soft.ProductName0,
    soft.ProductVersion0,
    soft.Publisher0
ORDER BY
    soft.ProductName0,
    soft.ProductVersion0
 
ちなみにWHERE lic.Ver IS NULLで絞り込みの条件を入れてあげると使いやすくなりますよ。


Windowsインストールの予習

本日、容量不足のために購入したHDDとSSDが届いたので、OSのインストール手順を予習しておく。作業が出来るのはいつになるか分かりませんが・・・

ライセンスの確認。
 ライセンス数は1。
 Windows3.1は通常版(FD)
  Windows95,98,NT,2000,XP,Vista,7はアップグレード版(CD or DVD)

真面目にやる方法。
  1. Windows XPをインストールし、アップグレード確認で下位バージョンCDを使う
  2. Windows XPを起動し、Windows7をインストール。
面倒だけど最短で出来る方法。
  1. SSDと古いHDDを接続する。(古いHDDでアップグレード確認する)
  2. Windows7をインストール
古いHDDにケーブルが届かなかった場合。裏ワザを使う。(Vistaは出来る)
  1. Windows7をプロダクトキーなしでインストール
  2. 再度Windows7をインストール

今回は古いHDDがあるので、HDD2本差しの最短パターンで行きます。
XPのようにアップグレード認証がCDROM確認でOKだったら非常に楽なんだけどね~

ちなみに、HDDは3.5インチから2.5インチ2枚ざしに変更なので、OSやプログラムはSSDでデータはHDDって構成ですね。
しかも、3.5インチスロットは1つなので、SSD付属のマウンタにHDDを接続し、SSDはライタップ・・・の予定。(マウンタの高さが問題になれば別途マウンタを購入する)

さて、この作業はいつできるのだろうか・・・・
今年に入ってデスクトップが稼働出来たのは1時間程度なんだけどね~


Viva ラーニングのSharePointコンテンツで既定の言語がまじめに動き出した?

相変わらず挙動が安定しないVivaラーニングさん。 既定の言語設定がまじめに仕事を始めたのかもしれません。 ちょっと確認したいことがあってラーニングを開くとコンテンツが一つだけになってしまいました。すべてのコンテンツが表示された状態から何も操作していないのに表示コンテンツ数が変わ...