ラベル GitHub の投稿を表示しています。 すべての投稿を表示
ラベル GitHub の投稿を表示しています。 すべての投稿を表示

2018年10月27日土曜日

GitHub の your dependencies may have a security vulnerability を解決する方法

How to fix security vulnerabilities

2018年10月、GitHub がセキュリティ脆弱性アラートがJavaと.NETに対応しました。
その影響で当ブログの著者に「your dependencies may have a security vulnerability」というメールが届きました。
GitHub に保存しているアプリのソースコードがセキュリティに脆弱なライブラリやモジュールに依存しているから修正するべきという内容です。
実際に修正してアラートがなくなったのでその方法をまとめました。
blog.fujiu.jp GitHub の your dependencies may have a security vulnerability を解決する方法


環境

  • Windows 10
  • Visual Studio Community 2017
  • Eclipse MARS.2
Visual Studio 2017 の初期バージョンは Git クライアントの不具合があり更新する必要がありました。


脆弱性を確認した結果

GitHub から1件の脆弱性につき1通のメールが届きます。
メールを抜粋した内容は次の通りです。

Visual Studio で作ったアプリ
Microsoft.Data.OData < 5.8.4 (oderate severity)

Eclipse で作ったアプリ
com.fasterxml.jackson.core:jackson-databind < 2.8.11.1 (high severity)
com.fasterxml.jackson.core:jackson-databind >= 2.7.0, < 2.7.9.1 (high severity)


Visual Studio で作ったアプリの修正方法

Visual Studio で作ったアプリは Microsoft.Data.OData に脆弱性がアルトのことですが、これは NuGet でインストールしたパッケージです。
修正するには当該のプロジェクトを開き、メニューの
プロジェクト -> NuGet パッケージの管理
を開きます。

脆弱性のある Microsoft.Data.OData の右側にある上向きの矢印をクリックします。

今回は依存するパッケージの変更の確認が表示されました。OK をクリックします。

すべてをコミットしてプッシュして完了です。


Eclipse で作ったアプリの修正方法

Eclipse で作ったアプリは jackson-databind が脆弱性のあるバージョンとのことですが、これは maven でインストールしたライブラリーでした。
pom.xmlは次の通りでした。

2.7.2 の部分を最新の 2.8.11 に書き換えました。
コミット・プッシュして完了です。


関連ブログ

[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
Visual Studio 2017 を全部ダウンロードしてからインストールする方法
古い Visual Studio をまとめてアンインストールする方法


2016年12月3日土曜日

[Windows] Visual C++で簡易スクリーンセーバーを作る方法

How to create simple screen saver

Windowsは一定時間キーボードやマウスを操作しないとスクリーンセーバーが起動し、モニターの焼き付きを防ぐ機能があります。
スクリーンセーバーは一定時間経過しないとを起動しないので、任意のタイミングでモニターへの信号を遮断する簡易的なスクリーンセーバーを作ってみました。


環境

  • Windows 10
  • Visual Studio 2015 Community
    ※Windows XPとVisual C++ 2008 Expressで作ったものをビルドし直しただけ


Visual Studio 2015にVisual C++ インストールオプションを追加する

Visual Studio 2015 は初期設定のままではVisual C++がインストールされませんでした。
Visual C ++ 2015用の共通ツールを追加インストールしました。
blog.fujiu.jp Visual C++で簡易スクリーンセーバーを作る


Win32 コンソール アプリケーションとしてプロジェクトを作る

プロジェクトはWin32 コンソール アプリケーションとして作ります。

アプリケーション設定は初期設定のまま進めます。


処理内容

プログラムが起動したらモニターへの信号を遮断し続けます。
モニター信号の信号はSendMessage関数を使います。
0.1秒くらいマウスを動かし続けるとモニター信号の遮断を停止しアプリが終了します。
標準ライブラリーだけでできました。
Releaseビルドしてできたexeファイルへのショートカットをタスクバーにピン留めすればワンクリックで省エネできます。

SendMessage関数を使っているところだけ記載します。

EcoMoni.cpp


全ソースはGitHubにプッシュしました。
https://github.com/mtk-f/EcoMoni/tree/master/EcoMoni


関連ブログ

Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました
[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
ProTools First のwavファイルはPlaySound関数で再生できるか?
[C#] タスクトレイにバルーンチップを表示するアプリ
[ASP.NET] ポストバック処理で実行するJavaScriptを選ぶ方法
[ASP.NET] 動的に追加したイベントが動作しない
[ASP.NET] 動的に追加したラベルやテキストボックスが消える現象の対策

以上、参考になれば幸いです。

2016年7月1日金曜日

bashスクリプトの変数のスコープにはまったところと対処方法

The programming pitfalls in variable scope for Bash scripts

bashスクリプトを書いた際、変数が有効なスコープ範囲内にあるはずと思っていたのに値が消えてしまうトラブルにはまってしまいました。
その原因と対処方法をまとめました。


環境

  • Windows 10
  • Cygwin


きっかけは短縮URLの移動先を調べるスクリプト

Twitterのt.coを始め、Google URL Shortenerなど長い文字になりがちなURLを短縮するサービスが広く利用されています。
これらの短縮URLはWebブラウザーなどでクリックすると指定された移動先のURLに移動します。
短縮URLの文字を見ただけでは移動先のサイトは分かりません。
短縮URLの移動先がさらに短縮URLで別の移動先が指定されていることも少なくありません。

そこでCygwinで短縮URLの移動先を再帰的に調べ最後の移動先を表示するbashスクリプトを書いたのですが、変数の値が途中で消えてしまいました。

blog.fujiu.jp bashスクリプトで変数スコープにはまった


curlコマンドをインストールする

curlコマンドが必要です。Cygwin Setupかapt-cygなどでcurlをあらかじめインストールしてください。


失敗したスクリプト

動くはずと思って書いたスクリプトです。


上のスクリプトをファイルに保存しパーミッションを755に設定します。
引数に適当な短縮URLを指定して実行すると、curlコマンドを使って応答ヘッダーを調べます。
移動先が指定されていればそのURLの応答ヘッダーを調べる処理を繰返し、最後の移動先を表示するはずでした。

実際に実行してみると
(1)のstatus変数には間違いなくHTTPステータスが代入されている
(2)のstatus変数は値がカラになっている
という期待を裏切る結果が起きました。


原因

下記サイトを参考にしました。
スマートな紳士のためのシェルスクリプト(8):シェルスクリプト最大の罠、while問題 (1/2)- @IT
http://www.atmarkit.co.jp/ait/articles/1209/14/news147.html
http://www.atmarkit.co.jp/ait/articles/1209/14/news147.html

原因はパイプでつないだ先の変数はパイプ先のみ有効とのことです。
上のスクリプトの場合、パイプでつないだwhile文の内側にある(1)のstatus変数はdoneの直前まで有効ですが、doneより下にある(2)のstatus変数はパイプの外側にあるので別の値を持つ変数だった、ということでした。


解決策

パイプでつないだ先の変数の値を/tmpディレクトリーにファイルとして保存することにしました。


修正したスクリプト

期待通りに動作するように修正したスクリプトがこちらです。


/tmpディレクトリーをRAMディスクに置ければちょっとだけ高速化できそうです。


関連ブログ

[クラウド] BluemixのJavaアプリ開発ではまったところと対処方法
C#のAzure用Webジョブ開発ではまったところ

以上、参考になれば幸いです。

2016年4月2日土曜日

C#のAzure用Webジョブ開発ではまったところ

The programming pitfalls in C#

Azure用Webジョブアプリ クエリちゃんの動画投稿数をツイートするサービス
を作ってはまったことろとその対処方法をまとめました。

このアプリのソースはGitHubに投稿してあります。
https://github.com/mtk-f/TweetNicoCountForQuerychan


環境

  • Windows 10
  • Visual Studio 2015 Community


Visual Studioでの開発

Visual Studioで Azure Webjob のプロジェクトとして開発しました。
コンソールアプリケーションを開発するの同じで、完成したもの普通のコンソールアプリでした。
blog.fujiu.jp C#のAzure用Webジョブ開発ではまったところ

処理内容は次の通りです。
  1. nicovideo.jp のWeb APIで「mmd クエリちゃん」をキーワード検索する
  2. 検索結果のJSON文字列をパース(構文解析)し件数を取得する
  3. 件数をツイッターに投稿する


非同期処理ではまった

このアプリはWeb APIの利用やツイッターへの投稿を非同期メソッドで処理しています。
コンソールアプリケーションはエントリーポイントのMainメソッドからプログラムを実行し、エントリーポイントを抜けたら終了します。
非同期メソッドの完了を待つにはawaitキーワードで同期待ちします。
ところがMainメソッドは非同期処理をawaitキーワードで同期待ちできません
awaitキーワードが使えないので非同期処理が完了する前にエントリーポイントを抜けてしまい、ツイッターに投稿する前にアプリケーションが終了してしまう事態に陥ってしまいました。

問題の起きるエントリーポイント


非同期メソッドの Wait()メソッド で対処しました。
Wait()メソッドは非同期処理が終わるまで待ち続けるメソッドです。

対処後のエントリーポイント


Wait()メソッドを使わないときと使うときのアプリの寿命の違いを図にしました。


Newtonsoft.Json ではまった

Newtonsoft.JsonはJSONフォーマットの文字列を匿名型オブジェクトやクラスに変換するライブラリーです。
オブジェクトをJSON文字列に変換することもできます。
JSON文字列をオブジェクトに変換することをデシリアライズといいます。

Newtonsoft.Jsonは角括弧[]の配列を含むJSON文字列は匿名型オブジェクトにデシリアライズできません。
JSONの配列を匿名型にデシリアイズすると実行時にこのような例外がスローされます。
Newtonsoft.Json.JsonException


匿名型ではなくクラスなら配列をデシリアイズできます。

匿名型の例


クラスの例


匿名型はクラスより字数が少なくメソッドの中で定義できますが、クラスより用途が制限されます。


Azureの新しいポータルではまった

このブログを書いている時点では、最新のAzureポータルからWebジョブの実行をスケジュール設定できません。

Webジョブを定期的に実行するには AzureのレガシーポータルからWebジョブを スケジュールに従って実行 の設定で展開しなおす必要がありました。


クエリちゃんのMMDモデルを公開中です

クエリちゃんのMMDモデルはOneDriveからダウンロードできます。
クエリちゃんのMMDモデルで動画を作ったらぜひ投稿してください。


関連ブログ

[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました
ツイッターAPIの検索で複数の画像URLが取得できない対策方法
Twitterの「このリンクは安全ではない」「このリクエストを保留しています」の対策 2015年版

以上、参考になれば幸いです。

2016年3月26日土曜日

[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで

Azure app "TweetNicoCount for Querychan" has been published for GitHub

クエリちゃんの動画投稿数をツイートするサービス というアプリのソースをGitHubで公開しました。
https://github.com/mtk-f/TweetNicoCountForQuerychan

nicovideo.jpを「mmd クエリちゃん」でキーワード検索し、該当する動画の数をツイートします。
AzureのWebジョブとして動作することを確認しました。
現在は動作させてません。
 blog.fujiu.jp [Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで

このアプリケーションをで開発してソースを公開するにあたりVisual StudioやAzureの便利な機能をまとめました。


環境

  • Windows 10
  • Visual Studio 2015 Community

次のNuGetパッケージを使いました。
  • Newtonsoft.Json
    JSONフォーマットのテキストをパースするためのライブラリー
  • CoreTweet
    ツイッターに文章を投稿するためライブラリー


Azureのいいところ・非公開パラメーターはソースに書かずに自動スワップできる

Azureは デプロイ スロットの自動スワップ により、実行時のパラメーターを別の内容に差し替える機能があります。
開発環境とAzure環境で実行時のパラメーターを変えたい場合に便利です。
今回は公開したくないパラメーターを隠すために自動スワップを使ってみました。

このアプリはTwitter Appliication Manager で発行したAPI KEYやトークンを使うのですが、公開したくないのでソース(App.Config)に書いてません。

Azureポータルの アプリ設定 から スロットの設定 に正しいパラメーターを設定すると実行時に正しく動作するように差し替えています。

非公開パラメーターをソースに書かずにGitHubに公開し、自動スワップを使ってAzureで動作させることができました。


Visual StudioのプロジェクトをGitHubに公開する方法

あらかじめGitHubのアカウントを登録しておく必要があります。
Visual StudioのプロジェクトをGitHubに公開するため GitHub Expression for Visual Studioを追加インストールしました。

これをインストールするとチームエクスプローラーからGitHubに発行できるようになります。
接続の管理 からサインインできます。

設定でユーザー名・メールアドレスの設定、変更でコミット、同期でリモートリポジトリーへのプルとプッシュができます。

Team Foundation Server の用語で統一しているようで戸惑いました。


GitHub のリポジトリーをVisual Studioで開く方法

チームエクスプローラーでローカルGitリポジトリ の 複製 でGitHub のリポジトリーを自分のPCにクローンを保存できます。

Gitを使うまでSubversionしか使ったことありませんでしたが操作方法が分かれば違和感なく使えました。
開発者が自分だけならリポジトリーサーバーがなくてもバージョン管理できるGitの方がSubversionより手間がかかりません。


クエリちゃんのMMDモデルを公開中です

クエリちゃんのMMDモデルはOneDriveからダウンロードできます。
クエリちゃんのMMDモデルで動画を作ったらぜひ投稿してください。



関連ブログ

Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました
[Windows] Subversionをインストールしたら起動が遅くなった
ツイッターAPIの検索で複数の画像URLが取得できない対策方法
Twitterの「このリンクは安全ではない」「このリクエストを保留しています」の対策 2015年版
Blogger.com (blogspot)のツイッターカードにサムネイルを設定する 2016年版

以上、参考になれば幸いです。