2020年6月11日木曜日

グループセッションの回覧未読をポップアップ

グループセッションの回覧未読をポップアップするためのアプリを作成しました。
ソースはhttps://github.com/gh6141/NotifyGsにあります。

・配布はInstall.batを使い、共有フォルダから取り出すようにしています。それぞれの環境に合わせて、バッチファイルのIpアドレスの書き換えが必要です。
・NotifyGs.exeは、Windowsのタスクスケジューラで定期的に実行するようにしています。この実行ファイルが、回覧未読をチェックして、ポップアップします。
・NotifySet.exeは、ログインのためのデータを設定するものです。インストールするとき等に使用します。
・NotifyGs.exeもNotfySet.exeも、同一ソースからコンパイルしています。ソースを見るとわかりますが、以下のように、flgの値を変えることでいずれかの実行ファイルを作成できます。

 async private void Form1_Load(object sender, EventArgs e)
        {
            bool flg = true; ////flgの値を false:設定プログラム(NotifySet)か true:チェックプログラム(NotifyGs)か いずれかに指定します。
 以下省略

2020年6月10日水曜日

グループセッション 予定表プラグイン

グループセッションに、エクセルからの予定表を読み込むためのプラグインを作成しました。ソースは
https://github.com/gh6141/gsession2
に置いてあります。 

〇読み込むエクセルの形式について(2パターンに対応させてあります。)
いずれも、A列に日付、B列に曜日を入れてください。
1)月ごとのシートに分かれている場合
・メニューの「予定の設定」で、,,[行事],[○部],,,,のように、エクセルの項目名を入れてください。空欄だと表示されません。
・セルの結合は使わないでください。
・月のタブは4月、5月、、、3月の順に並んでいる必要があります。
2)各シートに複数の月が入っている場合
・メニューの「予定の設定」で、元号と元年度の西暦を「令和,2019」のように入力しておきます。
・セルの結合も可能です。
・エクセルの予定表の最初の行に、タイトルの一部に「令和2年度」のような文字が必要です。
・日付が重複している場合、後のシート、先頭行に「休業」の文字があるシートを優先的に表示します。
・日付の先頭は月/日の形式にしてください。

※なお、エクセルは2つまで使用可能なので、グループ毎に表示させる予定表を変えることも可能です。

〇回覧については、「確認」をクリックしなくても、一度閲覧すると「既読」に変わるようにカスタマイズしてあります。


2020年5月15日金曜日

GroupSession 回覧カスタマイズについて

グループセッションの回覧で、「確認」をクリックしなくても、閲覧しただけで、既読になるようにカスタマイズしてみました。

Cir020Action.java

2016年5月2日月曜日

レプリケーションに関わる各種トラブルQ&A

○レプリケーションに関わる各種トラブルQ&A
Q1:Mysqlのレプリケーションを行い、スレーブのPCを設定修正の必要が生じた場合、注意することは?
その都度スレーブ機能を停止する必要があることに、ご注意ください。具体的には、いったん、
stop slave;  とし
drop database skt;  としてから、新たにデータベースを作り直すことになります。

Q2:うまく同期されてないときどうするか?
>show slave status\G
でslave_IO_RunningがNoならば
>stop slave;
>reset slave;
ここで、⑤のCHANGE MASTER TO~を再度実行
>start slave;
を一度試してみてください。

Q3:Q2の方法でも、うまく動作しないときはどうするか?
my.ini(Windows)、my.cnf(Ubuntu)に次の設定をしてみてください。
[mysqld]
slave-skip-errors=1062,1050,1146,1136,1580
の行を追加したあと、Ubuntuならばservice mysql restartで再起動、WindowsならコントロールパネルのサービスからMysqlを再度起動してみます。

Q4:Access denied for user 'root'@'localhost' (using password: NO)というエラーが出る。
以下の方法はhttp://www.goofoo.jp/2011/11/1457を参照させていただきました。
service mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root
でmysqlのコマンドプロンプトに入れます。

mysql> use mysql;
念のためuserテーブルを全件削除してから、設定を実行。
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'password' with grant option;
実行結果を確認します。
mysql> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+
1 row in set (0.00 sec)
これでrootユーザへの権限設定ができましたので、MySQLを–skip-grant-tablesオプションなしで再起動(通常起動)します。
mysql> quit;
service mysql restartでPIDを確認後
[root ~]# kill -KILL [mysql のPID]
[root ~]# service mysql start
mysql を起動中:                                           [  OK  ]
最後に、遭遇したエラーが解消されていることを確認します。
[root ~]# mysql -u root -pパスワード
以上の操作でもうまく、mysqlのコマンドプロンプトが使えない場合
GUIで、Ubuntuのアップデートをしてみる。
これでも、だめな場合
mysqld_safe --skip-grant-tables &として
エラーを見ながら不足するパッケージをいてみる
mysql -u root -pで再度ログインしてみる。

Q5:OSのアップデートしたら、同期しなくなった。
まれに、Ubuntuのアップデートで、Mysqlのバージョンが変わったりすると、違うバージョン間のレプリケーションがうまくいかないことがあるようです。(WindowsのMysqlのバージョンが更新されないため、レプリケーションサーバにWindowsがあったりすると起こりえます。)
再度レプリケーションの修復設定をしたい場合以下のように行います。
①コマンドプロンプトを右クリックし管理者権限で開く
②エクスプローラーで、C:\ProgramFiles\mysql????\binのフォルダのパスを探し、コピーし、コマンドプロンプト内でcd C:\ProgramFiles\my….と貼りつける
※masterのPCでmysqlをアップグレードした場合、
 mysql_upgrade -u repl -pエンター  でアップグレードする。
③mysql -u repl -pエンター
④show slave status\Gエンター
⑤Last_errorの欄のエラー番号をひかえる
⑥C:\ProguramdataフォルダのMysqlのフォルダのmy.iniにスキップしたいエラー番号を追加します。
[mysqld]
slave-skip-errors=1062,1050,1146,1136,1580
最後の行の番号がこれまで、エラーが起きて追加してきた番号です。
ただし、必要な処理がスキップされてしまわないように、追加する番号は、状況をよく見て決めます。場合によっては、再度、マスターをロックして、ダンプデータのコピー、MASTER_LOG_FILEデータ、MASTER_LOG_POSデータの取得をやり直す必要も出てくると思います。

レプリケーションの設定の実際

○ 新たにスレーブのPCとして追加したいとき設定変更が必要なところ
・/var/lib/tomcat7/webapps/SGW/WEB-INF/web.xmlの一部を変更する必要があります。
<context-param>
<param-name>master_hostname</param-name>
<param-value>ここにマスターのPCのipアドレスを入力</param-value>
</context-param>
とします。
 マスターのMYSQLのあるホストのIPアドレスを指定することで、書き込みはすべていったんマスターのMyqlに保存されます。読み込みは、通常通りスレーブのPCからするので、変更不要です。
 つまり、スレーブでの書き込みは、スレーブのWebアプリで入力受付→マスターのMysqlに保存→スレーブへレプリケーション(転送)(スレーブのMysqlに保存)という流れになります。

・drop database skt;としてから、新たにsktのデータベースを作成し直します。
方法は以下の通りです。

 マスターのMySQL サーバーを「A」と呼ぶことにします。新たに追加する MySQL サーバーを「B」を Slave サーバーだとします。
※のついたところは、すでに、マスターの設定ができていれば不要です。

①Bサーバの構築
mysql > create database skt character set utf8;

※②Aサーバにレプリケーション用ユーザ作成とmy.cnfの設定
mysql > GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.1.0/255.255.255.0' IDENTIFIED BY 'password';
/etc/mysql/my.cnf 内に追加設定します# vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1001
ここまで設定したら
>service mysql restartで
Aサーバを再起動します。

③Bサーバにレプリケーション用サーバ作成とmy.cnfの設定
mysql > GRANT ALL PRIVILEGES ON *.* TO 'repl'@localhost IDENTIFIED BY 'password';
# pico /etc/mysql/my.cnf
※ただし、Windowsの場合はmy.iniというファイルに設定する。
[mysqld]
log-bin=mysql-bin
server-id=1002
1002という番号は、複数のスレーブがある場合それらと重複しないようにします。

Bサーバーを再起動します。

※④Aサーバのログ位置の確認とデータベースのデータ取り出し
ここで、AサーバのMysqlにロックがかかります。
mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
+----------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+-----------+--------------+------------------+
| mysql-bin.000031 | 285 | | |
+----------------------+-----------+--------------+------------------+
という表示の mysql-bin.000031 と 285 の2つの値をメモしておきます。
# mysqldump -u root -p skt --lock-all-tables > skt.sql
これで指定した skt データベースのダンプを skt.sql というファイルに取得することができます。
取得後は再度もう一つのターミナルに戻って以下のコマンドを実行し、ロックを解除します:
mysql > UNLOCK TABLES;

⑤Bサーバへのskt.sqlデータのコピー と データのBサーバへの展開、2つの値の設定
④で取得したスナップショットファイル(skt.sql)を、B サーバに転送します。
# mysql -u repl -p skt < skt.sql
として、Bサーバにデータを展開します。
mysql > CHANGE MASTER TO
MASTER_HOST='マスターのipアドレス',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000031',
MASTER_LOG_POS=285;
として、先ほどの2つの値等を設定します。

mysql > START SLAVE;
これで、レプリケーションがスタートします。

レプリケーションの下準備

○ 添付ファイルの扱いについて ~レプリケーションの設定の前に必要なこと~
グループウエアのメッセージや各種データは、Mysqlのデータベースで同期をとりますが、添付ファイルは、各サーバに置かず、マスターサーバへのリンクで対応させています。まず、その方法について説明します。
・スレーブがwindowsの場合
 c:\tenpuを\\マスターサーバのipアドレス\tenpuへのシンボリックリンクとして作成する。
(あらかじめ、マスターサーバのtenpuフォルダの共有設定をしておく必要がある)
管理者権限でコマンドプロンプトで
mklink /d c:\tenpu \\マスターサーバのipアドレス\tenpuとすればよい。
※また、画像挿入の機能を追加してからは、ユーザーから見えるパスを../tenpu/ではなく
http://マスターサーバのipアドレス:8080/tenpu/に変更する必要があります。(サーバがLinuxだけであれば、変更不要です。Windowsが1台でも含まれていたら、すべてのサーバの設定をこのように変更する必要があります。)
・スレーブがUbuntuの場合
/etc/init.d/winmountというスクリプトを置いて、起動時実行するようにする。
ファイルの中身
(sleep 30というコマンドについて:起動時30秒ぐらいしてからマウントしないと うまくマウントできないようです。)
#!/bin/sh
sleep 30
sudo mount -t cifs -o username="user",password="" //マスターサーバのipアドレス/tenpu /mnt/windows
この/etc/init.d/winmountを/etc/rc.localに記述しておくとよい
chmod +x /etc/init.d/winmountとしておく。
/mnt/windowsに/tenpuのシンボリックリンクをはる

ユーザーマニュアル

●ユーザーマニュアル
・画面内のラベル等にマウスをかざすと使い方が表示されるようにしてあり、なるべくマニュアルを頼らなくてもいいようにしています。

1 ログインについて
「http://サーバ名:8080/SGW/Login」にアクセスします。
 初期設定では、ユーザー名がadmin パスワードがpassになっています。
 クッキーの保存できるようになっていれば、2回目以後はhttp://サーバ名:8080/SGW/top.jsp
 にアクセスすることで自動的にログインしたことになります。

2 TOP画面について
(1)今日の予定、明日以降の予定は、エクセルの予定表を自動的に読み取るようになっています。
 予定表の形式は以下の通りです。添付されているyotei.xlsxを参考にしてみてください。
・各シート名が4月から3月そして最後が4というシートにまでとなっていること。「4」というシートは、3月のときだけ、翌月(次年度の4月)のデータを表示させたいとき使用
 するシートです。4月になったら、「4月」のほうを読み取るようになっています。
・A列が日付、B列が曜日、C列以降は、各項目名になっていること。
  表示したい項目は
メニューの設定→各種設定→ファイルの保存場所等の画面を開きます。
「予定表エクセルデータから抽出する項目」の欄に設定します。
   例。,,[会議等],[行事等],[当番],[備考],,,,,  (,)は余裕を持って少し多めに入力しておきます。
・予定表エクセルファイルの保存場所は、上記と同じ画面で「予定表エクセルファイルの保存場所およびファイル名」の欄に入力します。
   例。/kyoyu8/H26yotei.xlsx(Linuxの場合)  サーバ内のパスとファイル名で指定します。共有上に置くことも可能です。その場合は「\\\\共有名\\ファイル名」のようにして指定します。
・xls形式も、xlsx形式のいずれにも対応します。

(2) お知らせについて
・「新規」をクリックして、件名、内容を入力します。添付ファイルをつけたいときは、「参照」をクリックしてファイルを選択して下さい。大きなファイルはアップロードに時間がかかるので、「ファイルのアップロード終了!次の操作に移ってもだいじょうぶです」というメッセージが出るまで待って下さい。
・掲載開始日と掲載終了日も指定できます。
・添付ファイルの保存場所は、メニューの設定→各種設定→ファイルの保存場所等を開いて設定します。
  「添付ファイル保存場所(サーバからみた場所)」と「添付ファイル保存場所(ユーザーからみた場所)」の2カ所で設定する必要があります。
<例1 Linuxサーバ内におく場合> (詳細は、TOMCATの資料参照)
コンテキストの設定は<Context path="/tenpu"   docBase="/kyoyu/tenpu" ~ />
/kyoyu/tenpu/(サーバから見た場所)   ../tenpu/(userから見た場所)
 <例2 Windows共有サーバに置く場合>
コンテキストの設定は<Context path="/HomeICT" ~ docBase="\\192.168.1.1\HomeICT" />
\\\\サーバ名\\HomeICT\\(サーバから見た場所)../HomeICT/(userから見た場所)

・「編集」「削除」は、メッセージの作成者のみが可能です。
・「非表示設定」は、自分の所属しない部門への連絡を非表示にしたい場合に使います。あらかじめ、件名につけるキーワードを学校内で決めておき(例。「○○部> □□のお知らせ」であれば「○○部>」の部分)そのキーワードが含まれている場合は、そのメッセージを非表示にする機能です。自分が所属しない部門のキーワードをスペース文字で区切って複数設定できます。一度設定したキーワードは保存されます。(注:ただし、キーワードには#、*、?、_、!、%は使えません。)
・「検索」は期間を指定して、検索ボタンを押すことで、過去や先々のメッセージを確認できます。
また、テキスト欄に文字を入力すると、その文字を件名や内容に含むメッセージを検索します。過去に掲載した内容を調べたいときに活用できると思います。

(3)回覧について
・「新規登録」をクリックして、件名、内容を入力します。宛先の欄をクリックして、左欄で、全職員か、グループを選択します。それに応じて右欄に職員名が表示されるので、全員を選択したいときは、右上のチェックボックスをチェックします。個別にチェックをすることもできます。
・「編集」「削除」は、メッセージの作成者のみが可能です。
・添付ファイルについては、「お知らせ」と同様の方法でアップロードできます。
 なお、添付ファイルは、すでに同一名のファイルがアップロードされているときは、ファイル名の最後に(1)、(2)という番号が付加されます。

(4)月予定について
・右上の欄で、指定した月の予定を確認することもできます。
・エクセルにあるすべての項目が表示されます。

(5)授業変更について
・初期設定は、最新20件表示に設定されていますが、必要に応じて変更できます。
・「新規登録」をクリックして、日付、校時、クラス名、教科等、担当を入力します。
・「今日の予定」に、その日と次の日の授業変更があれば、「授業変更があります」と表示されます。その文字にマウスを重ねると、予定表が表示されます。

(6)リンクについて
・学校内で、共有したいリンクがあれば、このページに登録します。
・「新規登録」をクリックして、表示名とURLを入力します。URLは、インターネット上のものでも、ローカルネット上のものでもかまいません。
・添付ファイルのフォルダが共有サーバにある場合は、URLに「http://サーバ名:8080/tenpu/H26○○.pdf」のように入力することで、全体からアクセスすることも可能です。

(7)設定について
①ログインパスワードの変更
  自分がログインするときのパスワードを変更することができます。
②メールについて
・メールチェックの設定  自分のメールアカウント名、パスワード、pop3サーバ名を入力して保存しておくと、「今日の予定」の欄内に、メールが届いている旨のメッセージが表示され、その文字にマウスを重ねると、届いたメールの件名が表示されます。ただし、メールの本文は、メールソフトでないと受信できません。なお、別ソフト「NotifySGW」を使うことで、新着メールがあったことをタスクトレイに表示させることもできます。
・メール配信設定  この画面の、「配信を希望するメールアドレス」欄に入力したメールアドレスに、お知らせや回覧の内容を添付ファイルを含めて転送します。設定に際しては、セキュリティポリシーに従う必要があります。
「件名の連絡を希望するメールアドレス」欄に入力したメールアドレスには、お知らせや回覧の件名のみ転送します。

③職員の設定について
・ID一覧の画面では、「追加」をクリックし、氏名(全角可)、user(半角英数字のみ)を入力し、「送信」のクリックで職員が新規登録されます。
 編集したいときは、編集したい職員の行を選択して、編集が終わったら、Enterキーを押します。
・グループ登録の画面では、「追加」をクリックし、「グループ名」を入力し、メンバーをCtrlキーを押しながら、マウスで選択していきます。確定したら「送信」をクリックし、最後に、Enterキーを押します。 編集の際も、メンバーの選択のときは、Ctrlキーを押しながら行って下さい。そして最後にEnterキーを押します。

④お知らせ、回覧メッセージの一括削除について
・メッセージが増えてきて、ページの表示速度に影響が見られるようになったときは、古いメッセージを適宜一括削除できるようにしてあります。
・設定>各種設定>ファイルの保存場所等のページで
 <<<<メッセージの一括移動または削除>>>> という項目のところで行います。
いずれも、メッセージ番号を指定すると、その番号以下のメッセージを一括で処理します。メッセージ番号は、「お知らせ」や「回覧」の一覧にある「編集」または「削除」のボタンにマウスをかざすと、「○番目のメッセージです。」と表示されるのでそれを参考にしてください。番号を入力するときは先頭に半角#をつけてください。
・「お知らせ」について
 いったん、「お知らせデータの過去データ領域の移動」を選択し実行します。次に「過去データ削除」を選択し実行します。
・「回覧」について
 「回覧データの削除」を選択します。

⑤adminについて
・「お知らせ」や「回覧」の一覧に、「編集」「削除」が表示されるのは、自分が作成したメッセージのところのみですが、自分のユーザー名を一時的に「admin」に変更すると、すべてのメッセージに「編集」「削除」が表示されるようにしてあります。自分のユーザー名は、メニューの設定>職員>ID一覧で変更可能です。

⑥セキュリティについて
・校内でのメッセージ伝達を目的としているグループウエアです。機密性を要するデータを扱うことはできません。