2018年5月10日木曜日

リモートデスクトップができなくなった(WindowsUpdate)

事務スタッフからの連絡を受けて事務所へ急行。
接続してみると。。。確かに接続できない。


要求された関数はサポートされていません
原因はCredSSP 暗号化オラクルの修復である可能性があります

見たことないメッセージ。ってオラクルってなんで?と思いつつ、エラーメッセージでGoogle検索すると、リモートデスクトップの接続元(ゲストPC)と、接続先(ホストPC)で、暗号化に関する機能のレベルが不一致だと起きる模様。

後で聞いたら、昨日の夜にWindowsUpdateが動いていたのだと。
https://blogs.technet.microsoft.com/jpsecurity/2018/05/09/201805-security-updates/

対処としては、同じ暗号化機能のバージョンが双方にあればよい。つまり、WindowsUpdateで双方を最新化すればよい。


ホストPC側もWindowsUpdateは済んでいて再起動待ちだったので、再起動して処置完了しました。

2018年4月17日火曜日

YAMAHA RTXにてポート変換(NAT,NAPT)

利用機種:YAMAHA RTX1100

要件は以下となります

・外部から、SSHとWWWを通したい。
・SSHは通常のポートではなく、違うポートとし、RTX1100にて変換

前提

外部からの「全ポート」はクローズ状態とする
WWWサーバは192.168.10.100
SSHアクセスが必要なサーバは192.168.10.200、外部からのポートは12345とする
グローバルアドレスは持っている。DNS等々は別で管理のため今回は考慮除外

natの定義

nat descriptor masquerade static 1 1 192.168.10.100 tcp www
nat descriptor masquerade static 1 1 192.168.10.200 tcp 12345=22

ip filterの定義

ip filter 21001 pass * 192.168.10.100 tcpflag=0x0002/0x0017 * www
ip filter 21002 pass * 192.168.10.200 tcp * 22

まとめ

外部へのアクセスができる状態で運用できているのであればそれに対して外部からのポートを開ける設定と、natの設定をすれば実現可能
natが働いてからipfilterが働く

設定を開けたら外部サイトからのアクセスチェックをお忘れなく

ポート開放テスト
https://www.cman.jp/network/support/port.html

ポート全チェックテスト (ShieldsUP!)
https://www.grc.com/x/ne.dll?bh0bkyd2

2018年4月4日水曜日

TERATERMマクロでYAMAHA RTXのconfigをまとめて取得

概略

タイトルがマニアックですが、要は

1)ネットワーク内に管理したいルーターがたくさんある
2)各ルーターのConfigを取得してテキストへ保管したい
3)同じ処理を繰り返すので、マクロ(TTPMACRO)など活用で何とかしたい

という要件です。

管理端末から各ルーターへの疎通は当然できる状態で、
1.ログイン
2.ログ取得開始
3.CONFIGを表示する命令を実施
4.ログ取得終了
5.ログアウト

ができればOKとします。

マクロファイルの作り方

teratermインストールディレクトリに拡張子が.ttlのサンプルファイルがいくつかありますがそれを参考としました。

;マクロ例
;ホストのIPを指定。ルーターへはTelnet接続
HOST = '192.168.107.254'
ADDR = ''
LOGNAME = ''
;ホスト名を生成(ADDR)
strconcat ADDR HOST
strconcat ADDR ':23 /nossh /T=1'
;ログファイル名を生成
strconcat LOGNAME HOST
strconcat LOGNAME '.log'
connect ADDR
wait   'Password:'
sendln 'パスワードを記載'
wait   '>'
sendln 'administrator'
wait   'Password:'
sendln 'パスワードを記載'
logopen logname 0 0
sendln 'show config'
wait   '#'
logclose
sendln 'exit'
wait   '>'
sendln 'exit'
あとはこれを.ttlファイルとしてttpmacro.exeで読み込ませるだけです

ホストもたくさんあるのだが

上記を改良していきます。今回は上部の「IPアドレス」だけを変えて、あとは同じ動作をするようにします。
アプローチとして
1)上位にバッチファイルをかませてバッチファイルで書き換えていく
2)TERATERMのマクロでホスト名ファイルを読込んで処理する

の1)が始めの想定でしたが、2)ができることが分かったので2)で実装します。

HOSTFILE='IPLIST.TXT'
fileopen fh HOSTFILE 0
:readloop
filereadln fh buf
if result goto loop_exit
HOST = ''
strconcat HOST buf
if result<>1 CALL MAIN_OPERATION
goto readloop
:loop_exit
fileclose fh
end

:MAIN_OPERATION
;HOST = '192.168.107.254' ループ側で指定される
ADDR = ''
LOGNAME = ''
;ホスト名を生成(ADDR)
strconcat ADDR HOST
strconcat ADDR ':23 /nossh /T=1'
;ログファイル名を生成
strconcat LOGNAME HOST
strconcat LOGNAME '.log'
connect ADDR
wait 'Password:'
sendln 'パスワードを指定'
wait '>'
sendln 'administrator'
wait 'Password:'
sendln 'パスワードを指定'
logopen logname 0 0
sendln 'show config'
wait '#'
;早すぎてログが出力されないケースがあるのでpauseを入れる
pause 1
logclose
sendln 'exit'
wait '>'
;コンソールを閉じるわけではないのでclosettへ変更
closett
return
サーバーに接続できない場合のケースや実行日時を記録するなど、まだまだ追加機能は必要そうですが一旦はこれで完了とします

2018年3月26日月曜日

【svn】どのリビジョンがインストールされているかを確認する

【要旨】

・運用中アプリはSVNにリリースモジュールがあり、開発環境からSVNへアップした後に運用環境にてSVN UPすることでモジュールを最新化している。
・今回、一部の運用環境で最新プログラムが適用されていない可能性があったため、サーバの状況を調査し最新化を行った。

【手順をひとことで】

サーバにてsvnversionコマンドでリビジョン確認し対象のリビジョンの内容確認して対応

【手順】

1)運用環境の対象ディレクトリへ移動し、「svnversion」コマンドを実行 →リビジョンが表示される
2)開発環境の「tortoisesvn」から、「リポジトリブラウザ」→右上の「リビジョン」をクリックし、当該リビジョン番号を入力
3)その時の状態が表示されるので、内容を確認

【まとめ】

自前でバージョン管理しなくてもSVNのリビジョンだけで状況把握はできる

2018年2月26日月曜日

2枚目以降でヘッダのレイアウトを変える場合のコツ(ireports)

たまにしかやらないのと、サンプルが行方不明になるので備忘録

【要件】

・ヘッダがあって、明細繰り返しのタイプの帳票
・定型フォーマットは決まっている。但し、2枚目以降はヘッダの一部情報が不要
 →よくある「請求書の2枚目に1枚目の〇〇の情報は要らない」

【対応のコツ】

・ヘッダは一般的にはGroupで定義されているはずなので、
 ・Group を別で定義する(インスタンスが別。内容は同じでもOK)
 ・Reprint Header のプロパティを、隠したい項目の部分のGroupHeaderのみOffとする
・一覧表のヘッダは出したい。という要件もあるはずなので、その場合には
 さらに別のGroupを作成(内容は同じ)し、それはReprintHeaderをOn

【ざっくり言うと】

グループヘッダを分割して、出したい部分、出したくない部分に分ける
分けて、それぞれのプロパティ制御でコントロール

【その他メモ】

グループヘッダの分割は、ただ単にグループヘッダを増やすではNGで、「グループ」を追加、グループヘッダを追加とする。(Add Report Group)

 2018/11追記
Print When Expressionにて以下記載をすれば柔軟に制御できる
($V{PAGE_NUMBER}.toString()).equals("1") ? Boolean.TRUE : Boolean.FALSE

2017年11月13日月曜日

MySQLのチューニング(JOIN編)

おそらくオプティマイザの挙動が安定しないことが起因で、今まで問題なく動作していたクエリがものすごく遅くなるという事象に遭遇しました。
結果、「ばらし」て組み直すことで解消したのですがその一部始終で技術要素を色々調べられたのでメモしておきます。

やったことの結果要約

・5つあるJOIN句のなかにサブクエリが2つあったので、先行してTemporaryTableへ吐き出すようにした
 →合わせてその時にIndexも貼る
・ベースとして結合したい表をFROMの後へ置き、そのあとは結合しやすい順で並べた。
 →特に意味はないという記事もあったが念のため。元は「ほしい情報」をベースで置いていた。
・結合の条件のなかで、左に今まで出てきている項目、右が対象項目という順とした。
 →オプティマイザに効果があるとの情報
・結果、2分かかっても終わらなかったものが、6秒。これでOKとしました。

実施1)Temporary Tableを使い処理を分割

元々1クエリだったものを、分割して、事前にTemporaryを作成、そのあとにクエリでTemporaryから読むという分割をしました。

【Temporary Table作成の構文】
 CREATE TEMPORARY TABLE temptablename
(INDEX idx_temporary (a,b)) ENGINE=MEMORY
SELECT a,b,c,d,e from table1
今回はSSD環境のDBだったのでMyISAMでも良いのですが、メモリへの展開と指定しました。tmp_table_sizeの設定に依存しますが、今回は許容範囲内なので問題なし。
構文にはフィールド名、型名を指定する方法もありますが、今回はベース表のフィールド名、型をそのまま引き継ぐ形で作ればよく、省略して記載しています。

実施2)ベースの表を変える

対象レコードが少ない表をベース表とし、INNER JOINで結合していきました。
これは今まであまり気にしていませんでしたが、オプティマイザの仕組みを考えると理にかなっている方法だと思います。

実施3)結合の構文の左右を意識する

例文)
select tbl1.a , tbl2.cc from tbl1 inner join tbl2 on tbl1.a = tbl2.a
通常無意識的にメイン表を左、結合対象を右にしていましたが、今回は一部の結合条件で左右が逆でした。

ダメな例文)
select tbl1.a , tbl2.cc from tbl1 inner join tbl2 on tbl2.a = tbl1.a
これもオプティマイザの解釈を考慮すれば当然なのでしょうが、結合したい基本を左に置くことを意識し、全体を調整しました。
→結合表が多くなってきた時に無意識に間違いそうな気がします。

実施4)Temporary Tableにインデックス

これは「ひょっとしたら」で追加したのですが、効果が劇的でした。
Temporary(今回は2つ)はそれぞれUNIQUEなので結合項目としてはすべて使ってます。※先の例で言うとa,b,c,d,eのすべてが結合条件。
それにもかかわらず、aとb(抽出元表:table1のPrimary)にインデックスを貼ったことで
使ってくれて、速度も向上したのです。
知識ある人からしたら「当然だよ」かもしれませんが結果には驚きました。

その他)STRAIGHT_JOIN

結局試していないのですが、[STRAIGHT_JOIN]キーワードを使うと、JOINの順番を強制することができるようです。

2017年10月8日日曜日

JasperReport (IReport)でHH:mm形式の時間を合計する

技術Tipsです

〇要件

グループ計で時間を合計したい。
 ex) 勤務時間のような日別の時間で、グループ計を取る

〇前提

各レコードにはHH:mm形式のデータがある。 ex) 12:30
 定義名はF_HHMMとする

〇実装 (IReportのバージョンは4.0.2)

1)variablesで分に置き換えて保持しておく。
Name:V_HHMM
 Variable Class : java.lang.Integer
   Calculation : Sum
 Reset type:Group
 Reset group:対象のグループ名
 Increment type:none
 Variable Expression:
$F{F_HHMM}.equals(null) ? 0 : new Double(new Double(new Double($F{F_HHMM}.substring(0,2)) * 60) + new Double($F{F_HHMM}.substring(3,5)))

2)レコード出力対象のフィールドにてFieldExpressionを定義

$F{V_HHMM}.equals(null)?null:(((new Integer($F{V_HHMM}) / 60).toString().replace('.',':').split(':')[0])  + ':' + ((new Integer($F{V_HHMM}) % 60).toString().length()==1?('0'+(new Integer($F{V_HHMM}) % 60)):(new Integer($F{V_HHMM}) % 60)))

2017年10月5日木曜日

Illustrator CS2 でIMEが利用できない (事象のみ。未解決)

最近は社内SEもしております。

Illustrator CS2を使って名刺など作りたいという要望があり、個人パソコンへ
インストールするのも後で面倒そうなので、新規にWindows7環境を構築して
Illustrator CS2をインストールしたところ、IMEが使えない。と。。。

現象の詳細

・Illustrator CS2を起動して、テキストエリアなどで半角/全角キーを押しても入力モードが切り替わらない
・アプリを終了 → IMEのバーをタスクバーへ入れてアプリ起動 するとアプリの起動時にIMEのバーが消える (この時点でおかしいよね。。。と)
・他のアプリを起動して利用してみると、IMEのバーは表示される。
・いわゆる「再起動すれば直る」を期待したが、それでもNG

まずは調べてみた

1)Windows7ではCS2に対応していない
2)IME2010をインストールすると直るかもね。
3)キーボードショートカットのバッティングが原因では?

試してみた

1)互換性モードでアプリケーションを起動 → 解消せず
2)IME2010をインストール → 解消せず
3)「キーボードまたは入力方法の変更」から「キーボードの変更」→「詳細なキー設定」→「入力言語を切り替える」を「左shift+Alt」から「なし」へ変更 →解消せず

想定外の挙動

Illustratorが標準で持つショートカットキーも、一部使えない(ズームなど)
結局のところ、未サポート -> キーボード操作の一部に不良 という現象は綺麗に解決できそうにありませんでした。

結果

CS2の利用はあきらめました。
Illustrator CS3があったのでCS2をアンインストール後、CS3をインストール。無事に動くことを確認できました。

2017年1月19日木曜日

VBAマクロを利用した繰り返し処理

業務でパソコンを利用している以上、エクセルは日常的に使います。

Excelでの印刷関連の設定は複数シートまとめて行う事ができないので
マクロで記録して、ちょこっとVBAを書いて連続処理することで手抜きを実現しています。

手順の概略

1.開発タブ→マクロの記録 で、行いたい印刷設定を行う。
 →開発タブが出ていない場合にはググって調べてください。設定で出せます。
2.以下のテンプレコードをVBAに貼り付ける。
3.テンプレコードを実行する

テンプレートコード(そのまま貼り付けて1行だけ修正)


Public Sub ExecuteAllSheets()
    
    Dim ws As Worksheet
    
    '高速化対応:再描画、都度計算を無効とする
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    'エラーハンドリングの開始
    On Error GoTo ErrorHandler
    
    '全シートに対して繰り返し処理を行う
    For Each ws In ThisWorkbook.Worksheets
        ws.Select
        Call Macro1   '(ここを変更)ここで繰り返し行いたい処理を指定
    Next
    
    'エラーハンドリングをやめてプログラム終了処理へ
    On Error GoTo 0
    GoTo Program_Exit

ErrorHandler:
    MsgBox "エラーが発生しました" & vbCrLf & _
            "No." & Err.Number & vbCrLf & _
            "Message : " & Err.Description, vbExclamation, ""

Program_Exit:

    '高速化対応:解除
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationManual

End Sub

【補足】

・プリンタ関連の処理を記憶すると、自働で作成されたコード中に以下が記録されるケースがあります。
 →ActiveWindow.SelectedSheets.PrintPreview
 これが記録されていると、処理が連続で行われません。(プレビューで止まる)
・余白調整、ヘッダフッタの一括設定等々、画面でできることはすべて処理できます。
 →どこで何ができるかは自動作成されたコードを見て判断してください。

2016年11月17日木曜日

Xperia XZを購入。初期レビューなど。

自分の持っている機種はXperiaZ3Compact
ただ、これはZ1fを購入した後、水没で携帯保証サービスを頼った際に送られてきた代替機。

というわけで、3年ぶりに機種変更。


【購入のきっかけ】

Z3Compactは充電のためのスタンドがあるのですが、それを使わない場合、防水キャップを外して充電ケーブルを差し込む必要があります。
その防水キャップの劣化。(いったん交換しているので二度目の劣化でした)
XZは防水でもキャップなしで充電可ということで(当然他の要素もあるのですが)購入を決めました。

【Z3Compactとの違い】

スペック云々はすぐにわかる話なので、そうではない部分の違いをいくつか。

1)充電ケーブルの互換はありません。
  既存のケーブルを利用するためのアダプタを購入するか、別途用意が必要です。
  私の場合、docomoでアダプタを1つ(500円程度)、その後、amazonで2個1000程度のものをいくつか購入しました。

2)MHL出力ができません。
  私の場合これが案外大きい話題でした。
  自家用車で移動する際にMHL接続で映像をナビに映すことが多かったのです。
  ケーブルを挿してもうんともすんとも言わず、公式の情報を見てもわからず、
  同時に購入したdtabCompactも同様MHL出力できなかったので諦めました。

3)指紋認証
  仕事用としてiphoneも持っており、そっちは当然ながら指紋認証で使っているので
  Android端末でもそれができるのは大きかったです。

【他の個人的な感想をいくつか】

ホームアプリが〇
今まで(というかAndroid2.x系の頃から)は、AdwLauncherというホームアプリを使っていて
それに慣れすぎていたので、最近のホームアプリをきちんと使う機会がありませんでした。
アプリ一覧から検索ができるのは〇

時計ウィジェットが〇
右上に時間出てるのでわざわざ・・・。と思ったのですが、ワンクリックでアラームが出せるので
ホームに時計アイコンを置いておく必要がなくなりました。
ウィジェットなら、曜日とかも出るのでプラスアルファとしての価値も出てると思います。


【まとめ】

昨今のスマホはいっときのパソコンのように、性能が頭うちになってきている気もしますが、
それでも新しい機種は性能、操作性ともに上がってくれているのでうれしい限りです。
ガジェット類も諸々整理が必要そうなので、関連記事をまとめていきたいと思います。