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

Mac OS X でのrbenvによるruby環境構築

「初心者なんで、rbenvで構築した環境にgemをそのままinstallでいいよねー」と思ってたけど、gemのversion違いとかで、そのうち涙目になりそうな気がしてきたので、真っ当な方法を模索してみました。 いくつ記事を漁ったところ、bundlerを使うのはもはや当然…

続:Learning JavaScript Design Patterns

Abstract Factory VehicleFactory をそのままではちょっと芸がないので、Ballにしてみた。 Decorator Crepeをデコレーションしてみた。 Flyweight イミュータブルな巨大配列の作成に Flyweight を適用してみた。

Learning JavaScript Design Patterns

JavaScriptデザインパターン作者: Addy Osmani,豊福剛,サイフォン合同会社出版社/メーカー: オライリージャパン発売日: 2013/05/25メディア: 大型本この商品を含むブログ (7件) を見る 原著である Learning JavaScript Design Patterns がオンラインで公開さ…

メモリリーク

メモリリークに関して理解したかったので、いくつか記事を読んでみた。 ガーベッジ・コレクターは定期的にオブジェクト・グラフ全体を調べ、各オブジェクトを参照している他のオブジェクトの数をカウントします。あるオブジェクトのカウントがゼロの場合 (そ…

new演算子を使わない

JavaScript The Good Partsでnew演算子は使わないほうがいいよと書かれてるものの、具体的な方法明示されてないので、少々調べてみた。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new より引用。 When the code new foo…

スタックトレースをHTMLで

オレメモ。 PlackならPlack::Middleware::StackTraceを使えばカンタンなんだけれど、深淵なる理由で使えぬ時はこんな感じで書き出してる。

brew install vim

lua, luajit, perl, python オプション付でhomebrewでインストールする方法。 brew install vim \ --with-lua --with-luajit --with-perl \ --with-python3

VERSION MISMATCH in OpenSSL test program

ちょっとハマったのでメモしておく。 状況 $ cpanm Crypt::OpenSSL::CA (中略) Configuring Crypt-OpenSSL-CA-0.23 Running Build.PL Checking OpenSSL version number... *** VERSION MISMATCH in OpenSSL test program! *** The version number extracte…

ViewControllerを再帰的にPushする

ios

StoryBoardでUIを構築しているViewControllerをどうやったら再帰的にNavigationControllerにpushできるか。 方法1 instantiateViewControllerWithIdentifierメソッドを使う。 - (IBAction)didPressPushButton:(id)sender { MTViewController *vc = [self.sto…

NavigationBarとNavigationToolBar

「StoryBoard上で、Bar Button ItemやNavigation ItemをViewControllerに追加しても、ちっとも反映されないよ…」と悩んでいたものの、もしかしてと思ってUINavigationControllerリファレンスを読んだらやはり。 UINavigationController Class Reference The …

IBM X40にUbuntuをインストールした

Windows XPのサポートが終了した。 が、OSサポートが終わったくらいでX40を捨てるのももったいないので、Ubuntuをインストールすることに。その時の記録を残しておく。 事例を探す X40にUbuntuをインストールしたというドンピシャな事例を発見! http://bell…

perlにおける "-" と "--"の扱い

問1 curl -L http://cpanmin.us | perl - Task::Amon2 -nv がやっていることを正確に述べよ(10点) んー、自信なし。 ということで、真面目に調べてみる。 こういう時はじぶんで試行錯誤してみるのが吉。 test.pl #!/usr/bin/env perl use strict; use warn…

コードからStoryBoardのViewControllerをインスタンス化する

http://www.rizastar.com/blog_xcode/access-storyboard-from-code/ こちらに書かれてることまんまですが... 1. StoryBoardにidentifierを設定 2. instantiateViewControllerWithIdentifierでinstance化 MTFlippedViewController *vc = (MTFlippedViewContro…

staticとconst

c

staticについては Practical Programming in C - Lec01 で少しだけ書いたけど、おさらいしてみる。 static宣言 使い方は2通り。1つは外部変数や関数のスコープをそのファイルのみに閉じること。もう1つは関数の内部変数に適用し、静的領域にメモリを確保する…

Same Origin PolicyとCORSとCPS

web

一度きちんと整理しておきたし。 オリジンとは URLのscheme, host, portによって定義される。以下、いずれも違うオリジンになる。 http://example.com https://example.com http://sub.example.com http://example.com:8080 同一生成元ポリシー 英語で言うと…

CocoaPods

ios

CocoaPodsのインストールでだいぶハマって時間かかってしまった。 まずインストールされてるrvmとrubyのバージョンが古かったので、一からクリーンインストールした。これは割愛。 gemのインストール $ gem install cocoapods -V cocoapodsのセットアップ $ …

カンタンRemote Debug

以前は、ADBやport forwardingが必要ですごく敷居が高かったが、Chrome32からすごくカンタンになった模様! https://developers.google.com/chrome-developer-tools/docs/remote-debugging?hl=ja

APUE - 17 UNIX Domain Sockets

Unixドメインソケットは、同じマシン上のプロセス間コミュニケーションに使われる。 とりあえずソケットをつくってみる、カンタンな例。 $ ls -ila foo.socket 61366608 srwxr-xr-x 1 kotaroito 1522739515 0 3 5 23:01 foo.socket socketがつくられてるのが…

APUE - 16.3 Addressing

本日はSection 16.3 Addressing。 getaddrinfo(3) getaddrinfo() は、(インターネットのホストとサービスを識別する) node と service を渡すと、一つ以上の addrinfo 構造体を返す。それぞれの addrinfo 構造体には、 bind(2) や connect(2) を呼び出す際に…

APUE - 4.14 File Systems

i-nodeについてきちんと理解したかったので、本日は4.14 File Systems。 Figure 4.14 Cylinder group's i-nodes and data blocks in more detail i-nodeとは? ファイル種別、アクセス権限、サイズ、データブロックへのポインタなど、ファイルに関するメタ情…

iCalendar, webcal

iCalendarについてちょっと調べたので、メモ。 iCalendarとは? iCalendarはイベント・TODOなどのカレンダーデータを表現・交換するための標準フォーマットで、RFC 5545(旧版 RFC 2445)で規定されている。 RFC 5545 This document defines the iCalendar d…

APUE - 3.11 Atomic Operations

pread(2) Man page of PREAD pread() は、ファイルディスクリプタ fd の (ファイルの先頭からの) オフセット offset から最大 count バイトをバッファ buf へ読み込む。ファイルオフセットは変化しない。 lseek(2)に続けてread(2)を実行したのと概ね同じだが…

APUE - 16.3.1 Byte Ordering

include pathのアレコレ

c

インクルードパスについてのアレコレをメモ。 PATHを調べる gcc -v で確認ができる。 $ gcc -v hello.c (略) #include "..." search starts here: #include <...> search starts here: /usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/includ…

APUE - 15.9 Shared Memory

普通にforkしちゃうと、変数は共有することができない。 が、shmget(2), shmat(2)を使えば、メモリを共有することができる。 shmat(2) #include <sys/types.h> #include <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int shmflg); int shmdt(const void *shmaddr); shma</sys/shm.h></sys/types.h>…

semaphore

c

POSIXのセマフォとSystemVのセマフォと2種類がある。 後者はAPI仕様上、複数個を扱うことになるのでやや使いづらい。 http://www.ibm.com/developerworks/jp/linux/library/l-semaphore/ APUEで解説されてるのはSystem Vのセマフォなので、そちらを。 最もシ…

nodebrew + node.js

js

ついカッとなって、node.jsをインストールしてみた。 homebrewでソースからビルドすると時間掛かるらしく、最近だとnodebrewがいいとの話なので、その方向で。 homebrewのnodeは消しておく $ brew uninstall node nodebrewのセットアップ $ curl -L git.io/n…

FIFO

c

FIFOは名前付きパイプとも呼ばれる。pipe(2)によってつくられるパイプは"無名"で、親子関係など限られたプロセス間通信にしか使えないが、FIFOならばそのような制約はない。さらに、FIFOはファイルと同じように扱える。 カンタンな例 mkfifo(1)を使う。 shel…

pipeとdup

c

dup(2), dup2(2)

c

Advanced Programing in the UNIX Environmentを再開した。 本日はdupとdup2を。 詳解UNIXプログラミング作者: W.リチャードスティーヴンス,W.Richard Stevens,大木敦雄出版社/メーカー: ピアソンエデュケーション発売日: 2000/12メディア: 単行本購入: 8人 …

アルゴリズムとデータ構造

c

MIT Open Coursewareが終わったので、次は積ん読になっていたこれ。 プログラミングの宝箱 アルゴリズムとデータ構造 第2版作者: 紀平拓男,春日伸弥出版社/メーカー: ソフトバンククリエイティブ発売日: 2011/03/30メディア: 単行本購入: 15人 クリック: 255…

pipe(2)

c

PIPE(2) #include <unistd.h> int pipe(int pipefd[2]); pipe(2) はパイプを生成する。 パイプは、プロセス間通信に使用できる単方向のデータチャネルである。 配列 pipefd は、パイプの両端を参照する二つのファイルディスクリプタを 返すのに使用される。 pipefd[0] </unistd.h>…

malloc(2), calloc(2), memset(2)

c

MAN void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); malloc() 関数は size バイトを割り当て、 割り当てられたメモリに対する ポインタを返す。メモリの内容は初期化されない。 size が 0 の場合、 malloc() は NULL または free() …

select(2), poll(2)

c

引き続き、MIT Open Courseware。 select(2) int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespe…

socket(2), bind(2), listen(2), accept(2)

c

本日は、MIT Open CoursewareのLecture14で、socket(2), bind(2), listen(2), accept(2)など。 アレコレ参考にしながら、最もシンプルなサーバとクライアントを書いてみた。 サーバ クライアント socket(2) #include <sys/socket.h> int socket(int domain, int type, int </sys/socket.h>…

thread / mutex

c

引き続き MIT Open CoursewareのPractical Programming in C に取り組み中。本日はLecture13のrace conditionについて。 #include <stdlib.h> #include <stdio.h> #include <pthread.h> unsigned int cnt = 0; void *count(void *arg) { int i; for ( i = 0; i < 100000; i++ ) { cnt++; } </pthread.h></stdio.h></stdlib.h>…

スレッドで共有されるリソース

Operating System Conceptsを引っ張りだして、再整理。 出典: Operating System Concepts - Fig4.1 メモリのコードセクションとデータセクション が共有される。 また、ファイルディスクリプタとシグナル が共有される。

mmap(2), msync(2)

c

mmapは「ファイルやデバイスをメモリにマップ」するシステムコール。 msyncは「ファイルをマップしたメモリと同期させる」システムコール。 #include <stdlib.h> #include <fcntl.h> #include <stdio.h> #include <sys/mman.h> int main(int argc, char* argv[]) { int fd; char *cp; fd = open("/tmp</sys/mman.h></stdio.h></fcntl.h></stdlib.h>…

charとint

c

#include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]) { FILE *fp; char c[5] = { '1', '2', '3', '4', '5' }; if ( (fp = fopen("/tmp/foo", "w")) == NULL ) { exit(EXIT_FAILURE); } fwrite(c, sizeof(char), 5, fp); fclose(fp); exit(EXIT_SUCCESS); </stdio.h></stdlib.h>…

ダイナミックリンクと共有オブジェクトファイル(.so)

c

実行までの流れ プログラムをコンパイルしてオブジェクトファイルを生成 オブジェクトファイルをリンカで結びつけて実行ファイルを生成 共有オブジェクトファイルは、実行時に動的にリンクされる。 やってみる 足し算をするだけのライブラリをつくってみる。…

ttyとプロセス管理

ttyやら端末切断時のプロセス管理について曖昧だったので、調べてみた。 ttyとは... ttyとは、標準入出力となっている端末デバイス(制御端末、controlling terminal)の名前を表示するUnix系のコマンドである。元来ttyとはteletypewriter(テレタイプライター…

segmentation fault

c

segmentation fault(セグメンテーション違反)は、許可されていないメモリ領域へのアクセス あるいは 操作によって発生するエラーである。 例えば、NULLポインタの指すアドレスに値を書き込もうとした場合に発生する。 #include <stdlib.h> #include <stdio.h> int main(int ar</stdio.h></stdlib.h>…

データ構造とアルゴリズム

c

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/lecture-notes/ でC言語を学習中。 例題をいくつかやってみた。 バイナリツリー #include <stdlib.h> #include <stdio.h> struct tnode { int data</stdio.h></stdlib.h>…

onScrollイベント

どの位置までスクロールしたかを拾ってみるテスト。 gist:8083161

Cache-Controlヘッダ

Cache-Controlヘッダについて、理解があやふやだったのでstudyinghttpとRFCを読んでまとめてみる。 http://www.studyinghttp.net/header http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3 HTTP 1.0と1.1 HTTP/1.0ではCache-Controlは実装…

Practical Programming in C - Lec01

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/index.htm をやってみることにした。学んだことをメモしていく。 gccオプション -I includeヘッダのpathを指定。 -g gdbコマン…

オンラインツールまとめとく

プログラミング学習 Codeacademy : プログラミング(英語) ドットインストール: プログラミング(日本語) Dash : サイトデザイン(英語) サイトビルダ Wix Strikingly

syncとfsync

理解が曖昧だったので、きちんと調べてみた。 sync(2) sync() を呼び出すと、バッファされたファイルのメタデータとデータ本体に対して行われた全ての変更が、対応するファイルシステムに書き込まれる。 fsync(2) fsync() は、ファイル記述子 fd で参照され…

複数ファイルから書き込む

複数ファイルから書き込む時には、排他ロックを掛ける or 一時ファイルに書き込んでrenameが常套手段。前者については 共有ロックと排他ロックとで調べたので、後者について。 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include "error.h" #defin</string.h></fcntl.h></unistd.h></stdio.h></stdlib.h>…

複数プロセスからの書き込み - file tableとcurrent offset

同時に複数プロセスから書き込むとファイルが壊れるというが、壊れるというのはどういうことか。 出典: Advanced Programing in the Unix Environment - Figure3.7 異なるプロセスから同じファイルをopenすると、異なるfile tableエントリー(current file o…