1.21 jigowatts

Great Scott!

IE8とIE11で空文字Cookieの戻り値が違う

事象

Internet Exploerer(以下IE) 8用のイントラサイトが規定のブラウザがIE11になったことで表示が乱れたとユーザより連絡を受けたので、さっそく原因を調査してみました。

原因

JavaScriptで値が空文字のcookieを取得したときのブラウザ間の違い | かたつむりくんのWWW

Cookieの空文字の扱いが違うだと?!なにそれハゲる。

IE8では値が空文字のCookieはundefined、IE11では空文字は空文字となる違いがあり、Cookieの値が空文字だった場合以下のようなJavaScriptのコードの動きが違ってしまい大爆死。

if (cookie != null) { //とある処理 }

あ、ちなみにこのコードはわたし^o^が書きました。

つまり、こうなるってわけですね。

undefined != null
// => false
"" != null
// => true

イントラサイトは規定のブラウザで動けばオッケーイで楽なんだけど、ブラウザ間の差異に気付きにくいのは弊害だなぁ。

【CentOS 7】 Visual Studio Codeが起動できなくなった

概要

たしか1.7に上げた頃、VS Codeがエラーメッセージを吐いて起動できなくなりました。そのときは時間もなく面倒くさかったので放置してましたが、思い出したのでなんとかしてみる回です。

環境

CentOS 7
Visual Studio Code 1.7.2

エラー内容

起動しようとすると怒られました・・・。なにもしてないんだけどなぁ。

$ code .
/usr/share/code/bin/../code: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

とりあえずアップデート

ひとまず最新に上げたら直っているんじゃないかという淡い期待を抱き、アップデートするもダメ>.<
sh-yoshida.hatenablog.com

エラーメッセージを読む

英語だからってそっと閉じない。大切。

error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

libXss.so.1ライブラリがないと怒られているらしいので、ライブラリ名を調べていると似たような事象を発見!

CentOS - GitKrakenがCentOS7で起動できなくなりました。(45627)|teratail

libXScrnSaverをインストールしてあげればいいのかなっつーことでやってみます。

$ sudo yum install libXScrnSaver
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ libXScrnSaver.x86_64 0:1.2.2-6.1.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package               アーキテクチャー
                                      バージョン             リポジトリー  容量
================================================================================
インストール中:
 libXScrnSaver         x86_64         1.2.2-6.1.el7          base          24 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 24 k
インストール容量: 40 k
Is this ok [y/d/N]: y
Downloading packages:
libXScrnSaver-1.2.2-6.1.el7.x86_64.rpm                     |  24 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libXScrnSaver-1.2.2-6.1.el7.x86_64              1/1 
  検証中                  : libXScrnSaver-1.2.2-6.1.el7.x86_64              1/1 

インストール:
  libXScrnSaver.x86_64 0:1.2.2-6.1.el7                                          

完了しました!

そもそもlibXss.so.1ってなんだろう。スクリーンセーバー関係?

復活!

ナルホド無事VS Codeは起動しました!
と喜んだのも束の間。Gitのバージョンが古い(ノ ゜Д゜)ノ ==== ┻━━┻

f:id:sh_yoshida:20161129225751p:plain

Codeは2.0.0以上のgitで最適に動作します。

Gitのインストール

yumでは古いバージョンがインストールされるとのことで、こちらを参考に最新のGitをCentOS 7にインストールしてみます。

CentOS7に最新のGitを導入する方法 | vdeep

現時点で最新は2.10.2。
手順に従い進めていきます。

$ sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ cd /usr/local/src/
$ sudo wget https://www.kernel.org/pub/software/scm/git/git-2.10.2.tar.gz
$ sudo tar xzvf git-2.7.2.tar.gz

ぐぬぬ、makeでエラーが。

$ sudo make prefix=/usr/local all

(省略)
/usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] エラー 2
make: *** [perl/perl.mak] エラー 2

↓こちらを参考にエラーに対処。

gitをソースコードから入れる - Qiita

$ sudo yum install perl-ExtUtils-MakeMaker

もう一度makeコマンドを実行したらうまく行ったぁぁぁあ

$ sudo make prefix=/usr/local all
$ sudo make prefix=/usr/local install

Gitも最新になって、VS Codeも文句なし☆彡

$ git --version
git version 2.10.2

RobocopyでSharePointのドキュメントライブラリを移行する

概要

久しぶりに仕事の話です。
ひょんなことからSharePointのデータ移行をやることになりました。

SharePointとは

マイクロソフトが提供する、ウェブブラウザをベースとしたコラボレーションやドキュメント管理を行うプラットフォームの総称である。

https://ja.wikipedia.org/wiki/Microsoft_SharePoint

ドキュメントライブラリというデータを別のサーバへ移行するだけの簡単なお仕事です。エクスプローラー上でコピペでもいいのですが、ここでRobocopyです。

sh-yoshida.hatenablog.com

ネットワークドライブへ接続

まずは、コピー元とコピー先のネットワークドライブへ接続します。今回はそれぞれXとYドライブに割り当てました。

> net use X: <コピー元ネットワークドライブパス>
> net use Y: <コピー先ネットワークドライブパス>

元と先を逆にしちゃうと大惨事になるのでしっかり確認します。確認ホント大事。

> net use

Robocopyでネットワークドライブ上のファイルをコピー

コピー元とコピー先ドライブを指定し、以下のオプションを選択しました。

オプションのお品書き

  • /Z 再起動可能モード
  • /E 空のディレクトリも含めてサブディレクトリもコピー
  • /is 同一ファイルを含む(上書きコピー)
  • /XA:SH 隠しファイルとシステムファイルは除外
  • R:0 リトライ回数を0に
  • W:0 リトライの待ち時間を0に
  • /log+: ログファイルを追記形式で出力
  • /tee ログファイルと同時にコンソールにも表示する
> robocopy X: Y: /Z /E /is /XA:SH /R:0 /W:0 /log+:<log file> /tee

完全に呪文ですね。初見で死ぬ。

その他のオプションはこちら↓
Robocopy

ネットワークドライブの割り当て解除

後始末はしっかりと。確認も忘れずに!

> net use X: /delete
> net use Y: /delete
> net use

データ移行の仕事自体はクソつまらないあまり面白味はないですが、プログラマにはプログラマなりのやり方があるはず。