satoshi_komyのブログ

気になったことを書き連ねていきます

BitZenyのcpuminerを2.6.0に更新した話

なぜcpuminerのバージョンアップが必要なのか?

BitZeny 2.0立ち上がると、これまでBitZenyの公式サイトからダウンロードできたcpuminerではマイニングできなくなってしまうそうです。つまるところBitZeny 2.0に対応したcpuminerが必要。ということで早速cpuminerを更新してみました。
cpuminer自体、BitZenyコミュニティーのいろんな方がソースを書いているようで、派生バージョンが多数ある模様。調べたところによるとcpuminer 2.5.0以降であればBitZeny 2.0でもマイニングできるようですので、今回はcpuminer 2.6.0を導入してみました。

github.com

導入方法

導入といっても↑↑↑のサイトからコンパイル済みのzipファイルをダウンロード・展開して、従来使っていたbatファイルを移植してやるだけで終わりなのですが、マイニング関係ではお約束のウィルス検知…こればかりはしかたがないのですが、マイニングソフトはウィルス対策ソフトでスパイウェアだとかウィルスだとかいった具合で検知されてしまうので、その対策が必要となります。つまるところ、ウィルス対策ソフトの無効化・例外指定ですね。

Windows 10だと標準でWindows Defenderが働くので、ここではその無効化方法を簡単に…キャプチャとか面倒なので文字で書きます。

  1. [スタートボタン]右クリック
  2. 設定
  3. 更新とセキュリティ
  4. Windows Defender
  5. [Windows Defender セキュリティセンターを開きます
  6. ウィルスと脅威の防止
  7. ウィルスと脅威の防止の設定

ここまでくると設定画面が出てくるので、[リアルタイム保護]と[クラウド提供の保護]をオフにします。
同じ画面の下のほうに[除外の追加と削除]があるので、こちらの画面でcpuminerのフォルダを指定、元に戻って[リアルタイム保護]と[クラウド提供の保護]をオンにすれば大丈夫です。かなり面倒。

バージョンアップしてどうなったか?

マイニング自体は特に問題なくできています。マシンにもよりますが、だいたい5~10%程度ハッシュレートが向上するようで、一時的ですがBitZenyの採掘量が増えている状態です。これもcpuminerのバージョンアップが行きわたると元に戻るとは思うので、一時的なボーナスタイムみたいなものなんでしょうね。やるなら早めのほうがいいのかもしれません。

Windows 10で自動ログイン & アプリケーションの自動起動をする方法

昔とはやり方が違うのだよ

Windows 98とかその時代であれば、シングルユーザーが半ば前提的な部分もあって、特に意識せずWindows起動→自動ログインみたいな形だったけども、マルチユーザー/Microsoftアカウントが前提のWindows 10ではそうはいかない。ということで自動ログインのやり方を調べてみたので備忘録がわりに記しておく。

netplwizでいろいろと設定できる

[ファイル名を指定して実行]や[スタートボタンを押した直後の画面]で[netplwiz]と打ち込んでやると、ユーザーアカウントの管理画面が出てくる。
[このコンピューターのユーザー]から自動ログインしたいアカウントを選択し、[このユーザーがコンピューターを使うには、…]のチェックを外し、OKボタンを押せば設定完了。
Windowsを再起動して、問題なく自動ログインできれば設定完了。

実験した限りだけども、Microsoftアカウントでも、Windowsのローカルユーザーでもどちらでも設定できるみたい。

アプリケーションの自動起動(ようするにスタートアップ)の設定

よく見たらWindows 10のスタートメニューには[スタートアップ]の項目がない。Windows 7とかにはあったので、いつのまにやらなくなったのかもしれない。ただスタートメニューに表示されていないだけで、実体は以下のフォルダパスにちゃんと存在している。なのでこのフォルダにショートカットを入れれば、Windowsログインとともに自動起動するというわけだ。

C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

ただフォルダパスを見ればわかるとおり、これはあくまでも個人ユーザー向けの設定だ。全ユーザー共通*1の設定がどこになったのかはイマイチわからない。Defaultというユーザー名がそれっぽいのだが、実験していないのでなんとも。

一応の注意事項として

↑で設定したスタートアップだけど、アカウントの権限の関係で使えない場合もあることはあしからず。個人ユーザーなら代替は管理者権限になってるから大丈夫だとは思うけども…

なんでこんな設定を調べていたかというと…

先日組んだマイニングPCが不慮の事故で再起動したあとでも、Windows自動ログイン→採掘ソフト自動起動をしてリカバリさせるため。普通の人ならあまり気にしなくてもいいかもしれない。が、Windowsの自動ログインは物臭な人だと使うかも。

*1:以前ならAll Usersって名前だったやつ

マイニング用PCを構築する

いわゆる自作PCなんて何年ぶりだろうか?

ここ10年くらい、いわゆるPCの自作から遠ざかっていて、PC買うときはノートPCかBTO-PCだけだった。まぁBTO-PCはタワータイプだから、CPUとマザーボード以外はかなり入れ替わってるけども。
そんな中で仮想通貨のマイニングに興味をもったので、マイニング用にPCを組んでみることにした。正確には上で書いたBTO-PCでこそこそマイニングしていたのを、ちゃんとマイニングリグを組んで稼働させようという試み。そんなわけでパーツ発注。マイニングはNiceHashを使ったGPUマイニングなので、性能は最低限でいいのだ。CPU・メモリ・SSDともにいずれも最低限レベル、マザーボードはマイニング用、ビデオカードは性能重視ではなく、あまり熱くならないものをチョイス*1

ということで今日9/13の21時過ぎにAmazonに発注したんだが、明日9/14の夜には届くらしい、Amazonプライム恐るべし。なんという早さ、これが現代社会の闇か…

Amazon発注分】

CPU:Celeron G3930
メモリ:DDR4 4GB
マザーボード:TB250-BTC
ビデオカードGeForce GTX1060(3GB)
SSD:120GB

ツクモ発注分】

ライザーカード:DIR-PCIE1To16 *6

パソコン工房発注分】

フレーム:PM-MINING-F
ascii.jp

ここまでで〆て78,495円。
Windows10のライセンスをメインPC分しか持ってないので、明日は日本橋へ行ってDSP版のWindows10を買わないとな。あとメインPCにささってるGeForce GTX1060をサブPCへ移植せねば。あ、その前に部屋の掃除を…

あと電源買ってないな。これは最近のトレンドを店員さんから聞いたほうがよさそうだ。80Plus認証くらいしかわからん。ま、のちのち買い換えるとして、今手元にあるのを流用してもいいかもしれんが、それは明日の朝まで悩もう。

で、マイニングって結局もうかるの?

少なくとも今までこそこそとメインPCを稼働させていた部分に関しては、利益が出たといっても間違いなさそうです*2。が、それはメインPCという枠組みがもともとあって、そこにビデオカードを増設させていたから。今回みたいにマイニングリグをゼロから組んで利益が出るかという点に関しては不明。趣味だから良しという考えもあるので、長い目で見ていろいろとやっていこうと思います。

*1:しかも同じグレードの中でもっとも安いものをチョイス。

*2:もちろん金額的に雑所得の基準を超えないレベルだから、脱税なんてしてないよ!!

ドラゴンクエスト11の設定を考察してみる

発売から1ヶ月ちょっとが経ったドラクエ11ですが、いくつか気になることがあるのでいろいろと考えをまとめてみます。記憶をたよりに書いていますし、自分なりに解釈している部分もあるので間違いもあると思います、コメント・指摘大歓迎。

PlayStation 4 ドラゴンクエスト ロト エディション

PlayStation 4 ドラゴンクエスト ロト エディション

主人公の設定

  • DQ11主人公:ロトの勇者(ロトゼタシアの勇者、略してロトの勇者)
  • DQ3主人公:勇者ロト(アレフガルドに伝わる「まことの勇者」の称号*1のこと)
  • DQ1主人公:勇者ロトの子孫*2
  • DQ2主人公:ロトの末裔

DQ11本編開始前のストーリーの流れ

  1. 邪神ニズゼルファvs聖竜 → 聖竜負け → 聖竜が命の大樹化、ロトゼタシア創成
  2. 邪神ニズゼルファvs先代勇者ローシュ一味 → 勇者ローシュ死亡 → 賢者セニカが邪神ニズゼルファを「封印」
  3. 魔道士ウラノスが預言者と魔導師ウルノーガに分離
  4. 賢者セニカが「勇者のつるぎ・真」を命の大樹へ奉納
  5. 賢者セニカが時の番人化
  6. ここまで神話のお話、ここから割と近い時代
  7. ユグノア王国とバンデルフォン王国が陥落
  8. 本編スタート

DQ11の真エンディング(裏エンディング)に関する考察

途中に出てくるDQ1主人公について

聖竜いわく「闇堕ちしたらその剣で討ち取ってね」という話なので、子孫*4が悪さしたら退治してね*5というだけの話だと解釈。遠い未来に闇堕ちしたらごめんね、とかその程度のことかと。

どうでもいいけどDQ1ロトの剣って竜王の城で手に入るんじゃなかったっけ…あのDQ1コスプレ防具一式+ロトの剣ってなんかおかしいような気もする…

真エンディングの最後について(=DQ3オープニングについて)

DQ11メンバーの冒険を書いた赤い本をDQ3主人公母が読んでいる。その本を本棚にしまう、隣には背表紙に同じ勇者の紋章が描かれた緑の本もある。
そして2階へあがり、↓のセリフ

おきなさい おきなさい
わたしの かわいい ぼうや
今日は お前が はじめて お城へ行く日だったでしょ

このセリフはそのままDQ3のオープニングのセリフ。DQ11メンバーの冒険が伝記になるくらい時間が経過した世界がDQ3ということなんだと思う。ちなみにDQ3のベッド脇に置いてあるのは銅の剣っぽいもの、DQ3主人公の初期装備だから間違いない?盾はなんだかわからん、DQ3主人公の初期装備に盾はないしね…

分岐した世界観について

世界線ともいうそうだけど「時のオーブを破壊することで巻き戻る時間」は、パラレルワールドが形成されるのか、あるいは単純に時間が巻き戻るのか、ということ。

パラレルワールドが形成されと考える場合

作中では3つの時間軸が形成された。これも意見がたくさんあるようだけど、自分なりの解釈。

  1. ベロニカ死亡 → 邪神ニズゼルファが封印されたまま魔王ウルノーガを撃破 → 放置プレイして主人公だけ↓の世界へ
  2. ベロニカ死亡せず → 魔導師ウルノーガ撃破 → 邪神ニズゼルファ撃破 → DQ3DQ1 → (ry
  3. 勇者ローシュと賢者セニカ再開 → どこにもつながらない、完全に独立した世界観なのでは?

主人公が壊した時のオーブは時間巻き戻し、賢者セニカが壊した時のオーブはパラレルワールドが形成されたと考える場合

  1. ベロニカ死亡せず → 魔導師ウルノーガ撃破 → 邪神ニズゼルファ撃破 → DQ3DQ1 → (ry
  2. 勇者ローシュと賢者セニカ再開 → どこにもつながらない、完全に独立した世界観なのでは?

賢者セニカが壊した時のオーブでは時間の巻き戻しは起きていないよという考え

仮に時間の巻き戻しが起きたとしたら、DQ11というゲームを遊んだ(=プレイ時間をかけた)プレイヤーの存在を否定してしまうw
もっとも時間の巻き戻しが起きたとしても、それでも運命でDQ11主人公は誕生して、同じようなシナリオが形成される…というのはちょっと苦しいか…

王者の剣、勇者のつるぎ、勇者のつるぎ・真、勇者のつるぎ・改、ついでに天空の剣について

真エンディングを割とシンプルな形で考えるとすると…

  1. 勇者ローシュは「勇者のつるぎ・真」を使っていた。のちに賢者セニカが命の大樹へ奉納
  2. DQ11主人公が「勇者のつるぎ・真」を継承、のちに命の大樹へ奉納
  3. 「勇者のつるぎ・真」が「王者の剣(おうじゃのけん)」と呼ばれるようになる
  4. ゾーマが3年かけて「王者の剣(おうじゃのけん)」を破壊する
  5. ジパング出身の鍛冶屋がオリハルコンを元に新規で「王者の剣(おうじゃのけん)」を打つ → ゾーマを倒す → 「ロトの剣」として語り継がれる
  6. DQ1&DQ2には「ロトの剣」として登場

と解釈したいんだけども、王者の剣、勇者のつるぎ、勇者のつるぎ・真、勇者のつるぎ・改ともに絵柄が異なるんだよね。絵柄だけで考えると下のように3パターンあって、上で書いた解釈があっているかどうかわからなくなる…

  1. 勇者のつるぎ・真 = 王者の剣(DQ3の「おうじゃのけん」) = ロトの剣
  2. 勇者のつるぎ = 勇者のつるぎ・改 *6
  3. 王者の剣(DQ11DQMスーパーライトなんかでもこの絵柄)

ただDQ11王者の剣は使うとバギクロスが発動するという点でDQ3「おうじゃのけん」と同じで、しかも刀身部分のデザインはかなり似通っている。ツバの部分はデザインが異なるから別のもの…?

ここからは個人的な考えなんだが、DQの世界ではオリハルコンを使って作った剣をすべて王者の剣と呼ぶんじゃないだろうか?ということであればDQ11作中で主人公が作った「勇者のつるぎ」も王者の剣の一種で、「勇者の剣・改」はオリハルコンの剣を2本分使った超リッチな王者の剣、という解釈も成立する…

DQ7の王者の剣(おうじゃのつるぎ)ってどんなデザインだったっけ?

同じ漢字で別の読みの「王者の剣(おうじゃのつるぎ)」がDQ7に存在するんだけど、それとの関連性は不明。デザインも同じなのかどうかすら不明、このあたり詳しい人がいたらコメントいただきたい。

ケトスと不死鳥ラーミアの関係について

同一の存在なのか、その時代時代の空を飛ぶ手段という共通点があるだけなのか・・・
ただケトスで空を飛ぶ時の音楽がDQ3不死鳥ラーミアと同じ「おおぞらをとぶ」なんですよね。DQ8神鳥レティスは生まれた世界でラーミアと呼ばれていたらしいし、割と自由自在に複数の世界観を行き来できるし、姿形も比較的自由に変えられる存在なのかもしれない。

まだ考えていることはたくさんあるんだけども…

DQ11がどのようにしてDQ3世界に続くのか、アレフガルドに伝わるロトと、ロトゼタシアの関係性は?大地の精霊ルビスはDQ11で何やってたの?etc...

ドラクエについて考えだしたら止まりませんね。

*1:上の世界では神に親しきものという意味で伝わっているらしい。

*2:竜王討伐の結果、まことの勇者認定されてDQ1主人公もDQ2時代では勇者ロト扱いされている

*3:キャラバンハートDQ2よりもさらに未来が舞台。アレフガルドとかは沈没してたりする。

*4:聖竜→かなり長い時間→竜の女王→竜王だと仮定して、DQ1竜王

*5:DQ1主人公がロトの剣竜王を倒したのはその一例

*6:地味に刀身が天空の剣っぽい

Google Apps Scriptで簡単なWebサイトやWebアプリ、Webサービスを作る その1

タイトルはその1としましたが、はたしてその2以降が続くのかは不明です…

Google Apps Script クイックリファレンス

Google Apps Script クイックリファレンス

Google Apps Scriptは便利なもので、ものすごく簡単に言うとGoogleが自前のWebサーバを用意してくれているので、そのうえでHTMLやJavaScriptベースでWebサイトを構築することができるわけです。やり方次第ではかなり細かいことをいろいろとできるようですが、Google Apps Script自体に5分程度の関数実行制限時間*1があるので、そこまで高負荷の処理をすることはできませんが、一般的なWebサイト程度でしたら問題なく作成することができるでしょう。

とりあえず始めてみる

Googleドライブから[新規] → [その他] → [Google Apps Script]を選択してください。Google Apps Scriptは拡張機能のため、標準では入っていない可能性もあります。その場合は[新規] → [その他] → [アプリを追加]を選択し、出てきた画面でGoogle Apps Scriptを検索・インストールしてください。またGoogleアカウントの種類によってはアプリの追加が許可されていないこともあるようです。その場合は新規でスプレッドシートを作成して[ツール] → [スクリプトエディタ]を選択することで、同じようにGoogle Apps Scriptの開発環境・実行環境*2を得ることができます。

スクリプト記述画面が立ち上がったら[ファイル] → [新規作成] → [HTMLファイル]を選択し、新規でHTMLファイルを作成します。ファイル名ですが、ありきたりに「index.html」としておきます。
ここまでで「コード.gs」「index.html」のソースコードを記述できるようになっているはずですので、それぞれ以下のコードを記述します。とりあえず内容にはこだわらず、よくあるオマジナイと思って記述すればOKです。ともかくアクセスすると「Hello, Google Apps Script!」と表示されるはずです。

コード.gs

function doGet(e){
  var html_template = HtmlService.createTemplateFromFile('index.html');
  return html_template.evaluate();
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Hello, Google Apps Script!
  </body>
</html>

ここまでできたらあとはWebサイトとして公開するだけです。[公開] → [ウェブアプリケーションとして導入]を選択し、サイトとしてのリリース処理を行います。お好みで記述や選択をして[導入]をクリック。ウェブアプリケーションとしてのURLが画面に表示されるので、そこへアクセスして問題なく「Hello, Google Apps Script!」と表示されていれば成功です。

↓実際に作ってみたのがこちら↓
script.google.com
アクセスするにはGoogleアカウントのログインが必要です。

まとめ

簡単ながらもGoogle Apps ScriptでWebサイトを作成することができました。インターネット黎明期のように、ただ単にHTMLを記載して公開するだけならばこれで問題ないかもしれません。WebサーバはGoogleが用意してくれているわけですし。ただしそれだけでは芸もないしおもしろくもない、他にも色々とできることはたくさんあるわけです。

さて、内容としてのその1はここまで。次回以降を書くことがあれば動的にページを作成したり、他のGoogleのサービスと組み合わせる方法をまとめていこうと考えています。

*1:つまるところタイムアウト

*2:ベースがスプレッドシートになるだけで、機能的にはなにも変わりありません

はてなブログでソースコードを載せるには…?

ソースコードの記載方法アレコレ

前回のブログでGoogleスプレッドシートGoogle Apps Scriptを使ったものを掲載したのだが、ソースコードの記載がちょっと…ってな感じだったので、はてなブログで使えるソースコードの記載方法をいくつか調べてみた。いくつかあるので、そのときそのときで使いわければいいかと思う。

スーパーPRE記法

スーパーPRE記法ははてなブログが公式に用意している記法のひとつで、もっともシンプルかつ簡単に利用できるもの。このブログで使うと背景が黒っぽくなるが、これはテーマに影響されているんだろうか?詳細は不明。

<html><head><title>test</title></head>
<body>This is a pen.</body></html>

入力したコードやはてな記法をそのまま表示する(スーパーpre記法) - はてなダイアリーのヘルプ

シンタックスハイライト記法

シンタックスハイライト記法はてなブログが公式に用意している記法のひとつで、上記のスーパーPRE記法の拡張のようなもの。キレイに色を振ってくれるので、ただのスーパーPRE記法よりも読みやすい。

<html><head><title>test</title></head>
<body>This is a pen.</body></html>

help.hatenablog.com

Gistから貼り付ける

Githubが提供するソースコード公開サービスであるGistというものにあるソースコードを貼り付けることができるようです。プログラムガシガシやってますという人のブログをみると、よく使われていたりします。が、私はGistのアカウントを持っていないので、紹介だけ。
staff.hatenablog.com

Gistだとかっこいいです、ついでに行番号も付与されるので非常にわかりやすい。プログラマではない私からすると、こういう親切なサービスもはてな記法で使えるといいのに…なんて思ってしまう。

HTMLのpreタグやcodeタグ

HTMLのpreタグやcodeタグも使える。が、はてなブログであるならばシンタックスハイライト記法で問題ないような気もする。

まとめ

はてなブログソースコードを書くのであれば、手間がかかることを考慮すればシンタックスハイライト記法、手間を惜しまない・見栄えを気にするということであればGist貼り付けだなと思う次第である。

Google Appsでつくる仕事便利ツール ?Google Apps Scriptで実践構築?

Google Appsでつくる仕事便利ツール ?Google Apps Scriptで実践構築?

Google Apps ScriptでGoogleスプレッドシートを操作する

概略

Googleの各種システムにはGoogle Apps Script(以下GAS)と呼ばれるスクリプト実行環境が用意されていて、例えばMicrosoft ExcelにおけるマクロやVBAのように開発・実行することができる。GASで操作するのはWebサイトであったりスプレッドシートであったりといった場合が多いようだけども、文書ファイルでも動かせるのかもしれない。あるいはGoogleドライブのファイル操作といったAPIも用意されているので、ファイルのアップロードみたいなことも可能なようだ。そしてお約束の基本的な操作部分はだいたいどのパターンでも変わらないので、サンプルコードとして載せておくことにする。

基本的なやり方を覚えてしまえばそう難しくはない

まずはコードの記述方法から。
スプレッドシート → ツール → スクリプトエディタ でGoogle Apps Scriptのコード記述画面が出てくる。そこでJavaScriptベースのコードを記述していけばOK。デフォルトでmyFunctionというサンプル関数が用意されているが、この関数に記述していってもいいし、自分で関数を作ってもいい。このブログではmyFunctionを流用している。

とにかくなんでもいいからスプレッドシートを操作してみる

function myFunction() {
  //今開いているスプレッドシートをsheet_sampleへ格納
  var spread_sheet_sample = SpreadsheetApp.getActiveSpreadsheet();

  //「シート1」をアクティブなシートとして設定する
  var sheet_sample = spread_sheet_sample.getSheetByName("シート1");

  //1~100行目まで値を入れてみる。ループ用の変数iとjを宣言
  var i;
  var j;
  for(i=1;i<=100;i++){
    for(j=1;j<=100;j++){
      //(i,j)セルにi*jを入れる
      sheet_sample.getRange(i, j).setValue(i*j);
    }
  }
}

厳密には違うけども、スプレッドシートスクリプトエディタで↑のコードを書いて、myFunctionを選択して実行*1すると、元のスプレッドシートの(1,1)セル~(100,1)に変数i*jの値が代入される。*2
f:id:satoshi_komy:20170417222351p:plain

↓ちなみに実際のシートはこちら↓
docs.google.com

内容としては昔BASICとかC言語の授業でやったようなよくあるアレだ、九九の表を表示したり、みたいな。GASはJavaScriptと文法は基本的に同じようなので、あとはJavaScriptがわかる人なら適当にいじることもできると思う。
コメントで何やってるか?を書いているけども、SpreadsheetAppとかgetActiveSpreadsheetなんかはお約束だと思えば割とシンプルに考えられるかも。

作った関数/機能を自動実行する

せっかく作った関数/機能もある程度自動で動いてくれないと意味がない。*3 幸いなことにGASにはトリガーという概念があって、Windowsのタスクスケジューラーのように決まった時間に動かすことができる。
やり方はものすごく簡単で、編集メニュー→すべてのトリガーの実行を選択するだけ。f:id:satoshi_komy:20170417221309p:plain
トリガーはプルダウンメニューから選択するだけなので迷うことはないと思う。注意点がひとつあって、時間をトリガーに設定しても正確には動作しないという点。たとえば午前0~1時というトリガーを設定すると午前0時ちょうどには動かず、本当に午前0~1時のどこかのタイミングで実行されるといった感じ。この仕組みはものすごく便利で、言ってみればサーバー/PCが1台無料で用意されているようなもの。通常ならばなんらかのマシンを1台用意して、cron的なものを走らせる必要があるからね。

といったところでここまで。GASのAPIは種類が結構あるのでまだなにも覚えられていないし、そもそも使う機会もあるのかどうかわからないけども、便利なものがあったら簡単にまとめていこうと思う。

*1:実行メニュー→myFunctionを選択

*2:最初の1回のみ「このスクリプトを承認しますか?」的な画面が出てくるので、承認すると実行できる。

*3:日時で処理や結果が変わったりするようなものだと、自動で動いてくれると大きな恩恵に預かれる。