自分用メモ

まだいろいろと再構成中。

カテゴリ : ソフトウェア

要するに、ここここにあるようなふうに、XamarinをWindows10上のVisual Studioで動かして、別筐体のMacとつないで、Windows10上のVSからiOSを開発してみる・・・という挑戦。

この記事にあるような、Mac上でWindowsを動かすのではなく、物理的に別筐体のMacの中古を激安で買って、繋いでしまおうという。なので、場所を食わないMac miniの中古。16000円弱で入手したので、その価格は満足。

で、ちゃんとうまく行くかは別問題。

まず、Mac OS X にWindowsから VNCでリモートデスクトップ接続するのはいいんですよ。こちらのサイト様にあるとおりでOK.

で、次に、いよいよVisual StudioのXamarinから繋いでみる。
すると、sshフィンガープリント・・・リモートログインは有効とかいうのが出てきてトラブるけど、これは、マックにログインするときに、ちゃんとパスワードつきのアカウントを作成してログインして、そのアカウントでログインすれば大丈夫。こんな感じ。
001

Mac上ではこのように、リモートログインを設定しておく。
002

こうすれば、ssh....は出なくなるのでうまく行くかと思いきや・・・こういうのが来る。
003

Xcodeってなんだ?って調べると、ここここですよ。
なんか、Apple IDが必要になるそうで、そんなの昔に入ったような気がしないでもない・・・と、不完全なので、いろいろ苦労してようやく昔作ったアカウントとそのパスワードを探し出した。結構大変でした。
で、調べてみると、Xcodeは、MAC app storeからダウンロードしろと・・・
004
で、OS 10.6.6 以降でないとダメなんですか・・・?

しかし、激安マックは、10.5.8 

なぜ激安なのか・・・だんだんわかってきましたよ。w 

試しに、最新のMac OSをダウンロードしてみると、やはりこういうレスポンスが・・・
005

ならば逆に、Xcodeのほうを、昔の古いバージョンにすれば?と思った。
まず、WindowsマシンでAppleのサイトでこういうのがあるのを発見。
006

Xcode 4.5.2 あたりどうでしょう??こちらのサイト様を参考に。

と思ったけど、Windowsマシンでダウンロードしても意味ないので、マックからダウンロードしようとしてみると・・・・
007
と来たよ。アップルのサイトなのに、Macではセキュリティー上開けないと来たもんだwww(^◇^)

ならば、ブラウザはアップルのは見捨てて、Google Chromeでは?と思った・・・・ら、Chromeのサイトに行ってみたら、Mac OSの新しいバージョンしかサポートしてないと・・・・。
さらに、古いバージョンのChromeを探してみたけど、少し前まであったらしいけど現在は既に無いと。



う~~~ん。。。。

中古マックが激安な理由がよくわかった・・・ということで終わってしまうのか?

安物買いの銭失いの典型か? w 今日のところはここまで・・・

Windows PowerShellと、PowerShell ISEをいじっていて、profileを書いて動作時に読み込ませて、デフォルト・ディレクトリを変更しようとしても、なぜかPowerShell ISEだけで変更が有効になってPowerShellでは無効になるという現象があった。

どうやら、こちらのサイト様の通り。

プロファイルのファイル名を、Profile.ps1にすると両方で有効 になる。

Javaをやってみるのに、今ではVisual Studio Codeから出来るというのを知ったので、やってみようとした。
まずはここの通り、Visual Studio CodeとJDKをインストールしてみる。

しかし、いつも通りwww、javacが認識されないで終わる。(´・ω・`)

どうせPATHが通ってない思ったので、ここを見てその通りやってみる。

やっと、PATHが通って、hello worldが実行された。

pop pushをやらない
先程の件、偉大な方のお知恵を拝借したことにより、このように解決した。

つまり、
1. pop とか push とかやらない。
2. 表示ループを回すのに、わざわざ i とかlst.size() とかを使わない。
3. 表示ループは、pそのものを++で進行させ、始めと終わりは lst.begin() / lst.end() を使えばいい。
そういうふうに考え方を変えれば、即動く。

多分、青字で書いた、p++をやるところがキモなのかな?という気が、なんとなくする。

ポインタを使うような構文だとダメで、参照を使うとなぜか通る。という現象があったのだが、その原因は不明だった。

で、listを使ったプログラムでこういうのを入れたが、この直後に実行時エラーで落ちる。

list pダメ

う~ん・・・
pがなぜかあさっての値になるのが原因なのか??
このプログラムの場合、参照で逃げようとしてもダメだった・・・(´・ω・`)

このステップの直前までpは65'A'という値を持っているわけなのだが・・・
まだまだこのあたりの理解が完全に不足中ということだけはわかった。

これはやはり例によって、listの問題ではなくポインタ関連の問題なのだろう多分。
さてどうしようか???と、今のところ無策。

前回とも絡むが、localtime_s, asctime_sを使った例題で、なんとかコンパイルは通してそれなりの結果が出たのを個人的覚書。


こんな感じ。
但し、このプログラムが完璧に合ってるかどうかは不明。
まあ、ostream &operator とか、まだよくわかってないのに使ってみたw段階なので・・・



(2014.5.31追記)
こういうのでも同様。
追加

またまた、localtimeを使った例文が本に載っていたのでそれをVS2013に入れてみると、「localtime_sを使え」と怒られたというのが事の発端。前に、これこれな感じで、tm構造体がらみで敗退したのとほぼ同じ状況。

まずは、本に載っていたコードをlocaltime_sに変えて、かつ、引数の数とか、errno_t....とかに注意して書き直してコンパイルしてみると、
*pだとエラー
error C4700 「初期化されていないローカル変数が使用されます。」 と、前回敗退したのと同じ状況が再現された。ここで悩むこと3~4日。まあ、五月連休だったので、しっかり悩みまくって試行錯誤したわけだが。(^^

----

なんとかいろいろいじりまくって、ようやくコンパイラだけは通した血肉の策?がこちら。
NULLのとき
つまり、原因はわからないが、なぜか、
ポインタを使うような構文だとダメで、参照を使うとなぜか通る。という。

もうここで、localtime_s問題だけでなく、
ポインタとか参照とかも理解が不完全なことが既に露呈。

---

で、出力を見ると、4/4/114の文字がすご~くイヤだ。w 
なので、またまた試行錯誤して、もしかしてtime(NULL)というのが怪しいのでは??と邪推して、time(&t)にしてみたのがお次。
&tのとき
ご覧のとおり、結果は、別にNULLで良かったじゃんということに。

---

なのでお次は、この気持ち悪い4/4/114の中身を探るために、ステップ実行でデバッグに入ってみる。このように、time とか t の中身を見てみると、1399181075だ。
tの中身を見る
この1399181075という数字を電卓で概算してみると実は真っ当な数値だった。
なのでさらに、これが p に行ってどうなるかを見てみることにした。
pの中身を見る
お!、4 4 114が現れたな。
ということで、ちょっと冷静に、そもそもtm構造体の構造はどうなっているかを調べてみると、これだ。

というわけで~wwww 実はプログラムのほうがマトモで、本に載っていたソースコードのほうが、こういう気持ち悪いのを放置している怠慢?なコードだったみたいな。

******

ここまでわかれば原因は特定できたので、あとは対策するだけだ。
軽くググって、strftimeを使えばよいことを発見。
で、なんとかここまで辿り着いた。
これが原因だ
赤矢印にご注目。このように、いたってマトモに動作していたことが発見された。

何日の何時何分何秒に何をやっていたか、プライバシーばれまくりwだけど~。

とりあえず、ようやく、いろいろな問題の複合&いろいろうやむやでわからないことだらけなのが露呈wしたものの、結論が出たのでヨシとしようか~。

コンストラクターでは・・・

コンパイル以前に「コンストラクターでは戻り値の型を指定できません」と出てしまう場合、しかも実際にはコンストラクターで戻り値の型を指定していない場合、

原因はこのように、うっかりclass定義の}の次の;を忘れているのが原因。

C++でctimeを使おうとするとctime_sを使えと怒られる。

まず、
void t_and_d::show(){
cout << ctime(&systime) << "¥n";
}

みたいに書いてある本のプログラムをそのまま入れると怒られるわけだが、
ctimeをまずはctime_sに置き換えて、なんとか青文字のようにchar tt[26]とかtt, sizeof(tt),を加えても、0しか出力されない。これはここにもあるように、ctime_s自体の戻り値は成功すれば0、しなければ0以外を返すだけだから。
なので、赤文字のようにchar tt[26]の中身を出力してやれば欲しい中身が出てくる。

void t_and_d::show(){
char tt[26];
cout << ctime_s(tt, sizeof(tt), &systime) << "¥n";
cout << tt << "¥n";
}

これを出力するとこんな感じになる。
ctims_s

このページのトップヘ