mamori017.log

歴史的クソブログ

Raspberry Piを載せるためにワイルドミニ四駆を買った

失敗した話。

最近ミニ四駆にはまっていて、店頭でワイルドミニ四駆というコースで走らせるタイプではないミニ四駆が目に留まったので買ってみました。 ランチボックスJr.というモデルで、ぱっと見た感じRaspberry Piを内蔵できそうです。

f:id:mamori017:20191023002307j:plain

が、早速見込み違いで、箱を開けた瞬間に普通の大きさのRaspberry Piは搭載できない事を悟りました。 ワイルドミニ四駆の実物を見たことが無かった、というか買う前に少し調べておけば良かったです。 Raspberry Pi Zeroの大きさであれば問題がクリアできそうなのは唯一の救いです。

f:id:mamori017:20191023002310j:plain

このままで終わるのもなんなので。

以前、単3乾電池6本か8本でRaspberry Piが動くというのを見た気がしたので、 それだけの重量があってもちゃんと走るのか試してみました。

結果、単3乾電池8本とRaspberry Piを載せてもちゃんと走ったのですが、 重量分の負担はあるので場合によってはモーターを交換したほうが良さそうです。

f:id:mamori017:20191023002314j:plain

とりあえず今回は勢いだけで何もできず失敗に終わりましたが、 Raspberry Pi Zeroが手に入れば内蔵させて走行させるくらいはできそうなのでまた改めて試してみたいと思います。 調べてみるとMKZ4というミニ四駆をラジコンのように扱うキットもあるのでこちらを試してみるのも面白そうです。

たぶん続きます。

ワイルドミニ四駆改造キット MKZ4

ワイルドミニ四駆改造キット MKZ4

タミヤ 1/32 ワイルドミニ四駆シリーズ No.03 ランチボックス 17003

タミヤ 1/32 ワイルドミニ四駆シリーズ No.03 ランチボックス 17003

AMD Ryzen 5 3600でPCを自作した

f:id:mamori017:20191008021510j:plain

消費税増税前にデスクトップPCの構成を更新しました。

これまでの構成を何年使用していたのか思い出せませんが、 使用していたCPUはIntel Core i3 4160でHaswell Reflesh世代なので多くても5年、 少なくとも3年強は使用していたように思います。

今回は当時発売されたばかりだった第3世代Ryzenで組むことにしました。 とりあえずCPUとマザーボード、メモリだけ買い換えです。 ケース、電源、グラボなどは使いまわしで追々変えていく予定です。

購入したパーツ

AMD Ryzen 5 3600

6コア12スレッドあれば十分だろうという判断で下位モデルのRyzen 5 3600にしました。 スペックは十分ですが、今更ながらRyzen 5 3600XかRyzen 7 3700Xでも良かったのではと思っています。

サイズ オリジナルCPUクーラー 虎徹 Mark II

サイズ オリジナルCPUクーラー 虎徹 Mark II

CPUクーラーはソケットAM4にも対応していたので、これまで使っていたサイズの虎徹 Mark IIを流用しました。

ASUS ROG STRIX B450-F GAMING

チップセットのX570を選びたかったのですが、ファンがうるさいなどの情報があったのでB450チップセットの中から選びました。 ゲーミングモデルにしたのは耐久性を期待してのことです。

G.SKILL F4-3200C16D-32GSXWB

マザーボードは64GBまで対応しているようですが予算があったので32GBにしました。 これまでメモリが16GBしかなかったので、 重い処理をする時は常時稼働の仮想マシンを停止させたりしていました。 それが結構ストレスだったので解消されただけ良かったです。

KazeFlex120 RGB PWM

KazeFlex120 RGB 1200rpm PWM

KazeFlex120 RGB 1200rpm PWM

ついでにケースファンを新しくしました。 Aura Sync対応ファンを購入したのですがケースが黒いのでほぼ意味がありません。

動かしてみる

f:id:mamori017:20191008021804p:plain

マザーボードBIOSバージョンは2301で動かなかったので2406変更しました。 ネットワーク上から更新したのですが、いわくUSBアップデートのほうが安全らしいです。

ファンがAura Sync対応なのでアプリから色設定を変更してみたのですが、 既定値ボタンをクリックするとフリーズすることがあったりという不具合が出ています。

メモリはクロックアップしても安定稼働していますが、体感でデフォルトの2666と差はないと思います。 もろもろのベンチマークは今度取ってみることにします。

構成

パーツ
CPU AMD Ryzen 5 3600
マザーボード ASUS ROG STRIX B450-F GAMING
メモリ G.SKILL F4-3200C16D-32GSXWB(16GBx2)
ビデオカード MSI GeForce GTX 1050 Ti 4G OC
電源 CX500
ファン KazeFlex120 RGB PWM(x5)
ケース Antec P100

サマータイムの調整時間をTimeZoneInfo.ConvertTimeで変換した

サマータイムについて話をしていて、仮に実施されるとなると結局UTCオフセット時間ありきで考えるのが良い*1という話になり、 既存のDateTime型データはTimeSpanを使用してDateTimeOffset型として扱うという方針でその場が何となく纏まりました。 その話の流れから、そもそも調整範囲の時間を変換するとどういう動きをするのか見てみたかったので試してみました。

環境

タイムゾーンが日本(UTC+09:00)だとサマータイムが設定されていないので、 ローカル環境のタイムゾーンを太平洋標準時(UTC-08:00)に変更しました。

f:id:mamori017:20180828113554p:plain

太平洋標準時でのサマータイム

期間は2007年以降3月の第2日曜日午前2:00から11月の第1日曜日午前2:00の間、 適用期間中は調整時間として1時間早く進み、期間終了時に1時間巻き戻るようになっています。 2018年は3月11日(日)午前2:00から11月4日(日)午前2:00までのあいだ適用されます。

太平洋夏時間 - Wikipedia

TimeZoneInfo

タイムゾーンを太平洋標準時に設定しているのでTimeZoneInfoで取得できるローカルの情報は(UTC-08:00) 太平洋標準時です。

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
名前
timeZoneInfo (UTC-08:00) 太平洋標準時 (米国およびカナダ)
BaseUtcOffset -08:00:00
DaylightName 太平洋夏時間
DisplayName (UTC-08:00) 太平洋標準時 (米国およびカナダ)
Id Pacific Standard Time
StandardName 太平洋標準時
SupportsDaylightSavingTime true

SupportsDaylightSavingTimeプロパティは指定したタイムゾーンでのサマータイムの設定有無になります。 設定がある場合はTimeZoneInfo.GetAdjustmentRulesでサマータイム期間内の調整情報を取得することができます。 現時点(2018/8)で太平洋標準時のGetAdjustmentRulesの結果は2件取得できます。 これは2007年にサマータイムの適用ルールが変更されているためです。

また、現時点日本標準時サマータイムは導入されていないのでTimeZoneInfo.SupportsDaylightSavingTimeはfalse、TimeZoneInfo.GetAdjustmentRulesは存在しません。

TimeZoneInfo.ConvertTime

2018年3月11日 02:00:00から2:59:59の間をDateTimeに指定してTimeZoneInfo.ConvertTimeを実行したところ、 DateTimeKindがLocalとUnspecifiedの値を持つオブジェクトは例外を出力しました。 太平洋標準時のサマータイムの調整情報が適用され、存在しない時刻として判断されるようです。

System.ArgumentException: '指定された DateTime は無効な時間を表しています。 たとえば、時計を進めると、進めた分の時間が無効になります。

DateTimeKindがUtcのデータは、DateTimeオブジェクトを宣言した際に世界標準時として2018/3/11 2:00:00を設定しているので、 TimeZoneInfo.ConvertTimeを実行したときにローカルタイムゾーンの太平洋標準時(UTC-08:00)との差分が適用され、8時間巻き戻った結果が出力されています。

// 例外が発生する
DateTime dateTimeLocalConvert =  TimeZoneInfo.ConvertTime(dateTimeLocal, timeZoneInfo);
// UTC上の2018/3/11 2:00:00からローカルタイムゾーンの太平洋標準時(UTC-08:00)分巻き戻った時刻が出力される
DateTime dateTimeUtcConvert = TimeZoneInfo.ConvertTime(dateTimeUtc, timeZoneInfo);
// 例外が発生する
DateTime dateTimeUnspecifiedConvert = TimeZoneInfo.ConvertTime(dateTimeUnspecified, timeZoneInfo);
名前 値(UTC)
dateTimeUtcConvert {2018/03/10 18:00:00}
Date {2018/03/10 0:00:00}
Day 10
DayOfWeek Saturday
DayOfYear 69
Hour 18
Kind Unspecified
Millisecond 0
Minute 0
Month 3
Second 0
Ticks 636563016000000000
TimeOfDay {18:00:00}
Year 2018

同様に時刻を3:00に変更して結果を見てみます。2018/03/11 03:00:00はサマータイム適用後にも存在する時刻(実際は2018/03/11 2:00で1時間調整された時刻 )になるので例外は発生しませんでした。

// サマータイム適用後にも存在する時刻なので正常な結果が出力される
DateTime dateTimeLocalConvert =  TimeZoneInfo.ConvertTime(new DateTime(2018, 3, 11, 3, 0, 0, DateTimeKind.Local), timeZoneInfo);
// UTC上の2018/3/11 2:00:00からローカルタイムゾーンの太平洋標準時(UTC-08:00)分巻き戻った時刻が出力される
DateTime dateTimeUtcConvert = TimeZoneInfo.ConvertTime(new DateTime(2018, 3, 11, 3, 0, 0, DateTimeKind.Utc), timeZoneInfo);
// サマータイム適用後にも存在する時刻なので正常な結果が出力される
DateTime dateTimeUnspecifiedConvert = TimeZoneInfo.ConvertTime(new DateTime(2018, 3, 11, 3, 0, 0, DateTimeKind.Unspecified), timeZoneInfo);
名前 値(Local) 値(Utc) 値(Unspecified)
Date {2018/03/11 0:00:00} {2018/03/10 0:00:00} {2018/03/11 0:00:00}
Day 11 10 11
DayOfWeek Sunday Saturday Sunday
DayOfYear 70 69 70
Hour 3 19 3
Kind Unspecified Unspecified Unspecified
Millisecond 0 0 0
Minute 0 0 0
Month 3 3 3
Second 0 0 0
Ticks 636563340000000000 636563052000000000 636563340000000000
TimeOfDay {03:00:00} {19:00:00} {03:00:00}
Year 2018 2018 2018

TimeZoneInfo.ConvertTimeで調整時間に該当する時刻を設定した場合は勝手に調整してくれるとうれしいんですがそうもいかないみたいです。

*1:あくまで某所で動いている何かの話