White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

ベンチマークでCPUを出す時は型番を出して欲しい

(この記事は以前Qiitaに掲載していたものの転載です) ポエムというか戯言です。

自作PC以外のベンチマークでたまに CPU: Core i5 2GHz とか書いてる記事があるんですが、可能でしたら型番を書いてほしいです。

いい例

  1. Core i5-2500
  2. MacBookAir 2018late(Core i5 1.6GHz)
  3. AWS EC2 c5.4xlarge

だめな例

  1. Core i5 2GHz
  2. Core i5 2GHz 4コア

なぜダメか

同じCore i5、同じ周波数でも型番が違うだけで - 一回の動作辺りの処理能力が違う - 物理コア数が違う - 命令セットの装備が違う といったことがあったりします。

例として、鵜呑みできるかどうかは怪しいですが、ベンチマークの結果を貼っておきます。Core i5-2500KとCore i5-9400Fの比較です。

https://www.cpubenchmark.net/compare/Intel-i5-9400F-vs-Intel-i5-2500K/3397vs804

ベース周波数だけ見ると2500Kは3.3GHz, 9400Fは2.9GHzなのでCore i5 3.3GHzとだけ書くと一見早そうです。しかしCPUMark Totalの結果は9400Fの方が2倍くらい高いです。

これはCPUの世代が進んで効率がよくなったとか、命令セットが追加されたんで効率よくなったとか、そもそもコア数が4と6で違うとか、色々上げられます(Turbo burstとかもあるんですがここでは割愛)

上の細かいとこは置いといても、手元の環境で実行しようとしたときに同じものが用意しづらいって意味でも型番は書いておいた方がいいです。

CPUの型番さえ書けばいいか?

もちろん違います。HDDをSSDに変えるだけでも、ディスクを介した処理は大幅に変わってくるでしょう。それにメモリとか、極端な話マザーボードが違うだけでも性能が変わってきます。がSSDやメモリはともかく、マザーボードの型番まで求めるのは流石に酷かなという気はします。あと昔は同じ型番でもロットによってオーバークロックの性能が違ったりとかありましたが、そこも流石に(略)。

また全く同じパーツを使っていても、OSやライブラリが違うだけでも性能は変わります。

いい例を振り返って

上の方でいい例について書きました。なぜいいかを解説していきます。当然ですがCPUに関していいと言っているだけで、これだけで全部いいわけではありません。

1は自明です。型番を見ればコア数、周波数などがメーカーのサイトから導き出せます。2に関しては型番は無いですが、2018年に出たMacBookAirのこの周波数のモデルは一つしかないと思われるため、問題ないでしょう。3は正直悩みどころで、同じEC2のインスタンスでも使ってるCPUが違ってたり、そもそもXen等のハイパーバイザからCPUへの割当が同等なのかっていうのもあったりします。ただ最悪インスタンスの種類さえわかっていれば追試はできると思うのでよしとしました(本当はcat /proc/cpuinfoくらいはしてほしいです)。

8年ぶりにUshahidiを起動して、千葉の災害情報を共有するサービスを立ち上げた

(この記事はQiitaに以前投稿したものの転載になります。また現在は共有サイトは上げていません。)

要約

http://showyou41.mydns.jp の接続先に、Ushahidiという位置+情報を共有するサイトを立ち上げました。アクセスも分類してくれる人も足りないです。

Ushahidiとは?

https://www.ushahidi.com/

PHPで記述されたオープンソースの、位置情報+情報共有システムです。2011年に東日本大震災が起きた直後、sinsai.infoというサイトが有志で立ち上げられ被災状況の共有に使われていましたが、これを運営していたエンジンがUshahidiになります。これを立ち上げるにあたって、"糸柳が自宅でサーバに挟まれた"というデマTweetをみんなで面白がって拡散したって話もあるんですが、省略。

Ushahidiの立ち上げ方

なぜかこれの記述が、軽くググっても載ってないので書いておきます。といいましてもgithubに書かれてる内容実行すればいいんですが・・

$ git clone https://github.com/ushahidi/platform-release.git
  • cd platfrom-release
  • (公式未記載なので注意。必ず実行すること) docker-compose.ymlのうち、以下の部分を変更
...
MYSQL_USER: ushahidi
MYSQL_PASSWORD: ushahidi
...
MYSQL_USER: ushahidi
MYSQL_PASSWORD: ushahidi

のushahidiの部分。変えないとハッカークラッカーが乗っ取りにやってきます。

  • docker-compose up -d

-d付けなければ、ターミナルを閉じた瞬間にdockerプロセスが多分終了します。

立ち上げたら80番ポートにアクセス(localのdockerで立ち上げたならhttp://localhost とか)で接続できます。接続したら直ぐにadminのユーザ/パスワードを変えてください。

Twitterの設定があるので、OAuthの認証キーを入れると一応定期的にTweetを収集してくれます(後述)。

困ったところ

  • アクセスが無い。来るのはphpMyAdminwordpress脆弱性狙う人たちだけ。周知大事
  • これはsinsai.infoが終わった原因にもありそうですが、上がってきたTweetを正確/ガセと判断するのに労力がかかります。ある程度公的な機関なら信用するとか、ナイーブベイズ使って自動で判断するとかあるんですが、phpとは相性よくないですね
  • 手動で分類する時にTweetを眺めてますが、災害に絡めて政治の話が書かれてるのはどちらの側でも疲れます
  • Tweetの収集能力が明らかに弱い気がします。同じOAuthのkeyでPython3+Tweepyで収集した時に比べ、数分の位置ぐらいしか取れてない気がします。なぜ?
  • 以上のことから、DBにTweet貯める部分まではPythonで書いて、機械学習もさせたい気分です
  • 全然関係ないですが、なぜかnginxのポートフォワード機能が働かないです。別ので転送させました

結論

誰か分類か宣伝手伝ってもらえると有り難いです。興味ある方いらっしゃいましたら https://twitter.com/shsub まで連絡ください。

余談

今回の災害では、マスコミもそうなんですが、GとかY!とかWebのでかいとこも収集プラットフォームを用意してない気がします。情報共有が円滑に進むのはまだまだ遠い気がします。

あとこれは東日本大震災の時に思いっきり露呈したことですが、インフルエンサーが適当にピックアップするのは全く頼りになりません。

更に言うと寄付をふるさと納税で行う動きが出てますが、少し待ったほうがいいかもしれません。といいますのも、京アニの件を当てはめて考えますと、

  • 自治体に対して直接寄付できる口座が用意される(かも)
  • ふるさと納税は税金控除額の上限が低い一方、寄付金が控除の対象となった場合、寄付したほうが税金的に有利
  • ふるさと納税はどこかのサイトで行った場合、おそらく手数料が納税額から差っ引かれます(逆に取らないと運営していけないだろうし。ただし未検証)

 

Ryzen 7 3700Xに換装しました

4月末にRyzen 7 2700X(がピン折れてRyzen 5 2600)の構成で組みました。

https://scrapbox.io/showyou/20190430_PC%E6%96%B0%E8%AA%BF

特に性能面で不満はなかったんですが、Ryzen 3700Xの評判が良さげで在庫があったのと、消費税増税を控えて(とは言え2%増える程度じゃ1000円程度しか上がらず、初売り特価の終わりによる値下がりの方が大きそうですが)

構成は上とほぼ同じで、

  • CPU:Ryzen 7 3700X
  • メモリ:Crucial W4U2666CM-16G x2 合計64GB
  • マザボ:ASRock B450M Steel Regend

です。

CPUとしては3200MHzのメモリに対応しているようですが、4枚構成だと早くても2933MHzが保証の範囲内では限界です。

マザボBIOSが1.0でRyzen 7 3700Xに非対応でしたので、USBメモリをつないで2.6あたりまで上げてからCPUを交換しました。Ryzen 9 3900Xにも対応してるようですが、そこまで上げなくてもいいかなという気分ではあります(マザボ1万にCPU6.5万とか・・)

これであと5~10年は持ちそうですね。他のデスクトップマシンは未だにSandy/Ivy Bridgeだったりします。

画像に文字を書く方法

(この時期はQiitaに2019年08月07日に投稿したものです) https://qiita.com/youwht/items/c2e60c63625dfb6817dd

上の物をつかって、画像を文字にしてみました。 著作権的にあれなんで、gistのURLだけ貼っておきます。やばかったらgistも消します。

Google Colaboratoryはブラウザがあれば誰でも動かせるので、ご自身でも試しに動かしてみてください。

https://gist.github.com/showyou/5eb98aea8070c7c87bec637c11026fc4

ノートPCの選定基準

人によってこの辺の感性や、こだわりポイントは違うと思うので、ほかの人のPC選定基準も聞いてみたいと思いました。

https://inajob.hatenablog.jp/entry/new-note-pc

と書いてあるので、自分の基準を書いてみる。

  1. PC閉じてる時に充電池として使えること
  2. ~1.4kg
  3. iPS 1400x900~
  4. メモリ8GB~(VMやDocker使うなら16GB~)
  5. SSD 256GB~
  6. CPUはCore i5くらい

まず前提として、自分は色んなとこに持ち運んで使うので、軽い必要がある。更にスマホの充電に使うこともあるので、PC閉じててもUSB給電できる能力は必要。今は10000mAhのモバイルバッテリーとか安価に手に入るので、無くても良くなってきたけど。

画面サイズは1400x900(前のMacBookAir)くらいは人権。つまり巷でビジネス用に売られているHDサイズは論外。

メモリはVM Docker使わずにタブをそんなに開かなければ8GBでもなんとかなる。尤もメインで使ってるマシンはタブを30個とか開いているけど・・(13GB消費)。8GB未満とか、8GBでVM動かせとかはOS動かすのに負荷かかるので無理。え?4GBで32bitマシン?捨ててきなさい。

ストレージはVM貯めなければ192GBくらいでもなんとかなる。128GBは流石に今はきついかなぁ。

6に関して、軽量ノートのCPUは後で変えられないので、下手に低すぎると耐用年数的に却って損をする。

2と3の8GB/256GBだと10万切るモデルがちらほらあるけど、小型/16GB/512GBとかなると途端に値段が上がる。

 

んで自分の使ってるマシンはこんな感じ。

OSは、WindowsもWSLとか揃ってきたしいいかなぁと気もしなくもないけど、やっぱり手元でTerminal使いたい・・新しいWindowsのTerminalに期待かな。

 

いろいろ経緯があってX1 Carbonをサブで使っているけど、中古でLet's note NX2あたりにメモリSSD増設するくらいでもいいかもしれない。サブは給電能力期待してないし。

 

あ、Touch Barはお帰り下さい。

AtCoder Beginner Contest 131(ABC131)に参加しました

この日記も久々ですね。

ここ二ヶ月ABCも何回かは参加してたんですがなかなか振るわなかったり、サブ日記にある通りライブとか行ってたり*1してたんで、書いてませんでした。

 

今回のは3個解けたので、感想でも書いておきます。

A: S[0] == S[1] or S[1] == S[2] or S[2] == S[3]

B: 絶対値が最小の値を見つけて、全体の和からその値を引く(ちなみにprint文貼り付け忘れて1ペナ食らった)

D: 締切が近い方から片付ければいいと考え、締切時刻でソートして小さい順に取り出し、時刻が締め切りをオーバーしなければ成功としました。逆にこれで通らなかったらお手上げでしたね。

https://atcoder.jp/contests/abc131/submissions/6063588

 

C: 最初見て、愚直に値並べてC,Dで削っていっても時間間に合わないと感じたので、先にFまで見てFを解けるか試していました。結果的にCちょっと考えてた方がよかったですね。

解説にある通りなんですが、B-(A-1) - ( B // C + B // D - B//( (C*D)//gcd(C, D) ) - ((A-1) // C + (A-1) // D - (A-1)//( (C*D)//gcd(C, D) ) ) )が答えです。AtCoderはPython3.4系なのでfrom fractions import gcdしないと動きません。

https://atcoder.jp/contests/abc131/submissions/6081751

E, Fは全く歯が立ってないですね。もう少しグラフとかさらっと書けないといけません。

 

*1:6月は6回くらい行ってる

LeetCode weekly contest 133に参加しました

ちょっとAtCoderの方が伸び悩んだり、変なのが湧いたりしてモチベが下がったので、一旦LeetCodeというのに手をつけてみました。

(あとでtenka1の問題は解くつもりです)

AtCoderとの違い

  • これが一番大きいと思います。標準入力を読み取って回答を標準出力に出すのではなく、特定の関数が用意されて、それに合わせて適切な戻り値を返す形になります。Pythonで解く場合、関数の変数にintやList[str]など型ヒントがつくので推測は出来るかと思います
  • 問題が英語です(中国語もある?)。ただ例も結構書かれているし、GCJなんかに比べるとはるかに読みやすいです
  • 過去に開催されたコンテストを、一定の時間で解くVirtual Contestなんてのもあります
  • 過去の問題でも、回答すると進捗(Progress)には反映されます
  • 実際のコンテストに参加すると、参加賞として5コインは貰えるようです。それとは別にレーティングもあります

実際にコンテスト参加してみて

4問出題、1時間半で回答。で1問だけ解けました。問題の難易度はEasy, Easy, Medium, Hardの順だったのですが、2問目の方が3問目より難しかった気がします。先に3問目解いてたら解けたのかもしれません(が後述の問題あり)

1030Matrix Cells in Distance Order(Easy)

全てのセルを、あるセルから近い順に列挙する問題です。

leetcode1030

添付したgistの、上の様な形式で 問題が出され、下のように回答しました。->AC(15分)

問題文に「マンハッタン距離で」ということと、マンハッタン距離の定義自体書かれているので素直にソートすればいいだけなんですが、動作確認とかどうでもいいとこで時間かかりすぎっすね。 

1029Two City Scheduling(Easy)

2問目なのに問題番号が1番目より小さいのは仕様です。

2N人いてそれぞれ2つの都市に行くコストが与えられるので、コストが最小になるようにN人ずつ振り分けろという問題です。

一見単純そうにみえて、結構きつい問題でした。片方の都市に行くコストが小さい順にN人選んでもダメなんですよね。@naoya_tせんせーはDP使って解いてたようですが、本当にEasyなのか?

1031Maximum Sum of Two Non-Overlapping Subarrays

ある数列Aが与えられて、L個とM個を被らないように選び(どっちが左という決まりはない)、和を最大化させる問題です。

累積和の問題なので解いていけばいいです。が、自分のとこだと累積和自体がうまく計算できてないです。課題です。

1032Stream of Characters

時間内にたどり着けなかったのでよく読んでないですが、1文字ずつ与えて、それがある文字列に一致したらTrueを返せばいいんですかね?過去のクエリ文字を記憶して、それと一致かけないとダメな気がします。

 

まとめ

LeetCodeに参加してみました。AtCoderやってる人なら出来るんじゃないかなと思います。回答用に関数作るのはちと面倒。