ブログトップ 記事一覧 ログイン 無料ブログ開設

katsuhilo’s awareness (〜言葉と式〜) このページをアンテナに追加 RSSフィード Twitter

2015-03-16 [book][読書]読書メモの作り方 このエントリーを含むブックマーク

読書メモの作り方

〜制約を持つ事で重要箇所を絞り込む〜

1:目的を持って読み始めること

2:付箋は1章3つまで。1冊10こまでetc

3:本の内容を1センテンスにまとめる

4:3点に集約する

5:3アクションにまとめる

※気になった点の概要をメモしていくだけでも良いから何かしら

 アウトプットを。人に話すでも良いかもしれない。

2015-03-06 [business][development][仕事][開発]プログラミング作法5 このエントリーを含むブックマーク

第5章 デバッグ

コーディングと同じ時間をデバッグにかけ過ちから学ぶ

(またバグを見つけたら同じ過ちを犯さないような方法、

再び発生したときの突き詰める方法を学ぶ)

・やみくもにデバッガを使うよりもプリント文とチェックコードの方が融通が利く

・おなじみのパターンを見つける (見慣れた問題かどうかのチェック)

・最新の変更点のチェック (最後に何を変更したか)

・同じ間違いを繰り返さない (同じ間違いが他の場所にないか)

デバッグは今すぐ放置せずに行う

スタックトレースを取得する

・打つ前に読んでみる (印刷してみる、休憩してみる)

・自分のコードを他人に説明してみる

・バグを再現できるようにする

・分割統治する (可能性の範囲を狭めていく)

・誤作動を特定の数値パターンから検証する

・出力表示でバグの検索範囲を狭める

・自己検証コードを記述する (問題の発生前に行うのがポイント)

・ログファイルを出力する

・作図する (度数分布図など)

・ツールを使う (diff、grep など)

・記録を取る (何を行ったのか)

デバッガによって思い込みではない動作による検証ができる

・対象コードやバージョンを間違えている場合も往々にしてある

メモリリークが原因の場合

・極めて稀にライブラリやハードによる原因という場合もある

・再現性の難しいバグでは逆に動的に変化する部分やメモリが怪しい

・他人のバグのときは受け取る側に分かりやすいテストケースで知らせる

2015-03-05 [business][development][仕事][開発]プログラミング作法4 このエントリーを含むブックマーク

第4章 インターフェイス


設計において解決すべき課題。これらが決まったら仕様としてまとめる。

インターフェイス (提供するアクセスやサービス)

・情報の隠蔽 (可視、プライベート)

・リソース管理 (割り当て、解放)

・エラー処理 (検出、報告、報告手段、復旧措置)

・面倒な入力解析プログラムで入力例を付ける

・一度しのぎのはずのプログラムが、その後も使われることは多い

・原則としてライブラリルーチンはエラー発生時に死んではならない


よいインタフェースを作るための留意点。優れたインターフェイスはシンプルで普遍的で整然としており、予測可能で堅牢、更には変化に対応できている。実装が隠蔽されポインタからしかアクセスできないようなもののことを不透過型(opaque type)という。

・実装の詳細を隠蔽する

・直交性のあるプリミティブなセットを選択する

・ユーザに内緒で何かをしない (インタフェースの拡大を含む)

・同じことはどこでも同じように実行する (一貫性と規則性)


リソース管理での要点。ポイントは解放を割り当てと同じレイヤで行う点。マルチスレッドなどではプログラムが再入可能(reentrant)である必要がある。

・初期化/生成

・状態管理

・共有とコピー

・後始末/破棄


strtok は処理の目印として NULL をデータに書き込むので多重呼び出しができない。(スレッドセーフでない。)

・標準関数のエラー処理までをラッパーとして包んで提供する

・勝手に終了はしないようにする(ログに残すなど)

・エラー検出を低いレベルで行い、処理は高いレベルで行う

(呼び出し側で対処するということ)

・例外は例外的な状況でのみ使う

・エラー情報をユーザには分かりやすく伝える (エラー + 正しい方法)

C/C++ では atexit で正常終了直前の制御を取得できる

NaN (Not a Number : 非数) IEEE 浮動小数点数の返す特殊なエラー値

2015-03-04 [business][development][仕事][開発]プログラミング作法3 このエントリーを含むブックマーク

第3章 設計と実装

データ構造が決まればアルゴリズムもすんなり決まることが多い。(データ構造によって全体像が定義されるから。)そのためにもシンプルなアルゴリズムとデータ構造を選択することが重要になる。そして、プロトタイプ(捨てるためのプログラム)を有効的に使う。

アルゴリズムの異なる言語による実装の違いと性能差について。C はソースが長くなるが高速、C++Java はソースはすっきりするが速度面で C に劣る。

2015-03-03 [business][development][仕事][開発]プログラミング作法2 このエントリーを含むブックマーク

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

安定した結果を出すには一定の経験を積むしかない

不慣れな分野に取り組むときは、その分野で既に何が解明されているのかを調べないと、

優れた手法のあることに気付かずに、下手なやり方で苦労することになる。


・逐次検索(sequential search)はデータが少なければ十分実用(逐次検索は線形検索(linear search)ともいう)

・もう少し多い場合は二分検索(binary search)を使う(バイナリサーチではデータが事前にソートされている必要がある)

・汎用的なソート手法としてクイックソートがある (C.A.R Hoare/1960)(ある値を選択して以上/以下に分割し、それを再帰的に行う。

しかし値が全て同じなら n の 2 乗に比例する時間がかかるANSI C なら qsort や bsearch が用意されている、Java の例もあり)

O 記法(O-notation)による、実行時間を n の関数に見立てた計算量(complexity)の算出。

これだけではなく最悪のケースと期待される動作の把握が必要になる。以下に重要となるケースを挙げる。

---

記法 名称 例

O(1) 定数 配列インデックス

O(logn) 対数 二分検索 (段階ごとに半分)

O(n) 1 次 文字列比較

O(nlogn) nlogn クイックソート

O(n2) 2 次 単純なソート手法

O(n3) 3 次 行列乗算

O(2n) 指数 集合分割問題 (全ての可能性の評価)

---

・巡回セールスマン問題等の指数的アルゴリズムの問題は近似値で代用されることが多い

・配列は要素数が可変だったり膨大なときには別のデータ構造を検討する

・アロケートを 1 バイトずつではなくある程度まとめて行う

・memcpy よりも memmove の方が安全でおすすめ*1

・リストは頻繁に順序の変更されるときに向く

・書式文字列を引数に取るという方法

・ルートからリーフまでの個々の経路がほぼ同じ長さのツリーをバランス木(balanced tree)という

再帰が最終的に自分自身の呼び出し結果の返すことを末端再帰(tail recursion)という

・間順走査(in-order traversal)は部分木を左から右へ行く中間で処理の行うことをいう

・降順走査(post-only traversal)は子を訪れてから現在のノードに対する処理の行うことをいう

ハッシュをうまく使えばルックアップや挿入、削除が一定時間で可能になる

ハッシュの配列サイズはルックアップ作業が O(1) になるような大きさにする

・ASCII 文字用のハッシュ関数の乗数には 31 と 37 が適している


アルゴリズムの使用では、まず使えそうなアルゴリズムとデータ構造の吟味し、その上でどの程度の量のデータを処理するのか考え、更にライブラリや言語の機能で使えるものがないか考える。それでも適当なものがなければ、短い実装を書くかどこかから拝借する。


あくまで高度なテクニックに頼るのは上記を行って、なおかつ性能の問題が出たときにする。ほとんど場合、配列、リスト、ツリー、ハッシュで対処できる。

*1:重複アドレスでも上書きしない

2015-03-02 [business][development][仕事][開発]プログラミング作法1 このエントリーを含むブックマーク

第1章 スタイル

基本原則は簡潔性、明両性、一般性

低レベル階層の仕組みを理解するのは有益だ


・よいスタイルは習慣の問題である

・グローバルには分かりやすい名前、ローカルには短い名前

(インデックスの i,j、ポインタの p,q、文字列の s,t など)

・関連性のあるものは統一した命名をする

(queue、Q、Queue などと併用しない、bool を返す is・ など 関数には能動的な名前(動詞 + 名詞)を付ける)

・名前を的確にする

・構造が分かるようにインデントする

・自然な式を使う

(条件式を否定演算(!)ではなく、肯定となるように記述)

・カッコを使って式の曖昧さをなくす

(優先度の高いオペランド同士をくっつけて書く)

・複雑な式を一文にまとめず分割する

・明快に書く (小賢しいコードを書かない)

・副作用に注意する

・インデントとブレースのスタイルを統一する

(作業内容が常に同じ方法なら、それが違うだけで注目できる)

・言語の慣用句によって一貫性を確保する

(gets ではなく fgets を使う、strlen は \0 を含めず strcpy は含む、

多分岐に else-if を使う (可能性の高いものから記述))

落下シーケンスのcase文はきちんとbreakしよう

関数マクロはなるべく使わない (C++ ならインライン関数で代替)

・マクロの本体と引数はカッコに入れる

マジックナンバーには名前を付ける (原則として 0/1 以外の全て)

・数値はマクロではなく定数として定義する

(define ではなく enum や const にする)

・整数より文字定数を使う

(0 をヌルポインタなら (void*)0 や NULL 、文字列終端なら \0 で区別、

0 はリテラルの数字 0 で使う)

オブジェクトサイズは言語に計算させる

(sizeof(array)/sizeof(array[0]))

・当り前のことをいちいちコメントにしない

関数グローバル変数、定数定義、構造体・クラスメンバにはコメント

・悪いコードではコメントを付けるのではなく書き直す

・(修正があっても)コードと矛盾しないコメントを維持する

・あくまでも明快に、混乱を招かないコメントにする

(難問を増やすのがコメントの目的ではない)

2015-02-28 [society][社会]ニュース201502 このエントリーを含むブックマーク

WBS20150201-20152228

メモ

バイオ工場でものづくり

サイバー攻撃企業の外から盗む

テロ対策は企業にも対策が求められる

日本人の心をつかむ3分でわかるピケティ

ただゼミ足立学生が塾を開く

世襲が大きな格差を生み出す

NPO法人キッズドア

リターン資本収益率はグロース経済成長率労働収益率を上回る場合格差は常に拡大し続ける

TPP政策一定量も枠を設けて保品物も輸入する

資本主義が格差を生む

格差が民主主義を壊す

戦争が格差を減らす

スペースマーケット空き場所×ニーズ

増える心の病自分では気づけないストレスチェックを企業に義務化する

2世帯住宅の相続税減税など税制優遇

科学の力でカシミヤを判定する

インバウンド消費対策

金利0パーセントで車を売る家電を売る

テレマティックス車の運転情報を使って保険料を決める

ARアプリ、カーザスかざすと翻訳

受験サプリ人工知能が家庭教師

ニュースアプリの編集長に人工知能

生涯年収は20代で決まる

深夜0時以降は勉強しない

オススメ伴走学習

14年9カ月ぶりの高値1万8305円

名目GDPは509兆円から488兆円に賃金は35万から31万

雇用者は4,300人から4,680万人だが、非正規500万人アップ

大きなシェアを求め起業するなら小さな市場を狙うべきだ

キッズサポーター、カラーズ

マーケティング会社トレンダーズ設立最年少女性上場社長

テクノロジー戦略チーム

設立される前にどのような歴史を経てきたかが重要だ

学習塾サバイバル月5万4,000円の学童保育

病院マイナンバー実証実験

仮のカード、保険証とクレジット

顔認証の銀行口座解決

公共インフラ契約解除

マイナンバー3000億円

番号反対、納税、社会保障は良い

40分でも才能発掘あなたも天才アスリート

民法200年項目120年ぶり改正不利な約款は無効

2015-02-27 [movie][映画]ベイマックス このエントリーを含むブックマーク

ベイマックス

あなたの健康を守ります

尊敬するモノの死

未来への研究

研究の悪用

とてもおもしろい。

技術で世の中をより良い方向に導けるでしょうか。

サンフランソウキョウの美しい街並み。

空虚さを埋めるのは思い出の共有...

実験、実験の繰り返しが新しいものを作り出すために欠かせない.

2015-02-17 [business][development][仕事][開発]疑似コード このエントリーを含むブックマーク

疑似コードでロジックを設計


利点

疑似コードは言語に依存せずに、処理の流れ

作成するべき部品群を記述できる.


捕捉

仕様を満たすため、特に性能を満たすためには

ロジックまで十分検討されていることが必要である

核心部分はできるだけ半永久的にメンテする意識を

持ったものが設計し作成することで品質が上がる

2015-02-15 [twitter][記録]20150209〜20150215の発言から抜粋 このエントリーを含むブックマーク

syntaxsuger86 @katsuhilo · 2月15日

デザインパターン - Javaで書くBuilderパターンのパターン - Qiita” http://htn.to/eNcwEyJf


syntaxsuger86 @katsuhilo · 2月15日

http://b.hatena.ne.jp/entry/himasoku.com/archives/51887772.html#tw?u=iihiro … “日本の男性の労働時間がついにフランスの二倍になる快挙 - ライブドアブログhttp://htn.to/jLZFm2


syntaxsuger86 @katsuhilo · 2月15日

http://b.hatena.ne.jp/entry/tabi-labo.com/87359/get-english/#tw?u=iihiro … “ハーバード講義を無料で受ける!英語学習で、ゼッタイに知っておくべき「7つの方法」 | TABI LABO” http://htn.to/FHKSRw


syntaxsuger86 @katsuhilo · 2月15日

21世紀の資本のメモ、リターン(資本収益率)はグロース(経済成長率)を上回ってきた、結果格差は拡大し続けるとデータ分析で示したもの、そして格差が民主主義を壊す可能性を生む.経済成長政策は、社会保障、成果分配と合わせてが望ましい.


syntaxsuger86 @katsuhilo · 2月11日

たまには映画.サンフランソウキョウ、美しい街並み。空虚さを埋めるのは思い出の共有...実験、実験の繰り返しは新しいものには欠かせない.

2015-02-11 [business][development][仕事][開発]振り返り(見積) このエントリーを含むブックマーク

見積精度向上政策の実践

見積精度目標数値はx.xx...

業務仕様とシステム構造の両方踏まえた見積もりを実践する。

付帯作業について見積もりに含める。

見積もり自体はWBSボトムアップを実践する。

関数出力ツールなどを用いて類似機能の規模を比較を行う。

他の見積もり技法についても試行する。

2015-02-10 [business][development][仕事][開発]振り返り(生産性) このエントリーを含むブックマーク

生産性向上のための具体策の実践。

生産性目標数値はx.xx...

目標値に到達、未達の原因を分析/評価する。

生産性を向上させるためにテスト項目の設計を行う。

リストの役割を明確にしテスト工数の削減と品質の確保を両立させる。

テストデータについては一元管理士して、テスト工数の削減につなげる。

2015-02-09 [business][development][仕事][開発]振り返り(品質) このエントリーを含むブックマーク

障害作り込み防止見逃防止策の実践。

品質数値はx.xx...

外部仕様書作成時に仕様書策定者(有識者)とレビューを実施し障害リスクを低下させる。

個人レビューの徹底と合わせて、複雑系処理の実機確認も平行して実践し、

SR前のソースの水準を一定の品質に高める。

性能にリスクがある機能については構造上の問題早めに特定、対処する。

各カテゴリで評価する...

2015-02-08 [twitter][記録]20150126〜20150208の発言から抜粋 このエントリーを含むブックマーク

syntaxsuger86 @katsuhilo · 2月6日

茹で落花生おいしい!ということをこの歳で知る.たまには食べていないものを食べてみるのもいい.また食べたい.


syntaxsuger86 @katsuhilo · 2月1日

http://b.hatena.ne.jp/entry/d.hatena.ne.jp/next49/20150201/p4#tw?u=iihiro … “(2015年版)博士進学が決まったあなたが今すぐに始めるべきこと - 発声練習” http://htn.to/9Ju3wL


syntaxsuger86 @katsuhilo · 1月31日

http://b.hatena.ne.jp/entry/www.slideshare.net/taketo1024/ss-44063603#tw?u=iihiro … “プログラマのための線形代数再入門” http://htn.to/gFmJdbzyenK

SlideShare


syntaxsuger86 @katsuhilo · 1月31日

http://b.hatena.ne.jp/entry/d.hatena.ne.jp/wlj-Friday/20150131/1422682224#tw?u=iihiro … “ピケティあんちょこ、あげよう。 - 山形浩生 の「経済のトリセツ」” http://htn.to/F6UxhW


syntaxsuger86 @katsuhilo · 1月31日

万年筆たのしい、巧妙に設計されている.


syntaxsuger86 @katsuhilo · 1月29日

メモ、性格と病気の関連を研究、疑り深い人、敵対心を持ちやすい人のほうが脳卒中になりやすいという話を聞く、ミネソタ大学の研究チーム.


syntaxsuger86 @katsuhilo · 1月27日

http://b.hatena.ne.jp/entry/blog.livedoor.jp/nwknews/archives/4817022.html#tw?u=iihiro … “子供同士のSNSイジメを激減させる非常に簡単で画期的な仕組みを14歳の少女が発案:哲学ニュースnwkhttp://htn.to/rEwZ78


syntaxsuger86 @katsuhilo · 1月27日

http://b.hatena.ne.jp/entry/japanese.engadget.com/2015/01/27/false/#tw?u=iihiro … “行っていない犯罪のリアルなニセ記憶植え付けは容易、心理学者チームが実証 - Engadget Japanese” http://htn.to/rio2oS


syntaxsuger86 @katsuhilo · 1月26日

http://b.hatena.ne.jp/entry/www.ideaxidea.com/archives/2015/01/itunes_u_swift_ios.html#tw?u=iihiro … “スタンフォード大の「Swiftで作るiOS開発入門」がiTunes Uで無料配信中 | IDEA*IDEA” http://htn.to/2cwFHXjz