Send data notification to Android app with Cloud Functions for Firebase

Androidアプリがフォアグラウンドでもバックグラウンドでも、通知を受け取った後にそれを表示するかどうかをアプリ内で判断させたいときは Firebase の data message を送る必要がある。 FirebaseコンソールからはNotification Composerを使って、notificati…

【和訳】Android Architecture Components ViewModel

自分で理解するために ViewModel | Android Developers (原文) を訳しました。 サンプルコードや図を全て写していないので、原文を見ながら適宜理解を深めるのに利用してください。また、理解しやすいよう所々補足を加えています。先にアクティビティの実行…

BitcoinのBlockとTransactionのデータ構造について

BitcoinはP2P通信技術を利用している。Bitcoinネットワークに参加する各ノードはクライアントとしてもサーバーとしても動作し、データの生成と送受信を行う。各ノードが持つデータはほとんど同じである。(常にノード間でブロックとトランザクションをやり取…

BitcoinとBlockchainについて調べたこと

Bitcoin: 非中央集権型の電子通貨。非中央集権型とは、銀行などの信頼された金融機関が取引に関与しないことをさす。金融上の取引を行う際、銀行の役割は支払い者に支払いの能力があることと、取引が不正ではないことを保証することである。Bitocinは、その…

アルゴリズムを評価する計算量について

アルゴリズムを評価できるように、計算量(ランダウの記号)について調べた。 アルゴリズムの評価 アルゴリズムは、実行に必要な資源の量で評価される。 資源とは、実行にかかる時間と使用するメモリ領域を指す。一般的には資源が少ない方が評価が高いが、計算…

ニュートン法を使って、平方根を求めるアルゴリズムを書いてみよう

Goのプレイグラウンドで遊んでたら、フロー制御の章でニュートン法を使って平方根を求めましょう( A Tour of Go )と言われたので調べた。 ニュートン法とは? ニュートン・ラフソン法(Newton-Raphson method)ともいう。 与えられた関数についてになるの近似…

Rubyのオブジェクトモデルを紹介しました。

speakerdeck.com

zshellを導入したときのメモ

ログインシェルをbashから、zshellに変更した。brewでzshをインストール。 $ brew install zsh ... ... $ which zsh /usr/local/bin/zshシステムで有効なログインシェルの一覧を、/etc/shellsで見ることができる。 ログインシェルとは、ユーザーがシェルに…

ターミナルからgemを使うときにバージョン指定する

忘れちゃうのでメモ。 $ rails _5.0.0.beta3_ new AppName $ pry _0.9.12.2_ pryのバージョンを確認したいとき でできます。

RubyのClassクラスについてとか、クラスを知るためのメソッドとか、あれこれ(メモ)

Rubyで MyClass.class # => Class MyClass.class.class # => Class という結果に Σ(・∀・;) となったので調べた。 (.classはオブジェクトが定義されたクラス名を返す。) まとめ Rubyでは、定義されたクラスは全て、Classクラスのインスタンスとなる。 Rub…

emacs key bindingメモ

キーバインドのデフォルトで C-h がHELPの設定になっていたので、 ~/.emacs.d/init.el ファイルに下記マクロを追加。シンタックスはemacs lisp. (keyboard-translate ?\C-h ?\C-?) Function: keyboard-translate from to この関数は、文字コードfromを文字コ…

JavaScript 関数のカリー化と部分適用

引数を複数とる関数から、いくつかの引数を固定値で束縛した新たな関数を生成する。これにより、関数を使うたびに同じ値の引数を入力する手間が省け、見た目も簡潔なプログラムになる。 カリー化とは、複数の引数を取る関数を、1つの引数のみを取る関数のチ…

JavaScriptのthis

jsのthisは、ある関数が呼び出されたときに、その関数を格納していたObjectを指す。 js how does "this" work? 関数を単にfunc();という形で単体で実行した場合、thisにはwindowが入る。 new演算子のthis jsのnewは任意の関数と一緒に呼び出すことができる。…

JavaScriptのプロトタイプベースのオブジェクト指向について、調べたこと

jsは(ES6より前は)クラスを持たないオブジェクト指向言語である。クラスの代わりに、プロトタイプというプロパティを作り、そのプロパティを複数のインスタンスで共有する。そのためプロトタイプベースのオブジェクト指向言語といわれている。 jsの全てのオ…

Javascriptでclosureと、applyメソッド、callメソッドを使う

jsが持つ関数スコープを利用してクロージャー(関数閉包)を書くことができる。 js closure 上記の例では、関数countの中のローカル変数iを参照できるのは、無名関数が入っている変数xを実行したときのみである。変数iをグローバル変数にすると他の関数からの…

Javascriptのスコープ(関数、グローバル、ES6はブロック)と巻き上げについて

jsのローカルスコープは関数内のみを参照できることであり、グローバルスコープはscriptのどこからでも参照できることを指す。ローカルスコープを持つ変数をローカル変数、グローバルスコープを持つ変数をグローバル変数という。 スコープは変数が定義された…

Javascriptが持つ関数型言語の特徴(第一級関数、高階関数)

jsはプロトタイプベースのオブジェクト指向言語と呼ばれているが、関数型言語の性質も持ち合わせている。 第一級オブジェクト(first-class object)と第一級関数(first-class function) 第一級オブジェクトとは、プログラムにおいて、生成、代入、演算、(引…

MVCアーキテクチャについて調べたこと

MVCアーキテクチャのはじまり MVCアーキテクチャは、ソフトウェアの構成と役割について言及した概念のひとつ。1978年にXerox Parc(パロアルト研究所)のTrygve Reenskaugが、Smalltalk-76で使われているMVCモデルについて紹介したのが始まりと言われている。T…

オブジェクト指向と、言語の進化を辿るということ

オブジェクト指向とは、属性と振る舞いを持つオブジェクトを作るための「型」を作ることを意識しながらプログラムを書くこと。 と言われても理解は深まらないので、オブジェクト指向ではない指向とはどんなものかを理解して、比較をすることで、理解を深めよ…

Javaソースコードが実行されるまでの流れについて調べた

Javaでいうコンパイルという動作は、C言語とRubyのそれと、どのように違うのか調べた。 Javaソースコードのコンパイル OSやハードウェア依存のJavaプラットフォームで、ソースコードのコンパイルと実行が行われる。コンパイルされたJavaソースコードはバイト…

ネットワーク機器とIPアドレス、ポート番号について調べた

ネットワークを構築するネットワーク機器 有線用機器 ルーター/L3スイッチ: IPアドレスを使って、データの配送先を制御する。インターネットなど、外部のネットワークと接続。 L2スイッチ(スイッチングハブ): MACアドレスを使って、データの配送先を制御す…

ネットワークアーキテクチャと標準化組織について調べた

ネットワークアーキテクチャとは、ネットワークにおいて必要な論理構造やプロトコルを体系的に定めたもの。代表的なアーキテクチャに、OSI参照モデルとTCP/IPモデルがある。 OSI参照モデルとTCP/IPモデルはどのようにして生まれたか 現在のインターネットの…

ターミナルからプライベートIPアドレスとMACアドレス、ルーティングテーブルを確認する

自分のlaptopのプライベートIPアドレスがどのように割り当てられているか、調べる。 ターミナルから$ ifconfig をうつ。複数のインターフェースが表示される。 上記は「lo0」「gif0」「stf0」「en0」が表示されている。 他にも「en1」「en2」「p2p0」「awdl0…

heroku cedar-10が2015年11月以降使えなくなるそうだ

heroku にpushしたら、実行環境(runtime environment)が古いので、バージョンアップしてくださいと言われた。 最新のCedar-14は、Ubuntu OS のver 14.04 を採用している。プロジェクトで使用しているRubyは2.1.0なので、Cedar-14にするには、2.1系の最新版(2…

デジタル証明書とデジタル署名について

SSL/TLSでは、通信途中のデータの改ざんや、フィッシング詐欺(銀行や組織を装い、口座番号やクレジットカードを引き出す)を防ぐために、デジタル証明書とデジタル署名という技術を用いている。 デジタル証明書とは? SSLサーバー証明書ともいう。配布されて…

SSLのハイブリッド方式

SSLはNetscape Communication社で開発された。webブラウザとwebサーバーの間でやり取りするデータを暗号化して通信するためのプロトコル。暗号化とデジタル署名の技術を使い、セキュアな通信を実現する。 SSLでは「共通鍵暗号化方式」と「公開鍵暗号化方式」…

Linuxについて調べたことまとめ

1991年にフィンランドのLinus Benedict Torvaldsによって開発された。当時、商用のUnixは高価であり、Unixの学習目的で作られたMinixは機能に大幅な制限があったため、Linus独自で開発を始めることとなった。ライセンスはGPL(GNU Public License)である。 Li…

RSAの暗号方式を調べた

公開鍵暗号方式に使われるRSA暗号方式は、Rivest(ライベスト),Shamir(シャミール),Adleman(エイドルマン)の3人によって1977年に考案された。3人の頭文字を取り、RSAと名付けられた。Rivestはハッシュ関数のMD5の作者でもある。 RSAの暗号方式を理解すると、 …