サイコロを転がす問題

Aize On Judgeの問題解きは結構続いています。もう少しでIntroduction To Programming Iが完了しそうです。今回はサイコロの問題。今まではサイコロを決まったとおりに転がしたときの目のを求める問題で迷いました。

問題は下記のリンクにあります。
Aizu Online Judge Dice I

サイコロの6面にそれぞれ数字が割り当てられて、N,S,W,E(東西南北)にサイコロを回転させたときに上に来る数値を回答するような内容です。しかも今後のためにクラスや構造体で作成しておくとのこと。

実際にサイコロを作成して、N,S,W,Eへそれぞれ回転させたときに、どこに移動するか確認し、配列を受け渡すプログラムを作成しました。

こんな感じで、S,W,Eの場合も考えると。

コードは以下のようになりました。

#include <iostream>
#include <string>
#include <array>
using namespace std;

struct Dice
{
    array<int, 6> roll;
    void toNorth()
    {
        array<int, 6> t = roll;
        roll[4] = t[0];
        roll[0] = t[1];
        roll[5] = t[4];
        roll[1] = t[5];
    }
    void toSouth()
    {
        array<int, 6> t = roll;
        roll[1] = t[0];
        roll[5] = t[1];
        roll[0] = t[4];
        roll[4] = t[5];
    }
    void toWest()
    {
        array<int, 6> t = roll;
        roll[3] = t[0];
        roll[0] = t[2];
        roll[5] = t[3];
        roll[2] = t[5];
    }
    void toEast()
    {
        array<int, 6> t = roll;
        roll[2] = t[0];
        roll[5] = t[2];
        roll[0] = t[3];
        roll[3] = t[5];
    }
};

int main()
{
    int num;
    string commands;
    Dice dice;
    for (int i=0; i<6; i++) {
        cin >> dice.roll[i];
    }
    cin >> commands;
    size_t size = commands.size();
    for (size_t i=0; i<=size; i++ ) {
        if (commands[i]=='N')
            dice.toNorth();
        else if (commands[i]=='S')
            dice.toSouth();
        else if (commands[i]=='E')
            dice.toEast();
        else if (commands[i]=='W')
            dice.toWest();
    }
    cout << dice.roll[0] << endl;
    
    return 0;
}

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3407308#1

mac OS mojave で前と変わったこと

telnetができない

あまりよく使うコマンドでは無いから気がつくまで時間がかかったが、telnetができなくなっていた 。telnetはTCPポートが開いているかどうかの確認の時によく使う。使い方としては次のような感じ。
$ telnet 192.168.0.2 80
いつからだろう。思い当たるのはOSをアップデートした頃ぐらいかな。inetutilsをインストールして解決できた。
brew install inetutils

pingができない

そしていつの間にかpingもできなくなった。

ping 192.168.20.2
ping: Lacking privilege for raw socket.

whichで調べてみると、下記のファイルになってた。
$ which ping
/usr/local/opt/inetutils/libexec/gnubin/ping

inetutilsをインストールしてからか?
解決策として管理者としてやるか、別のpingプログラムを使うか。
$ sudo ping 192.168.0.2
$ /sbin/ping 192.168.0.2

どちらでもそんなに手間ではない。

コンピュータ名でping

pingで思い出したが、windowsのpingは ping <コンピュータ名>のようにコンピュータ名を打って、pingができる。macはWindowsみたくコンピュータ名でpingは打てないようだ。同じようにできないかと調べたが見つからなかった。しかし、一つだけ名前からip アドレスを調べるコマンドは分かった。sumutilだ。使い方はこう。
$ smbutil lookup <PC name>

TP-Link スマートコンセントHS-105をAPIから操作(3)

昨日の続きでPython3で通信できるようにやってみた。まだPython2系が無くなったわけではないし、緊急性はなかったが、動作しないのを見たらどうしても直してみたくなった。ちなみにPythonバージョンは3.6.4。

実行してまず、実行エラーで引っかかったのはprint関数。
Python2 ・・・ print ‘文字列’
Python3 ・・・  print(‘文字列’)
これはすぐに分かった。
もう一つ大きなものは、文字列とバイト列の関係だ。変わったのはわかってたので、単純にbytes関数で変換したら、エラーは消えたが全く返答が帰ってこない。

わけが分からずに使っていたが、bytes()関数は大きさを指定してbytesオブジェクトを作る関数だったようだ。

bytes(10)
b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’

Python3は文字列はデフォルトでUnicodeになって、その代りbytes型ができた。
下記のような感じである

PYTHON3PYTHON2
byte列bytes (b”)str (”)
通常の文字列str (”)str (”)

要するに文字列をbyte列に直せば良い。
変更箇所は下記の通り
まずは暗号化関数

整数をからbyte列に変換するにはto_bytes()関数を使用する。動作は下記の通り。

i=ord(‘a’)
i.to_bytes(1,’big’)
b’a’

Python3.2から使用可能。標準関数なのでimportする必要はない。
これがわかるまで結構時間がかかってしまった。
次に復号化

受信する時に、byte列で入ってくるので、Python2のようにord() 関数で整数に戻す必要がないので、記入としては減る方向になった。

無事にPython2のファイルと同じことができた。

Adobe Acrobat Reader DC のものさし機能が便利

仕事では電気設計の仕事をしていて、設備のハード図を書いて、モータケーブルの長さを決めて手配することもしている。装置内のケーブルの長さはメカ設計に相談し、メカ設計がCADでケーブルをはわす経路の長さを測って教えてもらうのだが、メカ設計が忙しいときはなかなか聞きにくい。PDFベースの図面はもらっていてこれで何かできないかと探していたら、なんとPDFを見るのに使っているAdobe Acrobat Reader DCにものさしがあることが分かった。

使い方は簡単。ツールタブからものさしをクリックするとツールバーが表示されるのでものさしを選択するだけ。寸法線のところで計ってみると長さが全然違って表示された。縮尺が全然合ってないようだ。

そんな時は縮尺を合わせることもできる。測定タイプのツールバー以外のところで右クリックし、「測定比率と精度を変更」をクリックする。寸法測定中でも、右クリックをすれば3段目に表示される。ものさしツールを選択してないと表示しないので注意していただきたい。

右クリックメニューに「測定比率と精度の変更」がある

測定比率は電卓を使って計算する。図面上の表示寸法が300mmで、ものさしでの測定寸法が59.99mmなので単純に割り算をすればよい。300 ÷ 59.99 ≒ 5 。なので5と言う数値を入力する。入力欄がグレー色になっているので分かりにくいが入力することができる。計算結果が小数点の場合は小数点第5位まで入力できるので入力した方がよい。あまり小数点第1位ぐらいで四捨五入すると、正確な数値にならない。また、精度は1に設定。ここで細かく小数点まで表示してしまうと、切りのいい数字で表示されずに見ずらい。

測定比率と精度を変更ウィンドウ

実際に測定して確かめてみると正確に寸法が表示される。

測定結果

円も測定することが出来る。

ただ測るだけではなく、ファイルを保存すれば寸法線をそのまま保存することもできる。このやり方を見つけてからは、メカ設計の手を止めることもなくじっくりと測ることが出来るようになった。

XCYベアボーンキットにWindows10インストール(2)

Windows10を諦められない

DebianでやっていたがWindows10が諦められない。できないままで終わるのは嫌だ。それにWindowsのデスクトップアプリを試す環境がどうしても欲しい。前回は起動ディスクをUSBメモリーで作ったが、DVDにしてみてはどうか。イメージファイルをDVDに焼いてインストールすることにした。

イメージDVDを作成

MACでイメージファイルを焼くのはすごく簡単。外付けのDVDドライブを取り付けて、新しいDVD-Rをセットし、Finderでイメージファイルを右クリックして「ディスクイメージファイルを・・・.iso をディスクに書き込む」だけ。書き込みにかかる時間はUSBメモリーに作成するよりずっと早い。

XCYベアボーンへインストール

外付けDVDドライブを取り外し、そのままXCYベアボーンへ取り付け、F11を押しながら起動し、起動後、何かキーを押せばインストールが開始する。後はウィザードに従うだけ。思ったより簡単にできた。

Wi-Fiは問題なし

Debian 9で苦労したWi-Fiの設定はWindows10では全く苦労せずに設定できた。さすがWindowsだ。

画面が真っ暗に

しかし問題が起きた、一度シャットダウンして再び電源を入れたら、ログイン画面は表示するが、ログイン後に画面が真っ暗でマウスポインタだけ映るようになった。Ctrl+Shift+Delete メニューは問題なく表示する。調べてみるとグラフィックでエラーが出ているとのことだった。コントロールパネルのデバイス設定を見るとエラーになっていた。そのままドライバーを更新たところ解消した。次からはシャットダウンして立ち上げても全然問題なかった。

Macからリモートディスクトップ

Macからリモートデスクトップで接続して作業したかったので、Windows 以前使用したことがある、Remote Disktop Ver8で接続することを確認。しかし画像ファイルのコピペができないから使い勝手が悪いと思った。調べるとVer10では出来るらしい。早速ダウンロードして接続しようとしたが、ログインするところで接続できなかった。いろいろ調べて試してみた。結果的に言えば通常しているログインIDではなく、Windows ID でログインすることが出来た。 画像のコピペができることも確認した。

XCYベアボーンキットでDebian9 セットアップ Wi-Fiに苦労

前回、Windows10は起動すらしなかったが、Debian 9は問題なくインストールが開始した。ウィザードに沿ってクリックしていくだけなので、通常のセットアップは全然問題なかった。

Wi-fiが全然つながらない

1つだけ苦労した点がある。Wi-Fiが全然つながらない。有線Lanはあるので、そちらからはつながることは確認した。
下記コマンドで確認。

lmjs@debian:~$ lspci -vvnn | grep -A 9 Network
02:00.0 Network controller [0280]: Broadcom Limited BCM43224 802.11a/b/g/n [14e4:4353] (rev 01)
Subsystem: Broadcom Limited BCM43224 802.11a/b/g/n [14e4:04d8] Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 18
Region 0: Memory at f7c00000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: bcma-pci-bridge
Kernel modules: bcma

これを見ると、XCYベアボーンキットのWi-FiドライバBroadcom Limited BCM43224が認識してそうなかんじだ。

いろいろ調べているうちにdebianページにのやり方が書いてあった。DebianではBroadcomのドライバは初期でインストールされていないようだ。
brcm80211 – Debian Wiki

まずは、/etc/apt/sources.list の最後の方に書きを追加
“`
deb http://deb.debian.org/debian/ stretch main contrib non-free

インストールと反映

lmjs@debian:~$ sudo apt update
lmjs@debian:~$ sudo apt install firmware-brcm80211
lmjs@debian:~$ sudo modprobe -r brcmsmac
lmjs@debian:~$ sudo modprobe brcmsmac
“`

余談 Minecraftは動くか

数年前に買ったAcer製のネットブックにMinecraft PC版をインストールしたときは全然動かなかったので、試しにインストールしたところ、全然問題なくプレイすることができた。

ちなみにAcer製のネットブックでもWindows10バージョンは問題なく動作した。

XCYベアボーンキットにWindows10インストール(1)

メモリカードからのOS起動

早速OSをインストールことにした。8GBメモリーだから64bitOSでないと意味が無い。Windowsデスクトップアプリを作って試す環境がほしかったのでWindows10 64bit版にした。Windows10はインターネットサイトからダウンロードした。

USBメモリーへ書き込み

macからの書き込みはターミナルでコマンドラインから実行した。

diskutil eraseDisk MS-DOS UNTITLED /dev/disk4
diskutil unmountDisk /dev/disk4
sudo dd if=/Users/username/Win10_1803_Japanese_x64.iso of=/dev/disk4 bs=1m
diskutil eject /dev/disk4

ddコマンドには1時間半ぐらいかかるので気長にやるしかない。途中進んでいるか不安になるが、ctrl+tで現在の容量を確認することができる。

XCYベアボーンキットから起動

電源ボタンを押したらF11キーを押しすと、外部から読み込みが始まる。しかしうんともすんとも言わない。Biosから読み込みドライブの順番を変えてもダメだった。

64bit版だからダメなのだと思い、USBメモリに32bit版を書いて実行したがダメだった。このインテルCPUは64bitだということは知っていたが、もしかしたらと思い試して見た。何度か試してもダメだったので、諦めて他のOSで試そうと思った。Linuxでまた使ったことのないDebian 64bit版にすることにした。早速Debianで試してみたら難なくインストールが開始した。せっかくだからこのままDebianをインストールして試すことにした。

この日はDebianに落ち着いたけれど、USBメモリに、OSを3回も書き込んだのでかなり時間がかかった。

XCYベアボーンキットのメモリーとSSDの交換をした

前回、XYCベアボーンキットが起動することを確認して、メモリーとSSDを交換することにした。

中身を確認しようとしたら意外に苦労

まずは中がどうなっている確認。底面のカバーを開けて中身を確認しようとしたところで最初につまづいた。どうやって開けるんだ?見る限り皿ビスが2箇所しかない。よくよく見てみると皿ビスがあるべき場所にシールが貼ってあった。この下にビスがありそうだ。早速はがすとビスはあったが、文字が転写された。故障し、メーカへ出した時にフタを開けたかどうか分かるようにしているのだろう。

皿ビスを4箇所外してフタを取り外そうとしたら外せない。他に止まっているところがあるのか? しかし全然見当たらない。どうやらしっかりとハマっているだけのようだ。長孔に引っ掛けて取ろうと思ったけれど曲がってしまいそうだったのでやめた。外した皿ビスを、カバーのビス穴に付けて、ラジペンで引っ張ってフタを取り外すことができた。

裏面画像

ようやく中身を確認できた。

中身の画像


部品はAmazonで購入

SSDは2.5インチタイプ、メモリーはSO-DIMM(DDR3L)と取説に書いてあったので早速Amazonでなるべく安いものを探がした。

Amazon | シリコンパワー ノートPC用メモリ 1.35V (低電圧) DDR3L 1600 PC3L-12800 8GB×1枚 204Pin Mac 対応 永久保証 SP008GLSTU160N02 | シリコンパワー | メモリ 通販

Amazon | KingDian mSATA mini PCIE 32GB 60GB 120GB 240GB SSD Solid State Drive (30mm50mm) (M280 240GB) | KingDian | 外付SSD 通販

注文して翌日発送。さすがAmazonだ。早速取り付けた。部品の交換自体は。ノートパソコンの部品交換と同じような感じ。特に問題なくすんなり交換することができた。

次回はOSインストールだ

XCYベアボーンキットを購入した

ふだんは家ではMacBookを使用していて、不自由な点はあまりないが、Windowsでもためしてみたくなることもある。Windows8からバージョンアップしたAcer製のネットブックがあるが、非力で動作がおそい。Macでも仮想ツールであるVMWareでWindow10を使っているが、これも遅いときがあるし、CPUを使うためかMacbookの冷却ファンが激しく回ってうるさいからだ。

まず自作にするか検討したが、欲しいものをいろいろ買っていると高く付きそうだし、置くスペースが限られているので小さくしたいのでやめた。いろいろ調べているとベアボーンキットなら小さいものもあることが分かった。

まずは有名なところでintel NUCだったが、少し高いし形がキューブがただったので我が家にはせっちしにくいので却下。 他のメーカのベアボーンキットをAmazonで探していると、XCYというメーカのベアボーンきっとがあることが分かった。

XCY Core i5 3317U ベアボーン ファン 熱伝導率良い VESA付け 小型 省スペース

サイズも小さめだし、アルミ製で少し高級感があるし、平べったいので我が設置しやすいところが気に入った。

だが、スペックに不明なところがある。例えばメモリやSSDは何をつければよいかわからなかった。

レビューにはまだ記載がなく不安だったが、XYCの他の機種のレビューではそこそこの評価で悪くなさそうだ。

海外の通販でもこの商品は表示されるが、同じくスペックはあまり詳しく載っていない。

そもそもXYCはどんな会社だと考えメーカのホームページに行くことにした。ホームページを探すだけでも苦労した。 Xinyunchuang Technologyという中国深センの会社らしい。

メーカホームページも見に行ったがもちゃんとした情報が載っていなかった。それどころか、買おうとしていた商品も見つけ出せない。

ますます不安になったがそこまで高いものではないし、SSDやメモリーのスペックは買ってからでもなんとかなるだろうと思い。思いっきって購入を決断した。

Amazonで注文したら到着予告が10日後になった。配送情報を確認すると2日後に発送されたが、更新されずまた不安になった。次に更新されたのは結局予定日の前日になってからだ。

9月5日に注文して9月21日に到着したので、注文時にAmazonに記載されている日打擲したことになる。日本では佐川急便が配送したようだ。

スペックはAmazonに記載されているのと若干違う。 ベアボーンキットなのに、SSDやメモリーが組み込まれ、Windows7がインストールされており、すぐに起動することが出来た。

到着してもSSDやメモリを買ってから出ないと確認が出来ないと思っていたので、これは嬉しいサプライズだ。

起動して確認してみてわかったことは、CPUは載っているスペックと違う。AmazonにはCore i5 3317Uと載っていたが、i5-3337Uだった。

記載されていなかったSSDは32GBで2.5インチタイプ、メモリーは4GBでSO-DIMM(DDR3L)、OSはWindows7 32bitがインストールされていた。

取説にはSSD、メモリー、Wi-Fiモジュールの設置方法が載っていてベアボーンキットらしい感じだ。 しかし、組み立てが必要だったのはWi-Fiのアンテナを取り付ける部分だけぐらいだった。

注文したときや配送時は不安であったが、届いたら悪くない感じだしベアボーンキットなのに起動し故障や不具合が無いか確認できることが良いことだと思った。この先SSDとメモリを交換しOSをインストールするときも、パソコン本体の不具合では無いということがわかるからだ。

さすがにSSDの容量が低すぎるため増量したい、せっかくだから64bitにしてメモリも増強したいと思った。

背面
付属品
マニュアル(表)
マニュアル(裏)

mac プレビューの機能が素晴らしい

 長年仕事でWindowsでは、irfanviweというソフトを使ってスクリーンショットした画像を切り取って、WordやExcelに貼り付けてレポート等を作成してきた。Windowsの標準アプリであるペイントではどうしても画像編集は厳しいので他のソフトをインストールしなければならない。

 その考えが頭にあったので、家でmacを使うときもなにか良いフリーソフトが無いか探したがなかなか良いのが無いのであきらめていた。しかし、ある時標準に搭載されているプレビューでいろいろ編集ができることわかって感動したのを覚えている。

 スクリーンショット、切り出し、簡単なコメントや矢印を入力がプレビューだけで出来てしまう。よく使う機能は以下の通り。

1,スクリーンショット

ファイル ⇒  スクリーンショットを撮る ⇒ ウィンドウ…

img screen shot

2,切り取り

切り取りたい部分をマウスで選択し、ツール ⇒ 切り取り または ⌘+k

3,サイズを調整

スクリーンショットした画像がそのままのサイズで、貼っていくと容量が大きくなってしまうので、サイズを小さくしておく

ツール ⇒ サイズを調整

4,文字や矢印を書く

表示 ⇒ マークアップツールバーを表示

実際にやってみた動画はこちら