Gradle, Java,オフラインビルド

[github] https://github.com/chronos2015/samples/tree/master/java/gradle

gradleによるオフラインビルドを実施してみた。

オンライン環境でのキャッシュの作成を前提にしないとする事で以外に難しかった気がする。

ただし、gradle自身、及び後述の依存しているライブラリ(*.jar)及び構成ファイル?(*.pom)は別途ダウンロードしておいて、適切なフォルダに配置する必要があります。

主なポイントは、以下の3点かな。

1.gradleを呼び出す際の引数に–offlineを追加

gradle build --offline --stacktrace build 1> build.log 2>&1

2.maven centerからのダウンロードの抑制

repositories {
     // mavenCentral()
     maven { url 'repo' }
 }

3.maven centerに代わるリポジトリの作成

とは言ってもmaven centerと同じフォルダ構成を作成しただけ

尚、ファイルは、maven centerから別途取得する必要がある。

開発環境について

開発環境を作成する際に chocolateyから インストールするアプリについて纏めておきました。

VisualStudio2019は別途インストーラをダウンロードしてインストールなので、含めてません。

※インストールした当時は2017までしかchocolateyが対応していなかった。

コマンドプロンプトを管理者で実行して以下のコマンドを流せば、同等の環境がすぐに作成できる…

なお、eclipseは、プロジェクト毎に必要なプラグインが異なることが多く、またあまり使わないので含めてません。

cmakeは、VisualStudio2019に付属のものを使用する様になったのでこちらでは含めてません。

REM ----------
REM ユーティリティ
REM ----------

REM 圧縮/解凍に使用
cinst 7zip -y

REM telnetクライアント
cinst teraterm -y

REM FTPクライアント
cinst winscp -y

REM ファイルのマージや比較に使用
cinst winmerge -y

REM 検索ツール
cinst Everything -y

REM ----------
REM ブラウザ
REM ウェブアプリの開発等が無ければ一つでいいかも?
REM ----------

REM firefox
cinst Firefox -y

REM chrome
cinst GoogleChrome -y

REM ----------
REM バージョン管理ソフト
REM ----------

REM git
cinst git -y

REM エクスプローラから操作する為
cinst tortoisegit -y

REM ----------
REM 仮想環境
REM ----------

REM docker
REM クラウド環境向けの開発をするなら必須
cinst docker-desktop -y

REM ----------
REM テキストエディタ・統合開発環境
REM ----------

REM サクラエディタ
REM SJISのファイルを開くため
cinst sakuraeditor -y

REM テキストエディタ
REM ※go言語などVisualStudio2019がサポートしない言語用
cinst vscode -y

REM テキストエディタ
REM Web関連のファイル CSSやhtml、javaScriptを編集する際には便利...なはず
cinst Brackets -y

REM テキストエディタ
REM 使いやすいテキストエディタ…
cinst sublimetext3 -y

REM java向けの統合開発環境
cinst intellijidea-community -y

REM Python用の統合開発環境
cinst pycharm-community -y

REM ----------
REM コンパイラなど
REM ----------

REM golang
REM go言語のコンパイラ
cinst golang -y

REM mingw
REM C/C++用のコンパイラ
REM Go言語とC/C++を連携させる為
cinst mingw -y

REM python3
cinst python3 -y

REM oracle jdk8
cinst jdk8 -y

C++,re2c,csv読み込み

[github] https://github.com/chronos2015/samples/tree/master/cmake/cpp/03.csv

re2cによるCSVデータの解析のサンプルを追加。

汎用的なライブラリであったり、ツールを使うと専用のライブラリを使う場合に比べて、自由度が上がる半面、考慮しないと行けないことも増えてしまうのがサンプルからも読み取れると思う。

実用的なサンプルではないので、いろいろ考慮不足なとこがあるけど、今回は無視することにした。

尚、re2cを使用するにあたり、以下のコマンドを実行してre2cの実行ファイルのインストールを実施

cinst re2c -y

プログラムの英名について

プログラムでクラス名、変数名、メソッド名など英名を考える機会は少なくない。

いい英名を付けるときっと分かりやすいんだろうな。

というのもあるけれど、実際には、ネイティブスピーカーじゃないから、それって違うんじゃないって思うことも少なくなくて、一応纏めておいた。

ネーミングは、プログラム開発において、重要な位置を占め続けるだろうから、何かと記事を書くことになるに違いないなと思いつつ...。

英名について…
https://qiita.com/Ted-HM/items/7dde25dcffae4cdc7923

ネーミングサービス
https://codic.jp/

うまくメソッド名を付けるための参考情報

プログラミングで変数名や関数名のネーミングに迷ったときに便利なカンニングペーパーまとめ

C#,ApacheThrift

[github] https://github.com/chronos2015/samples/tree/master/visualstudio/cs/03.thrift

ApacheThriftによるRPCのサンプルを追加した。

ソケットを利用するものと名前付きパイプを利用するものがあるが、基本的には、同一のPCの場合は、名前付きパイプが別のPCの場合には、ソケットを使うのが好ましいのかな。

恐らくjsonを使った連携などに比べてパフォーマンスなどの点で優れてるんじゃないかなって期待しているところ。

クラウドの活用について

近年、Google CloudやAWS、Azureなどに代表されるクラウドサービスが普及してきているように思う。

クラウドサービスは、従来のオンプレミス環境と違って、スケールアップが迅速に行えるというメリットがある。

その一方で、個人情報などに代表される組織としてちゃんと管理しなきゃいけない情報を第三者の運営するクラウド環境に乗せておくことには、まだまだ抵抗があるように思う。

また、頻繁に起こるわけではないけれど、障害が発生した際に、何もできないのはもどかしい感じが拭い去れないのではないかと思う。

クラウド環境の方がオンプレミス環境に比べ割高になる傾向もあるように思う。

その一方で、オンプレミス環境で、全てを実施した場合、負荷が最大になるポイントに合わせて設計しなければいけないなど、無駄が少なくないようにも思う。

そこで、季節業務などの年に数回の業務のみ、それもPDF生成など、データの保持を必要しないものをクラウドに乗せるのが最適なのかな…。

C#, CSVファイルの読み込み

[github] https://github.com/chronos2015/samples/tree/master/visualstudio/cs/02.textFieldParser

static IEnumerable ReadCsvFile(string filePath)
{

// ファイルの読み込み
using (TextFieldParser p = new TextFieldParser(filePath, Encoding.GetEncoding(“Shift_JIS”)))
{
#region 区切り文字による分割の場合
// 区切り文字による分割の場合、以下を使用
p.TextFieldType = FieldType.Delimited;

// 区切り文字による分割の場合、区切り文字を指定。
// CSVの場合はカンマ(,)、TSVの場合は、タブ(\t)など
// ※複数ある場合は、複数指定できる
p.SetDelimiters(“,”);

// フィールドが引用符で囲まれているかを指定
p.HasFieldsEnclosedInQuotes = true;

// フィールドの前後のスペースをトリムするか指定
// ※trueの場合、全角スペースと半角スペースの両方がトリムされる。
p.TrimWhiteSpace = true;
#endregion

#region 固定長の場合
// 固定長の場合、以下を使用
//p.TextFieldType = FieldType.FixedWidth;

// 固定幅の場合、フィールドの幅(バイト数)を指定
// -1を指定する事で可変幅の宣言も可能
// ※試してはいないが、最終行のみと思われる。
//p.SetFieldWidths(2, 4, 1, 4, 9, 9, -1);
#endregion

// 先頭が指定の文字で始まる場合コメントと見なす場合指定する
//p.CommentTokens = new string[] { “//” };

while(!p.EndOfData)
{
yield return p.ReadFields();
}
}
}

CMAKE,Windows,アイコンを追加する

[github] https://github.com/chronos2015/samples/tree/master/cmake/cpp/02.icon

例によってまたWindows限定です。

Windowsでは、コンソールで実行するアプリに対しても、アイコンを追加できます。

なので、アイコンを追加したサンプルを追加しました。