Microsoft アカウント復活とVSの製品登録終了(PHSは結局ダメみたいという結論)

 Visual Studio Comunity 2017 製品登録のためにMicrosoft アカウントが必要なのだが、その新規登録の為にはSMSで送られてくるセキュリティコードが必要。それが手持ちのPHSに送られてこない。

 PHS迷惑メール対策を疑って、「標準」の状態だったのを解除してみたのだが、結局それでもダメだった。070で始まるPHSには対応できていないという事なのか。

 結局、Windows8.1のタブレットを購入した時に登録したアカウントのロックを解除して、そのアカウントでVisual Studioの製品登録を行った。パスワードは忘れてしまっていたので、個人認証が必要だったが、新規登録時、固定電話の番号を登録していたので、その番号に自動音声でセキュリティコードを報せる電話が掛かってきた。

 なんとなく納得できない思いは残るのだが、とりあえず、アカウント復活と製品登録は終了した。

 ちなみにMSのアカウントは1年間サインインしないとロックされ、5年使わないと消失するらしい。

 

Pacal再入門:ArgvとArgc

 再入門だから、興味本位で順序は無茶苦茶。今更Algolがどうのこうのとか、教育用言語としての有効性を検証しても仕方がない。

 

 argv, argcが組み込み関数だとしたら、別にprogramの引数として記述しなくても、特段の宣言をせずにコードの中に直接記述しても機能するはずという事で、次のようなコードを書いてみた。

program arg0;
var
    count : integer;
begin
    for count:=1 to argc-1 do writeln(argv[count]);
end.

 結果としては、問題なく処理された。

 ここでは、argvを配列のように扱っている。ところが、Oracleの解説では、

The argv procedure assigns the specified program argument to a string variable.

Syntax
argv(i, a)

Arguments
i is an integer value.
a is a fixed- or variable-length string.

Return Value
argv returns a string variable.

Comments
argv returns the i'th argument of the current process to the string variable a. i
ranges from 0, the program name, to argc-1.
argc is a predeclared function that tells you how many arguments are being
passed to the program. argv is normally used in conjunction with argc.

 となっていて、argvを完全に関数扱いしている。

 昔読んだ入門書では配列扱いの解説だったので、特別な変数だと思い込んでいたのだが、ちょっと試してみる必要がある。

program arg1;

var

   count : integer; 

   a        : string;

begin

   argv(3, a);

   writeln(s);

end. 

  上のようなコードを書いてみたが、argv(3, a);のところで、

Syntax error, ";" expected but "(" found 

 とコンパイルエラーになった。対象としている処理系の仕様の違いだろう。非標準だから仕方がないし。いちいち変数を宣言してアサインして使うより、配列変数として振舞ってくれた方がシンプルで有難い。

 ただ他のPascal処理系で使うとエラーになるという可能性は知っておく必要がある。

 ちなみに、argv[0]はコマンドとして使われた文字列を引数も含めて全て返してくる。

 

 argvとargcについては、これでいいだろう。

Pascal再入門

 最初に覚えた言語はBASIC。まがりなりにも業務で使えるプログラムを書いたのがPascal。サーバーの維持管理業務で使っていたのはJSP。必要に応じて使っていたのはVBA。つい最近使い始めて、そのまま放りっぱなしになっているのは、EmacsLisp。

 なんだかんだいって、BASIC以外はPascalでの知識をベースに誤魔化しながら使ってきた。EmacsLispでさえもそうで、(function x)をfunction(x)に読み替えて理解していた。型宣言のない変数は気持ちが悪い。

 だから、開発言語にもう一度手を出すのなら、Pascalに再入門するのが正しいと思う。EmacsLispは外せないのだが、Pascalの次をJavaにするのかC#にするのかは用途の問題。Window10をターゲットにアプリを書くつもりならC#が良さそうな気がする。

 Javaは汎用言語だが、意外に日常的な用途が見つからない。Lispは魅力的な言語だとは思うが、とてもニッチな領域になってしまう。Gaucheくらいは覚えたかったのだが、今のところEmacsLispでいい。

 いずれにせよ、Mp3tagもどきを作るのであれば、Pascalが一番楽そう。その辺から攻めてみるか。

 

 ところで、Pascalは既に古典的な言語になってしまっているようで、コンソール用の解説がなかなか見つからない。TurboPascalでもargvとargcが使えたはず。記述法を探してみたのだが、Cとか他の言語での用法は見つかるのだが、Pascalのそれは見当たらない。

 標準入力を変数として取り込むという意味では。

program args;
var
    argument:string;
begin
    readln(argument);
    writeln(argument);
end.

 じゃダメ。

 試行錯誤してみて、以下のような感じ?

program argcargv(argc, argv);
var
    count : integer;
begin
    for count:=1 to argc-1 do writeln(argv[count]);
end.

  これで、

>argcargv test1 test2 test3
argcargv test1 test2 test3
test1
test2
test3 

  となる。レファレンスとかで裏を取ったわけではないので、正しいのかどうか確証はない。

 苦労しそう、、、。

 fpcのリファレンスガイドで確認してみたのだが、argc, argvは予約語一覧にも記載がなかった。

 ようやく見つけたのが、https://docs.oracle.com/cd/E19957-01/802-5762/802-5762.pdf

 Oracle Help CenterのPascal Language Reference。OracleにはVirtualBoxでもお世話になっている。企業に高価なDBを売りつけるだけでなく、きっちりその立場としての社会貢献をしている立派な企業であると見直した。

 argv. argcはTurboPascalを使っていた時、参考書として買った入門書に書かれていたのを覚えていたもの。当時のTurboPascalのマニュアルは英文のものしかなかったので、書店で適当に買ったもの。まだDOSの時代だったので、プログラムに引数を渡してやる必要があった。その後、対話メニューを書くようになって、コマンドラインから引数を使うようなプログラムは書かなくなった。

 しかし、エチュードとして書くなら、なるべくシンプルなプログラムで済ませたい。

 Oracleのレファレンスによれば、argc, argvは非標準の識別子。組み込み関数としての位置づけにあるらしい。まぁ、fpcとtpcで使えるのなら、非標準でもなんでもいい。

 とりあえず、Pascalの再学習を進めていく事にする。

Windows上の開発環境

 Delphi(Pascal), Visual Studio(C#, VisualBasic, C/C++), Eclipse(java)と3種類の開発環境をインストールしようとしているわけでけど、どれをメインに使うべきか。コンソールベースならEmacsもある。

 使いこなして元が取れそうなのはVisual Studio、汎用性があるのはJava、馴染みがあるのはDelphiといったところ。コンソールベースはWindows環境では無理がある。Emacsで完結するシステムなら、Windows上のEmacsではなく仮想OS上のEmacsでよい。

 だらだらと泥縄式に拡張していくのなら、Lispが良いと思うのだけど、GUIとの相性がイマイチ。

 プログラムを書く目的は日常的な操作の効率化なのだが、その為の方法としては、Emacsの利用が手っ取り早い。ただ、EmacsWindowsの相性はあまり良くないし、Windowを使うのなら、Windowsらしいソリューションが望ましい。

 そうなってくると、糸口として選択すべきか、使用経験のあるDelphiか。あくまでも今風のプログラミングではなく、.NET以前のレガシーなDelphi。.NETを使うのなら、C#の方が良いような気がする。

 という事で、WindowsのプログラミングはDelphiから初めてみる事にする。無難なのは、テキストブラウザとピクチャブラウザくらいか。

 情けないくらいに、Delphiの使い方を忘れてしまっている。せめて昔書いたプログラムが残っていれば良いのだけど、今となっては何も残っていない。コツコツやるしかないか、それでも一からVisual Studioを覚えるよりはマシだろう。

 とっつき易さからいえば、今のDelphiより、昔のDelphiに似ていてるLazarusの方。

 昔、Delphiでプログラムを書いていた時は、フォームにコントロールをペタペタ貼り付けるのは邪道で、なるべく動的に生成させるようにしていた。そのやり方や手順をまるっきり覚えていない。

 初心に帰ってチュートリアルを読む事から始める。(Object P)ascal Introduction/ja - Lazarus wiki)

 10日間くらいで、昔の感覚を取り戻せますように。いきなり、Lazarusをつかうのではなく、コマンドラインからfpcを使った方が良いかもしれない。コーディングはEmacsで一応pascalモードも存在する。

 

 Lazausu, Delphi, Visual Studio, Eclipse と開発系の環境をインストールしてみたが、結局使うのは、Emacsにfpcって、、、。なんだこりゃという感じは否めない。

 

JDK10.01とEclipseのインストール

 1.7くらいの枯れたJDKをインストールしたかったのだが、ダウンロード元を探すのが面倒だったので、カレントのJDK10.01をインストール。

 Eclipseインストーラーもややっこしくなっていて、インストール時に対象を選択しなければならなくなっている。

 とりあえず無難にてっぺんにあったEclipse IDE for Java developerを選択した。

 インストール先はデフォルトのままにしておいたら、'C:\Users\<ユーザー名>\eclipse\java-oxygen' にインストールされていた。

 次に日本語化。初めから、日本語されたパッケージをインストールしていれば、面倒はなかったのだけれど、気づくのが遅かった。

 日本語化の手順はこちらを参考にする。→eclipseを日本語化してみよう! | サービス | プロエンジニア

  少しずつ確認しながら作業する。

デジタルデバイド

 MSのアカウントが取得できないので、Visual studioが試用でしか使えない。前にWindows8.1のタブレットを購入した時、アカウントはとったのだが、使いづらかったので、使わずに放りっぱなしにしていたら、いつの間にかアカウントが無効になってしまっていた。

 それで新規にアカウントを取ろうとしたら、電話番号の入力を要求されたので、固定電話の番号を入力したら、SMSが使えないからダメと拒否された。Windows8.1の時は自動音声でコードを返してきたのだけど、今は固定電話は本人認証の手段としては薄弱になってしまっているらしい。

 仕方がないので、PHSの電話番号を入力したのだが、SMSが送られてこない。

 PHSに対応していないのかなとも思ったが、そんな記載はどこにもない。

 ネットで色々調べてみたが、迷惑メールのフィルターに引っ掛かている可能性があるらしい。PHSは買った時のままで何も設定していないのだが、キャリアが一定のボーダーで設定している事もあるらしい。

 その設定画面に辿り着くまでが一苦労。SoftBankのショップで買った携帯なので、My SoftBankかと思ったら、PHSはMy Ymobileだった。迷惑メール対応は「標準」になっており、成りすましメールとはブロックする設定になっていた。

 デジタルデバイドは自分には関係ない話だと思っていたが、そろそろやばくなってきたか。携帯電話を拒否し続けてきた期間が長過ぎた。まさか、個人認証を携帯電話の番号で行う時代が来るとは思わなかった。

 アカウントが取れない事にはWindow10への移行もままならなくなる。FreeBSD/Linux+Windows7でレトロコンピューティングを極めるのも悪くはないのだけど、時代から完全に取り残されてしまうのはマズい。

 

追記:迷惑メール対策をキャンセルしてMSのアカウント取得を試してみたが、結局ダメだった。最終的には、以前取得していたMSのアカウントを使わずに放りっぱなしにして、ブロックされていたのを、ブロック解除する事でアカウントを復活させた。