サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
blog1.mammb.com
テキストエディタのデータ構造 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 を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を
はじめに プロジェクト作成 プロジェクト構成 コンポーネント レイアウト ページ ビルド Blog テンプレート Portfolio テンプレート Documentation テンプレート まとめ はじめに 先日1.0リリースとなった、静的サイトジェネレータのAstroの紹介です。 JSで作成したページをビルドして、JSを含まない早いサイトを生成し、必要な場合には React や Vue といった好きなフレームワークを簡単に組み込むことができるのが特徴になります。 プロジェクト作成 Node は、v14.18.0 以上、または v16.12.0 以上が必要です。 npm や yarn、pnpm で create astro でプロジェクトを作成します。 # npm $ npm create astro@latest # yarn $ yarn create astro # pnpm $ p
はじめに Nginx でロードバランサを構成する Webサーバ1号機の作成 Webサーバ2号機の作成 ロードバランサの作成 ロードバランサとWebサーバの起動 Web アプリケーションの準備 Docker でアプリケーションをビルドする DBサーバの準備 ロードバランサとアプリケーションサーバの起動 まとめ はじめに 前回は Docker のインストールからイメージビルド・コンテナ起動・Compose までの流れをみてきました。 blog1.mammb.com 今回は以下のような、一般的な Web アプリケーションの開発環境を構築していきます。 前回の記事とあわせて、Docker の活用方法を理解いただければと思います。 Nginx でロードバランサを構成する 最初に、単純な Web サーバを Nginx でロードバランシングする環境を作成して動作を見てみます。 このような構成となります。
TL;DR X-Content-Type-Options X-Frame-Options(XFO) X-XSS-Protection Content-Security-Policy (CSP) Upgrade-Insecure-Requests Strict-Transport-Security (HSTS) Public-Key-Pins (HPKP) 設定 TL;DR X-Content-Type-Options MIME スニッフィングの無効化 X-Frame-Options(XFO) フレーム表示を制限しクリックジャッキングを予防 X-XSS-Protection XSSフィルタの有効/無効 Content-Security-Policy (CSP) XSSなどの攻撃を軽減するセキュリティレイヤー Strict-Transport-Security (HSTS) HTTP の代わり
プロセス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
JavaScript でのブラウザ判定について まとまった情報がサクッとヒットしないので、まとめ UserAgent によるブラウザ判定 よくある単純な例 var userAgent = window.navigator.userAgent.toLowerCase(); if (userAgent.indexOf('opera') != -1) { return 'opera'; } else if (userAgent.indexOf('msie') != -1) { return 'ie'; } else if (userAgent.indexOf('chrome') != -1) { return 'chrome'; } else if (userAgent.indexOf('safari') != -1) { return 'safari'; } else if (userAgen
クラスファイルの中身 クラスファイルの構造 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
みなさんは Markdown エディタは何を使っているでしょうか? Atom や Visual Studio Code のプラグインでプレビュー表示していたり、Windows だったらMarkdownPad 、Mac だったら MacDown などの専用エディタを使っている方が多いのではないでしょうか。 そんな方へTypora を紹介します。 Typora は無駄なプレビュー領域を使いません Typora には便利なショートカットがあります Typora ではテーブル書くのが楽しくなります Typora はドラッグ&ドロップで画像を貼り付けられます Typora はテーマもコードハイライトもあります Typora は PDF や HTML など多くの形式にエクスポートできます Typora はマルチプラットフォームで今の所 Free です まとめ Typora は無駄なプレビュー領域を使い
mdBook とは mdBook の導入 mdBook の始め方 mdBook でビルドする mdBook のコマンド mdBook での作業 mdBook で Rust コードを実行 mdBook とは Markdown 形式できれいなドキュメントを作成するためのツールです。 チャプター別に執筆した Markdown ファイルから、以下のようなオンラインドキュメントを簡単に作成することができます。 mdBook でビルドすると book ディレクトリに HTML や CSS、JS ファイルが生成されるので、ディレクトリごと Github Pages などに配備すればオンラインでドキュメントを公開することもできます。 同様のツールに gitbook-cli という Node ベースのものがありますが、mdBook は Rust 製で、なにしろ速いのがメリットです。 mdBook の導入 R
blog1.mammb.com の続きで Phoenix。 Elixir 版 RoR の Phoenix Framework。現在のバージョンは V0.15.0。 公式サイト http://www.phoenixframework.org/ Github https://github.com/phoenixframework/phoenix 事前準備 必要に応じて以下を入れておく。 node と npm Phoenix はアセットのコンパイルに brunch.io を使うので、node と npm が入っていない場合は入あらかじめ入れておく。 $ brew update $ brew install node 静的なアセットを使わない場合は後ででてくる mix コマンドで --no-brunch を付ければ node と npm は不要。 Hex Erlang のパッケージ管理ツール He
導入 Homebrew での導入は以下。 brew update brew install elixir バージョン確認。 $ elixir -v Elixir 1.0.4 Erlang も入る。 erl -version Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 6.4 IEx (Interactive Elixir) 対話型シェルで、各種操作が実行できる。 $ iex Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help) iex> REPL として直接コードを実行したり、 iex> 1 + 1 2 iex> IO.puts "Hello World!" Hello World! :ok コンパイルしたり iex> c "
EasyMockとの違い Eclipse での利用に際して org.mockito.Mockito モックの利用と妥当性検証 スタブメソッドの定義 引数の照合 メソッド呼び出しの妥当性検証 voidメソッドから例外を返却 API的に EasyMock と大きな違いはありませんが、使用感としては格段に心地良い Mockito。 [:W150] 本家 http://mockito.org/ のドキュメント(というかJavaDoc)をベースにメモ。 EasyMockとの違い Mockito では record モードと replay モードを切り替える必要がない Mockito で作成するモックは常に、EasyMock で言う NiceMock となる スタブメソッドの妥当性検証が常にオプション扱い 大きくは以上となります。具体的に、EasyMock では import static org.e
Nashorn とは Java から Nashorn を使う Java オブジェクトを渡す JavaScript の関数を Java から呼び出す JavaScript のオブジェクトを Java から呼び出す JavaScript 内で Java クラスを利用する JavaScript と Java の型 文字列 数値 配列 リストとマップ ラムダ Java クラス・パッケージのインポート JavaScript で Java インターフェースを実装する JavaScript 関数を Java インターフェースの実装として利用する スクリプトを事前コンパイルする Nashorn で REPL する jjs でシェルコマンドを使う nashorn をシェルスクリプトとして使う 例えば まとめ Nashorn とは Java7 までは JavaScript スクリプティングエンジンとして Ri
はじめに Docker のインストール Docker の起動 コンテナの起動 Docker Hub から nginx のイメージを取得 取得したイメージから ws-nginx という名前でコンテナを作成 作成したコンテナを起動 コンテナの操作 動いているコンテナの一覧 コンテナの停止 停止しているコンテナを含めて一覧 コンテナの削除 イメージの一覧 イメージの削除 Dockerfile からイメージ作成 Nginx の設定ファイルの準備 Dockerfile の作成 Dockerfile のビルド イメージの実行 Docker Compose docker-compose.yml の作成 docker-compose up まとめ はじめに Docker の OSX への導入からコンテナ起動までを見ていきます。 Docker のインストール DockerHub からインストーラをダウンロー
CSS にて、要素の height にパーセント値を指定した場合の表示について 分かりにくいので簡単にまとめておきます。 要素をウインドウ全体に表示したいけど上手くいかない 要素を画面全体に表示したい場合、「height: 100%;」と指定しても上手くいきません。 たとえば以下のHTMLで、div を画面全体に表示したい場合、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <div class="main"> </div> </body> </html> div.main 要素を以下のように指定して、 div.main { height: 100%; } あれ、height
DataTables とは HTML テーブルを操作する jQuery のプラグイン。 本家は以下 datatables.net 簡単な例 Microsoft の CDN でホストされているため、stylesheet と script を以下のように指定。 <head> ・・・ <link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css"> <!-- jQuery --> <script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></scri
Rules とは JUnit4.7から@Ruleアノテーションが追加されました。@Ruleアノテーションは、org.junit.rules.MethodRuleインターフェースのサブクラスによって定義された振る舞いをテストメソッドに追加します。 MethodRuleの組み込み実装クラス MethodRuleの具象クラスとして、以下のクラスが提供されています。 MethodRule ├ Verifier : オブジェクトの状態が不正な場合にテストを失敗させる │ └ ErrorCollector : 1つのテストメソッドの複数のエラーを集集する ├ ExpectedException : スローされた例外について柔軟なアサーションを行う ├ ExternalResource : サーバの起動停止などの外部リソースの操作を行う │ └ TemporaryFolder: テストメソッド前に一時フ
blog1.mammb.com では CoreMatchers についてでしたが、こちらでは org.hamcrest.Matchers についてまとめます。 org.hamcrest.Matchers JUnit についてくるのは org.hamcrest.CoreMatchers で基本的な Matcher が提供されています。org.hamcrest.Matchers は CoreMatchers を機能拡張したものとなってます。CoreMatchers にあるメソッドは、Matchers にもあります。 hamcrest-core − org.hamcrest.Matchers が入ってる hamcrest-library − org.hamcrest.Matchers が入ってる hamcrest-library は以下のようなパッケージ構成となっており、各用途に応じた Ma
可変長引数のループで ヌルポ発生 普通の呼び出し なんだ!? これ 念のため どうしても null を渡したい場合 まとめ 可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと複雑だが、簡単に書くと以下のような for ループでのヌルポ。 public void method(String... args) { for (String string : args) { // java.lang.NullPointerException // ... } } この10年 可変長引数が null を受け取るなんて。 可能性すら考えるまでもなく問題なしと思い込んでいた。 普通の呼び出し 普通に呼び出すと、 method(); method("hello"); method("hello", "world
はじめに 郵便番号と住所の割当についての注意点 郵便番号データのカラム定義 複数行に分割されるレコード 町域名の編集 "以下に掲載がない場合" "・・の次に番地がくる場合" "・・一円" カンマ区切りされた町域名 地割 町域名がカッコ付きで補足されるパターン (全域),(丁目)(各町)(番地)(無番地)(その他) (○○屋敷) ビルの記載 (地階・階層不明)(X階) ・・を除く) ・・を含む) ・・その他) ・・以下) ・・以上) ・・以内) ・・以降) ・・以外) ・・」以外 ・・番地以上 カッコの取り扱い JPostal はじめに 郵便番号の入力に応じて、都道府県や市区町村を入力補完したい、というユースケースは良くあります。 日本郵便の公開する郵便番号データ ken_all.csv は、このようなユースケースのための辞書データ候補に挙げることができます。 しかし郵便番号データ ken_
sbaz にて scala-tool を取得すると、各種ツールのプラグインが入手できます。ここでは vimプラグインを適用してみます。 sbaz によるscala-tool-supportの取得 以下のコマンドにてscala-tool-supportを取得します。 > sbaz install scala-tool-support planning to install: scala-tool-support/2.8.0.RC2 Installing... Downloading: http://scala.epfl.ch/downloads/packages/scala-tool-support-2.8.0.RC2.sbp 182.0K/182.0K DoneScalaのインストールディレクトリ中の /misc/scala-tool-support に各種ツールのプラグインが取得されます
Entity Graphs とは Entity Graph の構成 Graph アノテーションと Graph API 簡単な利用例 Fetch Graph と Load Graph Attribute Node の定義 Subgraph の定義 Subgraph の複数参照 継承構造の Graph 定義 ルート継承構造の Graph Map Key Subgraphs タイプセーフな属性定義 Entity Graph の取得 名前付きの Entity Graph への追加 Entity Graph の利用 Entity Graphs とは JPA 2.1 では Entity Graph を使うことで fetch 計画を指定できるようになりました。これにより query や find で取得する対象ををカスタマイズできるようになります。同じ Entity から様々なデータの見せ方が必要で、時
はじめに bash の初期化ファイル ログインシェルとは インタラクティブ(対話的)シェルとは ログインシェルとインタラクティブシェルの分類 各種環境における初期化ファイル CentOSの初期化ファイル Ubuntuの初期化ファイル macOS(Catalina以前)の初期化ファイル macOS(Catalina)の初期化ファイル 各環境におけるデフォルトの初期化ファイル 単一ファイル管理(~/.bashrc) 標準的管理(環境変数は~/.bash_profile) 厳格管理(~/.profile 利用) macOS Catalina の場合 まとめ はじめに 本記事では bash の初期化ファイルと、それにまつわる運用方法について説明します。 シェル(bash)の初期化ファイルには .profile .bashrc, .bash_profile などがありますが、どこに何を定義すべきかに
呼び出し順序の妥当性検証 余計なメソッド呼び出しが行われていないことを検証する Mockito のアノテーション 複数回のモックメソッド呼び出しの結果を変化させる コールバック付きの戻り値定義 voidメソッドの振舞を定義するdoXXファミリー 実オブジェクトの動作を変えるspy 本記事は、以下の記事の続きです。 blog1.mammb.com 呼び出し順序の妥当性検証 以下のように、2つのモックがあり、それぞれのモックの add() メソッドの呼び出し順序を検証したい場合、 List firstMock = mock(List.class); List secondMock = mock(List.class); firstMock.add("was called first"); secondMock.add("was called second"); InOrder を使用します。
関数型言語の理論的基盤であるラムダがあしらわれた Clojure のロゴが美しすぎる。 Python Erlang Lua Ruby Scala Groovy Erlang Haskell Perl PHP Go R プログラミングClojure 第2版 作者: Stuart Halloway and Aaron Bedra,川合史朗出版社/メーカー: オーム社発売日: 2013/04/26メディア: 単行本(ソフトカバー)この商品を含むブログ (11件) を見る
blog1.mammb.com からの続きです。 ページ遷移時のイベント jQuery Mobile では、1つのHTMLファイルに複数のページビューを定義できます。外部ページも非同期リクエストにて取得したページビューを、既存の DOM に挿入することでページ遷移を実現します。 これによりページ遷移の度にサーバへのリクエストを行うこと無く、通信帯域の制限されたモバイル環境においてスムーズなページ遷移を可能にしています。 このような特徴があるため、jQuery Mobile では $(document).ready() といった、ページロード時のイベントと、ページ遷移(表示)時のイベントを区別して扱う必要があります。 ページの初期化には pageinit イベントを使う ディスクトップ向けに jQuery を利用する場合は、$(document).ready() にて DOM の読み込み完了
Java Batchとは Job の種類と実行制御 Job作成の流れ Chunk の実装例 ItemReader ItemProcessor ItemWriter Job 定義 Batchlet の簡単な例 バッチステータス Job Specification Language Job 定義の要素 Step 要素 chunk ステップの例 chunk ステップの要素 タスクステップの例 タスクステップの要素 partition ステップの例 plan 利用 mapper 利用 フロー要素 スプリット要素 decision 要素 JobContext Job のスケジュール起動 listener CDI 名による参照 IDE サポート Java Batchとは JSR-352 Batch Applications for the Java Platform として仕様化されたバッチ処理用 A
Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String::isEmpty) // (2) パイプライン .forEach(System.out::print); // (3) 終端処理 (1) Stream の生成 (2) パイプライン (3) 終端処理 まとめ (1) Stream の生成 最初はストリームを取得する stream() の中身から見ていきます。 stream() は Collection インターフェースのデフォルトメソッドとして以下のように定義されています。 public interface Collect
RxJava は ReactiveX (Reactive Extensions) の JVM 実装で、平たく言うと非同期のイベント処理を簡素に書ける、単なるライブラリです。 "Rx = Observables + LINQ + Schedulers" などと表現されます。なんですかこれ?大げさな抽象概念を掲げすぎて意味不明になる現象(モナド現象)になっていませんか? Observable とは Observable は発生順に並んだイベントのストリームです。 Java8 では、何らかの型Tの並びを Stream として表現し、この並びに対して関数的な操作を適用する API が用意されています。例えば Stream.map() は関数 Function を引数に取り、関数で変換された新しい Stream を返します。戻り値として Stream が得られるので、同じように操作を連結して定義して
次のページ
このページを最初にブックマークしてみませんか?
『A Memorandum』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く