タグ

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

  • DIコンテナ【Dependency Injection Container】

    DIコンテナは,「DI(Dependency Injection:依存性の注入)」と呼ぶデザインパターンに基づいて作られたコンポーネント群を集中管理するためのソフトウエアです。 DIは,コンポーネント(クラス)間の依存関係をソースコードから取り除くことで,プログラムの実行時までコンポーネント同士が依存関係を持たないようにするデザインパターンです。 例えば,あるクラスAの中で別のクラスBのインスタンスを生成して利用しているとき,AはBに強く依存してしまっています。つまり,Bを別のクラスに差し替えたときなどにはAも変更しなければなりません。このような依存関係は,AとBを別の人が作っている場合などに特に困ります。 こうした依存性をクラスから取り除くのがDIパターンです。Bへの依存性をAから排除するには,まずBの機能を抽象化したインタフェースIを定義し,Iを実装したクラスとしてBを作ります。 Bの

    DIコンテナ【Dependency Injection Container】
    zuborawka
    zuborawka 2015/01/21
    分かり易い
  • チューリング完全 - Wikipedia

    チューリング完全(チューリングかんぜん、英語: Turing-complete)とは、計算理論において、ある計算のメカニズムが万能チューリングマシンと同じ計算能力をもつとき、その計算モデルはチューリング完全あるいは計算完備であるという。 チャーチ=チューリングのテーゼによれば「計算可能関数」は、それを計算しようとする計算モデルがチューリング完全であれば計算できる。 一般的なプログラミング言語の背景にある計算モデルの多くはチューリング完全である。一見単純な機能しか持たない言語がチューリング完全な例としては、Lazy K、Brainfuckなどがある。究極的に単純な計算モデルとしては「ウルフラムの2状態3記号チューリングマシン(英語版)がチューリング完全であると証明されている。 チューリング完全かどうかという事は、計算可能性理論の問題である。計算複雑性の分野の問題である時間や記憶容量の消費量に

    zuborawka
    zuborawka 2015/01/02
    “正規言語やSQLや繰り返し処理の書けない表計算の数式などの処理はチューリング完全ではない”
  • スタック・オーバーフロー

    python × 134 javascript × 53 python3 × 43 c++ × 32 linux × 30 html × 27 c × 24 java × 22 c# × 20 android × 18 vscode × 16 google-apps-script × 16 typescript × 16 ruby × 15 windows × 15 ruby-on-rails × 14 pandas × 14 swift × 13 php × 13 mysql × 13 css × 13 postgresql × 12 ios × 11 bash × 11 shell × 11 macos × 10 docker × 10 r × 10 rust × 10 aws × 9 ubuntu × 9 アルゴリズム × 9 laravel × 9 正規表現 × 9 network

    スタック・オーバーフロー
  • Goに入ってはGoに従え

    Goに入ってはGoに従え Go Conference 2014 autumn 30 November 2014 鵜飼文敏 Fumitoshi Ukai Google Software Engineer - Chrome Infra team Go Readability Approver Go言語のReadabilityをレビューするチーム コードレビューを通じてGo言語のよいコードの書きかたを教える メインのプロジェクトとは別のコードをレビュー 一年前くらい前に参加して 20% timeで 200くらいのCLをレビューしました 今は一日3CLくらい、週に12CLほどのペースでやっています Gopher by Renée French 2 Readabilityスキルとは? プログラミング言語のリテラシー 作法にかなったやりかた で、読んだり書いたりできる能力 言語ごとに作法が違う C++

    zuborawka
    zuborawka 2014/12/03
    “読みやすいコード == 情報が認識しやすい/脳に負担がかからない”
  • if文の条件式の書き方あれこれ | GuildWorks Blog

    if文の条件式の書き方あれこれ | GuildWorks Blog
    zuborawka
    zuborawka 2014/09/24
    “大切なのが、「目的」と「手段」の分離です。 メソッド名で、目的を表現します。 メソッドの定義内容で、手段を表現します。”
  • 提言: コミットメッセージの一行目には要求仕様を書け - Qiita

    これは Git (や Subversion などのバージョン管理システム) にコミットする時により良いコミットメッセージを書くための提言です。この提言は特にメッセージの一行目だけを対象とします。せめて最も重要な一行目だけでも良いメッセージを書いて欲しいからです。提言をズバリ一言で表すと 一行目には要求仕様を書け です。 背景 プロジェクトによっていろいろ慣習の差はあるものの、一般的には「コミットメッセージの一行目は変更内容の要約を簡潔に書け」とされます。特に Git は、各コミットメッセージの一行目だけを取り出してそれを一覧表示するなど、一行目を特別に処理する機能が多いので、一行目にできるだけ多くの情報を凝縮させることは重要です。またメッセージを一行しか書かない不届きな慣習のプロジェクトでは、十分な情報を持たないメッセージは無用の長物と化します。 良くないコミットメッセージ しかし私は、情

    提言: コミットメッセージの一行目には要求仕様を書け - Qiita
  • 海外のプログラマーにバグを指摘し、修正を依頼するには【連載:コピペで使えるIT英語tips】 - エンジニアtype

    トップページ > ノウハウ > コピペで使えるIT英語tips > 海外プログラマーにバグを指摘し、修正を依頼するには【連載:コピペで使えるIT英語tips】 グローバル化が進む中、海外企業とのやり取りが増え「英語でのコミュニケーションが求められる」というエンジニアも多いはず。 しかし、「英語でどう伝えればいい?」、「場面に応じた表現が分からない」など、英語でのやり取りに実務以上の時間を取られてしまっているという悩みを抱えているのが現状ではないだろうか。 そんな皆さんの悩みを解決するべく、通常の業務の中で必要となる「今すぐ使える英語の例文や用法」などの英語tipsを連載で紹介。 初回となる今回は、エンジニアであれば誰もが必ず直面する「bug(バグ)の指摘の仕方」について紹介する。 バグを指摘する際には、「bugがあるから直してくれ」と伝えるだけでは適切ではないというのは当然のこと。日

    海外のプログラマーにバグを指摘し、修正を依頼するには【連載:コピペで使えるIT英語tips】 - エンジニアtype
  • バッカス・ナウア記法 - Wikipedia

    バッカス・ナウア記法(英: Backus–Naur form)とは、文脈自由文法を定義するのに用いられるメタ言語のことで、一般にBNFやBN記法と略される。現在はこのBNFを拡張したEBNF (Extended BNF) が一般的に使われている。EBNFでは正規表現を用いてより簡単に記述でき、プロトコル規定言語であるASN.1や、XMLの構文定義にも利用されている。 ジョン・バッカスとピーター・ナウアがALGOL 60 の文法定義のために考案。当初は文脈自由文法の来の定義に則り or(|)以外の定義はなく、繰り返しは再帰を利用して表現されている。*、?等の量化子はBNFを拡張したEBNFによって導入された。パーサジェネレータを使用して構文解析器を生成する際に、構文を定義するためにも使う。 ISO/IEC 14977:1996においてEBNFの標準が定義されているが、EBNFにもいろいろな

    zuborawka
    zuborawka 2014/08/23
    “ジョン・バッカスは ALGOLの文法を表現するためにこの記法を考案した。ピーター・ナウアは、バッカスの記法を単純化し、使用する文字セットを最小化した。”
  • Facebook, Twitter, Instagram等がどうやってIDを生成しているのか まとめ - Qiita

    まえがき データにIDを持たせたいとき、単純な方法としては、DBの提供するauto incrementを使う場合やUUIDを利用することがある。それぞれの方法の利点欠点は以下の通り。 データベースのauto incrementを使う場合 利点: 特別な実装が必要ない 欠点: DBを1台で運用するとデータベースがパフォーマンス・障害のボトルネックになる DBを二台にするとIDのユニークさや順序の保証が困難 UUID(v4)※1を利用する場合 利点: 分散環境で各々がIDを生成しても衝突しない IDを公開したくない場合に、推測されにくいIDを生成できる 欠点: 128ビット必要、DBのインデクシングやプログラミング言語で扱うときに不利なことがある IDから時間の情報が失われる、例えば2つのIDを比べてどちらが古い投稿か判断できない 世界の大企業がどうしてるか 調べてみると多くの企業がブログなど

    Facebook, Twitter, Instagram等がどうやってIDを生成しているのか まとめ - Qiita
  • まずコードの可読性を最適化しよう | POSTD

    最近では 最適化 という言葉を使う場合、GPUメモリ消費やネットワークトラフィックの最適化、などと明示的に言わない限りは、 実行時間の最適化 という意味で使われるケースがほとんどです。 自分が何を最適化しようとしているかを知ろう 私がプログラムを始めた頃、プロセッサの処理能力は遅く、メモリサイズもとても限られていて、キロバイト単位で計算されていました。ですからメモリ容量をよく考え、メモリ消費を上手に最適化しなくてはなりませんでした。大学では最適化について2つの極論を教わりました。 メモリを犠牲にして実行スピードを最適化する。 または何度も計算を繰り返して、メモリ消費を最適化する。 最近では誰もメモリについては大して気にしていません(デモシーン製作者、組み込みシステムのエンジニア、一部の携帯電話ゲームのディベロッパなどは別です)。RAMだけでなく、ハードディスクの容量についても同様です。 W

    まずコードの可読性を最適化しよう | POSTD
    zuborawka
    zuborawka 2014/08/15
    “コードを読みながら、ディベロッパは本質的には(大して有能でもない)通訳のような仕事をしています。つまり、現在の実行状況を踏まえつつ、脳内でコードを実行させています。だからプログラマというのは作業中に
  • TechCrunch

    [A version of this piece first appeared in TechCrunch’s robotics newsletter, Actuator. Subscribe here.] Earlier this month, Google’s DeepMind team debuted Open X-Embodiment, a database of robotic

    TechCrunch
    zuborawka
    zuborawka 2014/05/27
    名言やね。“自分がバカに思えるという状態に慣れておく必要がある。”
  • 平方数かどうかを高速に判定する方法 - hnwの日記

    平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうか、というのがすぐ思いつく実装です。 <?php function is_square($n) { $sqrt = floor(sqrt($n)); return ($sqrt*$sqrt == $n); } しかし、平方根の計算は比較的重い処理です。もっと高速化する方法は無いのでしょうか。 多倍長整数演算ライブラリGNU MPには平方数かどうかを判定するmpz_perfect_square_p関数が存在します(PHPでもgmp_perfect_square関数として利用できます)。稿ではこの実装

    平方数かどうかを高速に判定する方法 - hnwの日記
    zuborawka
    zuborawka 2014/05/03
    “mod pを計算すれば平方数でない数が判定できる”ほう
  • プログラマーのための確率プログラミングとベイズ推定

    プログラマーのための確率プログラミングとベイズ推定¶PythonとPyMCの使い方¶ベイズ推定(Bayesian method)は,確率推論のためのもっとも適切なアプローチであるにもかかわらず,書籍を読むとページ数も数式も多いので,あまり積極的に読もうとする読者は少ないのが現状である.典型的なベイズ推定の教科書では,最初の3章を使って確率の理論を説明し,それからベイズ推論とは何かを説明する.残念ながら多くのベイズモデルは解析的に解くことが困難であるため,読者が目にするのは簡単で人工的な例題ばかりになってしまう.そのため,ベイス推論と聞いても「だから何?」と思ってしまうのである.実際,著者の私がそう思っていたのだから. 最近の機械学習のコンテストで良い成績を収めることができたので,私はこのトピックを復習しようと思い立った. 私は数学には強い方である.しかしそれでも,例題や説明を読んで頭の中で

  • Heartbleedバグのコードを解説 - Qiita

    今回バグってたのはheartbeat extension という機能の実装。 RFCはこちら https://tools.ietf.org/html/rfc6520 Heartbleedバグに対する修正コミット http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=96db9023b881d7cd9f379b0c154650d6c108e9a3 バグ解説 4. Heartbeat Request and Response Messages The Heartbeat protocol messages consist of their type and an arbitrary payload and padding. struct { HeartbeatMessageType type; uint16 payload_length

    Heartbleedバグのコードを解説 - Qiita
  • IBM Developer

    IBM Developer
  • PHPerはSpikaのどこを見たのか?

    レガシーズ 公式ブログ レガシーコードと戦い続ける謎の集団、レガシーズの公式ブログです。 ※レガシーズはレガシーコードを通じて正しいコードの構造や改善の手法を模索する覆面集団です。特定のプロダクトやサービスを誹謗中傷する事が目的ではありません。 みなさん、こんにちは。マスク・ド・レガシーです。 PHPカンファレンスも無事に終わり、ゆっくりと休暇を楽しんでいたところ、にわかにタイムラインが騒がしくなっていました。今回は話題の中心になったSpikaを題材にPHPのコーディングについて考えてみようと思います。 Spikaの概要SpikaはMITライセンス化のオープンソースとして公開されたメッセンジャーアプリケーションです。プロジェクトにはネイティブで実装されたiOS、Android向けのモバイルアプリケーションとPHPで実装されたサーバーサイドを組み合わせる事で独自のメッセンジャーサービスを構築

    PHPerはSpikaのどこを見たのか?
  • ScaleOut | Supership

    2024年4月1日より、Supership株式会社は親会社であるSupershipホールディングス株式会社に吸収合併されました。 合併に伴い、存続会社であるSupershipホールディングスは社名をSupershipに変更し、新たな経営体制を発足しました。件に関する詳細は、プレスリリースをご確認ください。 2024年4月1日より、Supership株式会社は親会社であるSupershipホールディングス株式会社に吸収合併されました。 合併に伴い、存続会社であるSupershipホールディングスは社名をSupershipに変更し、新たな経営体制を発足しました。 件に関する詳細は、プレスリリースをご確認ください。

    ScaleOut | Supership
    zuborawka
    zuborawka 2013/10/16
    良いアイデア。alias が変わるたびに調整せざるを得ない忌まわしき order フィールドでさっそく試してみよう。
  • Composerを活用したモダンな開発手法をPHPカンファレンス2013で発表してきた。 #phpcon2013 | Engine Yard Blog JP

    2013/9/14に蒲田の太田区産業プラザPiOで開催されたPHPカンファレンス2013でComposerについての発表を行ってきました。Composerを使った事が無い方向けにまずComposerを使うと何が便利なのか、autoloadがどのように便利かという点に絞って解説をさせて頂きました。発表資料は下記です。既にComposerを使っている方々にとっては聞き飽きた情報かもしれませんが、これからComposerを使う人に向けて改めてポイントを振り返ります。 Composerは今すぐに使える { "require": { "dg/twitter-php": "*" }, "autoload": { "psr-0": {"": "lib/"} } } ComposerはPHPのコマンドラインが使える環境であれば簡単に実行できます。インストーラーを実行すればPHPから実行可能な compos

  • ユニットテストにまつわる10の勘違い | DevelopersIO

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

    ユニットテストにまつわる10の勘違い | DevelopersIO
  • PHPとかいろいろ演算代入系の演算子のハナシ - なんたらノート第三期ベータ

    PHPの関数定義はこんな変態的な書き方ができる - 頭ん中 に、続いて。アンリーダブルコードで勉強しようというのがあった、そのとある勉強会の発表ネタです。 これは、PHPMarkdownパーサ の実装を可能な限りそのまま綺麗に変換してJavaScriptに移植しようという js-markdown-extra をやっていたとき、大ハマりして修正に苦労したバグの話から来てます。 演算代入。+= とか *= とかのやつ。関数型の人以外はきっと常用してますね。じゃあ問題。 <?php $tokens = array("a", "b", "c"); $tokens[0] .= array_shift($tokens); print_r($tokens); こうするとどんな結果が出力されるでしょうか。PHPです。 自身の先頭から要素を取り出して、それを先頭要素に文字列追加する。array_shift

    PHPとかいろいろ演算代入系の演算子のハナシ - なんたらノート第三期ベータ
    zuborawka
    zuborawka 2013/08/31
    「見た目がまったく同じなのに言語処理系によって非互換性なところはある」