Works by

Ren's blog

@rennnosuke_rk 技術ブログです

2018-03-01から1ヶ月間の記事一覧

【Java】CMS

CMS CMS(Concurrent Mark & Sweep)コレクタは、Javaで用いられるガーベジコレクタです。従来の世代別GC方式を採用していますが、Old領域のGC処理をコンカレントGCと呼ばれる手法によって行います。 従来の世代別GC 従来の世代別GCでは、ヒープをNew領域とO…

【Java】G1GC

Javaのガーベジコレクタ 【Java】JVMのヒープメモリ管理の記事では、JVMがどのようなガーベジコレクタアルゴリズムを搭載しているかについて調査・紹介しました。今回はJavaGCアルゴリズムの詳細実装であるG1GC(Garbage First Garbage Collector)について調…

【Java】Javaの日時/日付に関するAPI(Java8)

Java8による時刻API 前回の記事では、Java7以前で用いられていた日時APIについて紹介しました。しかし、組み込みのAPIとしてはバグの温床となるような仕様が多く、個人的に使いづらさを感じていました。実際、 一般的な開発者が扱うような日付/時間のユース…

【Java】Javaの日時/日付に関するAPI(Java7以前)

システムと時刻 地球上に存在する多くのシステムやアプリケーションは、「時刻」という概念に依存します。例えばRDBテーブル上のレコードが更新日時を持つ、WebアプリケーションクライアントがHTTPリクエストを投げた時刻サーバに伝えるなど、例を上げればき…

【Java】JVMのヒープメモリ管理

JVMとヒープ オブジェクト指向言語として有名なJavaプログラムがコンパイルされて中間言語としてJVM上で動く時、多くのオブジェクトの生成と破棄が繰り返され、それに伴ってヒープ領域の確保や生成が行われます。そのような激しいメモリアロケーションにも関…

【JavaScript】同時並行モデル

JavaScriptが動作する仕組み JavaScriptで書かれたスクリプトがブラウザから読み込まれた時、ブラウザに組み込まれたレンダリングエンジンによってその内容が解釈され、実行されます。スクリプト上では変数が定義されたり、オブジェクトが生成されたり、関数…

【JavaScript】Generator

pythonなどのように、JavaScriptでもES6からGeneratorが使えるようです。 Generatorとは 呼び出すたびに値やオブジェクトを生成して返す仕組み。 Generatorを使うことで、オブジェクトや配列値の遅延評価を行うことができます。 遅延評価とは、必要なタイミ…

【JavaScript】Web Worker

Web Workerとは UIスレッドとは別のスレッドに処理を移行し、バックグラウンドで実行するための仕組み。 UIスレッドの描画を阻害することなく、実行時間を要するタスクを処理することができます。 Web Workerの使い方 参考文献を頼りに、Web Workerを使って…

【PWA】App Shellを作成する

前回の記事の続きです。 App Shellの作成 Google Developersの公式チュートリアルより、App Shellを実際に作ってみます。 App Shell の作成で気をつけること UIとアプリ基盤をデータから切り離す App Shellの強みは、コンテンツだけをネットワーク越しにやり…

【PWA】App Shell

前日の記事「PWAとは」の続きになります。 App Shellとは App ShellはPWA(Progressive Web App)を構築する際に使われるモデルの一つです。 UI部品のみからなる「シェル」をコンテンツから分離してキャッシュすることで、アプリケーションをオフライン環境下…

PWAとは

ちょっと乗り遅れた感じありますが、PWAのメモ。 PWAとは Progressive Web Applicationの略で、2016年にGoogleが提唱しました。 Webブラウザ上のアプリをあたかもネイティブのアプリのように動作させることで、 より良いユーザ体験を提供しようというもので…

【AngularJS】ng-classで動的にhtmlタグのclassを変更する

ng-class AngularJSではHTMLタグに付加するクラスを動的に変化させるng-classディレクティブが用意されています。 タグに割り当てるクラスを状態や条件で変更できるので、非常に便利です。 使い方 <div ng-class=" <割り当てるクラス名1> : <条件1> , <割り当てるクラス名2> : <条件2> , ... "></div> ng-classで割り当てたいクラスと条件は上記のように複数指…

【Node.js】npmのパッケージserveを使ってサーバを立てる

npmとは npmはNode.js環境下で使われるJavaScriptのパッケージマネージャです。 Javaで使われるMavenやpythonのpipなどのようにライブラリを一元管理することができ、 コマンド一発で外部リポジトリからライブラリをインストールすることができます。 またJa…

【JavaScript】DomParserを使ってXMLやHTML文字列をパースする

DomParserとは DomParserはJavascriptに組み込みで実装されている、XML/HTML用パーサです。 文字列形式のXMLやHTMLをパースし、DOM情報を保持するdocumentオブジェクトに変換します。 documentオブジェクトの持つプロパティ等の仕様はこちら HTMLをパースす…

【AngularJS】AngularJSの組み込みjQuery "jqLite" を使う

jqLiteとは jqLiteはAngularJSに組み込みで実装されている軽量版JQueryです。 JQueryのようにDOM要素やHTML文字列を操作することができます。 使い方 angular.element()を使うと、JQueryの$()のように働きます。 // id指定 angular.element('#element_id'); …

YEOMANでAngularJSプロジェクトにControllerを追加する

メモ。 YEOMANでジェネレータgenerate-angularをインストールしている場合、 以下のコマンドでControllerの作成も自動でやってくれます。 # 生成したいプロジェクトディレクトリ上で実行 $ yo angular:controller MyNewController # 生成 create app/scripts…

YEOMANを使って高速にAngularJSプロジェクトを作る

YEOMANとは YEOMANはWebアプリケーションジェネレータと呼ばれるツールの一つです。 新しいアプリケーションを作成する際に必要なディレクトリやコンポーネントを自動作成することができます。 Web開発を始める時、プロジェクトのディレクトリ構成やツールの…

【AngularJS】ルーティングを設定する

AngularJSはSPAを実装するフレームワークであるため、単一のページを読み込んだ後にクライアント側で柔軟に表示を切り替えていく機能を備えています。 AngularJSでは$routeProviderを使うことによって、リクエストURL別にコントローラーやテンプレートを切り…

【AngularJS】Controller間で共有可能な値を定義する

AngularJSでは、Controller間で共有可能な値を定義する方法が二通りあります。 value constant value valueメソッドを使うことで、Controller間で共有できる値を定義することができます。 定義した値はControllerの引数に設定することで使用可能になります。…

【AngularJS】AngularJSで動的にイベントハンドラを定義する

AngularJSのモジュールを使い、動的にイベントハンドラーを追加する方法メモ。 // controller angular.module('myApp',[]) .controller('myController',[ '$window', function($window){ // 画面全体に対するクリックリスナー angular.element($window).bind…

【AngularJS】Viewにhtml文字列を挿入、htmlとしてレンダリングする

AngularJSを使ったフロント開発の中で、技術記事のAPIで取得したHTMLを画面に表示させたくなった ときの処理をメモ。 ng-bind-htmlでViewにhtml文字列をサニタイズされた形で挿入できます。 View <div ng-bind-html="article.body"></div> // APIで記事を取得 articleService.getArticle().then(fun…

【AngularJS】既存のServiceを拡張した派生Serviceを定義する

AngularJSで既存のServiceが持つ機能を拡張させたServiceを定義したかったので、 以下のようにしてServiceを派生させてみました。 Service定義 "use strict"; // 基底Service(factory形式) angular.module('App') .factory('baseService',[ function(){ let …

【AngularJS】AngularJS1.6の$httpでは、success()/error()の代わりにthen()/catch()を使う

少し嵌ったのでメモ。 AngularJS1.6の$httpでは、HTTPレスポンスが返ってきたときに走る処理を記述するsuccess()とerror()が非推奨、もとい使用不可な状態となっていました。 Due to b54a39, $http's deprecated custom callback methods - success() and er…

【SQL】定数列を出力する

SQL

SELECT文でRDBMSに対する問い合わせを行う際、結果テーブルの各行に対して定数列を設けることができます。 あまり使い所はないかもしれませんが、知らなかったのでメモ。 ------------------------- -- DBMSはPostgreSQL -- ------------------------- -- テ…

【git】git blameでファイルの修正履歴を追う

git blame git blameコマンドにgitリポジトリで管理されたファイルのパスを渡すことで、 そのファイルをいつ、誰が編集したのか見ることができます。 GitHubなどのリモートリポジトリサービスでも「誰がやったか」の情報を見ることができますが、 ローカルの…

【git】git reflogでgitの履歴に対する過去の操作を管理する

git reflog git reflogは過去に更新したブランチの履歴などを参照ログとして閲覧できる機能です。 下の例では、あるリポジトリに対して淡々とコミットした履歴を一覧表示しています。 $ git reflog # commitやresetした履歴 80634e3 HEAD@{0}: reset: moving…

【AngularJS】Jasmine+KarmaでAngularJS用テスト環境を構築する

AngularJSはフルスタックなフレームワークで有名ですが、テストもサポートします。 AngularJSではテスティングフレームワークとテストランナーと呼ばれるツールを用いて、ユニットテストとE2Eテストを実行します。 テスティングフレームワーク ソフトウェア…

【git】git tagで特定のリビジョンにタグを打つ

Git

git tag git tag コマンドを使うことで、特定のリビジョンに対してタグを付加することができます。 リビジョンに付加したタグはリビジョンのエイリアスとして使うことができます。 Usage git tag [タグ名]だけで、HEADが指すリビジョンにタグを付けることが…

【git】git add をインタラクティブに操作する

Git

git add git addコマンドはコミット対象となるファイルを指定するためのコマンドです。 もっと厳密に言うと、直前のコミット履歴(リビジョン)から現在のファイルの状態(ワーキングツリー)との差分のうち、どの部分を次のコミット履歴の対象とするか(ス…

【SQL】UPDATE時、非NULL属性のみ更新する

SQL

テーブルのレコードを更新する時に値が非NULLの属性だけを更新したいケースが発生し、 少し考えた結果、以下のようなやり方に落ち着きました。 DBMSはDb2です。 -- テーブル定義 CREATE TABLE HOGE { ID INTEGER NOT NULL, NAME VARCHAR(16), ADDRESS VARCHA…