1.21 jigowatts

Great Scott!

【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

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

Ruby CSVの書き込みと読み込み

Tips

CSVの読み書き

require 'csv'

# 文字列への書き込み
csv_string = CSV.generate do |csv|
  csv << [1,'Alice',18]
  csv << [2,'BoB',21]
  csv << [3,nil,nil]
  csv << [4,"",""]
end

# 文字列からの読み込み
CSV.parse(csv_string) do |row|
  p row
end

puts "*" * 30
# ファイルへの書き込み
arr_of_arrs = [[1,'Alice',18],[2,'BoB',21],[3,nil,nil],[4,"",""],[5,'Catherine',34],[6,'Diana',46]]

CSV.open('output.csv','w') do |csv|
  arr_of_arrs.each do |arr|
    csv << arr
  end
end

# ファイルからの読み込み
CSV.foreach('output.csv') do |row|
  p row
end

NASAのデータを取り込んでみる

f:id:sh_yoshida:20161123031652p:plain

リファレンスマニュアルを読んで試してなんとなく動かせたので、先日知ったNASAのオープンデータをCSVで落として無駄に読み込んでみたくなりました。

open.nasa.gov

いろんなデータがあって、どれが何だかよくわからなかったので最も人気がありそうな隕石落下データを使ってみることに。

https://data.nasa.gov/Space-Science/Meteorite-Landings/gh4g-9sfh

Excelで開いてみるとこんな感じ。名前、質量、落ちた年、緯度、経度。あとはなんだろ、よくわかりませんが隕石のデータですね。4万5千件ほどあります。

f:id:sh_yoshida:20161123025458p:plain

Meteorite Landingsとかクソかっこいいデータだけど、CSVでExportしてきて読み込むだけで申し訳ない。

やっぱり生のデータを使うとうまく行かないことが出てきますね。エンコーディングでハマり、nilのデータでハマり、ヘッダーの扱い方、関係ないけど文字列のフォーマット指定での日時変換などだいぶ寄り道しちゃいました。

require 'csv'
require 'time'

# 一度に読み込み
csv_data = CSV.read('Meteorite_Landings.csv',headers: true,encoding: 'UTF-8')

target = Time.parse("1925/01/01")

puts csv_data.select{|row|
    unless row["year"].nil?
      Time.strptime(row["year"],"%m/%d/%Y") == target
    end
    }

実行してみると1925年の隕石情報が出ました!

f:id:sh_yoshida:20161123032308p:plain

NASAすごいです。