プロバイダのSMTPサーバー経由で独自ドメイン名のメールアドレスを使うためのSPFレコード設定

最近、@gmail.com のアドレスを持つ人へのメールがエラー返送されるようになってきた。
メールアドレスの Fromのアドレス名が信頼されていない、というような理由らしい。
前に、何かのブラックリストにIPが登録されてしまった時に、そんなこともあったけれども、今回は該当しない。

よくよく調べてみると、Gmailでは昨年あたりから、
FromのメールアドレスがSPF認証 または DKIM認証 が設定されていないと着信を拒否する仕様になっていたらしい。

そしてこの流れは、Gmailだけでなく、Outlookやプロバイダのメール等でも同様になりつつあるらしい。

ちなみに私は、独自ドメインのメールアドレスを使っているが、SMTPサーバーは接続プロバイダのものを使っている。

なりすましメール対策ということなので、
プロバイダのSMTPサーバーを使うのならばそのプロバイダのドメインのメールアドレスを使うのが普通で、ぜんぜん違うドメインのメールアドレスを使えば「なりすまし」だと判断されることになってしまったらしい。

なので、どうしても独自ドメインのメールアドレスを使いたければ、
そのドメインのDNSサーバーにSPFレコードを設定して、
プロバイダのSMTPサーバーを登録すればよいことになる。

私が使っているプロバイダは NURO光 で、SMTPサーバーは「mail.so-net.ne.jp」を使っているので、これを設定する必要があるけれども、具体的にはどう設定すればよいのか、なかなか分からなくて苦労した。

最初、
「v=spf1 +a:mail.so-net.ne.jp ~all」
というふうに設定してみたら、ダメだった。

「v=spf1 include:so-net.ne.jp ~all」
というふうにも設定してみたけど、ダメだった。

いったいどれが正しい設定方法なのか?
たくさん模索しながら試してみたけれども、どこにも設定情報が見つからない。

結論からいうと、So-netの場合、次の5つを設定に加えてみたら、うまくいった。
おそらくこの中のどれか1つが当たりで、ハズレも含まれているかもしれない。

include:a.spf.so-net.ne.jp
include:b.spf.so-net.ne.jp
include:c.spf.so-net.ne.jp
include:d.spf.so-net.ne.jp
include:a.spf.nuro.jp

私がこれを調べた方法は、Windowsのコマンドプロンプトで、

nslookup -type=txt so-net.ne.jp

と入力したら、

“v=spf1 ip4:202.213.234.0/24 exists:%{i}.spf.so-net.ne.jp include:a.spf.nuro.jp include:spf-bma.mpme.jp include:spf-rmb.mpme.jp include:amazonses.com ~all”

という情報が出てきたので、
「spf.so-net.ne.jp」というキーワードで検索したら、
上記のようなアドレスの設定例が出てきたので、やってみたらうまくいった。

同様に、もう一つのプロバイダメール「smtp.nifty.com」も

nslookup -type=txt nifty.com

と入力したら、

“v=spf1 include:spf-03.nifty.com include:spf-04.nifty.com include:spf.ess.nifcloud.com ip4:116.83.186.110 ip4:118.67.109.25 include:ccmp.nifty.com include:amazonses.com ip4:116.83.188.150 ip4:124.24.59.16 include:spf.hosting.nifcloud.com”

という情報が出てきたので、
最初の2つ
include:spf-03.nifty.com
include:spf-04.nifty.com
を加えてみたら、うまくいった。

将来これが変更・追加された時には対処しなければならいけれども、
とりあえずは、SPFの件は、対処できたと思う。

iPad mini5のフロント液晶パネル交換をやった

先日、iPad mini5 の画面の左半分が白くなってしまった。
おそらく、どこかで踏まれて圧迫されたらしいけど、
明らかに、液晶パネルを交換しないと治らない症状である。

丸4年使っているので修理は現実的でないし、
スマホの修理屋さん(スマホスピタル、アイサポ 等)でも
27,000円くらいが相場なので、どうしようか? と考えた。

そこで、自分で修理すればもっと安くできるのでは?と思って
Amazonで交換用の液晶パネルを探してみたら、
14,000円くらいで売っていた。
これでできるなら自分で修理しよう!と考えた。

自分で本当に修理できるのか?という不安は、なかった。
YouTubeで「iPad mini5 修理」と検索すれば、
分かりやすい動画がたくさん出てくるし、

私は、5年前に、初代 iPad mini の液晶交換を経験済みだし、
iPhoneの液晶交換やバッテリー交換もやった経験があるので、
全くのシロウトというわけではないからである。

(参考)「iPad mini のガラス交換作業について」(2018/4/14 の投稿)

で、さっそくAmazonで、中国製と思われる交換用液晶パネルを買ったら、翌日に届いた。


安いので、不良品のリスクはあるけれども、まずはやってみることにした。

まず、動画解説を何本か見て、修理の手順について、イメージを掴んでおく。

苦労しそうなのは、ホームボタンの移植 である。

最初に、ドライヤーで暖めながら、フロントパネルを外す作業があるけど、前回はこれに苦労した。
でも今回は、たっぷりと時間をかけて丁寧にやることにしたので、大丈夫だった。

そして、フラットケーブルを取り外す。

フラットケーブルがハズレれば、フロント液晶パネルを取り外すことができる。

ここからが一番の難関で、取り外した液晶パネルから、ホームボタンを取り外す作業である。

接着してあるケーブルとカバーを取り外したら、いよいよホームボタンそのものを取り外す。
白いリングをくっつけたまま取り外すのがコツだ、という事前知識があったので、そのようにした。

取り外したホームボタンを、新しく購入した液晶パネルに取り付ける。
今間の作業の逆をやればよい。

ホームボタンの位置あわせ が重要になるけれども、元のとおりにつければ問題ないだろう。

新しい液晶パネルにホームボタンを付け終わったら、細長い両面テープを接着面に貼りめぐらせる。

そしたら、あとは、閉めるだけ。

不安ならば一旦動作確認してからの方がよいけど、私はやらずに閉めてしまった。

電源を入れてみたら、液晶はきちんと表示されたし、ホームボタンもきちんと動作した。

タッチ動作もぜんぜん問題ない。

液晶がなんとなく青みがかっているけれども、中国製の安物だから仕方が無い。

最後に、フロントパネルをきちんと接着させるために、クリップでとめておくことにした。

前回(2018年)初代iPad mini を修理した時は、もうこりごりだと思ったけど、
その時の経験と自信があったおかげで、今回、安上がりで修理することができたので、
経験を有益に活かすことができたと思う。

今後、目安としては、1万円台で修理が可能ならば、業者に依頼すると思うけど、
2万円を超えるようなら自分でチャレンジしてみるかもしれない。

自分にちょっとした技術があれば、安上がりにできる可能性があるので、選択肢が増える。
めんどうくさければ、あえて自分でやらなくてもいいし、
気分転換に試しにチャレンジしてみることだってできる。

豊富な YouTubeの解説動画のおかげで、チャレンジの心理的ハードルが下がるは、よいことだと思う。

ポケモン・ゲーム(Nintendo Switch版)の「タイプ相性表」の再整理

ポケットモンスターSV(スカーレット・バイオレット)他、
任天堂Switchまたは3DSで動作するポケモンゲームのバトルにおいては、
次のような「タイプ相性表」というものがある。

頭のいい人は、この表を暗記していて自由自在に使いこなすけど、
これがなかなか頭に入りづらく、勘違いして覚えていることも多々ある。

たとえば、でんき は くさ に効果バツグンなので、
その逆もそうかといえば、違っていたりする。

なので一度、攻撃側と防御側にわけて、
それぞれの立場で分解してまとめてみた。

<攻撃する側の立場から>

<防御する側の立場から>

単純に、数値計算だけで比較すれば、
「はがねタイプ」が圧倒的に弱点が少ないけれども、
相性の良いポケモンの出現率やストーリーに左右されるので単純ではない。

このタイプ相性表は、
スマホアプリの「ポケモンGO」でもほぼ適用できるけれども、一部異なる。

たかだかゲームのためにそんな分析をやって時間の無駄だろ!
等と考える大人もいるかもしれないけれども、
そういう人は、自分のメイン仕事に対しても、
同レベルの考え方で取り組んでいるのかもしれない。

いい仕事をしている人は、自分の仕事に関して、
ポケモンのタイプ相性のような「強み」「弱み」を、
「お客様」や「商品・サービス」ごとに分析して、
タイムリーな行動をしていく習慣ができているのだと思う。

受験勉強だって、資格試験だって、就職活動だって、起業活動だって、
うまくやるコツ、の本質の根っこ部分は同じものである。

こんなふうな「まとめ」の作業に、人工知能(AI)を活用すれば
ほぼ自動的に、完璧な仕事をしてくれるかもしれないけれども、

「そこに、何の価値を見いだして、応用していくか?」

という課題解決は、永遠に「人間の仕事」であり続ける。

仕事はゲームであり、ゲームは仕事である。
そしてゲームは、人間がする仕事であり続ける、

と、私は考える。

ノートパソコン(NEC Lavie NS700/JAB)を自分で修理してみた

数年前、息子用に買ったノートPCが、壊れてしまったようだ。
使用中に、いきなり何の前触れもなく、電源がパチンと切れてしまう。
ブルー画面も何も出ず、何が原因なのかさっぱり分からない。

メモリ診断などをいろいろやってみたけれど、問題なし。
AC電源をつなぎっぱなしなので電源は問題ないはず。
BIOS画面や、UEFIの修復画面等では絶対に電源は落ちず、
Windowsが動作している間だけ、電源がパチンと切れる。

この他、故障ではないけれども、
キーボードのキーが1個([L]キー)破損している。
同じ大きさの他のキーボードから取ってきても、微妙に形が合わない。

メーカー(NEC)に有償修理を頼むと、
キーボードの交換だけで5万円以上するし、
電源がパチンと切れるといえば全体交換で5万円以上するし、
バッテリーも交換すると3万円くらいするし、
結局、新しいPCを買った方が安くなる計算になる。

そこでまず、バッテリーを交換してみて、電源パチンが治るようならば
他の修理をしてみようと考えた。

バッテリーは正規修理を頼めば3万円以上するらしいけれども、
パーツを買ってくればもっと安く済む。
ヨドバシドットコムだと1万5千円くらいで売っていたけど、
Amazonだともっと安いものが売っていて、5,000円くらいのを買ってみた。
上が購入した新しいバッテリーで、下が取り外したバッテリーである。

さっそくバッテリーを取り替えてみると、
電源がパチンと落ちる事象はすっかり解消した。
AC電源をつないでいても、バッテリーが0%だとダメらしい。

次にキーボードだけど、
ヤフオクで、ちょうど同じノートPCの型番に合う「交換用キーボード」が
1,200円即決で出品されていたので、それを購入した。

ついでなので、ハードディスクではなくSSDに交換しようと思って
500GBのSSDも購入した。

今日、それが届いたので、さっそく修理作業をしてみることにした。

参考にしたサイトは、こちらのサイトである。
NEC LavieノートNS700/JAの分解とSSD換装方法

とても分かりやすい画像だったので、このとおりにやったみた。

順番にネジをはずして、上部パネルをはずしていく。

上部パネルを外すと、ハードディスクが現れるので、これを取り出して、
代わりに購入したSSDを取り付けてる。

あとは、元の順番で、上部パネルをはめて、ネジをとめていく。

そして最後に、キーボードをはめれば修理完了である。

交換用キーボードは、オリジナルと少し色が変わっていたが、位置や形も同じで、動作も問題ない。

が、キーボードのベース板の大きさが少し違うので、本体にきちんと収まったが、
ネジの穴などもぜんぜん合わないので、上に置いてあるだけの状態で、グラグラしてしまう。

仕方がないので、あとで、両面テープなどで、固定しようと思う。

とにかくこれで、修理が無事に完了し、SSD化も実現することができたので、少しレベルアップした。
修理にかかった費用は、バッテリーが約5,000円、キーボードが 1500円(ヤフオク半額クーポン適用)て、
工賃は、自分でやったので無料だった。
そうやって節約した修理代で、SSDを購入して交換することができた。これは7,500円。

もし私が、このようなノウハウと技能をもっていなかったら、
メーカーに修理を依頼して10万円以上払うか、あるいは諦めることになったと思う。

このノートPCは、CPUが Core i7-8550U で、なかなか能力が高い方なので、修理する価値があった。
Windows11 を入れて、まだまだ現役で使えると思うので、大切にしたいと思う。

Windows Server の「記憶域」障害からのデータ復元(完了)

2週間前に発生した、Windows Server の「記憶域」障害は、
2週間経って、ようやく 復旧させることができた。

今回、障害にみまわれた仮想ディスクは、次の2つである。

 1.14TBのミラーボリューム(8TB×2台 + 6TB×2台 = 4台構成)
 2.6TBのシンプルボリューム(3TB×2台 = 2台構成)

結果は、
 1のミラーボリュームの方は、データを完全復旧できたが、
 2のシンプルボリュームの方は、全滅だった。

なぜ2週間も経ったかというと、
特殊なソフトを使って無理やり復旧させる過程で、
何度か失敗し、試行錯誤があったからである。

でも次に同じ障害にみまわれた場合に、
今回の経験は活かすことができる。

将来の自分が、今回の経験を活用することができるように、
このブログに、備忘録を残しておきたいと思う。

<障害の原因について>

起動ドライブのSSDのブート部分が損傷したことで
OSを再インストールしたが、バージョンの差異により、
(おそらく新しいバージョンのOSを上書きした)
「記憶域」の仮想ディスクの構成部分が上書更新され、
アクセス不能に陥った、という事象である。

「記憶域」を構成するシステム情報は、Windows OS ではなく、
対象のハードディスク内に記録されているはずなので、
OSを上書きインストールしても ディスク構成が変わらなければ
影響は受けないはずだ、というのが事前の知識だった。

事実、OSの再インストールの途中では、
「記憶域」の仮想ドライブは正しく認識されていた。

起動後、「Server Core(GUI無し)」を誤って選択していたことに気づき、
別のインストールDVDから、インストールをやり直した後、
Windowsの「記憶域」のディスクにエラー表示がされており、
再起動して Windows Update が適用されたら、
もうディスクがどこにも表示されなくなってしまった。

Microsoft社のドキュメントを見ると、
エラー内容は、次のものに該当するようだった。

———————————————————————————————————
ドライブの正常性状態:異常

認識されないメタデータ

記憶域スペースで認識されないメタデータがドライブで検出されました。
これは通常、ドライブに別のプールからのメタデータが含まれていることを意味します。
アクション: ドライブをワイプして現在のプールに追加するために、ドライブをリセットします。
———————————————————————————————————

ドライブをリセットするということは、データがすべて消失することを意味する。
つまり、正攻法では、解決手段がない、ということだった。

障害の原因については、このように分析しているが、
真の原因は、

「バックアップを完全にとっていなかったこと」である。

バックアップはとっていたが、バックアップ先も「記憶域」だったので、共倒れしてしまったことになり、意味をなしていない。
今回、復旧できなかった 6TBのシンプルボリューム の仮想ディスクがバックアップ先である。

<購入したもの>

・ソフト「ReclaiMe Storage Spaces Recovery」 40,060円
・ソフト「ReclaiMe File Recovery Standard」 10,709円
・内蔵ハードディスク 8TB 15,320円(税込)
・内蔵ハードディスク 10TB 20,400円(税込)
・内蔵ハードディスク 10TB 20,400円(税込)
・その他、変換ケーブル等

全部で約10万円以上の出費があったが、
他人に支払っただけで終わりの「費用」ではなく、
購入したモノが手元に残り、別用途にも活用できる資産である。

<データ復旧の経過>

いろいろと失敗&試行錯誤はあったが、
最終的に成功した手順は、次のとおりである。

このとおりにやれば、次回も復旧できるはずであるが、
「ミラーボリューム」になっていることが条件になる。

「ReclaiMe Storage Spaces Recovery」を起動し、
仮想ドライブを構成しているディスクを選択して「Start」ボタンを押す。
(対象とする仮想ドライブは1つだけにする)

解析結果が表示されるので、その結果が「Good」であることを確認する。
ここまでは、ソフトを購入しなくても、実行可能であり、
結果が「Good」ならば復旧できるのだから、40,060円で購入して先に進めばよい。
あるいは、もう一つのソフト「ReclaiMe File Recovery Standard」だけを 10,709円で購入して、部分的なリカバリ(ファイル救出)を試みるという選択肢もある。

先に進む場合は、「Save config」ボタン右の ▼印を押して、
「Save raw sectore-by-sector image file」をクリックすると、
ソフト購入後に画面表示される シリアル番号 の入力が済むと、
ディスクイメージファイル(拡張子 .img)の出力先を指定できる。

今回の場合、ディスクは 14TBのミラーボリュームで、実質 7.390 TBだったので、

1回目は、8TBのディスクを出力先に指定したけれども容量不足エラー
2回目は、10TBのディスクを出力先に指定したけれども容量不足エラー
3回目は、8TBと10TBをつなげた18TBのスパニングボリュームを指定してエラー解消

という経過をとったが、1回目と2回目は、まる1日かかり、3回目は2日くらいの時間を要した。

3回目で、約14TBのディスクイメージファイルが出力できたので、
それをマウントすれば復旧完了のはずだったが、
「ディスクイメージファイルが壊れています」のエラーが出て、マウントできなかった。
仕方なく急遽、「ReclaiMe File Recovery Standard」のソフトを 10,709円で追加購入し、さらにその出力用として、10TBのハードディスクを追加購入した。

「ReclaiMe Storage Spaces Recovery」ソフトから「Recover files」ボタンを押すと、
最初に選択した、「記憶域」対象ディスクからのファイル復旧を試みる。

最初はこの方法でやってみたが、復元対象ファイルとして、
見知らぬファイルやフォルダがどんどん表示されていく。
どうやら、過去に削除したフォルダまでもが対象になるらしい。
対象となるフォルダだけを選んで復元してみると、ファイル内容が壊れているものが多すぎたので、途中で処理を中断した。
時間ばかりかかるけれども、これでは役に立たない!

次に、マウントできなかった 約14TBのディスクイメージファイル(.img)ファイルを指定して、復元をしてみると、余計なファイルやフォルダは表示されなくなった。
そして、フォルダ単位で復元を試みると、壊れているファイルは皆無だった。

半日以上の時間を要したけど、ようやくすべてのファイルを 10TBハードディスクに復元することに成功した。

復元できた後は、
「記憶域」の仮想ディスクを再作成して、ROBOCOPYコマンドを使ってファイルをコピーした。
今度は、14TBのような大きなボリュームは作らずに、8TB と 6TB の2つのボリュームに分割した。
万が一、次回、今回の方法で復元することになった場合は、10TBのハードディスクが使えるからである。

今回の 10TBハードディスクは、現時点のバックアップとして、しばらくオフラインにして、保存しておこうと思う。

Windows Server の「記憶域」障害からのデータ復元(続き)

昨日、10TBのハードディスク(Seagate製)が届いたので、
さっそく取り付けてみて、

ReclaiMe Storage Spaces Recovery Softwareソフトでの、ディスクイメージ出力をやってみた。
ファイルは 7.3GBくらいなので、
さすがに10TBあれば余裕だろうと思っていた。

が、さきほど結果を見てみたら、
次のようなエラーで止まっていた。

約8TBある 拡張子img のディスクイメージファイルは出来ていたが、
マウントすると「ディスクイメージが壊れています」となって開けない。

どうやら、今回の「記憶域」は、8TB×2台 と 6TB×2台 のミラー構成なので、
全部で14TBあるので、それ以上の容量が必要だったらしい。

さすがに 14TB以上のハードディスクとなると、
16TBのものが約5万円もするので、もうきりがない。

仕方がないので、8TBと10TBの2台のハードディスクをスパンボリュームにして
18TBのドライブを作って再チャレンジするしかない。
外付けのハードディスクケース(LOGITEC製のガチャベイ)があるので、
それに2台入れて「スパニング」に設定すればよさそうだ。

でも、これをやるとなると、あと2日くらいかかるし、
次も別なエラーで失敗しないとも限らない。

もしかして、8TB×2台 + 6TB×2台 = 28TB ないとダメならば、
もう諦めるしかない。

と、こんなことを考えていたところ、
画面をクリックしたら「Recover files」というボタンが押せるようになり、
押したらいきなり、ソフトのダウンロード画面が出てきた。

どうやら、ディスクイメージの書き出しではなく、
ファイルを個別に修復するには、別のソフトがあるらしい。

ReclaiMe File Recovery Standard
https://www.reclaime.com/buynow.aspx

名前が似ていたので同じものだと思ったら、別売りの 別ソフト だった。
ダウンロードは無料で、24時間以上かけて書き出した
約8TBのディスクイメージファイル(.img)を読み込んだら、
フォルダ内容がツリー状に出てきて、個別に復元できるようである。

さっそく復元しようとしたら、購入ページが現れて、
この Standard版が必要だと表示された。

だまされた感はあるけれども、あと1万円くらいで修復できるならという思いで、
購入してシリアル番号を入れたら、復旧が進み出した。

このディスクイメージファイル(.img)は出力が完了しなかったものなので
100%復元することはできないけれども、優先度の高いファイルを
先に救出しておこうと思う。

ディスクイメージファイル(.img)の再出力を行うのは、その後にしよう。
それが成功したら、残りの全ファイルを救出しよう。
万が一またエラーが出たら、この「 ReclaiMe File Recovery Standard 」ソフトを使って、復旧しよう。

Windows Server の「記憶域」障害からのデータ復元が進行中

3日前、自社内の 仮想サーバー(Hyper-V)のメンテナンス中に
起動ドライブ(SSD)のブート領域が破損したことがきっかけで
Windows Server の「記憶域」のストレージがエラーとなり、
データが全く読み出せない状態が続いている。

Windows の「記憶域」は、RAIDよりも便利に、そして安価に、
安全なストレージ構成が組めるので、重宝していたけれども、
いざエラーになると全滅してしまう、という事実に直面した。

Windows の「記憶域」は本来、OSを再インストールしても、
元のハードディスクが全部元通りに接続されていれば、
壊れるはずがないのだけれども・・・

今回は、新しいバージョンのOSでブートしたりしたので、
構成が壊れてしまったらしい。

Windows の「記憶域」は、一般的なデータ修復ソフトは
対応していないので、特殊な修復ツールを使う以外に道がなく、
どうにか探し求めて手に入れたのが、次のソフトである。

ReclaiMe Storage Spaces Recovery Software
http://www.storage-spaces-recovery.com/

このソフトを起動して、まず最初に、
ディスクを選択してチェックをかけて、状態がよければ、
「Recover Files」ボタンを押すと、
ディスクイメージファイル(.img)に出力してくれるので、
そこからデータを救出すればよいことになる。

今回は、サイズが 約7.3TBだったので、
8TBのハードディスクを外付けでUSB接続し、
昨日の夕方に出力を開始した。

今日の夜、結果を見たら、99.9%のところで
ディスク容量不足エラーが出て失敗してしまった。

そんな些細な失敗を悔やんでいるヒマはないので、
迷わずにすぐ、10TBのハードディスクを Amazonで購入し、
明日、それを接続して、再チャレンジすることにする。

この件だけで、10万円近くの出費があったけど、
データが完全修復できるなら安いものである。

追加購入した暫定使用の 8TBと10TBのハードディスクも
このあとは、バックアップ用として活用すればよい。

ReclaiMe Storage Spaces Recovery Software
のソフトも、所有していれば、再び使用することができるけど、
できればもう2度と使う機会を訪れさせないように気をつけたい。

とにかくバックアップは、複数種類をとっておいた方がよい。
本当に大事なデータは、クラウドにも必ずとっておこうと思う。

高い授業料ではあるけれども、「失敗は成功のもと」なので、
失敗体験から得た教訓を自分の知的資産にすることができれば、
確実に「成功」に昇華させることができる。

自作のトレーディングツールは、システムメンテのため、今週いっぱいお休みします。

本日(3/26)、kabu.hosono.jp のサイトが入っているサーバーが
メンテナンス中にストレージ障害に見舞われ、回復までに
かなりの時間を要することが確実となった。

商用サイトではなく、あくまでも自己利用の実験サイトなので、
誰にも迷惑をかけるわけではないけれども、ちょっと迂闊だった。

具体的には、仮想サーバーの親機が起動できなくなって、
OSを上書きして起動はできるようになったけれども、
肝心なデータが収められているストレージに
全くアクセスできなくなってしまった。

ディスクが壊れたわけではないけれども、
Windowsの「記憶域」という機能で状態が「異常」のため、
何も読めなくなってしまっている。

こうなると、二重化していても共倒れなので、意味がない。
もちろんバックアップは残っているので復元可能だけれども、
100%ではなく、しかも毎日ではなかったので、内容が古い。

RAIDディスクを復旧してくれるサービスはあるけれども、
Windowsの「記憶域」は特殊なので、どうにもならなそうだ。

と思っていたら、そうやら復旧用ソフトは、あるらしい。

ReclaiMe Storage Spaces Recovery Software
http://www.storage-spaces-recovery.com/

という海外製のソフトで、消費税込みで、4万円を超えている。
でも背に腹はかかせないので、迷わずダウンロードしてみた。

さっそくソフトを起動してチェックしてみると、
状態は「軽度」なので、復旧できそうだ、と出てきた。

でも次のボタンを押すと、シリアル番号の入力を求められるので、
ソフトの販売ページからクレジットカードで決済し、
送られてきたシリアル番号を入力すると、次に進むことができた。

さっそくやり始めているけれども、
詳細チェックだけで、かなりの時間がかかる(数時間から数日)ので、
今日、明日で復旧できる見込みはなく、待つという選択肢しかない。

もちろん失敗のリスクもあり、
データが100%復旧できるかどうか分からないので、
ディスクのイメージ出力も行うとなると、
ほぼ元のデータ量と同等以上のディスク容量が必要そうなので、
でっかいハードディスク(8TB)も準備した。

今週やってみるけれども、結果はどうだろうか?
Windowsの「記憶域」は、しばらく怖くて使えない。

普通のファイルシステムにしておいた方が無難だと思った。
そうすれば、いざ壊れた時に、USBの外付けにして、
データだけは救い出すことができるからである。

「記憶域」が悪いわけではないけれども、依存するのは危険だと思った。

断裁機(DURODEX社の 200DX)の 刃を自分で交換

今日は、断裁機(DURODEX社の 200DX)の 刃を交換した。
昨年、1回経験しているので、今日は2回目である。

メーカーのページに、刃物の交換手順図解が載っている。
http://www.durodex.com/mnt/bldchg-01.html

初めての時は、少し難しかったけど、
2回目だと構造が分かっているので、すぐにできた。

わざわざメーカーに送るのに梱包したりするのも面倒なので、
自分でやってしまった方が、早くて安く済む。
手が油で黒く汚れるのが難点なので、手袋をした方がよかった。

刃を交換しなければならなくなった理由は、
昨年8月、1,400冊くらい本を裁断した際に、
1冊だけホチキス留めされていた本に引っかかって、
「刃こぼれ」したので、切れ味が悪くなっていたからである。

取り出してみると、「刃こぼれ」によるダメージが
こんなに大きかったので驚いた。

こんな状態でも、刃こぼれした部分に 切り跡がつくものの、
本を裁断することはできていた。

刃の交換が終わったので、雑誌を数十冊、裁断してみたら、
ものすごく切れ味が良いので、少し感動してしまった。

昨年、自分の書棚の本はほぼすべて、裁断が終わったので、
次は 過去に廃棄して後悔した本をできるだけ収集して、
Caribreのデジタル蔵書ライブラリに加えることである。

Amazonマーケットプライス や ブックオフ等で、
古本として購入して、裁断してしまえばよい。

昔に新品購入して読んだけど処分してしまった本は、
そこに書かれている内容に価値があるのではなくて、
自分がそれを読んだという履歴と、その時に感じたことの記憶に
むしろ価値があるのである。

次回パンデミックシナリオについての私的予測(戯言)

新型コロナ騒動が終息した次に、何のパンデミックが起こるだろうか?
2022年3月6日時点での、私なりの勝手な予測をしておこうと思う。

残念ながら、新型コロナ騒動が本格開始した2年前から
パンデミックを起こす側の 要人さん達の配役が全く変わっていないのだから、
同じパターンが繰り返されるかエスカレートして現れることになると思う。

特定の個人や企業を、ヒーローまたは犯罪者 に分類しても意味はなく、
「善意 と 悪意」
「慈善 と ビジネス」
「天使の心 と 悪魔の心」
「美しいストーリー と 汚いストーリー」
「計画 と 陰謀」
という両面が、どちらもバランスよく混在していると考えるべきである。

まず、有力なシナリオを考えてみよう。

遺伝子ワクチンを3回も4回も 自分の人体に撃てば、人体にどのような化学的変化が起きるのか?

このことを考えてみれば、何となく方向性は見えてくる。
もし免疫系に異常が出てくるのだとしたら、
免疫に関する病気「後天的免疫不全症候群」(通称:絵井図?)の新型だろう。

旧型の「後天性免疫不全症候群」は、まだ、ワクチン が正式には登場していない。
今まで開発しようとしていたはずなのに、いろんな事情があって正式承認に至っていない。
今回の新型コロナパンデミックで、新型ワクチンを治験をスキップして安全性を度外視して
「緊急承認」として全員に撃たせることができるという前例が出来たのだから、
次も当然その前例に従うはずである。

「新型のHIVワクチンが、新技術により、遂に完成しました!」
というようなニュースが大々的に出たら、このパターンに合致することになる。

HIVウィルスはRNA型なので何度も変異を繰り返すので、数回にわたってパンデミックの波を作ることができることから、「~~株」という同じシナリオも作られやすい。

そして、新型の 遺伝子 ワクチン のせいで免疫に異常が生じた人に対しては、
新型の「後天性免疫不全症候群」に感染したのだということになった方が、都合が良い。

しかもしかも、
新型コロナウィルスよりも 恐怖心がさらに強力になるのだから、
ワクチン を撃ってない人への差別が強力に広がることになる。

新型コロナワクチン を撃ってない人に対しては
「ケシからん奴だ!」程度で済んでいた感情が
さすがに 新型エイズワクチン を撃ってない人 に対しては
「近寄るな!」「入店禁止にせよ!」「外出禁止にせよ!」
そして「(強制収容所へ)隔離せよ!」とエスカレートするだろう。

「全国民に強制接種」という全体主義への流れに一歩近づいてしまう。
それが本流の流れなのかもしれないけど、それを知れば、支流の流れも読める。

さて、もう一つのシナリオは、
以前から懸念されていて、ビル・ゲイツさんも予告している天然痘ウィルスである。
以前から懸念されていたことだし、既成のワクチン(痘苗)もあるし、
おそらく対策も進められてきたことなので、そんなに単純にはいかないはずである。
天然痘ウィルスはDNA型なので変異が少ないことから、
パンデミックを起こす側からしたらあまり美味しくないかもしれない。

新型の天然痘が作られたとすれば、人工的であることがバレバレになるので、
ロシアの研究所から発したバイオテロだ!といってプーチン氏を非難する口実に使われる可能性は、あるかもしれない。

どちらか一方のシナリオか、あるいは両方の混在シナリオか、
それとも 全く別の予想外のシナリオになるかもしれないけど、
新しい病気の名前が付けられ、ワクチン が 先に作られるはずである。

願わくば、これが私の自分勝手な作り話であり、くだらない与太話であり、
何も起こらずに 静かにパンデミックが集結してくれることを期待したい。

さて、仮にどのようなシナリオが用意されていたとしても、
所詮は「人間の浅知恵から生まれた 愚かな過ち」レベルのものなので、
大自然界(宇宙)の英知 からすれば 恐るるに足りず、と私は考える。

人間の人体は、小宇宙であり、大自然界(宇宙)の英知 そのものである。
人生の命題、そして特に「健康」という問題については、
生命の供給者である「大自然界(宇宙)」を、絶対的に頼ればよいことになる。

自分が本来持っている「生命力(免疫力を含む)のパワーと英知」に気づくことができた人は、
人工的パンデミックなどに惑わされる必要は、なくなるはずである。

免疫力よりも「生命力」の方がもっと大切だ、っていう基本すぎる事項を理解できるまで、
ワクチンを撃ち続けるとしても、「生命力」が弱まる前に気づかないと、本末転倒になる。

他人が作るパンデミックシナリオよりも
自分が作る「健康シナリオ」を最高レベルで優先することをお勧めしたい。

西洋医学 と ヒーリング を同時活用する

過去の手書きノートをまとめて裁断・スキャンして、
パラパラと読んでいたら、次のようなメモが見つかった。

汚い字で なぐり書きしたものなので読みづらいけど、
4年前(2018年)は、ちょっとした出来事があって、
いわゆる「遠隔ヒーリング」を試みたのだった。

ヒーリングというと、
特殊能力者がやるものという先入観があるけれども、
奇跡を起こすようなレベルでなければ、
私のような凡能力者でも、十分に実行可能なものだ、
と確信した出来事だった。

ヒーリングというのは、医学的な処置を施さずに
心や体の健康を取り戻すことを意味するが、
私たちは普段、知らず知らずのうちに、
これと逆のこと、つまり

「自分や他人の、心や体を不健康にすること」

をやっていることが多い、ということに気づく必要がある。

自分が、次のような破壊的な想念を強烈に放射すると、
気分が悪くなるだけでなく、体調も悪くなるはずであり、
自分だけでなく、まわりの人にも悪影響を及ぼす。

・イライライライラ
・ムカつくッ
・不安、不満、恐怖
・怒り、怒鳴り、ブチ切れ
・呪い

こんな破壊的な想念を放射するだけで、
自分や他人の 心や体を不健康にすることができるような
すごい能力を誰でも持っていることになる。

だとすれば、それと逆の想念を強烈に放射すれば、
逆の結果を導き出すことができるはずである。

破壊的な想念を放射して自分や他人を不健康にする代わりに、
その逆の
建設的な想念を放射して自分や他人を健康にすればよい。

それが、
・感謝、喜び、愉しみ、祝福、慈悲、安心、確信・・・等 の
建設的感情である。

そしてその感情を、
まるで「虫メガネ」で太陽光を一点集中させて紙を焦がす! が如くに、
ターゲットとなる人体の部位に集中放射して、
その部位の「細胞」達に、命令に従ってもらうのである。

自分が病気を治す時は、自分の細胞に向けて行えばよいし、
他人の病気を治す時は、相手の細胞に向けて行えばよい。

病気を最終的に治してくれるのは「医者」や「薬」ではなく、
「細胞」レベルで活動している 人体システムの英知 である。

西洋医学で、外科的な処置をしてもらったら、
人体側がそれに適応するように、細胞たちが修復活動を始めるので、
その生命の英知に感謝・祝福し、破壊的な想念を防ぐだけでいい。

物理的な医療処置である 西洋医学 を否定するのではなく、
むしろ、想念放射によるヒーリングを有機的に組み合わせることで、
人間のいかなる病気も、確実に治すことができるはずである。

[解決!]CentOS5 で動作する Plesk のライセンスキー取得が失敗するトラブル

2021年12月に、Pleskが動作しているサーバーで、ライセンスキーが自動更新されないというトラブルがあった。
Plesk のライセンスサーバー(ka.plesk.com)に、何らかの変更があったらしく、旧バージョンのOSを使っているサーバーだと、影響があったらしい。

CentOS7 のサーバーは、サーバー会社経由で、ライセンスキーを手動で発行してもらってアップロードしたら、その後うまくいくようになった。
が、CentOS5 のサーバーだけは、さすがに古すぎてどうにもならない。

でもライセンスキーが期限日までに更新できないと、Pleskの操作ができなくなって、新サーバーへの移行をするのにも支障が出るので、何とかしなければならない。

■事象

CnetOS5 + Plesk12.5 のサーバー環境で、
「ツールと設定」-「ライセンス管理」-「Pleskライセンスキー」の「キーを取得」をクリックすると、次のようなエラーが出る。

cURL cannot communicate with license server https://ka.plesk.com/xmlrpc: SSL connect error(35)
cURL cannot communicate with license server https://ka.plesk.com/xmlrpc: couldn’t resolve host name(6)

 

コンソール画面から、

plesk bin lisence –retrieve

のコマンド入力で対応しようとしても、次のようなメッセージが出て、結果は同じ。

[2022-01-01 00:02:39] ERR [1] /usr/local/psa/admin/bin/logmng ‘/var/log/plesk/install/ai_action_time.xml’ failed with message: logmng: execve failed for /usr/local/psa/admin/sbin/logmng: Exec format error

System error 8: Exec format error

[2022-01-01 00:02:41] ERR [panel] KeyUpdate Result code: 2 Network failure

[2022-01-01 00:02:41] ERR [panel] KeyUpdate Result desc: cURL cannot communicate with license server https://ka.plesk.com/xmlrpc: SSL connect error(35)
cURL cannot communicate with license server https://ka.plesk.com/xmlrpc: couldn’t resolve host name(6)

[2022-01-01 00:02:41] ERR [panel] KeyUpdate Result additional information: cURL verbose output:
* About to connect() to ka.plesk.com port 443
* Trying 195.214.233.82… * connected
* Connected to ka.plesk.com (195.214.233.82) port 443
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSLv3, TLS handshake, Client hello (1):
> SSL data removed for security reason* error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
* Closing connection #0

cURL verbose output:
* Couldn’t resolve host ‘ka.plesk.com’
* Closing connection #0

 

■原因

2012年12月頃から、Pleskライセンスサーバーへの接続が TLS1.2未満を遮断するように なっていた らしい。

ka.plesk.comは、nslookup で調べると、次の3つのIPアドレスが対応している。
この3種類のどれも、TLS1.2以上で接続しないと、遮断されてしまう。

195.214.233.80
195.214.233.81
195.214.233.82

 

■対応策

CentOS5 はもともと、TLS1.0 までしか対応できないけれども、openssl と cURL と PHP を新しくして、TLS1.2 で接続できるようにすれば解決するはずである。

が、Pleskの内部コマンド( /usr/local/psa/bin/ )は、独自のPHP環境でコンパイルされており、ソースも暗号化されているので、openssl と cURL と PHP を新しくしても、再コンパイルすることができず、解決できない。

Plesk内部で動作している PHP の実体は、 /usr/local/psa/bin/sw-engine-pleskrun であり、これを再コンパイルできない限り、どうにもならない。
Pleskコマンドのソースは非公開(暗号化)されているので、再コンパイルは、できそうにない。

[root@www bin]# /usr/local/psa/bin/sw-engine-pleskrun -v

PHP 5.6.14 (cli) (built: Oct 5 2015 15:54:43)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with the ionCube PHP Loader v4.7.5, Copyright (c) 2002-2014, by ionCube Ltd., and
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

 

■対応結果

諦めかけていた頃、年明け早々に、サーバー会社から、別の解決案があることを教えてもらい、見事に解決した。

/etc/hosts ファイルに、 ka.plesk.com の正引きIPアドレスの3種類(195.214.233.80, 195.214.233.81, 195.214.233.82)ではなく別の IPアドレスを設定すること、である。

そのIPアドレスは非公開(機密)なので、インターネットをいくら検索しても見つけることはできない。
でも、Plesk社は旧OSユーザーをバッサリ切り捨てるような対応はしなかった、ということは分かった。

年末年始、いろんな対応策を教えていただいたサーバー会社(GMOクラウド社)に、感謝したい。

紙の書籍をすべてデジタル化(自炊)した

昨年(2021年)、2つの本棚に入っていた蔵書をすべて、デジタル化した。
裁断してPDFファイル化するという、いわゆる「自炊」である。
約1,400冊を1ヶ月程度で、すべて自分で作業した。

最初は、一部だけをやるつもりだったが、
だんだんとデジタル化の便利さに気づいたので、
結局全部やってしまうことになった。

デジタル化の便利さとは何かといえば、
全ての本がクラウドストレージ上からすぐに読めて、
探している本とページがすぐに探しだせて、
それをタブレット端末(iPadやFire等)等で
大きな文字にして読めること、である。

だから一部の本だけでなくて、
全部の本がデジタル化されている方がうれしい。

今までは、書棚の中から目的の本を探すのが困難だったけど、
これからは、目的の本をいつでも見つけて開くことができる。

昨年は、
裁断機を「DURODEX パーソナル断裁機 200DX」に、
ドキュメントスキャナを「ScanSnap iX1400」に、
それぞれ買い換えて、飛躍的に能率アップした。

裁断した本はすべて、電子書籍管理ソフト「Calibre」にて、Kindle本と一元的に管理している。
本のタイトルさえわかれば、一発で検索できるし、
PCまたはタブレット端末で、開くことができる。

今までは、過去に読んだ本を思い出して参照したくても、
いちいち本棚から探すのが面倒なので、参照を取り止めていたこともあったけど、
これからは、すぐに探せるので、遠慮なく参照することができる。

デジタル蔵書化が、保管場所の削減 だけではなく、自分の知的財力のアップに役立つ、
という利点があることに気づけたのは、大きな収穫だったと思う。

チャートギャラリー(パンローリング社製)の株価更新を自動化する方法

パンローリング社の「チャートギャラリー」というチャートソフトは、
チャート機能よりも、大量の株価情報を管理するデータベースとして利用価値がある。

その機能「Pan Active Market Database」は、32ビット環境しか動作しない等、
やや陳腐化しているものの、約30年分のデータを外部プログラム、EXCEL、ACCESS等から自由自在に扱えて、しかも毎日、最新データを簡単に更新できるので、必需品である。

株価の更新は、毎晩7時頃に、[Panメニュー] から [Panデータ管理]ボタンを押して、
[データ管理] – [取り込み] – [Pan Rolling] という順番でメニュー選択が必要なので、意外と面倒くさい。

最初のうちはこれをいちいち、手でやっていた。
でも、トレード分析ツールを自作し始めてからは、だんだん面倒になってきた。

この作業を毎晩7時に、自動的に実行して最新データを更新してくれると便利だなぁ、と私なら当然考える。

チャート機能を使うだけの人は、手動更新でも十分かもしれないけれども、
Pan Active Market Database」の株価データを二次加工して使用する場合は、
自動更新できるようにシステム化しておかないと、更新を忘れることも出てくる。

さて私は、ボタン押しを自動化するのに便利なツールとして、
uwsc というWindows操作の自動化ツール を使っている。

インストールの必要はなく、zipファイルを展開するだけですぐに使用できる。
展開したフォルダ内に1つ、拡張子 .uws のテキストファイルを1つ作成し、
そこにスクリプトを描き込むだけで、Windows操作が自動化できる。

 

// Pan強制終了 ※念のため
EXEC("taskkill /IM pandtmgr.exe")

// 5秒待つ
SLEEP(5)

// Pan起動
// PanID = EXEC("C:\Program Files (x86)\Pan\pandtmgr.exe")
PanID = EXEC("C:\Program Files\Pan\pandtmgr.exe")

// Pan操作
CLKITEM(PanID, "Pan取り込み", CLK_ACC)

// 更新が終了するまで監視
REPEAT
SLEEP(5)
PanID2 = GetID("データ更新")
CLKITEM(PanID2, "閉じる", CLK_ACC)
UNTIL GetID("データ更新") = -1

// Pan終了
PanID3 = GetID("Panデータ管理")
KBD(VK_ALT, DOWN)
KBD(VK_F4 , CLICK)
KBD(VK_ALT, UP)

 

そして、Windows標準のタスクスケジューラー機能を使って定時起動させれば、
この株価自動更新は、実現化する。

ちなみに私は、「チャートギャラリー」のプロ版を使用していて、日本株、日経先物、米国株を使用している。

米国株は毎日15時頃に前日分が更新され、日本株は毎日19時頃に当日分が更新される。
ごくまれに、更新時間が30分以上遅れる日もあるのを考慮して、
毎日、15時から20時までを、1時間毎に自動更新するように設定している。

 

土曜日に更新するのは、前日の米国株データを反映させるため、である。

株価データの更新後に、ウィンドウが閉じずに残ってしまう場合があるので、
定時起動スクリプトの最初に、強制終了を入れている。

ともかくこんな方法で、どうにか自動更新は、実現できている。

2021年の災難対策

船井幸雄氏の「エヴァへの道」という本を読んでいたら、
その中に気になるフレーズを見つけた。
高木善之さんという方の特別講演(1981年)のエピソードの場面である。
そこで彼に、
「あなたの未来の記憶は正しいような気がする。
だからあなたが見てきた未来の記憶で、特に大事なものだけを三つ教えてほしい」と聞きましたら、
一つ目は、彼が事故にあった十年後にソ連が解体することを見た。
二つ目は、二十年後にアメリカ合衆国が滅ぶことを見た。
これは二〇〇〇年か二〇〇一年頃になります。
三つ目は、四十年後に人類が滅びるのを見た。
と、こう言うのです。私は「あれっ」と思いました。
(船井幸雄.エヴァへの道 地に足をつけ、ゆったりと、21世紀に向かおう(Kindleの位置No.1777-1781).株式会社PHP研究所.Kindle版.)
1981年を基準にすると、
・10年後の1991年に、ソ連は解体していた。
・20年後の2001年に、アメリカ合衆国は滅んでいないが
 同時多発テロの発生をきっかけにデジタル監視社会が加速し、
 アメリカ的な自由主義・民主主義が滅んだのかもしれない。
・30年後の2011年は、ここでは言及されていないけれども
 東日本大震災による原発災害があった。
・40年後の2021年に、人類は滅ばないにしても、
 「コロナ禍&ワクチン禍 」 の発生をきっかけに
 何らかの大きな変化が起こされようとしているのかもしれない。
過去の歴史のパターンからすれば、 xxx1年 という単位で
何かが起きている or 起こされている ことになり、
今回だけ違うと考えるのも無理がある。
改革、革命、新時代、そして「グレートリセット」等の
きれいごとの標語が叫ばれる時には必ず「粛正」が伴う。
そんな土石流の流れに呑まれないようにするためには、
上流と下流の位置関係、つまり、
権力者側 と 一般大衆側 の、双方の考え方を知り、
いざという時に「避難できるようにしておくこと」 である。
それが唯一の、未知の現象への対応策だと思う。

中国製の激安ミニPC「NUCBOX2」を、FXトレーディング練習用に購入した

先日の Amazonプライムデーで、Core-i5搭載のミニPCが 35,000円くらいで売っていたので、買ってみた。
サイズは Mac mini よりも小さく、デザインも悪くない。
定価は45,000くらいで、9,000円引き+クーポン1,000円適用で、1万円引きで買えた。

商品名は GMK ミニPC となっていたけれども、NUCBOX2 という商品名らしい。
CPUは Core-i5 8279U で、4コア8スレッド、メモリが8GB、256GBのSSDというスペックなので、かなりお買い得である。

GMKという会社のホームページは英語だったけれども、調べてみると、中国のようである。
こんなに激安なのだから、少しくらい怪しくても仕方がない。

きれいな箱に入っていたけれども、さっそく空けてみると、やはり、中華品質であることに納得した。
コネクタがズレていて、HDMI端子が刺さらない!

完成品を期待して買ったとしたら、これは紛れもなく「不良品」ということになるけれども、ベアボーンキットの完成版だと考えれて期待していなければ、それほど問題ではない。

さっそく中を開けてみると、やはりマザーボードのネジの付け方が、ズレている。

ネジを付け直して、マザーボードをきちんとはめたら、正常な状態になった。

起動してみると、Windows10 がプレインストールされていたので、いきなり使い始めることができた。

OSまで付いて、こんな激安で買えたのだから、お買い得だったと思う。

このPCは、FXトレーディングの練習用PCに使おうと思う。


4コア8スレッドなので、MT4を同時に起動しても、大丈夫だ。
ちなみに液晶CRTは別売りで、DELL S2421HSX-R という2万円くらいのモデル。
縦表示ができるので、トレーディング用に便利である。

Atom D2700(GMA3650)CPU搭載PCを Windows10 で、リモートデスクトップで活用

それほど古くないのに、Windows10に対応不可能というPCが、ある。
私が使っている、Shuttle製のベアボーンPC「X50V3」も、そのうちの一つである。
OS対応表を見ると、このPCだけは「Windows7 32bit」にしか対応していなくて、Windows10では動作しないらしい。

調べてみると、「X50V3」は、Intel Atom Processor D2700 というCPUを搭載していて、このCPUが問題とのことだった。
CPU内臓のグラフィックチップ Intel GMA 3650 のドライバが提供されていないことが原因のようである。

問題がグラフィックドライバなのであれば、標準グラフィックドライバで使うか、あるいは、リモートデスクトップで使えば問題ない、ということになる。

32ビット版の Windows10 だったら大丈夫だろうと思って、さっそくインストールしてみると、インストール途中で警告は出たけれども、標準グラフィックドライバできちんと起動した。

画面サイズと色は貧弱になるけれども、単純画面の「業務アプリ」や、コマンドで動作するようなコンソールアプリだったら、何の問題もない。
Windows95の時代に独自開発してしまったような古い規格のソフトを動かす場合や、単純なバッチ処理だけのソフトを動かす場合にも、何の不自由もない。

Atom D2700 は、CPUの速度はそれほど速くわけではないけれども、2コアで、計4スレッドで動作するので、業務用としては、まだまだ現役で使えると思う。

リモートデスクトップで接続して使うと、画面もフルHD(1920×1080)で使えるので、ほぼ何の制約もなく使える。

さすがに、リモートデスクトップでは、ゲームや動画再生等の使い道は厳しいけれども、それ以外はほぼ問題ない。2台目のPCとして、あるいは、サーバーとしての役割が適任だと思う。

古いPCには、古いソフトを入れて使うのがよいと思う。
私はこの「X50V3」を、バッチ処理を動作させるためだけに使っているけれども、最新OSでは動かなくなってしまった Windows95時代の16ビット版アプリを入れて使っている。
古いソフト専用のPC、という使い道ならば、ワットマンやハードオフ等で1万円以下で売られているようなジャンクPCをもう一度輝かせることができるかもしれない。

リモートデスクトップで使うなら、ディスプレイは要らないので、GMA3650だったとしても問題ない。

今までに作った、株式トレーディング用の分析ツールについて

昨年、ふとしたきっかけで、相場師朗先生の有料「株塾」に入会する機会を得て、
国内の個別銘柄の株式トレーディングを始めることになった。

それまでは、株価指数とFXしか やっていなかったので、
「銘柄選定」という行為は、ほぼ初めてのことだった。

証券会社のスクリーニングを使えば、業績の良さそうな会社を選べるけれども、
相場(あいば)式に基づく銘柄選定をやろうとすると、
既存のものではなかなかうまくいかないので、作る必要があった。

2020年1月11日に、とりあえず、たたき台として作ってみたのが、
「移動平均線サマリー ver0.1」である。
これは単に、一覧表示させてみただけ、である。

 

次のバージョン(ver2.0)では、日足・週足・月足 のそれぞれで、
PPP(パンパカパン)のシグナルの銘柄を抽出できるようにするとともに、
簡単なチャート表示もできるように改良した。

 

そして、ver3.0 になる頃には、きれいな一覧表示ができるようになって、
各移動平均線のクロス状況(上抜け、下抜け等)も表示させて、
「銘柄選定用」として実用的なツールになったと実感できるようになった。

 

この後は、移動平均線の数を増やしたり、前後9日間の損益経過を表示させたり、
随時、自分が欲しい機能をどんどん付けていった。
ver4.0の時に、PPP や 逆PPP の全体割合を示して、それを意識するようになった。

 

一覧機能は、ほぼ実用的になってきたので、その後はチャート画面の改善を加えていった。
そうして、ほぼ最終バージョンになったのが、
この「銘柄選定用 移動平均線サマリー ver5.7」 である。

一覧から検索・抽出して使う形式のツールは、ほぼ出来てきたので、
次に欲しくなったのは、「最初から お決まりの 抽出 がされた状態での表示」である。
それを固定ページ化したのが、
日経225+JPX400銘柄で、移動平均線が 月足・週足・日足で PPP(パンパカパン) の 銘柄一覧」サイトである。
https://kabu.hosono.jp/

 

これを作ったら次に、FXバージョンも欲しくなってしまったので、
株価指数+外国為替(FX)で、相場師朗先生のチャート分析を行うための相場情報」サイトを作った。
https://fx.hosono.jp/

実は、これらを作ってきた過程で、チャートを見たり分析する機会も増えたので、相乗効果はあったと思う。

私の自作ツールが、他の人に役立つかどうかは全く分からないけれども、
「ツール作り」が目的ではないので、自分だけに役立つわがままツールとして、
遠慮なく機能を盛り込むことができた。

まだまだ盛り込みたい機能はあるけれども、気が向いたら、手を付けようと思う。

完全解決! Google Chart で ローソク足+移動平均線チャート を表示すると、途中でズレと切れる!事象

以前、暫定的に解決していた、Google Chart でのローソク足チャートの表示不具合の件が、ようやく完全解決した。

その事象とは、ローソク足が10本、つまりグラフデータが10行以上になると、
途中で ズレ と 切れ、さらには、データの 抜け が発生して、表示が崩れてしまう、
という奇妙な事象だった。
Google Chart でローソク足と移動平均線

その後、いろいろと調べてみたけれども、WEBを検索しても同じ事例が見つからない。
Googleの公式ドキュメントを読んでも、そんな注意点は書かれていないので、原因が全く分からなかった。
結局、いろいろと試行錯誤しながらやってみたところ、
チャートの元データとなる、スプレッドシートの行に、
ダミーデータ行を一定間隔(8行ずつ)で2行挿入することで、暫定的に解決していた。

これだと、ローソク足10本以上でも、正常に表示させることに成功したが、
63行を超えると再び 抜け が発生してしまうので、まだまだ完全解決ではない。

今回、100本以上の長期チャートを表示されてみたくなったので、なんとか解決してみたくなって、いろいろなサンプル事例を使って、試してみた。
結局、データの行追加の方法を「google.visualization.DataTable」から「google.visualization.arrayToDataTable」へ変更してみたら、ダミー行無しで、正常に表示されるようになった。

これならば、ローソク足 300本でも正しく表示できる。
画面上で、表示スケールを調整できるようになれば、かなり実用的になる。

日足・週足・月足の同時連動チャートについても、今まで 60本までに制限していたのを、もっと増やすことができる。
できれば、日足は 120本、週足は 60本、月足は 30本 くらい を初期値にしたい。

私の自作チャートは、スマホ画面だと小さくて見づらいけれども、ピンチアウト操作で画面をズームアップして、安値と高値の数値を確認することができるので、それは意外と便利だと思う。

[サンプルソース Google Chart で ローソク足+移動平均線 の複合チャート]

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

// ライブラリのロード
// name:visualization(可視化),version:バージョン(1.1),packages:パッケージ(corechart)
google.load('visualization', '1', {'packages':['corechart']});

// グラフを描画する為のコールバック関数を指定
google.setOnLoadCallback(drawChart);

// グラフの描画
function drawChart() {

// メソッドからデータの生成
var data = new google.visualization.arrayToDataTable([
['2020/04/01',18784,18065,18686,17871,18689,18824,18822,18192,18704,21777,22454,21706],
['2020/04/02',18132,17818,17934,17707,18267,18655,18783,18301,18540,21680,22403,21700],
['2020/04/03',18059,17820,17951,17646,17901,18341,18537,18428,18365,21590,22349,21693],
['2020/04/06',18672,18576,17857,17802,18071,18239,18524,18597,18256,21506,22302,21688],
['2020/04/07',19162,18950,18878,18553,18449,18246,18461,18683,18219,21436,22258,21683],
['2020/04/08',19454,19353,19047,18730,18960,18503,18500,18664,18193,21362,22217,21680],
['2020/04/09',19406,19345,19376,19158,19216,18809,18561,18732,18189,21287,22178,21677],
['2020/04/10',19500,19498,19500,19235,19399,19144,18766,18743,18236,21212,22137,21673],
['2020/04/13',19355,19043,19312,19014,19295,19238,18941,18739,18317,21131,22095,21668],
['2020/04/14',19705,19638,19150,19093,19393,19375,19200,18811,18449,21059,22060,21666],
['2020/04/15',19660,19550,19589,19465,19410,19415,19340,18959,18576,20984,22022,21662],
['2020/04/16',19362,19290,19311,19154,19493,19404,19388,19106,18704,20904,21981,21657],
['2020/04/17',19922,19897,19575,19554,19579,19484,19466,19314,18871,20838,21947,21655],
['2020/04/20',19784,19669,19689,19611,19619,19609,19512,19423,19010,20766,21912,21652],
['2020/04/21',19529,19280,19479,19193,19615,19537,19481,19456,19070,20690,21875,21648],
['2020/04/22',19137,19137,19109,18858,19362,19455,19494,19435,19049,20612,21835,21642],
['2020/04/23',19429,19429,19313,19221,19282,19482,19465,19443,19087,20547,21796,21638],
['2020/04/24',19352,19262,19331,19175,19276,19355,19423,19420,19081,20481,21755,21633],
['2020/04/27',19819,19783,19410,19410,19491,19378,19494,19493,19116,20421,21718,21631],
['2020/04/28',19841,19771,19776,19638,19605,19476,19476,19507,19159,20368,21682,21627],
['2020/04/30',20365,20193,20105,20084,19916,19688,19551,19571,19265,20317,21651,21625],
['2020/05/01',20000,19619,19991,19551,19861,19726,19599,19604,19355,20262,21612,21621],
['2020/05/07',19720,19674,19468,19448,19829,19808,19676,19582,19448,20205,21575,21617],
['2020/05/08',20179,20179,19972,19894,19824,19887,19783,19633,19528,20152,21545,21615],
['2020/05/11',20534,20390,20333,20285,20081,20011,19944,19744,19600,20094,21516,21614],
['2020/05/12',20457,20366,20413,20293,20312,20046,20027,19867,19651,20037,21486,21614],
['2020/05/13',20329,20267,20140,20056,20341,20175,20098,19950,19697,19980,21455,21612],
['2020/05/14',20185,19914,20140,19902,20182,20223,20058,20016,19718,19914,21420,21608],
['2020/05/15',20198,20037,20149,19832,20073,20195,20118,20041,19767,19851,21386,21604],
['2020/05/18',20197,20133,20097,19999,20028,20143,20184,20077,19792,19792,21353,21602],
['2020/05/19',20659,20433,20469,20433,20201,20157,20220,20101,19836,19740,21317,21599],
['2020/05/20',20684,20595,20454,20454,20387,20222,20249,20199,19901,19697,21284,21596],
['2020/05/21',20734,20552,20692,20503,20527,20350,20276,20287,19934,19649,21249,21594],
['2020/05/22',20615,20388,20583,20334,20512,20420,20293,20308,19970,19598,21213,21590],
['2020/05/25',20741,20741,20653,20584,20560,20542,20411,20343,20043,19554,21182,21588],
['2020/05/26',21328,21271,20927,20918,20800,20709,20588,20433,20150,19531,21157,21587],
['2020/05/27',21475,21419,21249,21142,21144,20874,20771,20548,20249,19515,21133,21587],
['2020/05/28',21926,21916,21612,21580,21535,21147,20983,20748,20382,19514,21113,21588],
['2020/05/29',21955,21877,21807,21710,21737,21445,21166,20932,20487,19526,21094,21590],
['2020/06/01',22161,22062,21910,21898,21952,21709,21382,21125,20601,19538,21076,21591],
['2020/06/02',22401,22325,22175,22118,22088,21920,21659,21315,20708,19559,21061,21593],
['2020/06/03',22818,22613,22649,22462,22333,22159,21926,21516,20858,19584,21050,21596],
['2020/06/04',22907,22695,22885,22501,22544,22314,22130,21731,21009,19607,21045,21599],
['2020/06/05',22865,22863,22613,22563,22724,22512,22336,21978,21143,19642,21038,21604],
['2020/06/08',23178,23178,23121,23028,22912,22735,22516,22222,21282,19700,21038,21611],
['2020/06/09',23185,23091,23135,22933,23044,22888,22690,22404,21418,19754,21031,21618],
['2020/06/10',23175,23124,22939,22900,23131,22990,22841,22574,21561,19816,21024,21623],
['2020/06/11',22939,22472,22848,22466,22896,22946,22862,22630,21689,19881,21009,21627],
['2020/06/12',22350,22305,22082,21786,22634,22834,22818,22673,21803,19962,20992,21631],
['2020/06/15',22251,21530,22135,21529,22102,22504,22652,22620,21872,20038,20968,21631],
['2020/06/16',22624,22582,21912,21899,22139,22403,22612,22645,21980,20131,20954,21634],
['2020/06/17',22536,22455,22517,22318,22189,22269,22508,22630,22073,20226,20938,21637],
['2020/06/18',22432,22355,22363,22125,22464,22245,22403,22596,22163,20323,20922,21640],
['2020/06/19',22523,22478,22515,22352,22429,22280,22311,22557,22268,20416,20907,21642],
['2020/06/22',22575,22437,22353,22311,22423,22461,22306,22483,22352,20488,20893,21647],
['2020/06/23',22693,22549,22636,22257,22488,22455,22341,22429,22416,20538,20881,21651],
['2020/06/24',22663,22534,22541,22479,22507,22471,22484,22370,22472,20603,20872,21655],
['2020/06/25',22423,22259,22287,22165,22447,22451,22438,22348,22489,20651,20863,21659],
['2020/06/26',22589,22512,22424,22408,22435,22458,22446,22369,22521,20708,20854,21663],
['2020/06/29',22281,21995,22255,21969,22255,22370,22395,22416,22518,20759,20844,21665],
['2020/06/30',22448,22288,22335,22273,22265,22318,22368,22386,22516,20830,20835,21668],
['2020/07/01',22360,22121,22338,22039,22135,22235,22323,22353,22491,20901,20827,21669],
['2020/07/02',22267,22145,22182,22072,22185,22212,22265,22332,22464,20973,20817,21670],
['2020/07/03',22312,22306,22266,22154,22191,22171,22232,22315,22436,21036,20807,21672],
['2020/07/06',22734,22714,22341,22325,22388,22315,22297,22342,22413,21098,20796,21675],
['2020/07/07',22742,22614,22649,22540,22545,22380,22312,22349,22389,21153,20783,21678],
['2020/07/08',22667,22438,22481,22438,22589,22443,22375,22339,22354,21204,20771,21680],
['2020/07/09',22679,22529,22442,22434,22527,22520,22410,22366,22357,21255,20758,21683],
['2020/07/10',22563,22290,22534,22285,22419,22517,22434,22344,22357,21309,20742,21684],
['2020/07/13',22784,22784,22591,22561,22534,22531,22525,22423,22419,21361,20733,21687],
['2020/07/14',22677,22587,22631,22538,22554,22526,22565,22453,22420,21412,20724,21688],
['2020/07/15',22965,22945,22817,22800,22772,22627,22598,22535,22444,21473,20721,21690],
['2020/07/16',22925,22770,22907,22739,22767,22675,22620,22598,22465,21521,20715,21692],
['2020/07/17',22857,22696,22807,22643,22804,22756,22657,22637,22476,21571,20707,21694],
['2020/07/20',22788,22717,22772,22580,22728,22743,22684,22637,22490,21628,20701,21696],
['2020/07/21',22925,22884,22789,22780,22766,22802,22769,22664,22506,21691,20703,21698],
['2020/07/22',22855,22751,22791,22732,22784,22764,22764,22695,22517,21746,20707,21699],
['2020/07/27',22741,22715,22495,22429,22783,22753,22783,22714,22540,21804,20714,21701],
['2020/07/28',22842,22657,22735,22646,22708,22745,22741,22751,22547,21852,20729,21702],
['2020/07/29',22584,22397,22543,22366,22590,22681,22688,22712,22567,21895,20740,21704],
['2020/07/30',22506,22339,22489,22334,22464,22572,22637,22687,22570,21931,20753,21706],
['2020/07/31',22295,21710,22267,21710,22149,22364,22493,22564,22549,21966,20759,21707],
['2020/08/03',22214,22195,21947,21919,22081,22260,22395,22506,22552,22008,20767,21710],
['2020/08/04',22603,22573,22379,22379,22159,22243,22369,22494,22565,22048,20786,21715],
['2020/08/05',22554,22514,22479,22356,22427,22266,22341,22474,22555,22083,20814,21719],
['2020/08/06',22587,22418,22471,22362,22502,22282,22307,22427,22545,22118,20839,21724],
['2020/08/07',22436,22329,22433,22204,22420,22406,22297,22385,22540,22152,20868,21728],
['2020/08/11',22760,22750,22505,22497,22499,22517,22356,22388,22551,22199,20910,21733],
['2020/08/12',22874,22843,22747,22670,22641,22571,22517,22407,22579,22246,20964,21738],
['2020/08/13',23316,23249,23123,23111,22947,22718,22668,22492,22602,22298,21027,21745],
['2020/08/14',23338,23289,23323,23222,23127,22892,22770,22587,22637,22346,21090,21751],
['2020/08/17',23248,23096,23189,23068,23211,23045,22853,22726,22645,22387,21153,21758],
['2020/08/18',23128,23051,23097,22948,23145,23106,22944,22811,22659,22429,21218,21764],
['2020/08/19',23149,23110,22997,22953,23086,23159,23055,22865,22679,22474,21281,21771],
['2020/08/20',23078,22880,23003,22851,23014,23085,23074,22902,22687,22510,21328,21776],
['2020/08/21',23135,22920,23022,22920,22970,23011,23085,22952,22689,22537,21362,21782],
['2020/08/24',23012,22985,22913,22862,22928,22989,23047,23017,22701,22563,21405,21789],
['2020/08/25',23431,23296,23242,23225,23067,23038,23048,23072,22730,22586,21444,21798],
['2020/08/26',23348,23290,23257,23203,23190,23074,23076,23117,22762,22610,21487,21808],
['2020/08/27',23323,23208,23311,23177,23265,23140,23098,23112,22802,22629,21529,21817],
['2020/08/28',23376,22882,23232,22594,23127,23132,23066,23072,22829,22638,21578,21824],
['2020/08/31',23342,23139,23147,23102,23076,23163,23103,23076,22901,22647,21631,21832],
['2020/09/01',23206,23138,23089,23047,23053,23131,23134,23085,22948,22655,21684,21840],
['2020/09/02',23287,23247,23261,23170,23175,23123,23171,23098,22982,22661,21731,21847],
['2020/09/03',23580,23465,23524,23426,23283,23174,23196,23157,23029,22666,21776,21854],
['2020/09/04',23257,23205,23130,23098,23306,23239,23183,23185,23069,22668,21814,21861],
['2020/09/07',23218,23089,23145,23086,23253,23229,23166,23196,23107,22667,21852,21868],
['2020/09/08',23277,23274,23188,23129,23189,23256,23222,23194,23133,22680,21890,21875],
['2020/09/09',23059,23032,22966,22878,23132,23213,23207,23168,23142,22692,21929,21881],
['2020/09/10',23250,23235,23193,23134,23180,23167,23221,23171,23142,22721,21965,21889],
['2020/09/11',23412,23406,23114,23114,23224,23207,23244,23223,23147,22735,22004,21896],
['2020/09/14',23582,23559,23431,23429,23400,23301,23257,23265,23171,22753,22047,21903],
['2020/09/15',23477,23454,23438,23351,23473,23337,23293,23297,23191,22771,22082,21910],
['2020/09/16',23506,23475,23425,23397,23496,23426,23348,23319,23209,22788,22120,21917],
['2020/09/17',23446,23319,23416,23272,23416,23443,23354,23305,23231,22803,22161,21925],
['2020/09/18',23398,23360,23321,23290,23385,23433,23401,23320,23253,22816,22203,21932],
['2020/09/23',23370,23346,23245,23154,23342,23391,23417,23346,23271,22830,22242,21939],
['2020/09/24',23234,23087,23215,23039,23264,23317,23371,23327,23261,22844,22280,21945],
['2020/09/25',23272,23204,23217,23154,23212,23263,23321,23344,23256,22855,22315,21950],
['2020/09/28',23516,23511,23391,23303,23267,23302,23329,23372,23271,22880,22352,21956],
['2020/09/29',23622,23539,23410,23347,23418,23337,23338,23385,23304,22901,22385,21962],
['2020/09/30',23522,23185,23478,23170,23412,23305,23319,23348,23306,22919,22421,21967],
['2020/10/02',23365,23029,23294,22951,23251,23294,23272,23306,23301,22934,22455,21971],
['2020/10/05',23377,23312,23254,23252,23175,23315,23267,23289,23304,22950,22486,21977],
['2020/10/06',23441,23433,23420,23331,23258,23300,23316,23301,23303,22962,22516,21983],
['2020/10/07',23432,23422,23272,23272,23389,23276,23347,23307,23314,22976,22547,21990],
['2020/10/08',23701,23647,23506,23477,23501,23369,23367,23337,23341,22996,22581,21996],
['2020/10/09',23725,23619,23713,23552,23563,23487,23378,23390,23359,23014,22618,22003],
['2020/10/12',23597,23558,23588,23501,23608,23536,23431,23426,23385,23035,22653,22010],
['2020/10/13',23667,23601,23667,23490,23593,23569,23513,23435,23403,23049,22688,22017],
['2020/10/14',23656,23626,23545,23518,23595,23610,23558,23443,23414,23066,22720,22025],
['2020/10/15',23581,23507,23548,23458,23578,23582,23569,23475,23412,23076,22749,22032],
['2020/10/16',23538,23410,23478,23382,23514,23540,23567,23514,23410,23086,22777,22039],
['2020/10/19',23707,23671,23543,23543,23529,23563,23570,23549,23419,23103,22810,22046],
['2020/10/20',23674,23567,23587,23518,23549,23556,23563,23563,23432,23117,22838,22052],
['2020/10/21',23702,23639,23615,23611,23626,23559,23574,23585,23446,23129,22862,22058],
// データの順 安値,終値,始値,高値
// ※Excelだと始値,高値,安値,終値の順番です。ややこしいです:-)
], true);

// オプションの設定
var options = {
chartArea:{left:80,top:30,right:0,bottom:0},
legend: { position: 'none'},
backgroundColor: 'white',
colors: ['black'],
title: '日足 (2020/10/21 水) 1001 日経平均',
hAxis: {
format: 'yyyy/MM/dd',
direction: +1,
viewWindowMode: 'maximized',
},
vAxis: {
viewWindow: { min:20714 }
},
bar: {
groupWidth: '90%'
},
candlestick: {
fallingColor: { strokeWidth: 1, fill: '#ffffff' }, // black
risingColor: { strokeWidth: 1, fill: '#000000' } // white
},
width: 1200,
height: 600,
lineWidth: 1,
//チャートのタイプとして、ローソク足を指定
seriesType: "candlesticks",
//ローソク足だでなく、線グラフも表示することを記述
series: {

1:{
type: "line",
color: 'pink',
lineWidth: 2,
},
2:{
type: "line",
color: 'red',
lineWidth: 3,
},
3:{
type: "line",
color: 'black',
lineWidth: 2,
},
4:{
type: "line",
color: 'yellowgreen',
lineWidth: 2,
},
5:{
type: "line",
color: 'green',
lineWidth: 3,
},
6:{
type: "line",
color: 'blue',
lineWidth: 3,
},
7:{
type: "line",
color: 'purple',
lineWidth: 3,
},
8:{
type: "line",
color: 'orange',
lineWidth: 3,
},

}
}
// 指定されたIDの要素にローソク足を作成
var chart = new google.visualization.ComboChart(document.getElementById('chart'));

// グラフの描画
chart.draw(data, options);
}

</script>
</head>
<body>

<!-- グラフの描画エリア -->
<div id="chart"></div>

</body>
</html>

	

過去の 表計算ソフト(スプレッドシート) の思い出

表計算ソフト(スプレッドシート)といえば、マイクロソフトの EXCEL がほぼ一択だった時代がある。
2020年現在、他にも、Googleスプレッドシートや、Appleの Numbers、OpenOffice、LibreOffice等、いくつか選択肢がある。
スプレッドシートの機能は、ほぼ成熟しているので、どれを使っても、それほど機能に違いがあるわけではない。

ここからは思い出話しになる。
PCの黎明期には、かつて、いろいろな表計算ソフトが登場し、消えていった。
思い出してみると、なつかしい。

PCの歴史からすれば、

・ソード(SORD)の「ピップス(PIPS)」
・Appleの「ビジカルク(VisiCalc)」
・マイクロソフトの「マルチプラン(Multiplan)」

等が出てくるけれども、残念ながら私は使ったことがない。

私が使ったことがあるものを時系列に並べてみたいと思う。

■書院カルク

1988年、私が大学に入学した頃に使っていたワープロ専用機「SHARP 書院 WD-650」に付属のソフト。
私にとって、これが初めての 表計算ソフト だった。
それ以前は、PC-8801mkII の N88-BASICで、表計算のようなものを作ったことはあった。
プログラムを作らなくても、項目を入力するだけで合計額を都度計算し直してくれるのを見て感動した記憶がある。
あまり大きな表は作れなかったけど、基本的な関数は使えて、学習用として非常に役に立った。
いろんなものを入力して計算して遊んで、楽しんだ。

■Lotus 1-2-3

1991年頃、既に社会人になっていた姉が PC-9801NS を買って、そこにソフトを入れて使っていた。
姉が「一太郎 と Lotus 1-2-3 が要る」と言っていたので、「一太郎dash」は買ったけど、「Lotus 1-2-3」は 98,000円くらいしたので躊躇して 9,800円の「アシストカルク」を勧められたような記憶がある。
当時、秋葉原のソフマップで、疑似レンタル方式(買って次の日に9割で売り戻す)で借りてきて、コピーして使っていた記憶がある。
業務用で使うわけではなく、あくまでも体験してみるだけなので、勘弁してもらおう。

その後、私が社会人になってから、Lotus 1-2-3 はすぐに活用することができた。

■エポカルク(EPOCALC)

富士通の独自OS「APCS」で動作する表計算ソフト。
私が新入社員の時、最初に使ったPCは、富士通の FMR-50Λ(ラムダ)シリーズだった。
これは、MS-DOSが動作する FMR-50 の機能と、富士通の独自OS「APCS」が動作する F9450シリーズの機能が両方入っている、非常に高価なPCだった。

その会社では当時、MS-DOSが使える人は少なくて、ほとんど「APCS」モードで使っていたので、表計算ソフトといえば「EPOCALC」だった。
Lotus 1-2-3 を使ったことがある私にとっては、とても貧弱で使いづらいソフトだったが、これしか知らない人には十分すぎる機能だったと思う。
グラフ作成のような機能はなく、あまり大きな表は作成できなかったと思う。

「EPOCALC」で最も困ったことは、四則演算の優先度 が他のソフトと違うこと、だった。
四則演算は、かけ算 と 割り算 が優先されるはずなのに「EPOCALC」は違っていた。
たしか、左から出てくる順に計算されていたような気がする。

せっかく括弧を使って、足し算 や 引き算 を優先に計算させようとしても、左から順番に計算されているようで、どうしても計算が合わなかった。

だから、Lotus 1-2-3 であらかじめ作成した表を、EPOCALCに移植すると、そのままの計算式だと計算結果が違ってしまうのである。

これを回避するためなのか、「EPOCALC」ユーザーが作成した表は、表の欄外に、計算途中の中間値を入れるセルがいくつか設けていることが多かった。
気をつけないと、欄外に数字が、ゴミみたいに印刷される。

■Quattro Pro(ボーランド製)

1993年、私が始めて Windows PC を買った時に、選んだ表計算ソフト。価格は 98,000円(税抜)。
当時、マイクロソフトの Excel はバージョン4で、同じ価格で機能がかなり見劣りしていて、迷ったあげくに「Quattro Pro」を選んだ。
Excelは、バージョン5の時に、現在と同じような機能が完成したが、そのほとんどが、当時の「Quattro Pro」で既に実現していたものだった。
右クリックで表示されるメニューや、複数のタブをグループ化したり切り替えたりできる機能は、この頃に完成したものだった。
Quattro Proは、その後、ボーランド社とともにPCの表舞台から姿を消し、今ではその名を知る人も少ない。

■三四郎 (ジャストシステム製)

一太郎ユーザーは格安で買えたので、試しに買って、いじってみただけ。
後に、商標の問題からか「ジャスト三四六」という名に変わった。
このソフトの存在を知っている人は、もともと、あまりいないと思う。

 

 

青ザリガニ(フロリダハマー)が2匹、我が家にやってきた。

ザリガニが2匹、新たに家族の一員になった。

数日前、息子がザリガニを持ち帰ってきたのが始まりだった。
本当に飼うつもりだったようなので、水槽を用意したのだが、
水槽に移す前に、残念ながら、亡くなってしまっていた。

きちんと埋葬して、彼はとても悲しんだけど、
せっかく水槽を用意したので、
代わりのザリガニを迎えようということで意見が一致した。

ところが、ザリガニを売っている店は、なかなか見つからない。

ちょっと大きめの、海老名の「かねだい」というお店で、
店員さんに「ザリガニはありますか?」と訊いてみたら、

「どのザリガニですか?」と返ってきた。
ザリガニにもいろいろ種類があるらしい。

「何のザリガニがあるんですか?」と訊いたら、

「アメリカザリガニは今いないです。そこになければ・・・・、あっ、いますよ」
と言われて、珍しい名前がついているザリガニが、いくつか売っていた。

結局、「フロリダハマー。ペアで 3,980円」という青いザリガニを買った。

店員さんが「ブラシで磨いてあげれば、きれいになりますよ」と言ってくれたけど、
そこまでする趣味はない。そういうマニアがいるのかもしれない。

ザリガニは臭い! という先入観があったけど、
熱帯魚と同じような水槽環境にすれば、べつに臭くはないらしい。

用意した水槽は、「テトラ ラクラクお手入れ金魚セット S」で、
小型水槽(幅29.0×奥行き16.0×高さ25.1cm。約10L)で、
外掛けフィルター(テトラ オートワンタッチフィルター AT-mini)が付いていた。

これに、底面フィルター(水作 ボトムフィルター S)を加えて、
金魚用の砂利を追加で入れたので、環境は、まずまずだろうと思う。

我が家の水槽は、グッピー水槽、金魚水槽、そしてこの ザリガニ水槽 で計3個になった。

青ザリガニ(フロリダハマー)

「はいからさんが通る」という少女漫画を一気読みした

dアニメストア(月額のアニメ見放題サイト) で、
「はいからさんが通る 劇場版」というのを偶然見つけて、ふと思い出した。

これは、小学校の頃に、姉が見ていたTVアニメだったと思う。
私も途中から見ていたけれども、最終回で話が中途半端に終わっていて、
気持ちの悪い終わり方に納得しないまま、数十年も忘れていた・・・のだった。

2~3年前に、そのアニメが40年ぶりに劇場版になっていた
ということは知っていたけれども、私は少女漫画の趣味は一切ないので
特に気にならなかった。

でもなぜか、今回、気になったのは、
「はいからさんが通る」は、たしか大正時代のお話だったので、
ちょうど100年前の スペイン風邪の話があったような気がしたからだ。

さっそく調べてみると、当時のアニメ版は、モスクワオリンピックの放送枠の関係で、
急きょ打ち切りになったために、あんなに 納得のいかない終わり方になってしまった らしい。

今回、2年前の 劇場版(後半)で初めて、その省略されていたストーリー部分の
アニメ化が実現したとのことなので、今さらながら、気になり始めた。

無料なので、劇場版アニメの前半と後半をひととり見て、ようやく納得した。
テレビシリーズ42話もひととおり見て、
原作の漫画8巻も、Kindleで一気読みして、
南野陽子の実写版(1987年)も Amazon Prime Videoで見た。

結果、スペイン風邪の話は、原作の漫画にも 劇場版にも出てこなくて、
TV版アニメの第37話だけに登場する、おまけの部分だった。

スペイン風邪のおかげで、出席できない女学生が多すぎたという事情で、
今年だけ特別に、出席日数が足りない生徒も卒業が認められることになり、
ヒロインの紅緒はすでに中退してたのに、親友のはからいで、
みんなで卒業式に出席することができた、というエピソードである。

それにしても、現在(2020年)は、
月額の動画見放題サービス や Kindleの電子書籍 のおかげで、
思いついたときに、一機に、まるごと観たり読んだりできるのが、嬉しい。

この「はいからさんが通る」という漫画は、あれほどのストーリーが
実質たったの7巻半、つまり、1日かからずに読み切ってしまえる分量で
ストーリーが完結しているのが驚きだった。

私は、アニメファンでもなんでもないけれども、
子供の頃に気になって忘れていたことの一つが解決したので、嬉しかった。

これも、コロナ禍騒動があったおかげで実現できたこと、なのだろうと思う。

解決! Google Chart でローソク足を表示すると、途中でズレと切れる!事象

WEB画面上に、ローソク足と移動平均線の複合チャートを表示するために、
「Google Chart」を使ってみたら、実に簡単に、実現することができたが、
うまく動作しなかった。

ローソク足が10本、つまりグラフデータが10行以上になると、
途中で ズレ と 切れ、さらには、データの 抜け が発生して、
表示が崩れてしまうのである。

その後、「Google Chart」以外にも、良さそうなツールはあったけど、
相場師朗先生が使用している移動平均線の色パターン
(相場師朗 「相場の赤本」(宝島社)の p93、p139 に記載)
で表示させようとすると、なかなか難しかった。

そこで、1つずつ試行錯誤しながら調べてみたところ、
ローソク足10本以上で、正常に表示させることに成功した。

例)日経平均株価 2020年4月28日の日足チャート 50本

もしかすると、オプションのパラメータをどこかいじれば
解決するのかもしれないけれども、結局、

チャートの元データとなる、スプレッドシートの表データに、
一定間隔で(8行ずつ?)、ダミーデータ行を挿入することで、解決した。

 

それでも、ローソク足が80本くらいを過ぎると、
この8行ずつの法則ではうまくいかず、法則が変わってしまうので、
またどこかに、ダミーデータ行を、追加する必要があり、
まだまだ100点満点の解決策ではない。

今回のグラフは、ローソク足と移動平均線を組み合わせた
複合グラフ(ComboChart)なので、何かもっと、
特別な設定が必要なのかもしれないけれども、それはまだ分からない。

ローソク足80本以上の表示が必要になった時に、
あらためて、解決しようと思う。

相場師朗先生の 株トレード技術 と 有料「株塾」との出会について

私が、相場師朗先生のことを知ったのは、2019年3月9日開催の、
パンローリング社イベント「投資戦略フェア2019」のことだった。

「一生モノの株のトリセツ」という本が、
ブルベア大賞2018 の「大賞」だったので、
それが、興味をもつきっかけになったことになる。

さっそくその日の朝、行きの電車の中で、Kindleアプリで
「マンガでわかる1億円株塾」という本を買ってすぐに読んでみたら、
とても分かりやすくて、内容も おもしろかった。

「投資戦略フェア2019」フェアの会場の書籍販売コーナーでは
相場師朗先生の本は一冊も販売されていなかったので、
帰りに、秋葉原の書泉ブックタワーに寄って買うことにした。

「株は技術だ!」だけが売り切れていたので、
それ以外を全部まとめて購入して、読み始めていた。

最初、ひととおり読んてみた感想は、内容はおもしろいいけど、
私が既に「知っていること」以上のノウハウは見つからず、
古典的ノウハウ(ダウ理論、グランビルの法則 等)を
いかにもオリジナル手法のように見せかけただけの商売臭さ を感じた。

インターネット上でも悪い評判がたくさん出ていているし、
怪しいので、あまり深入りしない方がよいのかな? くらいに思っていた。

ところが、2019年6月になって、「株は技術だ!」を入手して読んでみると、
評価が一変することになった。

直前に読んだ「株チャート図鑑」に書かれているような、
目を引きそうな おもしろい名前の「技」のことは一切載っていなくて、
今の 有料「株塾」の勉強会でやっているような
深いレベルの解説が盛り込まれていたことに気づいた。

特に、「建玉の操作」について書かれているところが新鮮だった。

私は、デイトレードやシステムトレードを経験してきているので、
両建てを容認している考え方は、新鮮だった。

そんなことを思っていた頃、
毎日しつこく出てくる迷惑ポップアップ広告の中に、たまたま

「2019/07/17 相場師朗のうねり取り株セミナー 今なら 3,000円が無料」

と出てきたので、ちょうど都合がよかった日なので、参加してみることにした。

セミナーは3時間程度だったけど、その大半は、
高額教材(SHIRO トレーダー養成基礎講座」)と 有料「株塾」の宣伝
に時間が割かれていたことは当然だけど、それが かえって よかった。

有料「株塾」や、直前の大練習会? の抜粋映像ばかりを紹介してくれたおかげで、
相場師朗先生のノウハウが、表面的な「決め技」を教えるレベルではなく、
もっともっと本質的(原因的、核心的)な 低レイヤー部分に位置する
プロのノウハウであることが理解できたので、無限の奥深さを感じたのである。

さっそくその場で、高額教材(SHIRO トレーダー養成基礎講座」)を購入し、
有料「株塾」に自動入会することになって、
そこからが私にとっての再スタートとなった。

さて、
相場師朗先生の書籍に書かれているような「技」や「手法」は、
あまりにも基本中の基本の「相場のイロハ」部分のものなので、
古典的ノウハウ(ダウ理論、グランビルの法則 等)と重なる部分も多く、
「門外不出の秘密ノウハウ」という要素 は 皆無 である。

難解な理論として語られることの多い、相場(そうば)の法則を、
初心者でも理解しやすく、実践で活用できそうな
ユニークな名前(下半身、9の法則 他)をつけて、
共通ルール(色や記号) を設けて、再現性のある「技術」として、
分かりやすく解説してくれているところに特長があると思う。

だから、相場師朗先生のノウハウを そのままパクって転用して
高額教材にして販売しているような 二番煎じ、三番煎じの 偽物くん が
氾濫してしまうのは、ある意味、宿命なのかもしれない。

かといって、
「この手法は相場師朗先生のオリジナル手法だから、権利侵害だぞ!」
と、いちいち主張していくのも限界があると思う。

偽物くん たちは、どんどん現れて どんどん消えていき、
どんどん現れて どんどん消えるような客 ばかりを引き寄せ続ける。

「最も 基本セオリーに忠実で、長い年月 信念を貫き通せた手法」こそが
最終的に生き残る、という法則は、株式トレードの世界も同じだと思う。

真贋を見分ける目」を持つことこそが、
株トレードにしても、人生にしても、根本的に重要なことだと思う。

相場師朗先生のノウハウの 神髄 は、

「知っていることを できることにする」、つまり、
「トレード技術の知識を使って、利益を出し続けられるようにする」

ということに尽きると思う。

今日は、相場師朗先生の新刊
「37年連戦連勝 伝説の株職人が教える 株の技術大全」の発売日。

有料「株塾」で 教えてくれている 秘伝ノウハウ を
もったいぶらずに 書籍でオープンにしてくれているので、
「真贋を見分ける目」を育みつつ、そのご厚意を十分に享受したいと思う。

知識を修得するフェーズまでは、
「書籍」や「無料動画」等で制限なしに学ぶことができるけど、
有料「株塾」は、そこから先のフェーズ(「できることにする」)
があるので、知識だけで終わらせたくない人にとって、
とてもよい選択肢 が用意されているのは幸いだと思う。

相場師朗先生のノウハウと、有料「株塾」については、
公式サイトから、どうぞ。

相場師朗 公式サイト
https://aibashiro.jp/

 

Google Chart でローソク足を表示すると、途中でズレと切れる!

WEB画面上に、ローソク足と移動平均線の複合チャートを表示したい!

過去のチャートだったら、画面ハードコピーでもいいけれども、
それをリアルタイムに表示させようと思えば、それなりのツールが必要になる。

幸い、現在は、無料で高機能なチャートを表示できるツールが溢れていて、
サンプルのコードをコピーしながら作れば、何となく作れてしまうので、
それほど難しい技術は必要としない。

ということで、メジャーで、利用者も多く、ノウハウ情報も多く見つかる
「Google Chart」を使ってみたら、実に簡単に、実現することができた。

ところが、試しに、
日経平均株価の直近100日分のチャートを表示させてみたところ、
途中で ズレ と 切れ が発生して、表示が崩れてしまう。
オプションのパラメータをいろいろといじってみたが、分からない。

Google Chart でローソク足と移動平均線

しかも、その切れた部分に該当する日のデータは、
飛んでいたり順番も違っていたりして、やっぱりおかしい。

結局、ローソク足が9本以内だったら、この影響は受けず、
10本以上になると、何かがおかしくなる。

「Google Chart」以外にも、ローソク足が表示できるツールは
まだまだ他にもいくつかあるので、解決が難しければ、
他のツールを試してみようと思う。

この画面のチャートのソースコードは、次のとおり。
一体、何が、ダメなのだろう?


<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=Shift_JIS”>
<title>Chart</title>
</head>
<body>

<!— ローソク足及び移動平均線グラフを配置 —>
<div id=’chart’></div>

<!— ここでGoogle Chartの読み込み —>
<script type=”text/javascript” src=”https://www.gstatic.com/charts/loader.js”>
</script>

<script type=”text/javascript”>

google.charts.load(‘current’, {‘packages’:[‘corechart’]});
google.charts.setOnLoadCallback(drawChart);

function drawChart(){
//チャートに描画するためのデータを入れる
var chartData = new google.visualization.DataTable();

//日付用のString型を一つ、四本値と5本MA用の数値型を計9個作成
chartData.addColumn(‘string’);
for(var x = 0;x < 9; x++){
chartData.addColumn(‘number’);
}
//行数
var length = 100;
//描画用のデータを一時的に入れる
var insertingData = new Array(length);

//[安値,終値,始値,高値,5MA,20MA,60MA,100MA,300MA]
insertingData[000] = [‘2019/08/19’,20502,20563,20590,20633,20499,21061,21176,21361,21770]
insertingData[001] = [‘2019/08/20’,20582,20677,20605,20684,20544,21024,21169,21352,21764]
insertingData[002] = [‘2019/08/21’,20482,20618,20489,20626,20536,20974,21159,21342,21758]
insertingData[003] = [‘2019/08/22’,20584,20628,20706,20731,20581,20920,21149,21339,21753]
insertingData[004] = [‘2019/08/23’,20579,20710,20579,20719,20639,20868,21144,21331,21748]
insertingData[005] = [‘2019/08/26’,20173,20261,20325,20329,20579,20798,21133,21320,21742]
insertingData[006] = [‘2019/08/27’,20439,20456,20467,20529,20535,20740,21130,21314,21735]
insertingData[007] = [‘2019/08/28’,20433,20479,20474,20511,20507,20679,21131,21307,21728]
insertingData[008] = [‘2019/08/29’,20361,20460,20500,20520,20473,20626,21132,21297,21721]
insertingData[009] = [‘2019/08/30’,20633,20704,20641,20748,20472,20584,21131,21289,21714]
insertingData[010] = [‘2019/09/02’,20614,20620,20625,20667,20544,20560,21128,21278,21707]
insertingData[011] = [‘2019/09/03’,20578,20625,20581,20662,20578,20556,21124,21267,21700]
insertingData[012] = [‘2019/09/04’,20554,20649,20578,20694,20612,20559,21116,21255,21692]
insertingData[013] = [‘2019/09/05’,20787,21085,20800,21164,20737,20587,21114,21248,21686]
insertingData[014] = [‘2019/09/06’,21145,21199,21201,21241,20836,20618,21115,21242,21681]
insertingData[015] = [‘2019/09/09’,21182,21318,21214,21333,20975,20649,21120,21239,21676]
insertingData[016] = [‘2019/09/10’,21350,21392,21363,21438,21129,20696,21125,21236,21672]
insertingData[017] = [‘2019/09/11’,21437,21597,21466,21619,21318,20743,21133,21233,21669]
insertingData[018] = [‘2019/09/12’,21743,21759,21761,21825,21453,20811,21146,21229,21667]
insertingData[019] = [‘2019/09/13’,21820,21988,21907,22019,21611,20889,21157,21226,21664]
insertingData[020] = [‘2019/09/17’,21878,22001,21947,22041,21747,20961,21166,21224,21663]
insertingData[021] = [‘2019/09/18’,21942,21960,22014,22027,21861,21025,21177,21222,21661]
insertingData[022] = [‘2019/09/19’,22003,22044,22064,22255,21950,21097,21190,21221,21660]
insertingData[023] = [‘2019/09/20’,22047,22079,22130,22204,22014,21169,21205,21219,21660]
insertingData[024] = [‘2019/09/24’,22077,22098,22095,22168,22036,21239,21222,21218,21659]
insertingData[025] = [‘2019/09/25’,21906,22020,21961,22036,22040,21327,21233,21216,21658]
insertingData[026] = [‘2019/09/26’,21986,22048,22160,22184,22058,21406,21246,21213,21659]
insertingData[027] = [‘2019/09/27’,21733,21878,21934,21955,22025,21476,21248,21210,21659]
insertingData[028] = [‘2019/09/30’,21666,21755,21793,21811,21960,21541,21248,21208,21660]
insertingData[029] = [‘2019/10/01’,21811,21885,21831,21938,21917,21600,21252,21211,21661]
insertingData[030] = [‘2019/10/02’,21725,21778,21744,21795,21869,21658,21254,21214,21661]
insertingData[031] = [‘2019/10/03’,21277,21341,21422,21437,21727,21694,21247,21214,21658]
insertingData[032] = [‘2019/10/04’,21276,21410,21316,21410,21634,21732,21245,21217,21656]
insertingData[033] = [‘2019/10/07’,21328,21375,21445,21475,21558,21746,21242,21220,21654]
insertingData[034] = [‘2019/10/08’,21483,21587,21494,21629,21498,21766,21243,21224,21652]
insertingData[035] = [‘2019/10/09’,21359,21456,21359,21467,21434,21773,21239,21228,21648]
insertingData[036] = [‘2019/10/10’,21308,21551,21456,21601,21476,21780,21237,21231,21644]
insertingData[037] = [‘2019/10/11’,21658,21798,21749,21820,21553,21791,21242,21236,21641]
insertingData[038] = [‘2019/10/15’,22049,22207,22063,22219,21720,21813,21254,21245,21639]
insertingData[039] = [‘2019/10/16’,22434,22472,22479,22615,21897,21837,21278,21257,21638]
insertingData[040] = [‘2019/10/17’,22424,22451,22451,22522,22096,21860,21294,21270,21638]
insertingData[041] = [‘2019/10/18’,22466,22492,22528,22649,22284,21886,21312,21284,21638]
insertingData[042] = [‘2019/10/21’,22515,22548,22541,22581,22434,21911,21327,21297,21638]
insertingData[043] = [‘2019/10/23’,22457,22625,22619,22648,22518,21939,21343,21311,21638]
insertingData[044] = [‘2019/10/24’,22704,22750,22725,22780,22573,21971,21359,21328,21638]
insertingData[045] = [‘2019/10/25’,22715,22799,22753,22819,22643,22010,21378,21347,21639]
insertingData[046] = [‘2019/10/28’,22830,22867,22854,22896,22718,22051,21399,21370,21640]
insertingData[047] = [‘2019/10/29’,22935,22974,22950,23008,22803,22106,21420,21395,21641]
insertingData[048] = [‘2019/10/30’,22827,22843,22953,22961,22847,22160,21442,21420,21642]
insertingData[049] = [‘2019/10/31’,22875,22927,22910,22988,22882,22213,21465,21441,21643]
insertingData[050] = [‘2019/11/01’,22705,22850,22730,22852,22892,22266,21495,21462,21645]
insertingData[051] = [‘2019/11/05’,23090,23251,23118,23328,22969,22362,21537,21486,21647]
insertingData[052] = [‘2019/11/06’,23246,23303,23343,23352,23035,22456,21582,21507,21649]
insertingData[053] = [‘2019/11/07’,23253,23330,23283,23336,23132,22554,21629,21529,21651]
insertingData[054] = [‘2019/11/08’,23313,23391,23550,23591,23225,22644,21676,21551,21655]
insertingData[055] = [‘2019/11/11’,23323,23331,23422,23471,23321,22738,21720,21574,21660]
insertingData[056] = [‘2019/11/12’,23312,23520,23336,23545,23375,22836,21771,21598,21664]
insertingData[057] = [‘2019/11/13’,23270,23319,23439,23452,23378,22912,21815,21620,21667]
insertingData[058] = [‘2019/11/14’,23062,23141,23325,23360,23340,22959,21861,21642,21671]
insertingData[059] = [‘2019/11/15’,23121,23303,23160,23340,23323,23001,21909,21662,21674]
insertingData[060] = [‘2019/11/18’,23271,23416,23304,23420,23340,23049,21957,21681,21678]
insertingData[061] = [‘2019/11/19’,23244,23292,23366,23389,23294,23089,22000,21701,21682]
insertingData[062] = [‘2019/11/20’,23086,23148,23176,23303,23260,23119,22042,21720,21684]
insertingData[063] = [‘2019/11/21’,22726,23038,23071,23108,23239,23140,22083,21738,21686]
insertingData[064] = [‘2019/11/22’,23030,23112,23030,23219,23201,23158,22123,21759,21688]
insertingData[065] = [‘2019/11/25’,23255,23292,23292,23347,23176,23182,22173,21778,21690]
insertingData[066] = [‘2019/11/26’,23350,23373,23451,23608,23193,23208,22222,21799,21692]
insertingData[067] = [‘2019/11/27’,23418,23437,23452,23507,23250,23231,22271,21816,21693]
insertingData[068] = [‘2019/11/28’,23367,23409,23458,23482,23325,23259,22320,21833,21695]
insertingData[069] = [‘2019/11/29’,23273,23293,23497,23498,23361,23277,22363,21849,21697]
insertingData[070] = [‘2019/12/02’,23378,23529,23388,23562,23408,23311,22412,21868,21699]
insertingData[071] = [‘2019/12/03’,23186,23379,23231,23388,23409,23318,22458,21884,21702]
insertingData[072] = [‘2019/12/04’,23044,23135,23186,23203,23349,23309,22499,21900,21704]
insertingData[073] = [‘2019/12/05’,23259,23300,23292,23363,23327,23308,22536,21917,21706]
insertingData[074] = [‘2019/12/06’,23338,23354,23347,23412,23339,23306,22572,21936,21710]
insertingData[075] = [‘2019/12/09’,23360,23430,23544,23544,23320,23311,22607,21953,21713]
insertingData[076] = [‘2019/12/10’,23336,23410,23372,23449,23326,23306,22641,21971,21716]
insertingData[077] = [‘2019/12/11’,23333,23391,23421,23438,23377,23309,22671,21989,21718]
insertingData[078] = [‘2019/12/12’,23360,23424,23449,23468,23402,23323,22698,22009,21720]
insertingData[079] = [‘2019/12/13’,23775,24023,23810,24050,23536,23359,22732,22039,21724]
insertingData[080] = [‘2019/12/16’,23950,23952,23955,24036,23640,23386,22765,22063,21725]
insertingData[081] = [‘2019/12/17’,23996,24066,24091,24091,23771,23425,22800,22090,21727]
insertingData[082] = [‘2019/12/18’,23919,23934,24023,24046,23880,23464,22831,22113,21727]
insertingData[083] = [‘2019/12/19’,23835,23864,23911,23945,23968,23505,22861,22135,21727]
insertingData[084] = [‘2019/12/20’,23746,23816,23893,23908,23926,23541,22890,22155,21727]
insertingData[085] = [‘2019/12/23’,23810,23821,23921,23923,23900,23567,22920,22177,21726]
insertingData[086] = [‘2019/12/24’,23796,23830,23839,23853,23853,23590,22950,22199,21726]
insertingData[087] = [‘2019/12/25’,23782,23782,23813,23824,23823,23607,22981,22220,21725]
insertingData[088] = [‘2019/12/26’,23775,23924,23787,23931,23835,23633,23017,22244,21724]
insertingData[089] = [‘2019/12/27’,23837,23837,23953,23967,23839,23660,23050,22267,21723]
insertingData[090] = [‘2019/12/30’,23656,23656,23770,23782,23806,23666,23081,22292,21721]
insertingData[091] = [‘2020/01/06’,23148,23204,23319,23365,23681,23658,23112,22317,21719]
insertingData[092] = [‘2020/01/07’,23299,23575,23320,23577,23639,23680,23148,22347,21718]
insertingData[093] = [‘2020/01/08’,22951,23204,23217,23303,23495,23675,23179,22374,21717]
insertingData[094] = [‘2020/01/09’,23506,23739,23530,23767,23476,23694,23215,22406,21718]
insertingData[095] = [‘2020/01/10’,23761,23850,23813,23903,23514,23715,23255,22437,21722]
insertingData[096] = [‘2020/01/14’,23951,24025,23969,24059,23679,23746,23296,22473,21727]
insertingData[097] = [‘2020/01/15’,23875,23916,23923,23997,23747,23772,23331,22505,21732]
insertingData[098] = [‘2020/01/16’,23905,23933,23960,23975,23893,23798,23360,22541,21737]
insertingData[099] = [‘2020/01/17’,24013,24041,24103,24115,23953,23798,23386,22577,21741]

//チャート描画用の配列の中に、insertingDataの値を入れ込む
for (var i = length; i > 0; i–){
chartData.addRow(insertingData[i]);
}
//チャートの見た目に関する記述、詳細は公式ドキュメントをご覧になってください
var options = {
chartArea:{left:80,top:0,right:0,bottom:0},
legend: { position: ‘none’},
backgroundColor: ‘white’,
colors: [‘black’],
hAxis: {
format: ‘yyyy/MM/dd’,
direction: -1,
viewWindowMode: ‘maximized’,
},
bar: {
groupWidth: ‘90%’
},
width: 1920,
height: 1920,
lineWidth: 2,
//チャートのタイプとして、ローソク足を指定
seriesType: “candlesticks”,
//ローソク足だでなく、線グラフも表示することを記述
series: {
1:{
type: “line”,
color: ‘red’,
},
2:{
type: “line”,
color: ‘green’,
},
3:{
type: “line”,
color: ‘blue’,
},
4:{
type: “line”,
color: ‘purple’,
},
5:{
type: “line”,
color: ‘orange’,
},
}
};
//描画の処理
var chart = new google.visualization.ComboChart(document.getElementById(‘chart’));
chart.draw(chartData, options);
}

</script>

</body>
</html>

ペイント練習用の「チャート隠し」ツール ver3

先日(昨年)作った「ペイント練習用のチャート隠しツール ver2」

ペイント練習用の「チャート隠し」ツール ver2

を使って、自分のペイント練習で使おうとしたら、
いくつか不便を感じたので、少し改良してみることにした。

・対象ファイル名を 選択できるようにしたい!
・マウス(あるいはタップ)だけで、一時停止と再開をしたい!
(タブレットPCだと、カーソルキーが使えないので。)

こういうことも、「enchant.js」や「phina.js」を使うと、簡単に実現可能である。

そして、暫定的にできあがったのが、このページ。

< ペイント練習用の、チャート隠しツール ver3 >
https://shunichi.hosono.com/chart-mask3.html

 

残念ながら、ブラウザソフト側のセキュリティの関係で、
選択したファイルの「パス名」を取得することができない。

したがって、対象となるペイント練習画像ファイルがすべて、
このツールと同じフォルダ内に存在していることが利用条件となる。

設置方法は、ver2 と同じで、
次の3ファイルを、右クリックで ダウンロード選択して、
ペイント練習画像を溜めているのと同じフォルダへ入れておき、
chart-mask3.html をブラウザで起動すればよい。

・ダウンロードするページ 3種類

< ペイント練習用の、チャート隠しツール ver3 >
https://shunichi.hosono.com/chart-mask3.html

< enchant.js >
https://shunichi.hosono.com/enchant.js

< ブランク画像 >
https://shunichi.hosono.com/mask.png

 

多少の html または javascript の知識がある人は、
テキストエディタでカスタマイズすることも可能だし、
「enchant.js」や、他の開発技術を持っている人は、
これをきっかけ&ヒントに、もっともっと高機能な
練習支援ツールを開発してくれることをぜひ期待したい。

< chart-mask3.htmlのソース > ※未完成の箇所あり

<!DOCTYPE html>
<html>
<head>
<meta charset="Shift_JIS">
<title>Chart mask ver3</title>
<style>
body { margin: 0; }
</style>
<script src="enchant.js"></script>
</head>
<body>

<input type="file" id="targetfile" size="50" accept="image/*" onchange="chartmask()"><br>
<a href="#" onclick="chartmask()">start</a>

<script>
function chartmask(){

// ファイル名を取得
var imgFileName0 = document.getElementById("targetfile").value;
var array = imgFileName0.split(/\\|\\/);
var imgFileName = array[ array.length - 1];

// ライブラリの初期化
enchant();

// 変数の定義
var startX = 150; // スライド表示を開始する左位置
var maskspeed = 1; // スライド表示する速度
var maskadd = maskspeed; //
var isTouch = true; // タッチフラグ(タッチ中のみ true にする)
var isLeft = false; // タッチフラグ(右フリックで true にする)
var isRight = false; // タッチフラグ(左フリックで true にする)
var currentX = null; // 現在のX座標
var currentY = null; // 現在のY座標
var touchX = null; // タッチX座標
var touchY = null; // タッチY座標

// 1920×1080ピクセルサイズの画面(Canvas)を作成
var game = new Game(1920, 1080);

// フレームレートの設定。30fpsに設定
game.fps = 30;

// 画像データをあらかじめ読み込ませる
game.preload( imgFileName, 'mask.png' );

// データの読み込みが完了したら処理
game.onload = function(){

// チャート画像 を設定
var chart = new Sprite(1920, 1080);
// chart.image = game.assets['screenshot.png'];
chart.image = game.assets[ imgFileName ];
game.rootScene.addChild(chart);

// マスク画像 を設定
var mask = new Sprite(1920, 1080);
mask.image = game.assets["mask.png"];
game.rootScene.addChild(mask);
mask.x = startX;

// 説明文を表示します。
var Label1 = new Label("");
Label1.text = "マウスのクリック:一時停止と再開<br>" +
"左キー:少し戻る<br>" +
"右キー:少し加速<br>" +
"上キー:最初に戻る<br>" +
"下キー:一時停止";
Label1.font = "16px monospace";
Label1.color = "red";
Label1.x = startX; // X座標
Label1.y = 100; // Y座標
game.rootScene.addChild(Label1);

// シーンに「毎フレーム実行イベント」を追加します。
game.rootScene.addEventListener(Event.ENTER_FRAME, function(e) {
if( isTouch == true ) {
mask.x += maskadd;
}
});

// タッチイベントを登録
this.rootScene.addEventListener("touchstart", function(e) {
// タッチ開始
if( isTouch == true ) {
isTouch = false;
} else if( isTouch == false ) {
isTouch = true;
}

// 現在のマウス位置の取得
currentX = e.localX;
currentY = e.localY;

});

// フリック操作を監視
this.rootScene.addEventListener("touchmove", function(e) {
// 移動後のマウス位置の取得
touchX = e.localX;
touchY = e.localY;

if( touchX < currentX ) {
// 左フリック
isLeft = true;
} else if( touchX > currentX ) {
// 右フリック
isRight = true;
}

});

// フリック操作の判定
this.addEventListener("touchend", function(e) {
// タッチ位置をセット

if( isLeft == true ) {
// 左フリック
this.x -= (maskspeed + 1);
} else if( isRight == true ) {
// 右フリック
this.x += maskspeed;
}

});

// キー操作時に処理
mask.addEventListener('enterframe', function(){
if (game.input.left) this.x -= (maskspeed + 1);
if (game.input.right) this.x += maskspeed;
if (game.input.up) this.x = startX;
if (game.input.down) isTouch = false;
});

}

// 処理開始
game.start();

}
</script>

</body>
</html>

ペイント練習用の「チャート隠し」ツール ver2

先月作った「ペイント練習用のチャート隠しツール」と、
https://shunichi.hosono.com/?p=369

と、「チャートの自動めくり動画」を公開したところ、
https://shunichi.hosono.com/?p=443

数名の方から、ご意見・ご要望をいただいた。

・Chromeブラウザで利用できるようにしてほしい!
・いちいちキーを押さなくても自動でめくってほしい!
・自動再生を途中で一時停止したい!
・自動再生を、少し戻したい!

等々。

それほど難しい要望ではないけれども、
Windowsの「メモ帳」でカスタマイズできるくらいの
簡単なツールで実現しようとすると、それなりに難しい。

自動再生されているものを、一時停止したり戻したりするには、
アニメーションの停止やフレーム操作をすればいいかな? と思って
animation-play-state等、いくつかの方法を調べて試してみたが、
実際には、動かない。(transition で動かしたアニメは対象外?)

そこで思いついたのは、

ゲームを作るツールを使えば、てっとり早く実現するのでは?

ということだった。

実際、その通りで、以前に学んだ「enchant.js」を使えば
今回のようなものは、簡単に作ることができた。

「phina.js」等のような、さらに高速・高機能な
同種のツールが登場してきているようだけど、
「enchant.js」の書籍がたまたま手元にあって、
思い出したらすぐに使えるようになったので、
とりあえず、これを使うことにした。

ということで、暫定的にできあがったのが、このページ。

< ペイント練習用の、チャート隠しツール ver2 >
https://shunichi.hosono.com/chart-mask2.html

今度は、Chromeブラウザでも使えて、
自動再生 も 一時停止 も 少し戻り も可能である。

操作方法は、次のとおり。

白い部分をクリック:再生開始。
左キー:少し戻る
右キー:少し早く
上キー:最初に戻る
下キー:一時停止

このツールは、「メモ帳」で編集可能な 普通の html ファイルなので、
ソースをコピーするか、右クリックでファイルに保存すれば
カスタマイズして、使用可能である。

次の3ファイルをダウンロードして、
同じフォルダへ保存しておく必要がある。

・ダウンロードするページ 3種類

< ペイント練習用の、チャート隠しツール ver2 >
https://shunichi.hosono.com/chart-mask2.html

< enchant.js >
https://shunichi.hosono.com/enchant.js

< ブランク画像 >
https://shunichi.hosono.com/mask.png

対象の 画像ファイル(ペイント対象のチャート画面)は、
「screenshot.png」が初期値だが、
変更する場合は、「メモ帳」等で編集可能。

当然のことながら、カスタマイズするには、
多少の html または javascript の知識が必要となる。

< chart-mask2.htmlのソース >

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Chart mask ver2</title>
<style>
body { margin: 0; }
</style>
<script src="enchant.js"></script>
</head>
<body>

<script>
// ライブラリの初期化
enchant();
window.onload = function(){

// 変数の定義
var startx = 150
var maskadd = 2;

// 1920×1080ピクセルサイズの画面(Canvas)を作成
var game = new Game(1920, 1080);

// フレームレートの設定。
game.fps = 16;

// 画像データをあらかじめ読み込ませる
game.preload('screenshot.png',
'mask.png' );

// データの読み込みが完了したら処理
game.onload = function(){

// チャート画像 を設定
var chart = new Sprite(1920, 1080);
chart.image = game.assets["screenshot.png"];
game.rootScene.addChild(chart);

// マスク画像 を設定
var mask = new Sprite(1920, 1080);
mask.image = game.assets["mask.png"];
game.rootScene.addChild(mask);
mask.x = startx;

// キー操作時に呼ばれる
mask.addEventListener('enterframe', function(){
if (game.input.left) this.x -= (maskadd + 1);
if (game.input.right) this.x += maskadd;
if (game.input.up) this.x = startx;
if (game.input.down) this.x -= maskadd;
});

// タッチ開始時に呼ばれる
mask.addEventListener(Event.TOUCH_START, function(){

// シーンに「毎フレーム実行イベント」を追加します。
game.rootScene.addEventListener(Event.ENTER_FRAME, function() {
mask.x += maskadd;
});

});
}

// 処理開始
game.start();
}
</script>

</body>
</html>

ペイント練習用のハードコピー画像を、左から徐々に表示するツール

相場師朗先生の「株塾」で学んだ、
チャートギャラリーの画面ハードコピーに
コメントを書き込んでいく練習を行う際に、

同じ画面を、「動くチャート」で見てみると、
全く違った白熱感で、流れを見る ことができる。

移動平均線が横這ったり、クロスしたり、集中した後に、
ローソク足のトレンドがどのように変化するのか? は、
動きを見ながら練習すると、新たな発見がある。

これは、例えば、
白熱した会議が終わった後の ホワイトボードを見た時と同じで、
会議に参加して、それが書かれた経過を見ていたのと、
会議に参加せずに、書かれた結果だけを見たのでは、
伝わる質・量に違いがあるのと、同じことだと思う。

移動平均線が一斉に上昇して、PPP(パンパカパン)になる様子は、
動くチャートで見ると、その迫力が、より伝わってくる。
勢いのある PPP(パンパカパン)で空売りを入れるのは恐い!
というのが、実感として体験しやすいと思う。

で、その「動くチャート」の実現法だけど、
チャートギャラリーを自動でめくる方法もいいけれども、
今まさにペイント練習を行おうとしている、
その画像を、直接動かした方が、臨場感がある。

右端が見えない状態で右から左へスライドさせる、
という方法もあるけど、今回のターゲットはあくまでも
ペイント練習の 予習 と 復習」なので、
それと同じように、左から右へ徐々に見えていくのがよいと思う。

準備作業

  • PCのデスクトップ画面に「ペイント練習」というフォルダを作成する

  • ツール(paint-slideview.html)をダウンロードし、「ペイント練習」フォルダへ保存する。

paint-slideview.html
>> 右クリックで「ファイル名を指定して保存」を選択

都度の作業

  • ペイント対象のハードコピー画像を「screenshot.png」という名前で「ペイント練習」フォルダへ保存する。
  • paint-slideview.html をダブルクリックして、起動。

  

カスタマイズ方法( htmlの知識が、多少必要です )

  • paint-slideview.html を、「メモ帳」等で開き、表示スピードとファイル名を変更できます。

ペイント練習用の「チャート隠し」ツール (カーソルキー版)、もどうぞ。
https://shunichi.hosono.com/?p=369

日経平均株価のチャートを1秒ずつ自動的にめくっていく動画を作成

日経平均株価のチャートを1秒ずつ自動的にめくりながら、
目で確認できる動画を作ってみた。

既製品でも、このような機能を持つチャートソフトはあるけれど、
私の場合、現在 学んでいる 相場師朗先生の株塾 で使用している
相場(あいば)式の移動平均線 を使って実現してみたかったので、
自分で作ってみることにした。

「チャートギャラリー」ソフトの画面ハードコピー画像を
1つのフォルダに 時系列に名付けて、それを
Windows標準の「フォト」で動画を作成するだけだ。

エクスプローラから、ファイルを一括選択した状態で
右クリックして、「新しいビデオの作成」を選択すると、
Windows標準の「フォト」のビデオ作成画面が起動する。

こんな動画を何に使うのかというと、
トレード練習のトレーニング用 である。

ビデオは、1秒ごとにローソク足1本ずつめくっていくので、
そのまま眺めるか、あるいは早い速度で再生して眺めれば、

ローソク足 と 移動平均線(aiba式)の動き を目に焼き付ける

というトレーニングができる。

先の展開を予測しながら真剣に眺めるトレーニングを
何十回も繰り返して見れば、値動きのカンを養うのに役立つと思う。
月足だと、約22年分を約4分半、
週足だと、約30年分を約26分
で、見ることができるので、通勤電車で立っていても、気軽に見ることができる。

動画を見ながら、頭の中で「ペイント練習」や「チャートの感動リーディング」を行う。

そして、慣れてきたら、日足を使って、
再生速度を遅くしてみて、1本ずつ、建玉を記入していけば、
瞬発力を養うのに役立つトレーニングになると思う。

次の1手のトレード判断(エントリー、追加、手仕舞い)を
たった1秒で判断を下す特訓は、デイトレードでは必要になる。

 

日経平均株価(月足)チャートの自動再生 1997年1月~2019年11月

日経平均株価(週足)チャートの自動再生 1990年5月11日~2019年11月29日

日経平均株価(日足)チャートの自動再生 1988年9月20日~1999年12月30日

日経平均株価(日足)チャートの自動再生 2000年1月4日~2009年12月30日

日経平均株価(日足)チャートの自動再生 2010年1月4日~2019年12月6日

チャートギャラリーで、1日1画面ずつのハードコピー画像を、自動で一括保存する方法

パンローリング社の「チャートギャラリー」は、
過去の場面に戻って、先の展開(右側)が見えない状態で、
1日ずつめくりながら、トレード練習を行うことができる。

でも、そこで、画面に書き込みを行うことができたら最高だ。
先生のコメントと、自分のコメントを切り替えて、反省に役立てたり、
別のトレーディング日誌 や ブログへ貼り付けて二次加工したり、
いろいろとやりたいことがでてくる。

別のチャートソフトを使うか、作るのもいいけれども、
トレード練習は、自分が実際に本番で使うチャートを使いたいので、
やっぱり「チャートギャラリー」で、できた方が理想だ。

それならば、全部、画像ファイルに吐き出してしまえば、すべて解決する。
日足で、過去30年分だと 7,000~8,000日分になる。

これをいちいち、手作業で、1日ずつめくりながら
ハードコピーを取らなければならないと想像してしまう人には、
「それは無理だぁ」という考えになるかもしれない。
1枚あたり3秒かかるとしても、21,000秒~24,000秒、つまり6~7時間かかる。
これを根性でやり遂げた人がいたら、もちろん、称賛に値する 。

でも私の場合は、「ユースウェア」という技術があるので、
チャートギャラリーを1日ずつめくって7,000~8,000枚の画像を保存するのは、
「そんなの簡単だ」と、すぐに考えることができる。
私は根性はないので、手作業でやれと命令されたら「無理でぇ~す」になるけど、
自分なりのやり方でやってよければ、実現できる方法を探して、さっさと実現する。

そこで本題だけど、
チャートギャラリーを1日ずつめくって、1枚ずつハードコピー画像を保存するには、
「自動化」するソフト(ツール)を使えばよい。
今、はやりの言葉「RPA (obotic Process Automation)」も、ほぼ同じだ。

手作業でいちいち手間をかけて行っている作業は、
それを自動化することができれば、
その作業にかける時間を、
ほかのもっと重要なことに充てることができる。

たとえば、チャートギャラリーのハードコピー画面を、
大量に1枚ずつ保存しているのだったら、それを
トレード練習の時間に充てることができれば、その方がいい。

私はそんな思いで、今朝、とりあえず、
日経225先物 の 1990年から2017年までの画像を出力してみた。

 

使った道具は、uwsc という自動化ツールで、
次のようなスクリプトファイルを用意する。

// チャートギャラリーのウィンドウを選択
GETID("Chart Gallery")

// 真ん中付近で左クリック
BTN(LEFT,DOWN,533,23,0)

// [HOME] ボタンをクリック
KBD(VK_HOME , CLICK)

// 指定回数分繰り返し(数字は要調整)
FOR I = 1 TO 8000

// チャートギャラリーのウィンドウを選択
GETID("Chart Gallery")

// 右カーソルキーを押下
KBD(VK_RIGHT , CLICK)

// 0.5秒待つ
SLEEP(0.5)

// [Windowsキー]を押しながら[PrintScreen]キーを押下
KBD(VK_START , DOWN)
KBD(VK_SNAPSHOT , CLICK)
KBD(VK_START , UP)

// 0.5秒待つ
SLEEP(0.5)

NEXT

チャートギャラリーの画面を開いた状態で、これを実行すれば、
「右カーソルキーで1日めくって、ハードコピーを出力する」
という作業を、8,000回数分、繰り替えし自動実行してくれる。

すると、ピクチャ - スクリーンショット というフォルダに、
大量の画像が溜まってくるので、

これを一括で名前変更(rename)をするバッチファイルを作成して実行すれば、できあがり。

画像が溜まった後の、バッチファイルでの手順は、次のとおり。

 

(1)まず、チャートギャラリーで、チャートの数値データを、ファイル名をつけて(例 nik225f_D.txt)、テキスト出力しておく。
チャート画面で、 「表示」メニュー から 「表形式」を選択して、数値データの表示画面へ切り替える。

チャートギャラリーでデータ表示

チャートギャラリーでテキスト出力

 

(2)同じフォルダ内に、ファイル一覧をテキスト出力するためのバッチファイル「dir.bat」を作成し、実行する。

ファイル一覧を出力するためのバッチファイル

(3)自動出力された「ren.bat」を開き、一括リネーム処理を行うためのバッチファイルへと加工し、実行する。
縦方向のブロックコピー&貼り付け 等のテクニックも使うことになるので、
高機能なエディタソフト(秀丸エディタ 等)を使いこなしていないと、やや難易度が高いかもしれない。

一括リネーム用バッチファイル
加工前

一括リネーム用バッチファイル
加工後

 

以上のような操作は、大昔(MS-DOSの時代)からPCを使ってきた人が持っているスキルなので、新たに学ぶ機会は多くない。

最近の Windows PC でも、 昔のコマンドが発展しながら存続しているし、
PowerShell 等も使えるので、さらにいろいろな自動化ができるようになっているけど、
一部のシステム管理者を除いて、あまり利用する人はいない。

こういう、自動化の技があることを知っていると、ちょっと調べるだけで、
「やりたいこと」 が 「できること」 に変えることができるので、
自由度が高まって、時間をもっと有意義に使うことができるようになる。


My Company Links

合資会社ユースマネージメント
ドメインサービス
インターネット活用の入り口

My Website Links

細野俊一のトレーディング日記
日経225+JPX400銘柄の PPP(パンパカパン) 一覧
株価指数+外国為替(FX)の PPP(パンパカパン) 状態
「生命の科学」学習メモ
大安心と大冒険を求めて

Facebook Pages

ポイント&フィギュア活用研究会
合資会社ユースマネージメント
アダムスキー「生命の科学」活用研究会
細野俊一 (宇宙哲学研究家)