久しぶりにファイヤーウオールの設定を変えてみた。機器の種類により微妙に設定方法が違うので、注意が必要。
ある程度きびしめに、設定して必要に応じてポートを開けていくようにするようにしている。ただ、送信元と宛先のプロトコルとポートの組み合わせをよくチェックしながら設定しないとうっかりミスしやすいので注意が必要なようだ。
・ディフォルトの設定に加えて
①まずいったん、内部から外部へのすべてのアクセスを制限
②次に、内部から外部への必要なアクセスを許可していく(Web,メール,DNS等)
③外部から内部へのアクセス許可を必要に応じて許可していく
③の場合は、IPマスカレードの設定で、ポートにより外部からのアクセスの振り分け設定が必要。
2020年4月18日土曜日
2020年4月9日木曜日
groupsession 回覧の「確認」クリックせずに既読に
グループセッションは、機能も豊富で、便利に使わせていただいています。
また、ソースを公開してあるため、カスタマイズもできるようになっています。
今回、回覧機能で、確認ボタンをクリックしなくても、既読になるように
カスタマイズしてみました。Cir020Action.javaの2か所を変更します。
private ActionForward __doInit(
途中省略
biz.setPrevNext(paramMdl, con,
paramMdl.getCirViewAccount(), GSConstCircular.MODE_JUSIN, userSid);
paramMdl.setFormData(form);
con.setAutoCommit(false);
//********************ここから
RequestModel reqMdl = getRequestModel(req);
MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
String appRootPath = getAppRootPath();
paramMdl.setParam(form);
try {
biz.doUpdate(
paramMdl, con, reqMdl,
paramMdl.getCirViewAccount(),
userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
paramMdl.setFormData(form);
//++++++++++++++++ここまで 追加
return __doDsp(map, form, req, res, con, true);
}
private ActionForward __doPrevNext(
途中省略
}
} finally {
con.setAutoCommit(false);
}
********************ここから
RequestModel reqMdl = getRequestModel(req);
MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
String appRootPath = getAppRootPath();
Cir020ParamModel paramMdl = new Cir020ParamModel();
paramMdl.setParam(form);
Cir020Biz biz = new Cir020Biz();
try {
biz.doUpdate(
paramMdl, con, reqMdl,
paramMdl.getCirViewAccount(),
userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
paramMdl.setFormData(form);
//++++++++++++++++ここまで 追加
return __doDsp(map, form, req, res, con, true);
}
また、ソースを公開してあるため、カスタマイズもできるようになっています。
今回、回覧機能で、確認ボタンをクリックしなくても、既読になるように
カスタマイズしてみました。Cir020Action.javaの2か所を変更します。
private ActionForward __doInit(
途中省略
biz.setPrevNext(paramMdl, con,
paramMdl.getCirViewAccount(), GSConstCircular.MODE_JUSIN, userSid);
paramMdl.setFormData(form);
con.setAutoCommit(false);
//********************ここから
RequestModel reqMdl = getRequestModel(req);
MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
String appRootPath = getAppRootPath();
paramMdl.setParam(form);
try {
biz.doUpdate(
paramMdl, con, reqMdl,
paramMdl.getCirViewAccount(),
userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
paramMdl.setFormData(form);
//++++++++++++++++ここまで 追加
return __doDsp(map, form, req, res, con, true);
}
private ActionForward __doPrevNext(
途中省略
}
} finally {
con.setAutoCommit(false);
}
********************ここから
RequestModel reqMdl = getRequestModel(req);
MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
String appRootPath = getAppRootPath();
Cir020ParamModel paramMdl = new Cir020ParamModel();
paramMdl.setParam(form);
Cir020Biz biz = new Cir020Biz();
try {
biz.doUpdate(
paramMdl, con, reqMdl,
paramMdl.getCirViewAccount(),
userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
paramMdl.setFormData(form);
//++++++++++++++++ここまで 追加
return __doDsp(map, form, req, res, con, true);
}
2020年3月29日日曜日
エクセルで他のエクセルファイルを汎用的にリンクするには
・エクセルで他のファイルをリンクするとき問題になるのが、リンク先の場所が変更なった場合ですが、そういった場合でも、対処できるように、パスを設定シートのセルに保存しておくようにするといいと思います。
・さらに、汎用性高めるため、ひとつのリンクセルの式をそのままコピペすることができるようにしておくと便利です。
そこで、次のようなものを作成してみました。まず、設定シートに以下のようなパスをいれておきます。
設定!B2セルに E:\Mydocuments\[Book3.xlsx]Sheet1
つぎに、これを読み取るセルは次のようになります。
=INDIRECT("'"&INDIRECT("設定!$B$2")&"'!"&ADDRESS(ROW(),COLUMN()))
・さらに、汎用性高めるため、ひとつのリンクセルの式をそのままコピペすることができるようにしておくと便利です。
そこで、次のようなものを作成してみました。まず、設定シートに以下のようなパスをいれておきます。
設定!B2セルに E:\Mydocuments\[Book3.xlsx]Sheet1
=INDIRECT("'"&INDIRECT("設定!$B$2")&"'!"&ADDRESS(ROW(),COLUMN()))
このようにすることで、このセルを他の場所にコピペすることで、広い範囲のリンクを表示させることができます。
ただし、リンク先のエクセルファイルは開いている状態になっている必要があります。
なお、この式をつくりながらきづいたのですが、INDIRECTとADRESS、ROW,COLUMNは組み合わせて使うと便利な場面がいろいろありそうです。
たとえば
=INDIRECT("Sheet2!"&ADDRESS(ROW(),COLUMN()))
なども、式のコピペが簡単にできますが、単に別シートの位置のデータのリンクを生成するだけです。ROWやCOLUMNは数値なので、2倍して足したり引いたりなどして、リンク先の任意の場所のデータを1行おきや1列おきに参照したりも可能になります。
PDFをC#で作成 フォントについて
https://gammasoft.jp/blog/pdf-japanese-font-by-csharp/
を参考にさせていただきました。PDFsharpを使いました。
フォントが問題なるようですが、上記のプログラムを参考にさせていただきました。
明朝体を使いたかったので、IPAからフォントを入手して使ってみました。
C#でフォントのプロパティでビルドアクションを埋め込みソースにします。
あとレゾルバーのソースに何行か追加しますが、最初
private static readonly string IPAMJM_TTF = "<プロジェクト名>.fonts.ipamjm.ttf";
の<プロジェクト名>.fontsの部分をうっかり入れ忘れて、気づくまでしばらくかかってしまいました。ここ以外は、他の行を参考にすれば、変更方法は類推できると思います。
2020年3月20日金曜日
eclipseのgitについて
https://www.gwtcenter.com/egit-first-step
などを参考に、使い方を確認した。
ただ、なぜかうまくいかない。コミットもうまくいかない。
なぜだろうといろいろ考えながら、フォルダの中を直接のぞいてみると
あちこちに.gitフォルダや.gitignoreのファイルが散らばっている。いろいろ試しいるうちに増えてしまい、それがそのまま残っていたのが原因のようだった。
これらのファイルをすべて削除したら、うまく動作した。
などを参考に、使い方を確認した。
ただ、なぜかうまくいかない。コミットもうまくいかない。
なぜだろうといろいろ考えながら、フォルダの中を直接のぞいてみると
あちこちに.gitフォルダや.gitignoreのファイルが散らばっている。いろいろ試しいるうちに増えてしまい、それがそのまま残っていたのが原因のようだった。
これらのファイルをすべて削除したら、うまく動作した。
2020年3月7日土曜日
POIでセル結合ありのエクセルデータをHTMLに変換
エクセルデータをHTMLに変換する方法を考えてみた。
http://higehige0.blog.fc2.com/blog-entry-57.html
を参考にさせていただきました。
int cct,int yiがセルの列位置、行位置
List<CellRangeAddress> rangeLstは、上記リンクを参照
Javaも関数型プログラミングが使えるようになってきたので、早速使ってみました。
String LTdt= rangeLst.stream().filter(x->x.getFirstRow()==yi&&x.getFirstColumn()==cct).map(x->cct+","+yi+","+x.getLastColumn()+","+x.getLastRow()).findAny().orElse("");
String LTdt2= rangeLst.stream().filter(
x->x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()==yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()==cct
).map(x->"DEL").findAny().orElse("");
LTdt、LTdt2の文字があるかどうかで、3パターンに分類して処理するとOkでした。
分類部分は省略しますが、表示部分は以下のような感じです。
・cst="<td >"+cellValue+"</td>";
・String CrSt[]=LTdt.split(",");
String tdst="";
if(!CrSt[0].equals(CrSt[2])) {
tdst=" colspan=\""+ ( Integer.parseInt(CrSt[2])-Integer.parseInt(CrSt[0]) +1 )+"\""; }
if(!CrSt[1].equals(CrSt[3])) {
tdst=tdst+" rowspan=\""+ ( Integer.parseInt(CrSt[3])-Integer.parseInt(CrSt[1]) +1 )+"\""; }
cst="<td "+width+" align=left "+tdst+">"+cellValue+"</td>";
・cst="";
http://higehige0.blog.fc2.com/blog-entry-57.html
を参考にさせていただきました。
int cct,int yiがセルの列位置、行位置
List<CellRangeAddress> rangeLstは、上記リンクを参照
Javaも関数型プログラミングが使えるようになってきたので、早速使ってみました。
String LTdt= rangeLst.stream().filter(x->x.getFirstRow()==yi&&x.getFirstColumn()==cct).map(x->cct+","+yi+","+x.getLastColumn()+","+x.getLastRow()).findAny().orElse("");
String LTdt2= rangeLst.stream().filter(
x->x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()==yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()==cct
).map(x->"DEL").findAny().orElse("");
LTdt、LTdt2の文字があるかどうかで、3パターンに分類して処理するとOkでした。
分類部分は省略しますが、表示部分は以下のような感じです。
・cst="<td >"+cellValue+"</td>";
・String CrSt[]=LTdt.split(",");
String tdst="";
if(!CrSt[0].equals(CrSt[2])) {
tdst=" colspan=\""+ ( Integer.parseInt(CrSt[2])-Integer.parseInt(CrSt[0]) +1 )+"\""; }
if(!CrSt[1].equals(CrSt[3])) {
tdst=tdst+" rowspan=\""+ ( Integer.parseInt(CrSt[3])-Integer.parseInt(CrSt[1]) +1 )+"\""; }
cst="<td "+width+" align=left "+tdst+">"+cellValue+"</td>";
・cst="";
2020年3月5日木曜日
groupsessionをeclipseで動かす
groupsessionの最新版をeclipseのTomcatで動かしてみる。
マニュアルにしたがいJdk、Tomcat等のバージョンがうまく合わないと動かない。
・AdoptOpenJDK 11をインストール
ウインドウ>設定>Java>インストール済みのJREで検索で、インストール先のjdk-云々のフォルダを指定、適用
・Tomcatバージョンは8
ウインドウ>Tomcatでバージョンを8にして、Tomcatホームも8のフォルダに合わせる。
ウインドウ>Tomcat>JVM設定で JREをjdk-11.0云々に合わせる。
Tomcatをデバッグモードで起動しないにチェック
JVMパラメータへの追加で、Tomcatで使うメモリサイズも指定できる
登録:
投稿 (Atom)