読者です 読者をやめる 読者になる 読者になる

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の全てのオ…

値渡し(call by value)とポインタ渡し(call by pointer)について

C言語では、関数を呼び出す際に、値渡しという方法で引数を渡す。 値渡しは、仮引数に実引数の値をコピーすること。 ポインタ渡しは、仮引数に実引数のメモリアドレスの値をコピーすること。メモリアドレスの"値をコピーする"、という点ではポインタ渡しも値…

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…

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

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

データ圧縮の保存形式について調べた。

昔「セキュリティパッチをダウンロードしてください」と言われて、ダウンロードサイトにいったら、.tarとか.gzとかいろんな拡張子があって、どれをダウンロードしたら良いかわからなかったので、調べた。 実際は、Mac OSを使っていたので、アップルが公式に…

ユーザーエージェントに記載されるHTMLレンダリングエンジン

ブラウザのユーザーエージェントに"Gecko"って書いてあって、カエルか。と思ったので、調べてみた。 geckoとは HTMLレンダリングエンジン群の総称。HTML, CSS, XUL, Javascriptなどを解釈する。オープンソースで開発が進んでいる。Netscapeシリーズ6以降及…

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…

rails を4.1.6から4.2.1にしたら、awsが動かなくなって、deliverメソッドを注意された

rubyのバージョンもあげようと思ったけど、 $ rbenv install --list で見たら、2.2.0-preview1が最新だったので、安定版が出るまで待つことにする。 railsのバージョンをあげよう まずテストが通るか試す。アップデート後のエラー修正で、原因の特定がしやす…

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

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

SSLのハイブリッド方式

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

sshとsslの違い

SSHとは、リモートホストのシェルを利用するための通信プロトコル。同じ機能を持つtelnetやftp(file transfer protocol)は、ネットワーク上に平文でパスワードを送信してしまうため、パスワードをネットワーク経路上で盗聴される可能性が高い。Secure Shell(…

技術に関する書籍からの引用

知人に『計算機プログラムの構造と解釈』という本を紹介してもらった。読み始めて、この本がMITの計算機科学学科で使われている教科書だと知った。こんな高尚な本を紹介されると、期待に応えるために頑張ろうと勝手に思ってしまう。 Amazon.co.jp: 計算機プ…

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の暗号方式を理解すると、 …

Google Public Domain Name System(DNS)

DNSは、ホスト名とドメイン名をIPアドレスに変換してくれるサービスです。 通常はインターネットサービスプロバイダが独自のサービスを提供してくれますが、 Googleさんも提供していると聞いて、早速やってみた。 Using Google Public DNS - Public DNS — Go…

データベースの基本

DBの基本を勉強した。 web applicationの開発をしていて、そもそもDBってなんやねん!って思ってた。 DBってなんだ? 整理した形でデータを保存しておく「基地(Base)」。整理の方式は階層型、ネットワーク型、リレーショナル型がある。人気のリレーショナ…