投稿

[Java] JUnit を 実行可能jar ファイルに含めない方法

イメージ
 Javaアプリケーションで、JUnitを使ってテストケースを作っている場合、プロジェクトにテストモジュールも組み込まれているかと思います。  ネットの情報を見ながら色々やってみましたが、うまくいかず試行錯誤してたらうまくできたので、忘れないように備忘録を。 環境 macOS Big Sur (11.5) Eclipse 2021-06 (4.20.0) JavaSE-9 JUnit 5 実現すること EclipseでJavaプロジェクトをエクスポートして実行可能jarファイルを作成したときに、テストモジュールとJUnitのライブラリを含めないようにします。 方法 1. ソースフォルダを追加 これは、ほとんどのプロジェクトで実施済みかもしれませんが、ソースフォルダを追加してテストモジュールは、こちらに固めます。 <Project> - src                     ソースファイル - test/src            テストモジュールのソースファイル 2. ビルドパスを修正 2.1 ソース ソースフォルダ test/src の「テスト・ソースを含む」を「はい」に変更します。 「ソース・フォルダーごとに出力フォルダーの指定を可能にする」にチェックを入れて、出力フォルダのパスを変更しておきます。 2.2 ライブラリー JUnitをクラスパスに追加(モジュールパスに追加している場合は移動させる)します。 JUnitの設定で、「テスト・ソースに対してのみ表示」を「はい」に変更します。 3. 実行/デバック設定 3.1 起動構成プロパティの依存関係 「テストコードを除外する」にチェックを入れます。 4. エクスポート あとは、実行可能jarファイルでエクスポートします。 出力したjarファイルを展開して内容を確認したところ、JUnitとテストモジュールは含まれていません。 最後に いろいろ試して実現できたわけですが、エクスポートには起動構成プロパティの設定が効いているような気がします。 Java初心者なので詳しいことは分かりませんが・・・(汗

[MacOSX] キーボードだけでBluetoothを有効にする方法

イメージ
先日、OSのアップデートを行った際、変なビープ音がなったので、何事かと思いましたが、再起動もできてたので大丈夫だろうと思ってましたが。。。 今日、起動したらキーボードもマウスも繋がらない。。。 キーボード、マウスの電源を入れ直しても、OSを何度再起動しても繋がらない。 たまたまキーボードだけUSBキーボードを持ってたので、キーボードだけ繋いでログインをしてみたところ、、、 Bluetoothがオフになってる!? そりゃ繋がりませんよね。 有線マウスを持ってないため、キーボードだけでBluetoothを有効にする方法を探しましたが、OSが古いせいか、書かれている方法ではうまくできなかったので、私が実施した解決方法を記載します。 環境 iMac (MacOS 10.12) 参考にしたHP [Mac] キーボード操作だけでBluetoothをオンにする方法 うまくできなかった内容 1. Tabキーでフォーカスが移らない。 Bluetoothの設定変更画面まで開く事はできたけど、「Bluetoothを入にする」にカーソルを動かすことができなかった。 Tabキーを押しても検索枠から移動せず、 コントロール+Tabで、デバイス一覧と検索枠が切り替わるが、左のボタンにはフォーカスが移らない。 MacOS 10.14だと、Tabキーで左のボタンにもフォーカスが移るので、OSバージョンの問題かと思います。。。 2. SpotlightもSiriも無効にしている 型の古いiMacでパフォーマンスを上げるために、普段使わない機能を無効にしていたので、Webに書かれていた Siri を使う方法も出来なかった。。。 3. セキュリティ対策で、リモート接続の類は全て無効にしている セカンドマシンのMacBookからの遠隔操作も出来ず。。。 方向性 Siriに頼るのが確実そうなので、なんとかして Siri を有効にする方法で進める。 解決手順 Siri を有効にする 1. ⌘ + Tabキーで Finder をアクティブにする 2. Shift + ⌘ + A で、アプリケーションフォルダを開く 3. Tabキーでアプリ

[Swift] Music Sequenceで再生しているMIDIデータの情報を表示

Music Sequenceを使ってMIDIデータを再生している時に、なっている音を鍵盤で表示したい! ということで、色々調べてたのですが、多いのは、MIDIのInputPortまたはOutputPortにCallbackを仕込んで通知する方法でしたが、この方法だと、バックグランドモードを有効化しないと動作してくれない。 試行錯誤の結果、バックグランドモードを無効にしたまま、MIDIの再生データを表示することが出来たのでご紹介。 環境 Xcode 10.2 ターゲットOS iOS 9.0 コールバック用の関数定義 クラスの関数として実装 func musicSeqenceCallback(sequence: MusicSequence, track: MusicTrack, eventTime: MusicTimeStamp, data: UnsafePointer&ltmusiceventuserdata&gt, startSliceBeat: MusicTimeStamp, endSliceBeat: MusicTimeStamp) -> Void { // 処理したい内容 let dat = data.pointee.data let idx = Int(eventTime) print(String(format: "%d - %d",dat, idx)) } コールバック関数の割り当て クラスのinit()内で実装 func seqCallback(inClientData: UnsafeMutableRawPointer?, inSequence: MusicSequence, in

[Other] QNAPのセキュリティ設定について

イメージ
つい最近、見慣れないIPアドレスから管理コンソールへのログインが試されたようで、IPブロックリストに上がってました。 3秒間隔でリトライされてたようなので、ハッキングを受けてた可能性があります。 自宅外からNASにアクセスすることはないため、外出時はネットワークを切ってるのですが、自宅にいるときはネットワークが繋がってるので、真面目に対策を行うきっかけになりました。 セキュリティーカウンセラーの導入 QNAPのセキュリティ状況を診断してくれるツールがあるようで、とりあえず導入してみました。 ポリシーは、どれがいいのか分からなかったので、Intermediateで設定してみました。 セキュリティチェックをした結果、「高リスク」って出るんですよね。 ネットワークアクセス保護 何が高リスクになっているかというと、ネットワークのアクセス保護の設定のようです。 ネットワークのアクセス保護の設定はというとですね、無効になっててさわれないんですよね。 今のネットワーク設定はというと、自宅外から使うことはないので、 自宅のセグメントを許可リストに追加して、その他をブロックしてます。 アクセス元が限定的な場合は、拒否リストを作るよりも、許可リスト作る方が確実な気がしてます。 許可リストを作ると、ネットワーク保護が無効になり設定ができない。 拒否リストを作ると、ネットワーク保護が有効になるが拒否リストから漏れると、攻撃を受ける可能性が出てくる。 セキュリティという意味では、許可リストが最強な気がするのですが、 この設定では「高リスク」と判定される。 なんか納得ができない結果です。 アプリケーションのインストール設定 「QNAPストア以外のアプリをインストールできなくする」 これは、非公認アプリのインストールをブロックする設定ないので、良いと思ったのですが、これにも問題がありましてね。。。 このアプリは、マルウェアを検知して、隔離してくれるそうなのですが、 「QNAPストアからインストールされたものではない」と識別されます。 アプリの説明を見ると、作成者は、「QNAP Systems, Inc.」となってるのですけどね。

[Other] QNAP TS231+ のHDDを交換

イメージ
先日、NASのHDDから異常が検知されました。 HDD2本でRAID1を組んでたので、データが消えたわけではないのですが、このまま放置するわけにも行かないので、同じモデルのHDDを調達して入れ替えを行いました。 HDD準備 Western Digital Red 4TB まさか、79日程度で交換することになるとは思いませんでした。 HDDの取り外し 障害が出ているディスクを選んで、 「アクション>取り外し」 で、RAIDグループから取り外します。 取り外すと、「ディスクが存在しません」となります。 これで、NASからHDDを取り出します。 新しいHDDを取り付けて、はめ込むと安心の緑ランプが転送しました。 再構築 HDDを取り付けでしばらくすると、HDDの取り付けを自動で認識して、再構築(リビルド)が始まります。 あとは、とりあえず待つだけです。 自動で色々やってくれるのは便利ですねー。 今回、壊れたHDDは、WD Red ですが、このモデルはNAS用で24時間365日稼働を想定したものらしいのです。 故障率は低いそうですが、運が悪かったのか、使い方が悪かったのか。。。 基本的に日中は家にいないので、電源は落としてたりします。 稼働しているのは週末だけ の使い方が悪かったのかもしれないですね。 今度は、24時間電源を付けっ放しにしてみようと思います。

[Other] T-POINTで購入したミックスナッツ

イメージ
期限付きのT-POINTが期限切れ間近で、失効するのも勿体無いので、ポイントで買えるものを探してみました。 aemotion - ミックスナッツ : 500g 普段、近所のお店で購入しているミックスナッツとは違って、 この商品には、【黒大豆】と【レーズン】が入ってます。 黒大豆の色が結構目立って、見た目には暗い色合いになりますが、黒大豆が香ばしくて美味しい。 ナッツの中にレーズンが混ざることで、良いアクセントになってます。 今回は、お試しで購入してみましたが、黒大豆が私的には当たりです。 他のミックスナッツでは、みたことない気がします。 また、ポイントが溜まったら購入しようと思います。 あと、気になる点としては、 今回、T-POINTで全額支払いしたのですが、 お店にお金がどう流れているのか? です。 カード決済だと、 1. カード会社からお店 2. 購入者からカード会社 で、お金は流れますが、ポイントの場合だとお金が動いてないので、 会計仕訳とかどうなるのでしょうかね〜。

[Swift] MIDIデータの再生

先日のApp審査の却下を受けて、UIBackgroundModes Keyをオフにして再生する方法を調査。 結論としては、AudioKitのフレームワークは使用せず、Appleが提供しているフレームワークで実現することにしました。 シーケンサー MIDIデータを再生するために、下記のオブジェクト利用。 var musicSequence : MusicSequence? var musicPlayer : MusicPlayer? var musicTrack : MusicTrack? これだけだと、サウンドフォントを使った再生がうまくできなかったので、AUGraphも使いました。 var processGraph : AUGraph? var chordUnit : AudioUnit? var ioUnit : AudioUnit? var chordNode = AUNode() var ioNode = AUNode() まずは、初期化。 init() { NewAUGraph(&processGraph) NewMusicPlayer(&musicPlayer) NewMusicSequence(&musicSequence) MusicSequenceNewTrack(musicSequence!, &musicTrack) MusicSequenceSetAUGraph(musicSequence!, processGraph) MusicPlayerSetSequence(musicPlayer!, musicSequence) setup() loadSF2Preset(unit: chordUnit!) } private func setup() { var cd:AudioComponentDescription = AudioComponentDescri