2015年05月27日: 表が見にくいというご意見を頂いたため、原文著者に連絡のうえ体裁を修正しました。 上位のレベルには下位のレベルの知識も蓄積されているということに注意してください。つまり、レベル n であれば n より低いレベルの知識も全てあります。 コンピュータサイエンス データ構造
設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) 今回は、振る舞いに関するパターンのTemplate Method。 Template Methodとは スーパークラスで処理の枠組みを定め、サブクラスでその具体的内容を定めるようなデザインパターン か。つまり、スー
設計を意識したコードが書けるようになる為に、デザインパターン修行しました。 他のDesign Patternもちょくちょく出していきます。 前置き 増補改訂版Java言語で学ぶデザインパターン入門をJavaからPythonにしてます。(Pythonは3.4.2) githubにコード置いてあります(まだ動かないものもある) デザインパターンをどういう時に、何を、どう使うのかを理解することが一先ずの目標。 (Javaというか静的型付言語は初めてで、且つpython歴もそんなに長くないので、Pythonistaぽっくないところがあると思います。ご指摘ございましたらご教授ください。) まず、そもそもデザインパターンってどういうものかってとこから。 デザインパターンとは ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソ
;(function(){ var $ul = document.querySelector('#list'); // ul要素 var songs = ['終わらない歌', 'キスしてほしい', '僕の右手', '情熱の薔薇', '人にやさしく']; // もっと沢山要素がある想定でお願いします〜 // 低速バージョン // 毎回DOMツリーへの更新が発生 for(var cnt=0, len=songs.length; cnt<len; cnt++){ var $li = document.createElement('li'); var song = document.createTextNode(songs[cnt]); $li.appendChild(song); $ul.appendChild($li); // 配列の要素数分、毎回追加 } /* 高速化! fragment 訳
2015 - 05 - 19 PAIPメモ 3 CommonLisp PAIP(実用 Common Lisp )を読んでて気になって調べた事などをメモします。 今回はch3.13「 デバッグ ツール 」から。 step SBCL と、 SBCL をSLIMEから使ったところ上手くステップ実行できませんでしたが、 CLISP だとPAIPで説明されているようなステップで実行できました。 処理系で結構違いがあるみたいです。 追記: デバッガからステップ実行できるそうです。( id:nfunato さんのコメント参照) inspect Smalltalk やFactorの影響でinspectorが好きになったので、CommonLispにもある (というより Smalltalk とInterlispが発祥なのでしょうか?)のは嬉しいですね。 SBCL のinspectを試してみます。 q で終了し
多くの言語は冗長性を有していますが、これらの機能を省いていくことも言語設計の進歩につながります。 巷には数多くのプログラミング言語があり、新しい言語も継続的に紹介されています。でも新しいものが古いものより優れているかというと、そうとは言えません。なぜなら、何が“優れているか”を判断する明確な尺度は存在しないからです。 それでも過去からの流れを見ていくと、優れた言語を作る1つの方向性は、言語にある冗長性を特定し、それらを持たない新たな言語をデザインすることにあるように思えます。 「完璧とは、それ以上足せない時ではなく、それ以上引けない時に達成される」 – Antoine de Saint Exupéry この投稿では、現在までに知られている言語の冗長的機能を見ていくと共に、恐らく冗長性を有しているだろうと思われる機能についても触れていきます。 自ら墓穴を掘るあらゆる可能性 初めてコンピュータ
汎化とは、様々な異なる対象に共通する性質や、共通して適用できる法則などを見出すこと。一般化、普遍化ともいう。対義語は、特化(specialization)あるいは特殊化。 オブジェクト指向プログラミングの分野では、様々なクラスやオブジェクトに共通する性質をまとめ、それらの共通の親クラス(スーパークラス)として定義することを汎化ということがある。共通機能を一つのクラスにまとめることで、同じ機能を何度も重複して開発することを避けられる。 機械学習における汎化 パターン認識や機械学習の分野では、既知のパターンから特定の分類に共通する性質や法則性、規則性などを抽出して、未知のパターンの認識や分類に応用できる形にまとめることを汎化ということがある。 機械学習ではシステムに大量の学習データ(訓練データ)を与えて分類や予測を行うモデルを構築するが、最終目的は学習したことのない未知のデータに対して適切な分
_.template()の引数にHTMLのコードスニペットを入れ(差し替える部分は<%- span_val %>のように括る)返された関数に指定のkey値を持ったObjectを入れるとコードスニペットに値が括られたHTMLが返される。 ■使用例 var span_template = _.template("<span><%- span_val %></span>"); // re = "<span>TM Network : CAROL</span>"; var re = span_template( {span_val: "TM Network : CAROL"} ); ■内部構造 _.templateSettings = { evaluate : /<%([\s\S]+?)%>/g, interpolate : /<%=([\s\S]+?)%>/g, escape : /<%-([\s
前回の記事の続き。前回は、正規表現が使えない時はパーサコンビネータを使ってみると良いということを書いた。 パーサコンビネータのためのライブラリは、以下のように各言語ごとにいくつかある。 JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG 各言語でいくつかあるのだが、正規表現と違ってパーサコンビネータには統一的な書き方があるわけではないし、ライブラリによって使い方も様々である。なので、今まで正規表現だけ使ってきた開発者がちょっと使ってみようと思っても、使い方がよくわからずに面食らってしまうことがある。 パーサコンビネータはテキストをパースするための非常に強力な仕組みだが、その背後にある考え方を理解しなければこれらのパーサコンビネータのライブラリを使う際の障害になるだろう。逆に言うと、それさえ理解で
Python でコマンドラインプログラムを書くときのライヴラリに Click というのがある。(キャッチコピーは “Command Line Interface Creation Kit”) “The Hitchhiker’s Guide to Python” の “Command-line Application” でも CLI 用のライブラリとして clint などとともに取り上げられている。 作者の @mitsuhiko が YouTube に “Building Command Line Applications with Click” という20分弱の動画を投稿している。 固定メッセージを返すシンプルなアプリケーションを少しつづ拡張していき、最後には git 風のサブコマンドを実装する。 勉強がてら書き起こしてみる。 動画が公開されたのは Click の初回リリース間もない頃だけ
「Reactが素晴らしい理由は、UIをアプリケーションの状態の純粋関数にできるからだ」いうような話を聞いたことがあるでしょう。しかしそれだけではなく、不変性と仮装DOMを利用して動作するということも聞きますよね。その上、保存、読み込み、取り消し、それにタイムトラベル・デバッグと呼ばれるすごい機能まで自由に手に入れられる。でも知っていますか? Reactの核となるアイデアを利用し、その恩恵に預かるのにこれらのことは必要ありません。jQueryの数行にしてお見せします。 <span id="colored-counter">0</span> <input id="color"></input> <button id="inc"></button> <script> $('#color').on('keyup', function () { $('#colored-counter').css('
先日の記事 関数型・オブジェクト指向なプログラミングパラダイムについて思うところ - 技術memo で誤魔化したいくつかのことについて、補足します。 オブジェクト指向プログラミング言語の種類、用語 オブジェクト指向プログラミング言語では、Smalltalkを代表とするようなメッセージパッシングを主とする言語と、C++やJavaといった言語のオブジェクト指向とでは、毛色が違うと言われています。先日の記事では用語が少々混乱していたので、詳しいところは他の方の記事を参照されるといいでしょう。*1 参照: オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smalltalkのtは小文字です 「オブジェクト指向プログラミングとは何か?」[Stroustrup87] (PDF, ただし '91 改訂版) - Smalltalkのtは小文字です 静的型検査のこと 先日の記事では、オブジェクト指向
動機 イメージ論でない言語パラダイムに関する話を書きたかった。*1 まともな意見をインターネット空間に1つでも多く残しておきたかった。*2 要約 オブジェクト指向プログラミングはデータに対する操作をオブジェクト*3として抽象化する。 関数型プログラミングでは関数による抽象化を基本とする。 言語設計の問題と概念の問題は、混同すべきではない。 オブジェクト指向プログラミング 題材 Consというデータ構造を考えてみます。 Consは任意のデータのペアから成り、その片方をCar、もう片方をCdrと呼びます。 それはJava風に書けば次のようになるでしょう。 public final class Cons{ private Object car; private Object cdr; public void setCar(Object x){ this.car = x; } public voi
(Wikipediaより) ハンガリアン記法のメリット 論理型であるbFlagと、文字列型であるsNameが bFlag + sName となっていれば誤りであることがわかる。 型の記述が2文字程度で済むので、変数名が短く済む。 ハンガリアン記法のデメリット 暗黙の型変換ができない。変数の型を変更するごとに変数名まで変更しなくてはならず、命名法に添って名前を付けるのが面倒。 (同じユーザーIDでも使い方によってはsUserid、iUseridなど) キャメル記法 文字のラインが凸凹になる様をラクダのこぶになぞらえてキャメル記法と名付けられた。 大文字小文字を区別する言語と区別しない言語があるので使う場合は全体を統一すること。 先頭の文字を大文字にするか小文字にするかで2つのパターンがある。 アッパーキャメルケースまたはパスカルケース(1単語目から大文字) 悪い例 $userparamete
んじゃ、解説するよ。何のことかわからない人は前の記事を読んでね。 C言語の仕様を把握せよ! 手元に教科書は置いているかな。なに、高いって?まぁ、俺も持ってないけど。仕方がないので、教科書の草書を見てくれ。 さて、なぜ前の記事のようになったかであるが、C言語の仕様に基づいて動作した結果であるとしか言いようがない。ただし、動作には環境依存の部分もある。前の記事はMac OS X(64bit)上のClangでの結果だ。この環境はLP64(int:32/long:64/void*:64)なので、それにあわせて説明する。ILP32(32bitの環境)やLLP64(64bitのVC++)とは少しだけ動作が異なるので、注意して欲しい(ただ、現象としては普通のPCなら同じになるはず)。では、今回の動作に関係がある仕様を見ていこう。 -はリテラルではなく単項演算子 一つ目の注意点は-である。-1と書いたとき
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く