タグ

ブックマーク / blog1.mammb.com (6)

  • Java で Windows OS 判定いろいろ - A Memorandum

    Windows 判定 Grizzly のソース見てたら、Windows 判定をこんな風にやってた。 private static final boolean WIN32 = "\\".equals(System.getProperty("file.separator")); なるほど。 何も考えずにやるとこんな感じだけど private static final boolean WIN32 = System.getProperty("os.name") .toLowerCase().startsWith("windows"); OS 名の文字列よりはファイルセパレータの方が変化が少ないという判断ですかね。 まぁ、やるならこちらの方がよいですかね。 private static final boolean WIN32 = File.separatorChar == '\\'; 他には 無理や

    Java で Windows OS 判定いろいろ - A Memorandum
    advblog
    advblog 2023/06/07
  • テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum

    テキストエディタのデータ構造 Gap method Piece Table method Piece Table の構造 Piece Table の実装 Piece Table のメソッド まとめ テキストエディタのデータ構造 テキストエディタで採用されているデータ構造にはいろいろあります。 こちらの論文 Data Structures for Text Sequences では各種データ構造について比較検討されています。 多くは、Gap method や Piece table method をベースにしたものが多いのではないでしょうか(図で言う最下部の中心の丸印に当たります)。最近では Rope なども有名ですね。 Gap method Gap method では、現在のカーソル位置で、テキストバッファを2つに分割し Gap を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を

    テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum
    advblog
    advblog 2022/09/14
  • モダンで早い静的サイトジェネレータ Astro の始め方 - A Memorandum

    はじめに プロジェクト作成 プロジェクト構成 コンポーネント レイアウト ページ ビルド Blog テンプレート Portfolio テンプレート Documentation テンプレート まとめ はじめに 先日1.0リリースとなった、静的サイトジェネレータのAstroの紹介です。 JSで作成したページをビルドして、JSを含まない早いサイトを生成し、必要な場合には ReactVue といった好きなフレームワークを簡単に組み込むことができるのが特徴になります。 プロジェクト作成 Node は、v14.18.0 以上、または v16.12.0 以上が必要です。 npm や yarn、pnpmcreate astro でプロジェクトを作成します。 # npm $ npm create astro@latest # yarn $ yarn create astro # pnpm $ p

    モダンで早い静的サイトジェネレータ Astro の始め方 - A Memorandum
    advblog
    advblog 2022/08/30
  • 知らなくても困らない Javaクラスのバイトコードの読み方 - A Memorandum

    クラスファイルの中身 クラスファイルの構造 javap コマンド javap 出力の概要 型とメソッドの読み方 オペランドスタック コンストラクタの実行 加算メソッド invoke 系命令 条件判断 for ループ まとめ 普段使いでは困ることはないですが、昨今はバイトコードマニピュレーションによる黒魔術が謳歌しているため、知っていると役に立つ場合もあるバイトコードの最低限の読み方を説明します。 クラスファイルの中身 以下のような簡単なソースコードを考えましょう。 public class Class1 { public int add(int x, int y) { return x + y; } } このソースコードをコンパイルして作成された Class1.class の中身のダンプを見てみます。 $ hexdump -C Class1.class 00000000 ca fe ba

    知らなくても困らない Javaクラスのバイトコードの読み方 - A Memorandum
    advblog
    advblog 2017/11/05
  • 10年の長きに渡り Java の可変長引数を過信していた話 - A Memorandum

    可変長引数のループで ヌルポ発生 普通の呼び出し なんだ!? これ 念のため どうしても null を渡したい場合 まとめ 可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと複雑だが、簡単に書くと以下のような for ループでのヌルポ。 public void method(String... args) { for (String string : args) { // java.lang.NullPointerException // ... } } この10年 可変長引数が null を受け取るなんて。 可能性すら考えるまでもなく問題なしと思い込んでいた。 普通の呼び出し 普通に呼び出すと、 method(); method("hello"); method("hello", "world

    10年の長きに渡り Java の可変長引数を過信していた話 - A Memorandum
    advblog
    advblog 2017/06/23
  • Java スレッドダンプとの戯れ方 - A Memorandum

    プロセスIDの取得 スレッドダンプの取得 Windowsでプロセスをサービス起動している場合 スレッドダンプを読む プロセスIDの取得 まずは Java のプロセスIDを取得するところから始める。jps で取得できる。 $ <JAVA_HOME>/bin/jps -l 主要なオプションは以下の通り(SunVM)。 オプション 説明 -m main メソッドに渡される引数を出力 -l アプリケーションの主要なクラスのフルパッケージ名、またはアプリケーションの JAR ファイルへのフルパス名を出力 -v JVM に渡される引数を出力 JDK7 からは JRockit と統合されたため jcmd が使えるので以下でもプロセスIDを取得できる。 $ <JAVA_HOME>/bin/jcmd または、単に ps コマンドで取得するでもよい。 $ ps -ef | grep -v 'grep' | g

    Java スレッドダンプとの戯れ方 - A Memorandum
    advblog
    advblog 2015/10/11
  • 1