サーバ リプレイス

サーバに使ってたAtom N330のPCですが、あまり使ってない&ファン音がうるさいので、一年以上電源すら入れてませんでした。GWで休みなのでリプレイスすることにしましょう。

今回購入したのはShuttle DS57U。
f:id:jetBeaver:20150503101352j:plain
www.shuttle-japan.jp

一緒に、Samsung SSD 850 EVO mSATA 120GBとCFD Elixir DDR3L 1600MHz 8GBも購入。(型番だと、MZ-M5E120 と D3N1600Q-L8G)

組み立ては超簡単なので解説するまでもないですね。Dockerの実験とかしたく、OSどうしようか迷ったけどとりあえずCentOS 7を入れておいた。

稼働中にHDMI抜き差しすると、

[drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 130

とか出てくるけど、気にしない。

ファンレスなので稼働中は完全無音。いいですね。今まで手ごろなファンレスPCだとAtom系プロセッサが多かったですが、DS57Uは’Broadwell-U’Intel Celeron 3205U搭載なので性能もだいぶマシになってるかと。(Atom N330はさすがにとろかった)

UNIX BENCHの結果も貼っときます。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: noop: GNU/Linux
   OS: GNU/Linux -- 3.10.0-229.1.2.el7.x86_64 -- #1 SMP Fri Mar 27 03:04:26 UTC 2015
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Celeron(R) 3205U @ 1.50GHz (2993.1 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 1: Intel(R) Celeron(R) 3205U @ 1.50GHz (2993.1 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   09:45:08 up 19 min,  1 user,  load average: 0.10, 0.05, 0.03; runlevel 3

------------------------------------------------------------------------
Benchmark Run: 日  5月 03 2015 09:45:08 - 10:13:22
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       17444542.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2720.9 MWIPS (9.9 s, 7 samples)
Execl Throughput                               2626.3 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        583978.7 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          167450.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1538414.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                              941660.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 122952.4 lps   (10.0 s, 7 samples)
Process Creation                               8663.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4462.0 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    893.4 lpm   (60.0 s, 2 samples)
System Call Overhead                        1422643.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   17444542.6   1494.8
Double-Precision Whetstone                       55.0       2720.9    494.7
Execl Throughput                                 43.0       2626.3    610.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     583978.7   1474.7
File Copy 256 bufsize 500 maxblocks            1655.0     167450.0   1011.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    1538414.4   2652.4
Pipe Throughput                               12440.0     941660.4    757.0
Pipe-based Context Switching                   4000.0     122952.4    307.4
Process Creation                                126.0       8663.9    687.6
Shell Scripts (1 concurrent)                     42.4       4462.0   1052.4
Shell Scripts (8 concurrent)                      6.0        893.4   1489.1
System Call Overhead                          15000.0    1422643.3    948.4
                                                                   ========
System Benchmarks Index Score                                         931.2

------------------------------------------------------------------------
Benchmark Run: 日  5月 03 2015 10:13:22 - 10:41:37
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables       34825486.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5441.2 MWIPS (9.9 s, 7 samples)
Execl Throughput                               5794.2 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        998230.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          289651.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2468148.8 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1879296.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 411993.8 lps   (10.0 s, 7 samples)
Process Creation                              18371.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6687.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    913.8 lpm   (60.1 s, 2 samples)
System Call Overhead                        2411994.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   34825486.9   2984.2
Double-Precision Whetstone                       55.0       5441.2    989.3
Execl Throughput                                 43.0       5794.2   1347.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     998230.2   2520.8
File Copy 256 bufsize 500 maxblocks            1655.0     289651.2   1750.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    2468148.8   4255.4
Pipe Throughput                               12440.0    1879296.2   1510.7
Pipe-based Context Switching                   4000.0     411993.8   1030.0
Process Creation                                126.0      18371.9   1458.1
Shell Scripts (1 concurrent)                     42.4       6687.3   1577.2
Shell Scripts (8 concurrent)                      6.0        913.8   1522.9
System Call Overhead                          15000.0    2411994.1   1608.0
                                                                   ========
System Benchmarks Index Score                                        1716.6

負数の剰余

最近、これ見て、負数の余剰にこういう使い方があるんだーって思いました。
エクセルの角度の算出についての質問です.x,yにある値を代入して,... - Yahoo!知恵袋

処理系によって違うみたいなので、気になって試してみた。

C (Apple LLVM version 6.1.0 (clang-602.0.49))

$ cat mod.c
#include <stdio.h>

int main(void)
{
    printf("%d\n", -150 % 360);
    return 0;
}
$ gcc mod.c && ./a.out
-150

Haskell

Prelude> (-150) `mod` 360
210

Ruby

irb(main):001:0> -150 % 360
=> 210

Scala

scala> -150 % 360
res0: Int = -150

Swift
f:id:jetBeaver:20150421210028p:plain


確かに違いますね。使うときは気をつけましょう。

Haskell道 その1

Haskellはforやwhileのような繰り返し構文がないんですね。なかなか戸惑いますが慣れでしょうか。

早速、コンビネーションを得る関数を作ってみた。

module Main (main) where

combination :: Integer -> [Integer] -> [[Integer]]
combination n elems | n <= 0 || length elems == 0 = []
combination 1 elems     = map (\e -> [e]) elems
combination n (e:elems) = current ++ others
    where current = map (e:) (combination (n-1) elems)
          others  = combination n elems

main :: IO ()
main = do
    print (combination 3 [1,2,3,4,5])

出力

*Main> main
[[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5]]

Haskellインストール

さてさて、今年はHaskellを覚えようと思ってます。
まずはインストールしましょう。

なお、インストール環境はこちら;
Mac OSX Yosemite(10.10.3), Xcode 6.3

インストールはとっても簡単で、Haskell Platform for Mac OS Xからpkgをダウンロードしてきて入れるだけ。
そしたら、/usr/bin 配下に、ghcとかghciとかcabalとかのリンクファイルが置かれます。本体は/Library/Frameworks/GHC.frameworkとか/Library/Haskellにインストールされてるみたい。

早速、ghciでインタラクティブに実行してみましょう。

$ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> putStrLn "hello, world"
hello, world
Prelude> 

よーし、やるぞ!

Ether frameヘッダの欠如したpcapをwiresharkでみる方法

LinuxEthernet ネットワークインターフェイスからtcpdumpで取得したpcapがなんかおかしい。バイナリで見るとEther frameヘッダが欠如してるし。。

そんなときは、pcapヘッダのdata link typeを'RAW'に設定することでペイロードを直接IPとして見てくれる。

以下のコマンドで21byte目を書き換えて、wiresharkで開けばいいわけです。
echo -en '\x65' | dd bs=1 seek=20 conv=notrunc of=./tcpdump.pcap

Developers Summit 2015

しばらく前になるけどDevelopers Summit 2015に行ってきたときのメモ。

ITアーキテクト

・作るから運営へ

・静的構造から動的構造へ
部品を組み合わせてサービスを作る

・歴史
昔:静的構造の計画型プロセス
アジャイル:静的構造の調整型プロセス
今:動的構造の計画型または調整型プロセス

・個々の部品
システムを構成する部品同士(サービス同士)は、
 APIによって連携
 独立した構造とプロセス
 独自のライフサイクル
 個別のドメイン

・アーキテクト
構造とプロセスを定義する
 様々な利害調整・プロトタイピング・評価の方法までやる
 ドメインに対する理解、

・責任
最大公約数を目指す
全部やるのは難しい。全員の要望を全部足していては爆発するだけ。
最大公約数でやると全員が満足しない。理解されない事も多い。
自分の責任としてやる。

・銀の弾丸はない
事前の検証をきっちり
弾丸を込めたら打ち抜く

・妥協して、諦める
考え抜いて諦める
諦めるときは未来に託す(丸投げではない、託すために何ができるか)

途中から聞いたけど、SIer屋さんの話かな。どちらにせよ完璧はないので有限時間内に方針を決めて推進していかないといけないんだよね、どんなシステムだろうと。なんて自分の経験と照らし合わせたり。

暗号技術

公開鍵方式
RSAはもう安全でない
 → 楕円曲線暗号 を開発

・楕円曲線暗号
240bitでRSA3096bitぐらいの強度

楕円曲線とは
円柱の表面世界。広げると、メルカトル図法。

楕円曲線の世界で斜め(ペクトルP)に移動x歩移動する。
xからxPは分かるが、xPからxは分からない

実際の暗号ではxをお互いに交換する。

・代理暗号
変換暗号鍵をクラウドに渡すと、クラウドの情報を
復号せずに別の鍵で暗号化されたデータを生成させる。
これにより、別の人にオリジナルの復号鍵を渡さずに
別の専用の復号鍵で復号できるデータが作れる。

・属性ベース暗号
復号できる人を限定したい。
ファイルサーバでアクセス権はユーザ単位で割り当てられたが、
それを暗号化の仕組みに取り込んでいる。

・秘密鍵の分散化?
よくわからんかった

・暗号化したままの処理したい
準同型暗号

完全準同型暗号
加算処理、乗算処理ができる暗号。
まだまだ実用まで逝かない。暗号鍵が数百メガ〜数GB

検索暗号、関数型暗号
(メモり損ねた)

暗号は全然知らないのですごく興味深かった。クラウドにアップロードした暗号化済みデータを安全に扱うために、代理暗号などが考えられてるとかおもしろい。

【書評】Team Geek

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

エンジニアが持つべきマインドと、周囲の対象(仕事、同僚、上司、顧客のフィードバックなど)とどう向き合うかを、Googleの中の人が書いた本。

一番重要なのは以下の3つをマインドとして持つこと。書中ではHRTと呼ばれている。

  1. 謙虚(Humility)
  2. 尊敬(Respect)
  3. 信頼(Trust)

チームで成果を出すのに一番難しいのは人間関係であって、それにどう向き合うか、言葉や文化が違えど同じなんだなと感じた。とりわけ、コードレビューで指摘する言葉の選び方。コードに対して「そこは〇〇パターンで書くべきだ。」と言うより「ここは〇〇パターンで書いたほうが読みやすいでしょうか?」と言うべきと謳っている*1。遠回しな言い方だが、本質は相手への指摘ではなくコードそのものへの指摘であることを強調することです。
英語圏の人だとずばずば言うのかと思ったら、その辺も考慮してる人もいるのですね*2

あと、謙虚と自信の境目が難しい。

*1:英語原文だと印象が違うかも

*2:ただの偏見