タグ

プログラミングに関するkat0usiのブックマーク (152)

  • テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum

    テキストエディタのデータ構造 Gap method Piece Table method Piece Table の構造 Piece Table の実装 Piece Table のメソッド まとめ テキストエディタのデータ構造 テキストエディタで採用されているデータ構造にはいろいろあります。 こちらの論文 Data Structures for Text Sequences では各種データ構造について比較検討されています。 多くは、Gap method や Piece table method をベースにしたものが多いのではないでしょうか(図で言う最下部の中心の丸印に当たります)。最近では Rope なども有名ですね。 Gap method Gap method では、現在のカーソル位置で、テキストバッファを2つに分割し Gap を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を

    テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum
  • プログラムの可読性を上げるための条件分岐を減らす方法7個 - Qiita

    Help us understand the problem. What is going on with this article?

    プログラムの可読性を上げるための条件分岐を減らす方法7個 - Qiita
  • ccacheを導入してC++のコンパイルを最適化 - Qiita

    $ sudo vi /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ccache_wrapper ---------------------------------- #!/bin/bash which ccache if [ "$?" -eq 0 ]; then export CCACHE_SLOPPINESS=pch_defines,time_macros exec `which ccache` /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Qunused-arguments "$@" else exec /Applica

    ccacheを導入してC++のコンパイルを最適化 - Qiita
  • null安全でない言語は、もはやレガシー言語だ - Qiita

    これらは、表中の「リプレース対象言語」に挙げたように、多くのメジャー言語に対する代替手段でもあります。 Java の代わりには Kotlin や Ceylon が、 JavaScript には TypeScript や Flow が、 Objective-C には Swift が、そして PHP には Hack があります。 Python は自身に null 安全 を取り込みました。 Crystal は直接 Ruby と連携して使えるわけではありませんが、 Ruby 風の null 安全 な言語です。 RustC++ の代替を目指して開発され、 Firefox の一部で C++ のコードを置き換えるのに使われています [^100] 。 null が引き起こしてきた数々の問題を考えると、僕は、 null 安全 は GC (やその他の安全なメモリ管理手法)に匹敵するプログラミング言語の進

    null安全でない言語は、もはやレガシー言語だ - Qiita
  • GitHub - hatena/Hatena-Textbook: はてな研修用教科書

    Hatena-Textbook はてな教科書は、はてなエンジニアとして最低限必要とされる技術を身につけるための教科書です。 Web開発における重要なトピックを順番に学びながら、課題をといていくことで、Webアプリケーションをひととおり構築できるようになります。 実装言語としてPerlScalaのどちらを選ぶことができます。 トピックごとに学びたい言語の方の教科書を読み進めてください。 目次 プログラミングの基礎 Perlによるプログラミングの基礎 Scalaによるプログラミングの基礎 データベースの基礎 Perlによるデータベースプログラミング Scalaによるデータベースプログラミング Web開発の基礎 PerlによるWebアプリケーション開発 ScalaによるWebアプリケーション開発 Webフロントエンド開発 はてな教科書JavaScripthatena/Hatena-Tex

    GitHub - hatena/Hatena-Textbook: はてな研修用教科書
  • MVCの流れを簡単にまとめてみる - Qiita [キータ]

    理解しやすいように適当に遮ったり、言い切ってしまったところもあるがご容赦いただきたい。 MVCの登場 MVCは、SmalltalkのGUIライブラリのモデルとして登場した。 これはGUIアプリケーションを記述する際に、適切なモデル化を進めるのにとてもいい考え方だと思われていたし、実際にそうだった。 これはアーキテクチャパターンとして、それぞれがどのように依存するべきか、どこにコードを書くべきかということを端的に表している。 安定依存の原則というものがある。これは、要件が安定しているモジュールに依存し、要件が変動しやすいモジュールには依存しないようにするという原則だ。MVCアーキテクチャでは、GUIアプリケーションの安定関係をModel > View > Controllerの順でとらえている。データ処理や業務要件というのは安定しており、UIパーツもまた比較的安定している。それらを統合してア

    MVCの流れを簡単にまとめてみる - Qiita [キータ]
  • Mozillaのゲームに対する本気度を担当者が語る。WebGLが拓くゲームプラットフォームとしてのWebブラウザの姿

    Mozillaのゲームに対する気度を担当者が語る。WebGLが拓くゲームプラットフォームとしてのWebブラウザの姿 ライター:米田 聡 2014年9月2日から4日までパシフィコ横浜で開催されていた日最大のゲーム開発者会議「CEDEC 2014」では,米Mozilla Foundation(以下,Mozilla)からブラウザのゲームプラットフォーム化を推進している担当者が来日して「Games on the modern Web」(モダンWebにおけるゲーム事情)と題するセッションを行った。4GamerではGame Developers Conference 2013(以下,GDC2013)の際にMozillaの試みをレポートしているが,今回のCEDEC 2014のセッションはその後の進捗報告という感じの内容で,ブラウザのゲームプラットフォーム化が現実になっていることをMozillaの担当

    Mozillaのゲームに対する本気度を担当者が語る。WebGLが拓くゲームプラットフォームとしてのWebブラウザの姿
    kat0usi
    kat0usi 2015/02/20
    すべての言語をIL2CPPでC++に変換しているともいえるわけですね。そこから(emscriptenで)asm.jsに変換する形
  • クラスの命名のアンチパターン - Qiita

    昔から「名は体を表す」と言ひます。クラスの名前がクラスの果たす役割と一致してゐるかどうか常に考へ続けませう。 ImageInfo, AccountData, etc. Info って何やねん? Data って何やねん? ImageInfo って Image とはどう違ふねん?? FooInfo や FooData よりも好ましいかもしれない名前の例: FooAttribute, FooProperty, FooMetadata, FooDescription FooConfiguration, FooSetting, FooParameter FooResult, FooStatistics, FooSummary FooBuffer, FooList, FooCollection, ... ProductListItem, TranslationTableEntry, etc. Prod

    クラスの命名のアンチパターン - Qiita
  • Emacsパッケージ特集 - Qiita

    バージョン24から入ったpackage.elにより、プラグインの導入が格段に容易になったEmacs。そこで、ELPA互換のリポジトリの一つであるMELPAのダウンロードTOP50+αのパッケージについてまとめてみた。 (ランキングに関しては2014/3/26時点の情報を使用) それ単体で便利というよりも、有名なパッケージの依存関係でダウンロードされるライブラリもあるので注意。 ちなみに、個人的なオススメパッケージは、auto-complete、helm、flycheck、undo-tree、zenburn-theme、expand-region、smartparens、rainbow-delimiters、multiple-cursors。 また、TOP50には入っていないが、anzu、volatile-highlights、powerline、git-gutter-fringe、hlin

    Emacsパッケージ特集 - Qiita
  • コメントの9割は無駄!~アンチプラクティスから学ぶ洗練されたコメントの書き方~ #code #コード|CodeIQ MAGAZINE

    kat0usi
    kat0usi 2013/12/17
    特に理由を書いて欲しいことが多い。
  • ボゴソート - Wikipedia

    ボゴソート (bogosort) は、ソートのアルゴリズムの一つ。平均的な計算時間はO(n×n!)で、非常に効率の悪いアルゴリズムとして知られている。安定ソートではない。「bogo」は、"bogus"[1]に由来する。 英語では、random sort(ランダムソート), shotgun sort(「数撃ちゃ当たる」ソート), monkey sort(「猿でもできる」ソート) などといった表現がある。なお最後のものは「猿でもできる」というよりも、無限の猿定理を指しているかもしれない。 アルゴリズム[編集] トランプを順に並べる場合を例にすると、次のようになる。 トランプ52枚の束を放り投げて、ばらばらにする。 1枚ずつ無作為にすべてを拾い集める。 ソートされているか確認する。もしソート済みでなければ、1から3までの手順を繰り返す。 カードの束をひたすらシャッフルし続けて順番に並ぶまで待つア

  • KMC Staff Blog:Makefileの依存関係の記述を自動化する簡単な方法

    2013年02月08日 Makefileの依存関係の記述を自動化する簡単な方法 ビルドにmakeコマンドを使うときにはMakefileにファイルの依存関係を書いておく必要があります。 しかし、開発の途中でインクルードするヘッダファイルが増えてくると、これらの依存関係を手作業で記述するのは面倒です。(そして、これをサボったことでハマることもよくあることです。:) ここでは、gccの機能を使ってこれを自動化する方法を紹介します。 gccのプリプロセッサで依存関係を自動生成する gccでコンパイルするときに -MD というオプションをつけると、コンパイルとともに拡張子が.dのファイルが作成されます。これはMakefileと同じ書式でそのファイルの依存関係が記述されています。 詳しくはgccのマニュアルを参照してください。 http://gcc.gnu.org/onlinedocs/gcc-4.7

  • プロトタイプベース - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "プロトタイプベース" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2015年12月) プロトタイプベース (英: Prototype-based) は、オブジェクト指向プログラミング(OOP)のスタイルのひとつであり、オブジェクトの生成に既存オブジェクトの複製を用いるスタイルを指している。これには直後にメンバを拡充するための空オブジェクトの複製も含まれている。このスタイルは、インスタンスベース(Instance-based)とも呼ばれている。これと対比されるOOPスタイルにクラスベースがある。 プロトタイプベースOOPの原点はSmall

    プロトタイプベース - Wikipedia
  • 「MVCの勘違い」について、もう一度考えてみる - 圧倒亭グランパのブログ

    お久しぶりです。@at_grandpa です。 今回、Model View Controller について再考する機会があったので、自分なりに整理してみました。 勘違い MVCの勘違いに関しては、以下のSlideShareが有名かと思います。 やはりお前らのMVCは間違っている @mugeso これにはドキッとしたことを覚えています。 このスライドで「間違っている!」と指摘されている形式を、そういうものだと理解していたからです。 上記で指摘されている勘違い形式を、自分なりにわかりやすく噛み砕き、図にしてみました。 Userからの入力をControllerが受け取る Controllerはデータ置き場であるModelからデータを取得する 取得したデータをControllerが加工する 加工したデータをViewに転送する Viewは、受け取ったデータを視覚表現しディスプレイに表示する 自分の中

    「MVCの勘違い」について、もう一度考えてみる - 圧倒亭グランパのブログ
  • プロセスやルールはどうする?

    難関1で示したCIの流れは、あくまでツールの処理である。CIではさらに、開発者が行うプログラミングなどを含めたプロセスやルールが必要になる。これが、二つ目の難関である。 もともとCIは、アジャイル型の方法論の一つである「XP(eXtreme Programming)」で提唱されたプラクティスである。このため短い期間で開発・テスト・実装を繰り返すアジャイル型の開発プロセスと相性がよい。というより、アジャイルではCIの導入はほぼ必須だ。とはいえ、ウォーターフォール型の開発プロセスには適用できないかといえば、そんなことはない。ウォーターフォール型でも導入は可能で、同様のメリットを得られる。 基的に、アジャイル型とウォーターフォール型でCIのプロセスやルールに違いはない。ただしデリバリーまで含めたCD(Continuous Delivery:継続的デリバリー)と呼ぶ手法を実践する場合はアジャイル

    プロセスやルールはどうする?
    kat0usi
    kat0usi 2013/10/09
    TFSの場合、例えばコードカバレッジが100%でないとチェックインできないようにする「ゲートチェックイン」と呼ぶ機能がある
  • スピンロック - Wikipedia

    この項目では、計算機科学におけるスピンロックについて説明しています。核磁気共鳴におけるスピンロックについては「交差分極」をご覧ください。 スピンロック(英: spin lock, spinlock)[1]とは、計算機科学におけるロックの一種で、スレッドがロックを獲得できるまで単純にループ(スピン)して定期的にロックをチェックしながら待つ方式。スレッドはその間有益な仕事を何もせずに動作し続けるため、これは一種のビジーウェイト状態を発生させる。獲得されたスピンロックは明示的に解放するまでそのまま確保されるが、実装によってはスレッドがブロック(スリープ)したときに自動的に解放される場合もある。 スレッドが短時間だけブロックされるならば、スピンロックは効率的であり[2]、オペレーティングシステムのプロセススケジューリングのオーバーヘッドを防ぐことにもなる。このため、スピンロックはカーネル内でよく使

  • スピンロックとセマフォの違いが良くわかりません。スピンロックは空いてるかをチェックするのでCPUに負荷が掛かり、セマフォは負荷に... - Yahoo!知恵袋

    スピンロックとセマフォの違い が良くわかりません。 スピンロックは空いてるかをチェックするのでCPUに負荷が掛かり、 セマフォは負荷にならないと 習った気がするのですが、 何故セマフ スピンロックとセマフォの違い が良くわかりません。 スピンロックは空いてるかをチェックするのでCPUに負荷が掛かり、 セマフォは負荷にならないと 習った気がするのですが、 何故セマフ ォは負荷にならない のでしょうか?

    スピンロックとセマフォの違いが良くわかりません。スピンロックは空いてるかをチェックするのでCPUに負荷が掛かり、セマフォは負荷に... - Yahoo!知恵袋
  • ユニットテストにまつわる10の勘違い | DevelopersIO

    渡辺です。さる方面からテスト系のエントリーがまだか…と催促されたので、ユニットテストについて少し考えてみたいと思います。 最近、TwitterのTLをチェックしていると、JUnitを利用しているにも関わらず違和感のあるTweetや、原因をJUnitにして来解決すべき問題から目をそらしているようなTweetを多く見かけます。そこで、JUnitをによるユニットテストに関するありがちな勘違いをまとめてみました。 なお、JUnitの部分は、RSpecでもNUnitでも適当に置き換えて読んでも構いません。 1.JUnitを使うことが目的という勘違い JUnitを利用すること自体を目的にしたところで何も得る事はありません。 ありがちな話ですが、「納品物としてJUnitのテストコード(または実行結果)を求められている」ことが理由でJUnitを利用しているならば、それは足かせでしかない可能性があります。

    ユニットテストにまつわる10の勘違い | DevelopersIO
  • マルチコア時代のプログラマは関数脳になろう〜Java8のススメ〜 - Tech-Sketch

    CPUのクロックアップに限界が訪れ、マルチコア化することで処理性能向上を目指す時代になりました。これからのプログラマには、マルチコアで処理性能が向上するプログラム=マルチスレッドで並列処理が可能なプログラムを書く能力が必要になります。今回は「関数型」でプログラムを書くことによって、いとも簡単に並列化ができることを実例を元に解説します。 関数型プログラミングと並列処理 「関数型でプログラムを書くことで簡単に並列化できる」と書きましたが、そもそもここで言う「関数」とは何なのでしょうか? 関数型プログラミングの特徴 関数型プログラミングの「関数」を理解するためには、数学における「関数」を想像するとわかりやすいでしょう。 例えば三角関数を用いた y=cos(x) という式を考えてみます。この式に入力値 x=0 を与えた場合、いつでも必ず結果は y=1 になります。x= π/3 の場合は y =

  • プログラムは手段だけど、せっかく作るなら儲かって綺麗にこしたことはない。 - お前の血は何色だ!! 4

    コードは綺麗だけど儲からないプロジェクトと、 コードは糞汚いけど儲かるプロジェクトのどっちがいいですか? もちろん、コードは綺麗で儲かるプロジェクトがいいのは理想ですが、今回は、この2つです。 コードは糞汚いけど儲かるプロジェクトの場合、次期バージョンとかの予算を確保することができます。 そこで、汚い部分を捨てて書きなおすことだって出来ます。 コードは綺麗だけど儲からないプロジェクトは、次のバージョンの改修費用もでずにゴミ箱に送られる運命です。 プロジェクト解散、メンバーは散り散りです。 フリーソフトの場合は、儲かるをユーザに使ってもらえるソフトとか支持されるソフト、 ゲームの場合は、儲かるを面白いゲーム、支持されるゲームとかと適当に読み替えてください。 コードは綺麗に越したことはないです。 だけど、プロジェクトとして成立しないことには意味がありません。 コードは綺麗だけど、誰も遊んでくれ

    プログラムは手段だけど、せっかく作るなら儲かって綺麗にこしたことはない。 - お前の血は何色だ!! 4