by shigemk2

当面は技術的なことしか書かない

読書ノート

ランダムアクセスとは

ファイルの先頭からレコードを物理的に記録されている順番にアクセスすることである。これは直接アクセスとも言われる。 常に記憶媒体の先頭からアクセスするのはシーケンシャルアクセスと呼ばれる。 ランダムアクセス - Wikipedia 昔読んだ本にランダムアク…

第13章NoSQLを取り巻く世界 13.1 その名の由来は #read_aosa

HPTS 2011: The NoSQL Ecosystem from Adam Marcus Not Only SQL(RDBMSじゃないSQL) データベース側に隠蔽されていた操作をアプリケーションの設計側に押し出した システムアーキテクトの立場で考えると、これらのシステムの仕組みをより深く知っておく必要…

4.9 トランザクションマネージャー: Txn #read_aosa

Berkeley DB このモジュールは、独立したコンポーネントたちをとりまとめてトランザクショナルなACID特性を提供する ACID 原子性(Atomicity) 一つのトランザクションで実行するすべての操作をひとまとめにして扱う。データベースにすべて反映されるかひとつ…

4.8 ログマネージャー: Log #read_aosa

Berkeley DB ログマネージャ ログマネージャーは、構造化された追記限定のファイルを抽象化したものである ログの概念は極めてシンプルである。不透明なバイト文字列を受け取り、それをシーケンシャルにファイルへ書き出し、各レコードに一意な識別子を付与…

4.7 ロックマネージャー: Lock #read_aosa

Berkeley DBの続き ファイル→ページ→レコードという階層構造が存在する Mpoolと同様、ロックマネージャーも汎用コンポーネントとして作られた Mpoolの場合と同様、他のアプリケーションからもまったく違う方法でロックマネージャーを使えるという点が重要 ロ…

4.6 バッファマネージャー Mpool #read_aosa

BerkeleyDBの続き Berkeley DB Mpoolサブシステムについて Man page of MPOOL ファイルページを扱うインメモリのバッファプール ソフトウェアを実行する際、使用するプログラムやデータのすべてをメモリ上に読み込み、ハードディスクなどの外部記憶装置を使…

4.5 基盤となるコンポーネント #read_aosa

BerkeleyDBの話。 4つのサブシステム バッファマネージャ ロックマネージャ ログマネージャ トランザクションマネージャ すべて自前のAPIを有する 独立して使うこともできるが、共通のオブジェクトハンドルであるenvironmentハンドルを共有するようになった …

AOSA 4 Berkeley DB その1 #read_aosa

Oracle資料 http://www.oracle.com/technetwork/jp/ondemand/db-new/ord-seminar-bdb-v1-20101027-251331-ja.pdf Berkeley DBの5つの特徴 • 組み込みに適した小型データベース • KVS型のAPIとSQLの2種類のAPIをサポート • オープンソース • 各種プラットフォ…

AOSA 3 The Bourne-Again Shell その7 #read_aosa

bashの開発で学んだこと ChangeLogを詳しく書く(そのとき変更したことを後から思い出せる) 回帰テストをプロジェクトの立ち上げ時から組み込んでおくべき(非対話的な処理はすべてカバーしている) 標準規格は重要。ソフトウェアの標準化作業も重要(さまざま…

AOSA 3 The Bourne-Again Shell その6 #read_aosa

コマンドの実行その2 単純なコマンドの実行 シェルの変数への代入(つまり、var=value形式の単語)は、それ自身が単純なコマンドの一種 指定したコマンド名がシェルの関数や組み込みコマンドにないものであった場合、bashはファイルシステムから、その名前の…

AOSA 3 The Bourne-Again Shell その5 #read_aosa

コマンドの実行その1 bashの内部パイプラインにおけるコマンド実行ステージは、実際のアクションが発生する場所である コマンド名の部分が読み込んで実行するファイルとなり、残りの単語はargvの残りの要素となる(ls -al hogeでいうと、lsがコマンドで、-al…

AOSA 3 The Bourne-Again Shell その4 #read_aosa

パースが終わったら、実行の前に、パース段階で生成された単語の多くを展開することになる。つまり、(たとえば)$OSTYPEを文字列"linux-gnu"に置き換えたりするような処理だ 変数は、わずかな例外を除いて文字列として扱われる(型付けが存在しない) シンタ…

AOSA 3 The Bourne-Again Shell その3 #read_aosa

パース パースエンジンが最初にする仕事は字句解析、つまり文字のストリームを単語に区切ってそれに意味を与えるということだ エイリアスは完全な単語なので、エイリアスを使えば文法をも変えられる エスケープを使えば特殊な意味をもたせることもできる 字…

AOSA 3 The Bourne-Again Shell その2 #read_aosa

入力の処理 入力処理は行単位で行われる コマンドラインの編集はreadlineライブラリを使って行われる キーシーケンス(カーソル移動や行削除などのキーバインド) マクロ Readlineの構造 ループで構成されている 管理する文字バッファや文字列はCのcharだけ…

AOSA 3 The Bourne-Again Shell その1 #read_aosa

AOSA 3 The Bourne-Again Shell その1 #read_aosa プリミティブ bash 3つのトークン 予約語(while) 演算子(=) 単語(それ以外) 変数およびパラメータ 変数の値は文字列 何も代入されていない変数はunset扱い $で始まる単語は変数あるいはパラメータへの参照…

デュアルライセンス

"1つのソフトウェアについて、オープンソース版と商用パッケージ版という異なるライセンスを提供する形態は「デュアルライセンス」と呼ばれています" http://t.co/rpmxOxI0jr— 炭鉱ハッカー shigemk2 (@shigemk2) 2014, 8月 29 この本、もうNoSQLだけじゃな…

DBにおける整合性

"言う整合性(Consistency)とは、何らかのオペレーションが実行されたあとに、複製(レプリケーション)されたデータ間に矛盾がない状態にあることを意味します。" http://t.co/RPYngJN6Uk— 炭鉱ハッカー shigemk2 (@shigemk2) 2014, 8月 26 RDBでは整合性…

たのしいバイナリの歩き方 読書ノート 1

今流行りのリバースエンジニアリングが出てるね。 動的解析と静的解析の違いについては、Ruby Hacking Guideの序章に詳しく書いてあったりする。 序章 導入 "レジスタとはCPUが内部に持つ記憶領域です。その記憶領域にはそれぞれEAX、ECX、EDX、EBX、ESP、EB…

システムはなぜダウンするのか

システムがダウンする原因は、機械の故障、ソフトウエアの不具合、操作ミス、アクセス量の急増などさまざまです。しかもたいていは、1つの不具合が別の不具合を引き起こし、複数の不測の事象が数珠つなぎに発生します。 これはわかる。 ダウンの根本原因を突…

OOPの進化

パッケージ 名前の衝突を気にせずにプログラムを再利用できる 例外 特別なエラーを返す可能性があることをメソッドで宣言する GC いっぱい作ったインスタンスは言語側で勝手に削除してくれる

OOPのよいところ

クラス サブルーチンとグローバル変数などをまとめる クラスの内部だけで使う変数やサブルーチンを隠す 1つのクラスからインスタンスをたくさん作る ポリモーフィズム 共通メインルーチンをつくるための仕組み プログラムを簡単に書く 継承 クラス定義の重複…

プログラミング言語の進化

何ページだ 基本三構造 順次実行 条件分岐 繰り返し GOTOレスプログラミング GOTOがあると(多用されると)非常に読みづらい サブルーチン 関数、プロシージャとも呼ばれる。 これによりプログラムの独立性が強化される。 残された課題 グローバル変数問題 貧…

リーン・スタートアップ

追記 + 感想 手法そのものがWeb系全般のノリである「とりあえずβ版を出してフィードバックを得て改善する」を地でいく方法だからなのか、はたまた著者がエンジニアの経験があるからなのか、 「アジャイル」とか「デプロイ」とかエンジニアの用語がちょくちょ…

cp自作

例によってCentOS 6.5 typoによりbad file descriptorが出たりして悲しかった エラーの詳細(JP1/Advanced Shell固有の場合) /* cp1.c * cpのバージョン1 uses read and write with tunable buffer size * 使い方 cp1 src test */ #include <stdio.h> #include <unistd.h> #inc</unistd.h></stdio.h>…

MVCの開発順序

フレームワークで開発するときって、 基本的には MVC という順番になる。 Controllerを書くためにViewを定義して、渡す値を決めておく必要がある。 Viewをつくるうえでは一覧を表示したりフォームを表示したりする必要があるので そのまえModelを定義する必…

ソフトウェアツールの開発理念

1つのことを、しっかりやる バイナリデータではなく文字列を扱う 文字列がデータ形式として普遍的な役割をはたす。 正規表現を扱う 使いこなせば、使いこなせることが出来れば、スクリプトの作成を大幅に簡略化できる 特に指定がなければ標準入力と標準出力…

過負荷に耐えるwebの作り方 感想

雑な感想 同僚から借りて読むことにした。 曰く「微妙」らしいが、僕は微妙というか地味だと思った。良い意味で。 Puppetで自動化したりとか、AWSでスケーリングしたりとか、 Seleniumでテストしまくったりとかっていうのではなく、 かといってなれるSEみた…

プロセスの制御

forkシステムコールはプロセスを生成する 子プロセスは親プロセスのコピーである waitシステムコールは子プロセスの処理完了を待つためにスリープし、子プロセスが終了すると子プロセスの後始末を行う execシステムコールは実行プログラムファイルをメモリに…

プロセス

プロセスは実行中のプログラムを管理する単位 実行プロセスを随時切り替えることで複数のプログラムを並行して実行 proc構造体とuser構造体が各プロセスの制御・状態情報をあらわす proc構造体はメモリに常駐。user構造体はスワップアウトの対象 各プロセス…

UNIX V6とは

UNIX V6とは1975年にベル研究所からリリースされた UNIX V6とは最新OSの始祖ともいうべきOS UNIX V6はシステム構築に最低限必要なサービスを提供する ハードウェアを使う処理やシステムに影響を与える処理はカーネル内に隠避される ユーザープログラムはシス…