* javascriptにおける設計、テスト * [ModelとViewを明確に分ける]ModelにDOMを入れない,データ管理のみを行なう。 * [Viewを疎結合にする]他のViewと完全に分ける。Modelを通してデータのやりとりをする * [テスト]単体=>Selenium。ここのモジュールやメソッドを対象にテストを実施。
2025 on Tumblr: Trends That Defined the Year
let's talk about Bridgerton tea, my ask is open
Jules of Nature
Acquired Stardust

Product Placement


blake kathryn
Aqua Utopia|海の底で記憶を紡ぐ
I'd rather be in outer space 🛸
PUT YOUR BEARD IN MY MOUTH
he wasn't even looking at me and he found me
Cosimo Galluzzi

Origami Around

JVL

❣ Chile in a Photography ❣
noise dept.
tumblr dot com
Peter Solarz

Kaledo Art
seen from Austria
seen from United States

seen from Canada

seen from Türkiye
seen from United States

seen from Brazil
seen from Brazil

seen from Slovakia
seen from Colombia

seen from United States
seen from Hungary

seen from United States

seen from Italy
seen from Israel
seen from Germany

seen from Malaysia
seen from Germany

seen from Saudi Arabia
seen from Saudi Arabia

seen from United States
@foo-tumbler
* javascriptにおける設計、テスト * [ModelとViewを明確に分ける]ModelにDOMを入れない,データ管理のみを行なう。 * [Viewを疎結合にする]他のViewと完全に分ける。Modelを通してデータのやりとりをする * [テスト]単体=>Selenium。ここのモジュールやメソッドを対象にテストを実施。

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
アドテクの歴史
## LSTVとは * Labeled Tab-Separated Values * テキストデータフォーマット * タブ区切りで値に名前をつけたもの hoge:11111fuga:22222 ## 利点 * parseしやすい。apachelogとか大変 * 拡張性も高い。ログにカラムを追加したい場合、apachelogとかだとparse scriptが崩れるが、LSTVなら問題無い ## 欠点 * 可読性が若干低い * フィールド名のサイズが増える

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
コードリーディング
(書きかけ) #コードリーディング ##コードリーディングの目的 ### 目標の決定 * 新しいパターン * コーディングスタイル * 要件を満たす方法 * 定石 * 言語機能 * アルゴリズム * データ構造 * アーキテクチャ * デザインパターン ## コードリーディングの方法 ### 基本 * 小さく実行 1. 小さなプログラムをビルドして実行して動作を把握する 1. 小さな変更を加える 1. より体系的な方法で学ぶことを考える(関連書籍、ドキュメント、トレーニングコースetc) * 1つのやり方に執着しない * 武器は沢山もっておく * デバッガ * システムコールトレーサ * SQLロギング機能 * パケットダンプ 1. ドキュメントがある場合はそこから始める 1. 実際に利用してみる * システムコール * アルゴリズム * コードシーケンス * アーキテクチャ * 目的と関係ない要素は無視 * mainから見る * 簡単な部分から攻める * 関数を理解するために * 名前から機能を推測 * 冒頭のコメントを読む * 使われ方を調べる * コードを読む * ドキュメントを調べる ##デバッグ ###GDB ####基本操作 起動 sudo gdb /usr/local/sbin/lighttpd gdb内でconfigを指定して起動(breakポイントを埋め込む場合は起動前に) r -D -f /Users/saitoumasakazu/src/lighttpd-1.4.18/doc/lighttpd.conf r -D -f lighttpd.conf ####break point埋め込み ソースに SIGTRAPを埋め込む方法 #include //signal.hを読み込んだ上で raise(SIGTRAP); gdbを起動させたあとに埋め込む //関数を指定 b hoge ###ソースを調べるためのツール ツール | 機能 -|- cb | Cプログラムの整形ツール indent | 同上なツール cdecl | Cの宣言を解読 cflow | プログラムの呼び出し関係を表示 cscope | ソースコード内のコードの特定の要素を呼び出す ctags | タグファイル生成 vgrind | Cのプログラムをかっこ良く印刷 ###実行ファイルを調べるためのツール ツール | 機能 -|- ldd(mac:otool) | 実行に必要なダイナミックライブラリの表示 nm | オブジェクトファイルのシンボルテーブルの表示 strings | バイナリに格納された文字列を表示 sum | ファイルのチェックサムとブロック数の計算。2つのファイルの比較に用いる ###デバッグツール strace, truss | システムコールを表示。プログラムが何をしているか、なぜ失敗するかを調べるのに便利 ツール | 機能 -|- ps | プロセスの状態 ctrace | ソースファイルを修正して ###性能向上 ツール | 機能 -|- gprof|コールグラフの解析データ表示 prof|各ルーチンの実行時間 ### セグメンテーションエラー #### 原因 * 正しい値が格納されていないポインタでの参照 * nullポインタでの参照 * アクセス権限のないオブジェクトへのアクセス * スタック領域やヒープ領域の使い尽くし ##C基礎 ### ライブラリ、リンク、ロード #### コンパイルフロー 1. Cプリプロセッサ 1. フロントエンド(構文、意味解析) 1. バックエンド(コード生成) 1. オプティマイザ 1. アセンブラ 1. リンクローダ #### ダイナミックリンク * 実行時に必要なライブラリを参照する * 利用メリット * 小さな実行ファイル * ライブラリイメージを前実行プログラムが共有 * 作成方法 * ldに渡してあげる * 基本的にスタティックリンクは使わない * ライブラリをリンクするための5つの秘訣 1. 命名規約 * ダイナミックライブラリ : lib~.so * スタティックライブラリ : lib~.a 1. リンクするライブラリ指定方法 * "-l「〜」"で指定 * lib「〜」.so がロードされる 1. コンパイラがライブラリを読み込みに行くディレクトリ * /usr/lib * 環境変数 LD_LIBRARY_PATH, lD_RUN_PATH, _ (非推奨) * コンパイラオプション -L 1. 使っているヘッダファイル名からライブラリ名を推測 * ヘッダファイル名は、ライブラリファイルと名前が一致しているとは限らない * #include を見てみる * 関数をmanで調べる 1. スタティックライブラリのリンクは、ダイナミックライブラリよりも制限されたものになる * コンパイラのコマンドラインでのライブラリの指定順序が重要な意味を持つ #### インターポージング * メソッドのオーバーライドみたいな感じ * リスクが高いので要注意 #### ライブラリ * よく使われる機能をあらかじめ関数として用意 * 何が出来るライブラリがあるかをあらかじめ知っておくことが重要 #### 標準入出力関数 * で呼び出せる * getchar,putchar,gets,puts,scanf,printfなどが用意されている ### ヘッダーファイル * 関数の定義などを分離、共通化する ###宣言 #### define * define 文字列1 文字列2 で文字列1を文字列2に対応付けする #### const * 型変換できない宣言 ### データ型 #### ポインタ * HWレベルで見ると単なるメモリアドレス * 用途 * リンクデータ構造の作成 * リンクリスト、ツリー、グラフ等のデータ構造 * データ構造の動的割り当て * 参照呼び出し * 関数から引数に結果を返したいとき、引数のコピーによるオーバーヘッドを防ぎたいとき * データ要素へのアクセス * 配列要素のアドレスを表すポインタで特定のインデックスの位置にある要素にアクセスできる * 配列要素のポイントにおける演算と、配列のインデックスにおける演算が意味論的なレベルで対応している * 配列による引数と戻り値 * 関数のポインタ * 関数の処理をパラメータ化するために別の関数を引数として利用 * 別名参照 * 文字列 * 文字列リテラルは文字配列をnull文字で止めたもの * 文字ポインタと文字配列の違いに注意 * ダイレクトメモリアクセス #### 構造体 * 複数のデータ要素を集めて一つの単位として扱えるようにしたもの * 用途 * データ要素のグループ化 * 関数から複数のデータ要素を返す * データ構造のマッピング * オブジェクト指向プログラミング #### 共用体(union) * 同じ記憶域を共用する複数の項目を1つにまとめたもの * 用途 * 記憶域を効率的に仕様 * 多態の実装 * 同じオブジェクトを利用して、様々な型を表現 * 様々な内部表現による操作 #### 動的メモリ割り当て * プログラムの作成時点でサイズがわかっていないデータ構造やプログラムの実行中に成長するデータ構造は、実行中に「動的に」割り当てられるメモリに記憶される #### typedef * 独自の型を定義することが出来る * 一度定義すれば、"定義した型 変数名;"の形で利用できる * 抽象化によりコードの可読性を高める等の用途で用いられる ### データ構造 #### ベクタ * 1次元配列 * 一時記憶に使われるときバッファと呼ばれる。 * memsetとmemcpyが配列の初期化と配列内容のコピーによく使われる #### 行列とテーブル * 構造体などがあたる(列は構造体メンバーにあたり、行は要素) #### スタック * LIFO(後入れ後出し) #### キュー * FIFO(先入れ先だし) #### マップ #### 集合 #### 集合リスト * リスト要素を表現した構造体をポインタを通じて連結したもの #### ツリー * 各ノードからツリーのルートまでの経路が一つしかないようなやり方 #### グラフ ### 実行時のデータ構造 #### セグメント * 関連する要素で構成されるバイナリの区画の事 * 実行時リンカがそのままロードできるオブジェクトのイメージ ##### stackセグメント * 後入れ先出し方式のキューを実現するための動的なメモリ領域 * 必要に応じて動的に拡大する * スタック内のデータは自由に扱える * 主な用途 1. 関数内ローカル変数の格納領域(auto変数と呼ばれる) 1. 手続き活動記録。関数がどこから呼び出されたか?レジストリに収まらなかった引数、対比されたレジストリの値などの格納 1. 作業場所。複雑な式の評価中など ##### dataセグメント * 必要に応じて動的に拡大するオブジェクトとヒープが用意されている * ヒープ領域 * 動的にアロケートされる記憶領域。(mallocによりアロケートされ、ポインタを介してアクセスされる領域。) * メモリリーク * mallocで確保した領域は開放してあげないと引き起こされる * 検出方法 * swapコマンドの利用 * psコマンド ###メモリの理解
GNU GLOBALの使い方
## コマンドライン コマンド | 内容 -|- global 関数名 | 関数名 → ソースコード (定義) global -r 関数名 | 関数名 → ソースコード (参照) global -f ファイル名 | ソースコード → 関数一覧 global -c 関数名の一部 | 関数名の一部 → 関数一覧 global -g 検索文字列 | ソースコードの grep ## vim連携 以下の設定を .vimrc に追記した場合 map :Gtags map :Gtags -f % map :GtagsCursor map :cn map :cp コマンド | 内容 -|- gtags -v| タグ付けコマンドの実行 Ctrl + h | 現在開いているファイルの関数一覧表示 Ctrl + u | 関数が定義されている箇所にジャンプ Ctrl + o | 直前の表示に戻る Ctrl + i | 直前の表示に進む Ctrl + g | grep (-g hoge と入力) ## HTML化 htags -ansx
素晴らしい資料。後輩育成に
Linuxネットワークチューニング
## TIME_WAIT ### TIME_WAIT概要 * TCPにおいて、サーバ側からセッションをcloseするとTIME_WAIT状態になる * 確認は netstat -an で可能 * TIME_WAITが増えると利用可能なportがなくなり通信出来なくなる可能性がある ### チューニング
MySQL5.6のイケてる機能
* innodb_buffer_poolのdump * warmup方法に頭を悩ませなくて良い * 無停止ALTER TABLE * メンテナンスに頭を悩ませなくて良い * フェイルオーバー * 自動failoverの仕組みをほぼ作らなくてOK * mysqlbinlogコマンドでのbinary logバックアップ

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
RPS/RFSによるネットワーク割り込み処理の分散
## 背景 * Linuxサーバに高トラフィックの処理をしていると、ネットワーク処理の性能限界に到達することがある * 原因の一つが、NICの受信処理を一つのCPUでしか行えないこと * 同一フローのパケットは送信された順番通りに受信処理を行いユーザプロセスに渡さなければならないため、順番を無視して並列に処理が出来ない ## RPS/RFS * 1つのNICに届いたパケットを複数のCPUへ分散する機能 * HWによる実装 : RSS * SWによる実装 : RPS * 分散先のCPUを最適化 : RFS ## 利用方法 * RPS/RFSに対応したNICとkernelを利用 * ELRepoというところから落とせるらしい * [2.6.35のkernel](http://elrepo.org/linux/kernel/el5/x86_64/RPMS/kernel-ml-2.6.35-14.2.el5.elrepo.x86_64.rpm) 有効化コマンド echo "f" > /sys/class/net/eth1.xx/queues/rx-0/rps_cpus echo 4096 > /sys/class/net/eth1.xx/queues/rx-0/rps_flow_cnt echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
* 明確な言葉を選ぶ * 誤解されにくい言葉を選ぶ * 具体的な名前をつける * 名前に情報を追加する * 単位を付ける(max_kbpsなど) * 不要な言葉は削除する
* 自分を変えようとした場合、決意などを行なっても無駄 * 変えるものは3つしか無いとのこと ## 時間配分の変更 * しっかりと時間を確保する事 * 何かやりたい事がある場合、優先順位、劣後順位を決め実践する時間を決める ## 場所の変更 * 人間、周りの出来事が当たり前と思ってしまう節がある * それに感化されている可能性がある * また、自分の意思を弱くする事象から遠ざかるような工夫も必要 ## 付き合う人を変える * いい影響を受ける人と積極的に過ごす
#GNU Parallelのすすめ * 他のサイトを見てもわかりづらかったParallelについて分かりやすくまとまっててオススメ ##シンプルな使い方 パイプ経由で渡す。xargsと同じ感じで行ける find . -type | parallel gzip ##並列数 -j オプションで指定 * -jN で並列数Nで実行 * -jX% で1コアあたりX%稼働でジョブが実行
#isucon2におけるkazuburoさんの戦略 ##キャッシュ * 動的ページを静的ページに変換できるのであればしてしまう。 * 更新は定期的に行なっておく * アプリケーションロジックを見直し、memcached等を入れられるようにする ##圧縮 * 配信時はgzipを用いてサイズを小さくする * CPUバウンドにならないよう、事前gzip

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
* [一般的なファイルディスクリプタ数のチューニング] ulimit -n or limits.confに設定を記述。全社は一時的、後者はpam認証時のみ有効であることに注意 * [mysqlへの設定時]my.cnfにopen_files_limit を指定した場合のみ有効。上記は適用されない。但し、max_connections や table_open_connectionsが指定されている場合、そちらの結果も考慮された上で決定される。 * [上記から見る運用時の注意]基本的にファイルディスクリプタの上限はmysql起動時に設定されるため、運用中にmax_connectionsをオンラインで変更しても引っかかる可能性がある事に注意