スキップしてメイン コンテンツに移動

投稿

JavaのServlet内で他のURLから取得したデータをそのまま出力するコード

JavaのServlet内で他のURLからデータを取得してそのまま、レスポンスを出力するためのコードサンプルです。 使っているのはJavaの標準ライブラリのみなので、移植性は高いと思います。googleの提供しているライブラリやApacheのcommonsのライブラリを使うともう少しコード量は減らせると思います(特に汎用的なcopyメソッドの部分)。 import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; public class ServletUtils { private static final int _20K_BYTES = 20480; public static void fetchUrlAndDirectlyRespond(HttpServletResponse resp, String contentType, String urlStr) throws MalformedURLException, IOException, URISyntaxException { URL url = new URI(urlStr).toURL(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.connect(); ServletOutput

JavaでTimeZoneを指定して日付をフォーマットする方法

国際的に使われるソフトウェアを開発している場合、日付のタイムゾーンを意識しなければならないことがあると思います。 JavaではZoneIdクラスとZonedDateTimeクラスを利用することで簡単に指定することができます。 下記にAsia/Tokyoのタイムゾーンを指定して、7日前の日付をuuuuMMddHHmmフォーマット(分単位まで表示。例: 2021年2月13日21時34分ならば202102132134)で出力するサンプルコードを示します。 private static final ZoneId TIMEZONE_TOKYO = ZoneId.of("Asia/Tokyo"); private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("uuuuMMddHHmm"); String date_7_days_before = ZonedDateTime.now(TIMEZONE_TOKYO).plusMinutes(-7).format(DATETIME_FORMATTER); System.out.println(date_7_days_before);

Webのリクエストのパラメタを指定したパラメタ順でソートする方法(PHP)

Webリクエストのパラメタを指定したパラメタ名の順でソートするプログラムを書いてみました。 プログラム自体は汎用的なので、パラメタのソートに限らず、それ以外でも利用可能です。 <?php class ParameterSorter { private $sortOrder; // パラメタのソート順を指定 public function __construct($sortOrder) { $this->sortOrder = array_flip($sortOrder); $this->max = count($sortOrder); } // uksortを使って指定されたパラメタ順でソート // $sortOrderのキーをパラメタ名に変換して、uksortを使うのは性能を上げるためです。 // ソート順が指定されていないパラメタは、ソート順が指定されたパラメタの後になるように実装しています。 public function sort(&$parameters) { uksort($parameters, function($a, $b){ return ($this->sortOrder[$a] ?? $this->max) - ($this->sortOrder[$b] ?? $this->max); }); } // PHPのuksortは安定でない(同順位の場合もとの順序が保存されない)らしいので、元の順序を確実に保証するバージョンも作成しました。 public function stableSort(&$parameters) { $originalOrder = array_flip(array_keys($parameters)); uksort($parameters, function($a, $b) use($originalOrder){ $compared = ($this->sortOrder[$a]

Visual Studioで「Source file '...' could not be found」のエラーを解消する方法

問題 Visual Studio上でC#のプロジェクトをビルドを実行したところ「Source file '...' could not be found」のエラーが発生してビルドできなくなってしまいました。 少し調べたところ、Visual Studioのプロジェクトファイル(csproj)のXMLのProject > ItemGroup > Compileのエントリに存在しないファイルが含まれていることが原因でした。 解決法 Visual Studio上からプロジェクトを一度Unloadして、csprojから当該のXMLエントリを削除して、再度プロジェクトをReloadしたところ解決しました。 (プロジェクトのUnload -> Relaodは念のために実施しました)。 下記のようなXMLエントリを探せばOKです(Include属性のファイル名部分はダミーです)。 <ItemGroup> <Compile Include="dir\something1.cs"> <Compile Include="dir\something2.cs"> <Compile Include="dir\missing.cs"> ... </ItemGroup> [補足] 通常のVisual Studioとかで作成したプロジェクトは、csproj内でCompileエントリが直接設定されていることは少ないようです。Unityから作成したプロジェクトなので、1ファイルずつCompileのエントリが設定されていたようです。

ノートパソコンでバッテリの寿命を延ばすためのアプリケーション

バッテリ自体の寿命を延ばすためには、バッテリの充電率を100%ではなく60%程度に抑えておく方がよいようです。 Windowsに備わっているデフォルトの機能だけでは、バッテリの満充電の充電率を制御できませんが、下記のアプリケーションを使うと可能になります。 MSI Dragon Center (MSI専用) ASUS Armoury Crate (ASUS専用) Battery Limiter (フリーソフト) MSIとASUSのアプリケーションはゲームPC向けで、それぞれのメーカー専用なので、普通のノートPCで使う場合は、Battery Limiter一択になるかと思います。 もちろんバッテリの充電量を60%程度に制限するので、バッテリでの駆動時間は短くなってしまいます。なので、バッテリ自体の寿命をそこまで伸ばす必要があるか、自身の使用形態に応じて導入するか検討した方がよいと思います。

テキストをNグラムに分割するJavaプログラム

与えられたテキストをNグラム(n-gram)で分割するJavaプログラムです。 Javaの標準ライブラリのjava.util.ArrayList、java.util.Listを使っています。 public static List<String> splitByNGram(String src, int n) { List<String> chunks = new ArrayList<>(); for(int start = 0, len = src.length(); start < len; start++) { int end = start + n; chunks.add(src.substring(start, end < len ? end : len)); } return chunks; }

File Differ: Visual StudioのGUI上からファイルを選択してファイル間の差分表示するためのExtension

Visual Studioでファイル間の差分を表示をする方法としてが、「ツール > コマンドライン > 開発者コマンドプロンプト」からプロンプトを立ち上げて「devenv /diff ファイル1 ファイル2」を実行する方法がありますが、ファイル名を入力するのが面倒だったので、GUIから差分表示できるものを探していました。 Extensionを探したところ File Differ というExtensionのたどり着きました。 上記のリンクからexeファイルをダウンロードして実行するだけでインストールは完了します。 インストール後はSolution Explorer内で比較したいファイルを選択して右クリックしてでてくる「Compare Files」メニューをクリックすればOKです。(Visual Studio 2019で動作確認済み) 「Compare Files」メニューをクリックすると下記のように選択したファイル間の差分が表示されるウィンドウが開きます。