Friday, January 19, 2018

fedora 16でのネットワーク周りの不具合(未解決)

未だにfedora 16(2011年リリース。しかもi386..32bitです)が動いているサーバーがありました。
セキュリティ的にこれはなんとかしないとな...と思い、
ひとまず仮想環境にテスト環境を作り、
最新版のfedoraにアップグレードできるかを検証し始めたのが事の始まりでした。

[検証したかったこと]
(1)ちゃんとアップグレードできるか
(2)マシンは遠隔地にあるので、ネットワークアクセス越しでできるか
という項目でした。
先に言ってしまうと、多分無理でしょう。
grub(OS起動前)でアップグレードを選択する必要があるので(2)は満たせず、
そもそも僕が試した環境ではアップグレード用カーネルさえも出てきてくれませんでした...

それだけでなく、そもそもfedora16にまともにネットワークアクセスできなかったことが大きな障壁になりました。
2018年にこんなネタを書いても誰の役にも立ちませんが、
記録として残そうと思います。


[検証の手順]
参考にしたのは以下サイトです。
http://q.hatena.ne.jp/1488282957
コメント欄?の「自己解決しそうです〜」に手順が書いてあります。
コマンドだけ列挙すると

yum clean all
yum update
yum upgrade
yum install preupgrade
preupgrade-cli "Fedora 17 (Beefy Miracle)" 
curl "http://mirrors.fedoraproject.org/mirrorlist?path=pub/archive/fedora/linux/releases/17/Fedora/i386/os/" > /var/cache/yum/preupgrade/mirrorlist.txt
preupgrade-cli "Fedora 17 (Beefy Miracle)" 

これで再起動すると、
fedora 17用のアップグレードカーネルがgrubで選択できるようになり、
それを選択することでfedora 17へのアップグレード処理が始まります。

fedora 17からfedupコマンドが使えるようになっているので、
18以降にするにはこのコマンドでやるようです。


しかしこれではOS起動前(つまりIPアドレスが有効になる前)のgrubで選択しないとなため、
grubでupgradeを自動で選択させられないか、を考えました。
つまり、
preupgrade-cli "Fedora 17 (Beefy Miracle)" 
の後の再起動の前に、grubのデフォルトを変えておくわけです。

再起動前に以下コマンドを実行しますと、
grep ^menuentry /boot/grub2/grub.cfg
一番上に「Upgrade to Fedora 17」みたいな名前が出てくると思います。
一番上...つまりgrubの0番目を起動したいわけです。

そこでまず
/etc/defaults/grub
 GRUB_DEFAULT=saved
 GRUB_DEFAULT=0
に変更し、以下を実行します(これで適用されます)
grub2-mkconfig -o /boot/grub2/grub.cfg

よーしできたぞ、と思ってテスト環境の画面を見ていたのですが、
次の起動時grubにはアップグレードメニューは出てきませんでした...
後半のgrub起動手順変更をするとupgradeできなくなるのかもしれません。


[予定外の障害]
テスト環境で、起動時にネットワークが接続できない問題が発生し(バグかな?)、
最後まで解決しませんでした。

該当ネットワーク、つまりIPアドレスが割り当ててあるネットワーク名はp2p1とします。
もちろん
/etc/sysconfig/network-scripts/ifcfg-p2p1
はきちんと書いてあります。

OS 起動後、ifconfigするとp2p1がupしていません。外からpingが通りません。
ifup p2p1
とすると外からpingが通るようになります。
ここまでは理解できます。
テスト環境は悪名高いNetworkManagerがそもそも入っていないので、
無効になっていたnetwork serviceを有効にしてあげます

chkconfig network on
または
systemctl enable network.service

これでOS起動後にifconfigするとp2p1が見えるようになります。
が、しかし
この方法だと外からpingが通らない...
あまりにも普通のことができないので、ここで心が折れました。
上記[検証の手順]は、心折れながらもテスト環境ローカル(外部アクセスしない)で試した結果です。

未解決ですが記事はここまでです。

Sunday, January 14, 2018

人工知能で置き換えられる仕事?

昨日とあるデリのお惣菜屋さんに行きました。
人気店なのか、隣の店の前まで続く列。
別にお惣菜の在庫が出来上がらないから並ぶわけではありません。お惣菜を選んで、それをパックしてお会計を一人ずつやっており、そのスピードが遅いのです。

こういう時思うのは、人の仕事のどこまでが機械で自動化できるのかということです。
人工知能分野の人は言います。将来、現在の数割の仕事を機械がやるようになる、と。
彼らは基本、単純作業は機械で置き換え可能という理論を出してきます。
しかしそれは、作業のインプットやアウトプットが電子化できるのが暗黙の前提で、モノの移動が伴う業務の事を考えていないようです。
amazonオリジナルドラマのパトリオットのセリフであるのですが「物をある地点から他の地点に移動することはとても難しい」のです。

またamazonですが、amazon goという無人店舗の取り組みをしています。
最初に述べた小売店の販売時省力化にはつながるでしょうけど、製品を搬入したり陳列したりするのは、機械には難しそうです。
また、amazonのネット販売の小売業態も、製品の入荷、管理、発送、家までの配送と、ずっと人手が必要なのがお分かりかと思います。

まとめると、人工知能技術で人が頭で「単純な判断」している事は置き換えられるのかもしれませんが、世の中の単純労働の大半は置き換えの見通しすらたっていないという感じでしょうか。

Friday, January 12, 2018

2-in-1ラップトップはいらない

ラップトップというか、ノートPCの新モデルの多くが、2 in 1...つまりキーボードとディスプレイが分離できるモデルになっています。
そんなに人気なのかな?と思って、2-in-1のシェアを調べてみると、なんとどこにも載っていません。
なんですかこれは...
価格コムなんかでみると、値下げ幅が大きく、2in1が安くなっているのはよく見かけます。
まぁ安いのは単に2in1の中には昔ネットブックと呼ばれていたような、
画面が小さくCPUがintel ATOMのような廉価なモデルが多い影響もありますが。

そもそもwindowsはタブレットとして使われるシーンはあまりないと考えています。
保険営業マンなど、訪問営業系の方はよく持っていますが、
タブレットといえば、iPadがデファクトスタンダードになったのは何年も前の話です。

ではなんで、各メーカーがこぞって2in1を出しているのか...
それは大人気シリーズMicrosoft Surfaceが2in1だったことに由来すると考えています。
Surface売れてるから、俺たちも2in1だそうぜ、という考えでしょう。
しかしこれは大きく間違っていて、みんなは2in1がほしくてSurfaceを買っているのではないのです。
他のメーカーのPCがゴミしかないので、フラッグシップSurfaceを買っていたわけです。

まぁそもそもPC所有率は下がっていて、特に20代30代は2015年をピークにただ下がりだそうです。
2in1がどうの言っている場合ではなく、PC業界が死んでいくわけですね...

Saturday, January 06, 2018

カーテンの方が窓の断熱シートより寒さに効果あり?

アパート(マンション?)に住んでいますが、
冬の窓際の寒さは格別です。

過去に下記のようなプチプチを窓に貼るようなシート(フィルム?)


または、窓の下に置くようなボード

と試してきましたが、これがどうも効果がありません
(もしかすると後述のカーテンによる断熱を既に実施済みだからかも...)

まず「結露が防げる」とのことですが、防げません。
確かにシートの家の中側はぬれませんが、シートの窓側(接着面)はびしょびしょです。
またサッシ部分もびしょびしょ。

上記シートやボードは、空気の層を作って寒さを防いでくれるという理論はわかります。
しかしそれほど効果が感じられないのが実感でした。
外観が最悪なので、すでにどちらもはがして現在使っていません。


実はウチはそもそもカーテンでの寒さ対策をしています。
カーテンを買う時に
・分厚く
・丈が長い(引きずるくらい)
ものを選んでいます。

それでふと思ったのですが...
こういうプラスチック?ビニール?製のカーテン

って、冷凍倉庫の入り口にも使われていたりするので結構効果あるかもですね。
今度試してみます。

Friday, January 05, 2018

xhyveを使ってmacでUbuntuを動かす方法

タイトルそのままです。
2010年?くらいからdockerやら色々な仮想化技術が発展してきて、
macやwindowsでLinux動かしたいときは、
もうvirtualboxとかvmwareとかparallelsとか使わない方がいいんだろうなあ...
と思うようになりました。

後者御三家は「ホスト型仮想化」と呼ばれ、
OSの上に仮想のハードウェアを作ってその上で別のOSを動かすわけでして、
非常にオーバーヘッドが大きいです。
最近人気のdockerは「コンテナ型仮想化」と呼ばれ、ホスト型よりオーバーヘッドが小さいです。
まあ、docker for windows/docker for macの場合は、
非Linuxプラットフォーム上でLinuxカーネルを動かす?ような作りなので、
docker on Linuxよりはオーバヘッドは大きいと思います。
しかし、流石にホスト型よりは(構造上)軽いです。

と、こういう流れだと「ではdocker for macの使い方」となりそうですが、
実は僕のポンコツmacbook airは、docker for macの必要要件メモリ4GB以上を満たしていません。
つまり使えないんですね。ハイ。

で、もう一つの仮想化技術としてOSが用意しているものがあります。
例えばLinux KVMとかwindowsのHyperVとか、
macOS Yosemiteから採用されたHypervisor.frameworkです。
docker for macは内部でHypervisor.frameworkを使っています。

で、xhyveを使うとHypervisor.frameworkを利用できるとのことですので、macでdockerでubuntuを動かせるようにしてみます。


0. コマンドラインツールのインストール
https://nahareport.blogspot.jp/2017/10/iosxcode.html
こちらを参考にどうぞ

1. xhyveのインストール
https://github.com/mist64/xhyve
からgit cloneするか、zipをダウンロードしてきて解凍します
cd xhyve  #ディレクトリに移動
make
sudo cp build/xhyve /usr/local/bin   #これでどこでも使える

僕は使ってないですが、homebrew入っている人は
brew install xhyve
でもできるらしい


2. Ubuntu serverのダウンロード
https://www.ubuntu.com/download/server
16.04.3です


3. xhyve-ubuntu
https://github.com/rimusz-lab/xhyve-ubuntu
からgit cloneするか、zipをダウンロードしてきて解凍します

cd ubuntu-xhyve-master  #ディレクトリに移動
あとは
https://github.com/rimusz-lab/xhyve-ubuntu
の手順に従うだけです。
が、実は手順の「create.sh」のところで僕のMacBook airは先に進めなくなりました...
SSDの容量不足です...(やはりポンコツ)
create.shでubuntu-xhyve-masterディレクトリの中にディスクイメージが作られるのですが、
10GB以上になります。そして時間もかかりますのでご注意。


実際に試すことができなくて残念ですが、このようにしてubuntuを使うことができます。

Thursday, December 28, 2017

IoTシステム技術検定試験合格してました

この前受験して来たと書きましたが、なんとか受かっていました。
純粋に合否だけが知らされ、得点がわからないのでギリギリだったのか否かもわからずです。
まぁ受かってよかったです。

会社の同僚は前日だけの勉強で受かり、実力の差を感じてしまいました...

Sunday, December 17, 2017

pythonでfor文を使わないってどういうこと?

こんばんわ。python永遠に初心者の僕です。
pythonはfor文が遅いから使わないようにした方がいい...

何度今まで聞いたことでしょう。
しかし調べても、あまりまとまったサイトがないようなので、自分のためにまとめてみます。
まずはリスト(配列。dataとする) からの検索です。
リストであるlistから"mokuteki"が入っている場所を探します。

1. listのindex
実は以前調べていました。
http://nahareport.blogspot.jp/2015/11/for.html

data.index("mokuteki")

で検索できます。


2. bisect
bisectを使うにはlistがソートされている必要があるようです。
ソートはリスト標準の

data.sort

はマージソートで、かつ下手に自分で書くよりは早いようですのでこれを使いましょう。
でbisectの使い方はこんな感じ。

import bisect as bisect
bisect.bisect_left(data, "mokuteki")



では今度は、検索でなく逐次実行について。
リストから条件にあったものだけを取り出し(抽出)です。
例えば僕は、matplotlibでプロットするときに、3列目が0未満だったら赤、0以上だったら青...
みたいな逐次処理での色分けをよくやります。
data2を3列のnumpy.arrayとし、3列目が0未満のものを抽出したいと思います。
これを高速にやるには以下2種があるようです。


3. filter
filter(lambda x: x < 0, data2[:,2])

lambda方式を使って非常に簡単にかけますね...

4. リスト内包表記
[x for x in data2[:,2] if x < 0]

forを使っているじゃないか!と思いきや普通のforの2倍速いそうです)

当たり前ですがfilterもリスト内包表記も「3列目」を見て、その行3列全てを取り出すのはできません。う〜ん...


追記
5. numpy.where
僕のやりたいことはnumpyでできそうです。
速度は...forよりは速いんだろうなあ...

data2[np.where(data2[:,2]<0),:]

何をやっているかというと、
data2[:,2]<0
ここで、3列目が0より小さい「行」がTrueで返されます
np.where(data2[:,2]<0),:
こうすると、3列目が0より小さい「行番号(0始まり)」が返されます。
data2[np.where(data2[:,2]<0),:]
これで、上記行番号の行を(",:"で他の列も全部を指定)抽出しています。


参照:
https://stackoverflow.com/questions/2701173/most-efficient-way-for-a-lookup-search-in-a-huge-list-python
https://stackoverflow.com/questions/3855537/fastest-way-to-sort-in-python
http://php6.jp/python/basics/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98/