投稿

JavaFXアプリケーションをMavenプロジェクトで作り直す

イメージ
前回作成したパスワード管理ツールをMavenプロジェクトで作り直し、jarファイルを作成するところまでを行います。 なお、今回からスペックの関係上OSがUbuntuになってますが、基本的な手順は変わらないはずです。 環境 Ubuntu 20.04 vscode JDK11 プロジェクト作成 mvn archetype:generate コマンドでプロジェクトを作成します。 入力ウィザードで以下を求められるので適当に入力します。 groupId artifactId version package mvn archetype:generate [INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] >>> maven-archetype-plugin:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>> (省略) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1854: Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 7: 1.3 8: 1.4 Choose a number: 8: Define value for property

Windowsで動くパスワード管理ツールをJavaFXで作る

イメージ
Windows上のGUIで動作するパスワード管理ツールを作成しました。 まずは必要最低限の機能を持たせました。 パスワード名称の一覧表示 絞り込み機能 クリップボードへコピー 経緯について コロナ過に入ってからずっとリモートワークが続き、Slack等で画面を共有しながら作業することがよくあります。 その際にパスワードをメモからコピーするときにさらけ出してしまうのを防ぎたかったからです。 2画面以上のマルチディスプレイであれば共有していないほうのディスプレイでコピーすれば済むんですが、1画面のためそうはいかず... またWindowsのアプリケーションでも探してみましたが、有償であったり会員登録が必要であったりと、これといったものが無かったのでJavaFxの勉強がてらに作ってみました。 環境 Windows10 vscode JDK11 プロジェクト作成 vscodeを開き「Ctrl+Shift+P」で「Java:Create Java Project...」を選択 Project type に No build tools を選択 Project を作成する親フォルダを選択 ここでは C:¥workspace を選択 Project名を入力 以下のような構成でプロジェクトが作成される 実行は右上の > ボタン Terminalに「Hello, World!」が出力されればひとまずOK ライブラリ JavaFX SDKダウンロード JavaでGUIを実装するためのフレームワークです。 Windows版のSDKをダウンロードします。 https://gluonhq.com/products/javafx/ ダウンロード後解凍し、任意のディレクトリに配置します。 ここでは C:\workspace\password-manager-test\lib\javafx へ配置しました。 JavaFX SDKインポート vscodeのエクスプローラーから、Java Projectを開く

[資格] LinuC Level2

イメージ
もともとLPIC Level1の資格を取得済みでしたが、有意性の期限が迫っていたためLevel2で何とか更新することができました。 Level1を取得したころは業務でもよく使用していたため比較的取得しやすい資格と思っていました。しかし現在はあまり業務で使用することもなくなったので結構しっかりと学習して臨みました。 ※LPI Japanの運営する資格は5年で優位性の期限が切られていて、更新を求められます。 資格が失効するわけではありませんが、最新技術に対応したスキルを保持していることの証明にはならないので注意が必要です。 LinuC Level2の概要について 仮想環境を含むLinuxのシステム設計、ネットワーク構築において、アーキテクチャに基づいた設計、導入、保守、問題解決が出来るエンジニアとしての知識が求められる資格です。 なお、取得にはLevel1の認定(ACTIVE)が必須です。非アクティブのLevel1認定をLevel2で更新することはできません。 使用した参考書について LinuC レベル2 スピードマスター問題集 LPI-Japan 認定教材だけあって試験内容をほぼカバーできている感じでした。 正直この問題集の内容を2,3週解いて、9割ぐらいの正解率であれば本試験も合格できると思います。 どうしても理解が追い付かない場合などは、WSLで簡単に仮想環境を作れるので、コマンドを実行しながら確認できれば理解も深まると思います。 学習について 実際の学習については、201・202で一月づつ程度で十分です。 方法としては上記の問題集を解き、間違った部分をノートに書いて覚えるという方法で全体で9割以上解けるまで繰り返しました。 実際の試験について 実際の試験結果はというと、800点満点で201が546点、202が600点という結果でした。 この点数だけ聞くとちょっと微妙に感じるかもしれませんが、LinuC Level2の合格ラインは480点と低めに設定されているので一応合格になります。 セクション毎に正解率が出るのですが、正解率の低いセクションを重点的に復習するなどして理解を深めていくことができます。 私の場合は201の以下の二つが正解率50%台と大きく落としていました。 システムの起動とLinuxカーネル

Google Playでアプリケーションの公開申請がRejectされた場合の対応

イメージ
先日Google Playでアプリケーションの公開のための申請を行ったところ、リジェクトされてしまったので、その際に対応した内容です。 リジェクトされる理由はいくつかあると思いますが、今回のケースは「 Reviewを行うためには認証情報が必要 」と行った内容でした。 リジェクト内容 結果はメールで以下のような内容で返ってきました。 App status: Rejected Your app has been rejected and wasn't published due to this policy issue. If you submitted an update, the previous version of your app is still available on Google Play. Need login credentials for app review In order for us to review your app for compliance with Developer Program Policies, we will need you to provide valid login credentials for your app. If users need credentials to access your app, please provide all appropriate credentials via Play Console. 最近ではGoogle Playでもアプリケーションの新規・更新時にレビューが行われ、ポリシーに準拠しているかどうかが確認されます。しかしアプリケーションが認証を伴うものの場合、確認用(やデモ用)の認証情報を一緒に申請しなくてはなりません。 なので確認用の認証情報を一緒に申請すればこの問題は解決します。 確認用の認証情報の設定 アプリのアクセス権を設定 ポリシー > アプリのコンテンツ > アプリのアクセス権 > 管理 を開きます。 デフォルトで「すべての機能が特別なアクセス権を必要とすることなく利用できる」にチェックが入っていますので、「すべてまたは一部の機能が制限される」をチェックします。 「+新しい手順の追加」をクリッ

【Android】ListViewで最終行までスクロールしたことを判定する

ListViewにデータの一部を表示し、最終行までスクロールした際に追加で読み込み処理を入れたいときに判定するためのロジックです。 以前作成した ListViewアプリケーション がありますので、これを使って最終行までスクロールしたときに処理を入れてみたいと思います。 https://www.s-watanabe.work/2020/12/androidcheckbox.html 実装 方法としてはsetOnScrollListenerのonScrollメソッド内で引数の値を確認して判定します。onScrollメソッドの引数は以下です。 AbsListView absListView - スクロール中のView (今回は使用しない) int firstVisibleItem - 先頭のindex int visibleItemCount - 見えている件数 int totalItemCount - ListViewのItem総件数 ※公式ドキュメントは以下です。 https://developer.android.com/reference/android/widget/AbsListView.OnScrollListener#public-methods_1 onScrollメソッドで最終行まで到達したことを判定する // メンバー変数 Boolean isLastLine = false; (省略) listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { // } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int

[Android]簡単なTwitter Client Applicationを開発する

イメージ
Androidで、自分のTwitterアカウントと連携し、リツイートした一覧を表示するだけの簡単なアプリケーションを開発してみようと思います。 事前準備 まず事前準備としてTwitterアカウントとTwitter Deceloperアカウントの2つが必要です。Twitterアカウントに関してはほとんどの人が持っていると思うので割愛します。 Twitter Developerアカウントを作成する Twitter DeveloperのページからDeveloperアカウントの登録を行います。長いので読み飛ばしてもらっても大丈夫です。 Twitter Developerにアクセス https://developer.twitter.com/en メニューからApplyを選択 Apply for developer accountを押す 用途を選択する ここでは自分自身についてのことと、Twitter Developerアカウントをどのように使用するかといったことを選択します。 Hobbyist (趣味でやっている)、 Build Tooles for Twitter users (Twitterユーザー向けのビルドツール)、を選択しました。 ユーザーの基本情報を入力する Twitter APIの使用用途を明確に記載する ここではどのようにAPIを使用するかを、英字(200文字以上)で記述します。 簡単なアプリケーションを開発する旨を、Google先生に翻訳してもらい設定しました。 アプリケーションに関する質問 アプリケーションに関していくつか質問されます。今回は分析する予定はなし、ReadOnlyのアプリケーションなのですべてNoを選択しました。 Twitterデータを分析する予定があるかどうか アプリケーションからツイート、リツイート、DM送信などを実装するかどうか Twitter以外のコンテンツを表示するかどうか 政府機関が利用できるようにするかどうか 入力内容の確認 開発者契約、ポリシーの確認 登録用のEメールが届く Eメールの完了ボタンを押して登録完了 Developer portalのダッシュボードが開くのでここをブックマークし

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

いつものように docker-compose コマンドでコンテナを起動し作業しようとしたところ、件名のエラーが発生するようになりました。 特に何も構成等を変更した覚えはないのですが、調査・復旧したので対応した内容をまとめておきます。 環境、バージョン等 $ cat /etc/issue Ubuntu 20.04.3 LTS \n \l $ docker --version Docker version 20.10.8, build 3967b7d $ docker-compose --version docker-compose version 1.26.0, build d4451659 発生事象 コンテナを起動する docker-compose up -d でコンテナを起動します。 $ docker-compose up -d Pulling mysql (mysql:5.7)... ERROR: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host 「プロキシーサーバーが見つからない」と言われているようですが、全く見に覚えがありませんでした。 テスト用Dockerプロジェクトで試す 以前の記事 で紹介したテスト用プロジェクトでも一応試したましたが同様のエラーでした。 $ docker-compose up -d Pulling web (nginx:alpine)... ERROR: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host Docker ログイン Dockerへのログインを試したところ、こちらも同様のエラーが出ました。 $ docker login Authenticating with existing credentials... Login did not succeed, error: Error response from daemon: G

docker-compose で起動したweb、MySQLに接続できない事象

イメージ
概要 以前作成したPHP + MySQL + LaravelのDockerプロジェクトがコンテナを立ち上げても画面にアクセスできなくなってしまったときの解決方法です。 以前の記事は以下です。 【Laravel + MySQL】Dockerで開発環境を作る https://www.s-watanabe.work/2020/12/laravel-mysqldocker.html 発生事象 コンテナを起動 $ docker-compose up -d Starting laravel-project_mysql_1 ... done Starting laravel-project_app_1 ... done Starting laravel-project_web_1 ... done ブラウザでアクセス いつものようにブラウザでアクセスしますが接続できません。 http://localhost:8000 ※この時Docker側のログには何も出力されません。 MySQLへ接続 MySQLも確認してみましたが同じく接続できなくなりました。 $ mysql -h 127.0.0.1 -u user -ppassword -D test mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2 調査・確認 まず以下の記事を参考に新規のDockerプロジェクトが起動・接続できるかを確認しました。 https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-ja # docker-compose はインストール済み $ docker-compose --version docker-compose version 1.26.0, build d

【Azure Functions】Java APIからDB(SQL Server)接続 (Win10)

事前準備 docker-composeを使ってSQL Serverをローカルで起動します。 Docker Desktop for Windows セットアップ ※すでにインストール済みであればこの手順はスキップしてください。 インストール cinst docker-desktop -y 確認 $ docker -v Docker version 19.03.5, build 633a0ea $ docker-compose -v docker-compose version 1.24.1, build 4667896b Hyper-Vの設定 Docker for Windows を使用する場合、Hyper-Vの有効化が必要です。以下手順で有効化します。 「Win + i」で設定画面を開く アプリ > アプリと機能 > プログラムと機能 を開く Windowsの機能の有効化または無効化 を開く Hiper-V にチェックが入っていなければ、チェックして再起動する データベース準備 前回の記事 で c:\TEST 以下にapiを作成したので、ここに docker-compose.yml を作成します。 c:\TEST\docker-compose.yml version: '3' services: db: image: mcr.microsoft.com/mssql/server:latest ports: - "1433:1433" environment: ACCEPT_EULA: Y SA_PASSWORD: test1234@password 起動 $ cd c:\TEST $ docker-compose up -d Starting test_db_1 ... done $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

【Azure Funcsions】ローカルにAzure Functions[Java8]開発環境を構築する(win10)

イメージ
事前準備 chocolatey インストール chocolatey は Windows用の Package Manager (非公式)です。公式のPackageManagementのProviderにもなっています。 インストール chocolatey をインストールするには Power Shell を開いて次のように実行します。 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) JDK(zulu8) セットアップ JDKは OLACLE のJDKではなく AZUL社のJDKを使います。OLACLE JDKはサポートしていないようで、ビルドするときにエラーになります。 Zulu JDK8 をセットアップするには コマンドプロンプトを管理者で開き次のように実行します。 セットアップ cinst zulu8 -y 環境変数 Zulu JDKのディレクトリを環境変数へ設定します。「システムの環境変数」を開き次のように設定します。 ※Pathについては既存の設定に追記します。 Path=C:\Program Files\Zulu\zulu-8\bin JAVA_HOME=C:\Program Files\Zulu\zulu-8 確認 > java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (Zulu 8.54.0.21-CA-win64) (build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (Zulu 8.54.0.21-CA-win64) (build 25.292-b10, mixed mode) Maven セットアップ Maven とはJavaプロジェクトの作成、ビルド、実行を行うツールです。 Maven をセットアップするには コマンドプロンプトを管理者で開き次のように実行します。 セットアップ cinst m

【Bootstrap+Drawer.js】Drawerメニュー内にBootstrapのNavbarメニューを組み込む

イメージ
表題の通り、Drawer.jsによりスライドインするメニューの中で、Bootstrapのnavbarを使い開閉可能なサブメニューを実装します。 また、Drawer.jsを使うと実機で見たときにスクロールが正しく機能しなくなったので、そのときにとった対応をメモしておきます。 まずはBootstrapのnavbarとDrawer.jsについて簡単に説明します。 はじめに Bootstrap navbarについて Bootstrapのnavbarは開閉式のメニューを作るのに利用します。 公式 : https://getbootstrap.jp/docs/4.2/components/navbar/ メニューの開閉のコントロールをボタンで行っていますが、テキストにすることもできるので「メインメニュー > サブメニュー」のように実装することも可能です。 実装例 [クリックで表示] 上記イメージの実装が以下のようになります。 開閉ボタンにbuttonタグを使用していますが、これは何でもよくてdata-target属性にcollspaceクラスを持つコンテンツのid属性と併せておけばOKです。 <nav class="navbar navbar-light navbar-expand-md p-1"> <div class="navbar-brand sp"></div> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navmenu" aria-controls="navmenu" aria-expanded="false" aria-label="Toggle navigation"&g

【Android】動画プレイヤーのコードを利用して音楽プレイヤーを作る

イメージ
以前作成した動画プレイヤーのソースコードをほぼそのまま使って今度は音楽プレイヤーを作ってみました。 ※動画プレイヤーについては以下の記事を参考 【Android】VideoViewを使って動画再生アプリを作る① -- ストレージへのアクセス権限を取得 -- 【Android】VideoViewを使って動画再生アプリを作る② -- 内部ストレージのファイル検索 -- 【Android】VideoViewを使って動画再生アプリを作る③ -- カスタムリストビュー -- 【Android】VideoViewを使って動画再生アプリを作る④ -- 全画面で動画再生 -- 【Android】VideoViewを使って動画再生アプリを作る -- 不具合修正、軽微な修正 -- 概要 アプリケーションの特徴 アプリケーションの特徴は以下のとおりで、1-2は動画プレイヤーのコードほぼそのままです。 内部ストレージからmp3ファイルを検索してリスト表示する。 チェックボックスで複数選択し、選択アイテムを連続再生する。 再生中画面では音量調節を可能にする。 再生画面でどのファイルを再生中かわかるようにする。 再生中にホーム画面へ戻ってもアプリケーション実行中はバックグラウンドで再生し続ける。 再生中のイメージ 実装 いくつかこのアプリケーションで新たに対応した内容を記載します。 音量調節 レイアウト 音量調節はSeekBarを使って行います。 <SeekBar android:id="@+id/seekBar" android:layout_width="match_parent" android:layout_height="wrap_content" /> Mp3Activity.java Activity側ではOnSeekBarChangeListenerを設定して、SeekBarのつまみを変更したイベントで音量調節を実行します。 SeekBar seekBar = findViewById(R.id.seekBar); audioManager = (AudioManager)get