おしゃれにいけてる?

散歩やお買い物のことなどを書いています・・・

Category [プログラミング ] 記事一覧

 SD カード上に、リモートリポジトリとして、ベアリポジトリを作って、それを Visual Studio を使うには、以下のパターンがある。

  (1)新規にプロジェクトを作る
  (2)レポジトリの前に、既にプロジェクトが出来ている

私の環境では、 Visual Studio には Visual Studio Tools for Git がインストールされている。Git サポートソフトは Git Extensions 。両方が使える前提で書きます。

 (1)の「新規にプロジェクトを作る」はとても簡単。

  ① SDカード上にベアリポジトリを作る
  ② Visual Studio のプロジェクトを作るフォルダを、
    SD上のベアリポジトリからクローンして作る

これで終了。

あとは、Visual Studio で上記のクローンのあるフォルダに、新しくプロジェクトを「ソース管理に追加」にチェクマークを付けて作れば即使えるようになっている。

 問題は (2)の「レポジトリの前に、既にプロジェクトが出来ている」場合。まず、Visual Studio でプロジェクトを開いて、チームエクスプローラーの「Git設定」を行う。

これ、よく考えると、リモートサーバーが無い状態ではあり得ないと思う。もしリモートサーバーが設定されているのなら、

  「Git設定」⇒「グローバル設定」

に、「ユーザ名」「メールアドレス」を入力し、「既定のリポジトリ場所」に、SDカードのベアリポジトリのファイルパスを入れる。(注:ファイルパスは unix 形式ではなく、H:\git\Test.git の様な、Windows 形式のものを入れる。file://.. も不要 )

  「そして、コミットと同期」

あぁ、でも、これ、うまく行くのか分からない。なぜなら、

  「 Gitを使ったことが無かったから」

そういう機会が出てきたら、またレポートしよう。うぅ、また、ネットのゴミを出してしまった・・・
 
 バージョン管理ソフトは、どうもイメージ的にしっくりこなくて、仕事への利用は二の足を踏んでいた(個人でも、もちろん使ってない)。

でも、最近、PC のツールを作るのが仕事になっていて、そのデータを家に持ち帰るのに、毎回かなりの量のデータを SDにコピーしなくてはいけないのが辛かった。フォルダ名を変える必要もあったし。

本当は、外にデータを持ち出すのはセキュリティー的に問題があって、うちの会社では、USBメモリは使えないようになっていた。でも、

  「 SD カードは、使える!(キッパリ)」

(いやいや、エラくないって)

 そこで、Git を使って、SDカードで差分のデータだけを持ち歩けるようにならないか、調査していた。それが、やっとその実現策が見つかった。

そのためには、

  「 SDカード上に、ベア・リポジトリを作る必要がある」

それだけ。その Git コマンドが、SDカード上で、

  git --bare init --shared

とするだけ。これ、ツールによってコマンド名が違う。私が使っている、Git Extensions では、

  リポジトリ作成ダイアログで
  ● Central repository, no working directory (--bare ...
  をチェックする

それだけ。

これで、 SDカード上のベア・リポジトリからクローンを作成したり、プッシュしたり、プルすればいい。まんま、リモートリポジトリ賭して使える。

 ちなみに、ベアリポジトリにするフォルダ名前は、フォルダの名前の末尾に .git を付けるのが習わしらしい。それが証拠に、どうやってもベアリポジトリを作れなかった SourceTree では、リポジトリの作成で、保存先のディレクトリ名を、

  「〇〇.git 」

の形にするだけで、ベアリポジトリが作れてしまった。しかし、どこを調べてもそのことは書いてない。ネット上にもない。

 まぁ、とにかくこれで、SD カードにデータの差分の更新をするだけで、データをどこにでも持って行ける環境が出来た。

ただ、Visual Studio で使うには、ちょっと注意が必要になる。

  ・レポジトリの前にプロジェクトが出来ている場合
  ・新規にプロジェクトを作る場合

これらの場合で、やり方が変わってきたり、操作にコツが必要だったりする。私自身も、時々分からなくなるので、後でまとめようと思っている。

 これ、Git を使ってない人には、まったく参考にならないんだろうなぁ。でも、文書ファイルのバージョン管理には使えるかも。

あ、でも、テキストじゃないとキツイかなぁ。EXCEL とかだと、ファイル丸ごとコピーするのと、同じだろうし。あ、でも、名前を変えて保存をする必要は無くなるか。
 
 闇雲に、MyForm.h を新しいプロジェクトにコピーしても、GUIフォームは表示されない。「昔は簡単にできていた」らしいけど、今時点(VS2013)では、以下のような処理が必要となっている。

 まず、流用したい元のプロジェクトの、以下のファイルを作業フォルダ等にコピーする。

  MyForm.h(← フォーム名 MyForm )
  MyForm.resx
  (必要なら) MyForm.cpp

次に、これを流用するコピー先のプロジェクトで、そのプロジェクトに「仮の新しいフォーム」を追加する。これは、プロジェクト内の他のフォームとぶつからないような名前にする。ここでは仮に、

  MyForm2.h(フォーム名 MyForm2)

とする。

ここで、最初に用意した、コピーしたい MyForm.h に変更を加えて、上で追加した MyForm2 に見た目を合わせて、コピーする作業。

  ①ファイル名の変更 MyForm.h → MyForm2.h
   (必要があれば MyForm.cpp も MyForm2.cpp に)
  ②クラス名の変更 MyForm → MyForm2
  ③ネームスペース名の変更 Project1 → Project2 など
  ④ファイル名の変更2 MyForm.resx → MyForm2.resx
  ⑤上記のファイルを使いたいコピー先プロジェクトに上書きコピー
   ※VisualStudio 上では両方ともプロジェクトを開いてない状態
  ⑥コピー先のプロジェクトを VisualStudio で開き、動作確認
   (コピーしたフォームを表示、リビルド、などしてみる)

※注意点として、ファイル名、クラス名、ネームスペース名が、仮に追加したフォームと合っていることが必要。

以上!

  May the force be with you !

ご武運を。
 
 アルゴリズムなどをやるときは、標準のCやC++で書いて、コンソールでそのまま使うことが多い。

でも、それを、多くの他の人に試験・評価してもらうには、使いにくすぎる。せめて、簡単な GUI を付けないと。

 そんなことで、今回は、Win32 コンソールアプリプロジェクトに、C++.NET で GUIを追加する方法を紹介する。実は VS2013以降では、C++/CLI(CLR) の Windows アプリを作るテンプレートが無くなっている。

 やり方は、簡単。まず、環境設定は [Debug][Win32]に対して行う。そこで、Visual Studio でコンソールアプリプロジェクトに、Visual C++ CLR の UI Windows フォームを追加する( main のあるソースの存在するプロジェクトに対してのみ行う)。

ソリューションエクスプローラーのプロジェクトの所で右クリックし、追加を選択して、新しい項目を追加。ファイルの名前はデフォルトの MyForm.h とする。そうすると、
CLRコンポーネントをネイティブプロジェクトに追加しています。プロジェクトは共通言語ランタイムがサポートされるように変換されます。続行しますか?
というダイアログが出るので、「はい」をクリックして、次へ( MyForm.h が追加される)。

 プロジェクトに、もう一つ、Windows Form 起動用の startup.cpp を追加する。(名前は、拡張子以外は自由)。右クリック→ 追加→ Visual C++ → コード → C++ファイル

そのファイルの中に、以下のコードを書く。
#include "stdafx.h"
#include "MyForm.h"

using namespace Project_name; // ← プロジェクト名に変える

[STAThreadAttribute]
int main(array< System::String ^> ^args)
{
// コントロールが作成される前に
// Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew MyForm()); //追加したフォーム名
return 0;
}
ここで、プロジェクトのプロパティーを変える。メニュー → [デバッグ] → [・・・のプロパティ]選んで、プロパティ ページのダイアログを出して、以下の様に書き換える。

1. [構成プロパティ]→[全般]→共通ランタイムサポート
 この値を、[共通言語ランタイムサポート(/clr)]に変える。

2. [リンカ]→[システム]→[サブシステム]→[コンソール]
 この値を、[Windows] に変える。

3.[リンカ]→[詳細設定]→[エントリポイント]
 この値を、main に変える。

この状態で、リビルド→実行、してみる。Window のフォームが表示されれば、成功。失敗した場合は[エラー一覧]を見て、修正する。

※ エラー修正の例 ( Debug と Release で値が若干異なる)
[構成プロパティ]→[C/C++]→[コード生成]→ に対して、
・/clr と /Gm の同時指定不可
 [最小リビルドを有効にする]→ 空欄もしくは、/Gm-
・/clr と /EHs の同時指定不可
 [C++のリビルドを有効にする]→ /EHsc ⇒ /EHa
・/clr と /RTC1 の同時指定不可
 [基本ランタイムチェック] → /RTC1 ⇒ 既定

※コード修正時にインテリセンスが出ない場合は、プロジェクトを一度閉じて、再度開いてみる。
※このまま [Win32] を [x64] に変えて、リビルド→実行、に切り替えても、エラー無く実行できる。

 次に、環境を [Release][Win32]に切り替える。[Debug] の時と同じく、[デバッグ]→[プロパティ]を変える。まず、前回と同じく、

  /clr 指定
  コンソール → Windows
  エントリポイント → main

私は、以上の変更で動いた。エラーの出た場合は、前述の、「※ エラー修正方法の例」や、ネット上の情報を利用して、エラーを回避する。

 これで、コンソールプログラムに、CLR Windows アプリケーション GUI をできた。

古いメイン関数に書いていた内容を MyForm.h に移植して実行する。前のコンソールアプリケーションが、main 関数内の処理を、さらに細かい関数にしてあれば、修正も楽になる。

 以上、分からないところは、それぞれ研究しよう。私もこれ以上は分からないので。

  「でも、きっと、運が良ければできるはず」

PS. 最適化やマルチスレッドなどのオプションを設定してあってもうまく動かせるかは、分からない。
 
 実験用に、C や C++ でコンソールプログラムを書くというのはよくある。重要なのはアルゴリズムで、人に使わせる必要が無ければ GUI はいらないから。

そうやって作られたコンソールアプリを .NET の GUI アプリにするには、標準入出力がじゃまになる。

それなら、その標準入出力をファイルに落として利用すればいいじゃんと思って、しらべて、やっと見つけた。元ネタ記事は『ここ』。ありがとう。

標準入出力をファイルに関連付ける方法は、これ。freopen を使う。

FILE* fp_input = freopen("input_data.txt", "r", stdin);
FILE* fp_output = freopen("output_data.txt", "w", stdout);

この、fp_input とfp_outputを外部変数として保持しておけば、標準入出力をファイルとしてつかまえることができる。

このテキストファイルの内容を使いたいときは、fclose(FP*) で一度閉じて、テキストファイルの内容をメモリに読み込んで、また freopen を実行すればいい。マルチタスクの場合は、そのタイミングをちょっと工夫が必要があるかも。
 
 昨日から、eclipse を入れ替えようとしている。今まで使ってたのは、すでに日本語化されたパッケージ Pleiades All in One 。でも、これ、後で気付いたんだけど、色々なプラグインが入ってて重くなってる。

で、Eclipse IDE for Java Developers に、Pleiades の日本語化パッケージを手動で組み込むことにした。やり方は「 Android開発環境の構築 Eclipse編 」を参考にやった。簡単にできた。

で、実際に、自分のプロジェクトをコピーして、インポートしてみると、日本語が文字化けしてた。プロジェクトは Android のプログラムなので、「設定」ウィンドウの、「一般」「ワークスペース」で、テキスト・ファイルのエンコードを「UTF-8」 に変えた。

それでも、エラーが大量に発生していた。クリーンビルドしても直らない。
Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Please use Android Tools > Fix Project Properties.
のエラーを頼りに調べたらこのページ。プロジェクトを右クリックして「Android ツール」「プロジェクト・プロパティーを修正」を実施。

これでだいぶ減ったんだけど、なんと @Override の所でエラーになってた。こんな基本的なとこで。調べたらこのページに、Javac を 1.6 にすればいいと書いてあった。ありがとう。

「ウインドウ」「設定」「Java」「コンパイラー」の「コンパイラー準拠レベル」を 1.6 にして、「デフォルトの準諸設定の使用」をチェックして。念のため、プロジェクトをクリーンしたら直った。ありがとう。

で、自分のソースを見たら、フォントがヘン。「設定」「一般」「外観」「色とフォント」で、「基本」のテキストフォントと「構造化テキスト・エディター」のフォントを「MS ゴシック」のサイズ 9ポイントに変えた。

見た目はかなり似てきたんだけど、

   「ソースの、TAB で合わせていた、縦位置がずれてる」

色々調べたら、Pleiades All in One には「JStyle 改行空白表示プラグイン」なるものがインストールされているらしく、jstyle_3.7.2.0-32bit.zip をダウンロードしてインストール(インストールの仕方は readme の中のドキュメント参照)。

TAB での位置合わせがうまく表示された。ためしに、ソースを別なテキストエディタで表示させても同じに見える。逆に、最初にオリジナルの eclipse でやってたら、これがずれてたって事。まさに、不幸中の幸い。

(PS. Jstyle の対応 OS は Windows のみだった。Lion ではエラーになった。ショック

これで、やっと、Pleiades All in One と同じになった。エディタ上で、右クリックしてメニューを出すのが、明らかに早くなった。それだけ
 MacBook Air に Eclipse を入れ直してたら、ADT Plugin のインストールでつまずいた。

   「HTTP サーバー 不正なゲートウェイ」

とかいうエラーでインストールできない。

このサイトを参考にやったら、やっとできた。どうも、辛抱強く待たなくてはいけないところを、途中でキャンセルしてしまっておかしくなったらしい。

具体的にやったのは、まず、「ヘルプ」→「新規ソフトウェアのインストール」ダイアログで、「使用可能なソフトウェア・サイト」をクリックしてダイアログを出して、ADT がらみの項目を「除去」する。

で、先のサイトの通り、『新しいソフトウェアのリソース元の指定』に下記を指定する。

   http://download.eclipse.org/releases/helios

名前は「テスト」にした。で、ダイアログには「待機中」と出て、何も変化がなくなるんだけど、ひたすら待つ。何も変化がないようだけど、実は、Eclipse のメインウインドウの右下に、「10%」とか出ている。

で、やっとインストール項目が出てくる。そしたら、何もしないでダイアログを閉じて、一度 Eclipse を終了して、立ち上げ直す。

で、このサイトのやり方に従って、ADT のインストールにトライする。ここでもひたすら待つと、うまく行く。右下のステータス表示が変化していることに注目すること。動いていなければ、失敗かも。あと、明らかに失敗したときは、ダイアログが出る。

失敗したら、「"使用可能なソフトウェア・サイト"」のリンク(わかりにくい)をクリックしてダイアログを出し、「再ロード」を掛けて、やりなおす。何回でも、根気強く

 一度インストールして動いてた Eclipse を入れ直したら、こんな目に遭った。緊張で方がパンパンになるし、もう、泣きそう

さてと、次は Net Beans と Chrome だ。果てしねぇ・・・
 アンドロイドのエミュレーターを起動したまま、先に Eclipse を終了したら、その後、エミュレーターがおかしくなってしまった。

エミュレータは立ち上がるんだけど、画面が真っ黒のままで、アプリが起動しないばかりか、ランチャー画面さえ出てこない。

ネットで調べても同じ症状は無かったけど、ちょっと似ていた物があったので、ダメ元で試してみた。

XP の場合だけど、Documents and Settings の下のユーザーフォルダの下の .android¥avd フォルダの下に、エミュレーター AVD の名前のフォルダが出来てる。

そのフォルダには、.ini ファイルと .img ファイルがある。場合によっては、.lock フォルダが出来ている場合が有る。

エミュレーターが起動していない状態で、そのフォルダーの .ini ファイル以外を、全て消去してしまう。

次に、Eclipse メニューの Window から AVD Manager を立ち上げて、おかしくなった AVD を選択して編集ボタンを押す。で、すぐに Edit AVD ボタンを押して閉じる。

そうすると、さっきのフォルダの下に、.img ファイルが新たに作られる。この状態で、エミュレーターは正常に動くはず。もしうまく行かなかったら、

   「ごめんなさい

ま、当然、At Your Own Risk で、と言うことで (・。・)yoro
 Visual Studio で、テスト用のアプリを作ってて、だいぶ動いてきたので、デバッグ用のコードを整理してコンパイルを掛けた。そしたら、

   「予期せぬ EOF が検出されました」

のエラー。

そればかりか、フォームデザイナーも表示出来なくなった。

ソースコードをいろいろ見たんだけど、おかしいところが見つけられない。変更する前に戻すと、その日にやった分が無駄になる。焦る。

で、ふっと見たら、折りたたみできないところがあって、

   #ifdef TEST
   ・・・・
   #define

となってた。

#endif で閉じるところを #define と書いちゃったので、それ以降のコードが全て #define 文になってしまってた。

   「プログラムは、言われたとおり、動くなぁ・・・」

も少し融通効かせてくれてもいいのに。

しかし、プロジェクトが壊れたんじゃないかと、胸がドキドキしすぎて、死ぬかと思った

テスト用アプリでも、バージョン管理しないとだめだなぁ。てか、こんな間違い方、生まれて初めてだ
 VC++.NET で試験用アプリを組んでて、ImageList に画像ファイルを読み込んで、それをアプリ内で使おうとした。コンパイルは問題なく通ったのに、実行したら、

   「適切なリソースが見つかりませんでした」

的なエクセプションが起こった。

どこを見てもおかしいところは無く、WEB で検索しても見つからない。焦りまくり。リソースに埋め込まないで、直接画像を読み込んで使おうかとも考えた。で、あるページで、

   「 namespace がどうのこうの・・・」

と書いてあって、そう言えば、このアプリ、流用流用で、プロジェクト名とか namespace 名を何度も変えたっけなぁ、と思い出した。

調べてみたら Release フォルダに昔の namespace の名前を持った .resources ファイルが出来てた。

で、片っ端からファイルを調べてみたら、ソルーションファイルの中に、同じ名前を見つけた。これを、今使ってる namespace に変えたら、動いた。

   「イメージリストに、いじめられた

てか、試験用アプリとはいえ、どっかで流用はリセットした方がいいのかもしれない。コードも汚くなってるし

左サイドメニュー

プロフィール

Author:ジョニー

ゆるゆると日々を過ごしてしまう、ダメダメサラリーマンの航海日記。



クリック (・。・)yoro

このブログ内を検索

最近の記事

カテゴリー

最近のコメント

QRコード

QRコード

月別アーカイブ

右サイドメニュー

カレンダー

10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

その他の話題

どらまらんど
どらま・CM・TV全般・映画の話題はこちらです

デジ太る
プログラミング、EXCEL VBA、PC、Mac の話題です

スポンサードリンク

FC2カウンター

#7670 #7669 #7405 #7389 #7387 #4068 #4038 #3888 #3709 #3648