タグ

ブックマーク / postd.cc (209)

  • バージョンの充足可能性問題 | POSTD

    (注:2017/02/06、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) Dependency HellはNP完全ですが、この状況から脱却できるかもしれません。 パッケージにおけるバージョン選択の問題とは、完全である(全ての依存関係を満たしている)かつ互換性のある(互換性のない2つのパッケージが選択されていない)トップレベルパッケージPをビルドするために使われる依存関係の集合を見つけることです。ただし、菱形依存問題があるので、このようなセットは存在しない可能性があります。菱形依存問題とは、AはBとCが必要、BはDのバージョン2ではなくバージョン1が必要、CはDのバージョン1ではなくバージョン2が必要といったような問題のことです。この場合、Dの両方のバージョンを選択することはできないため、Aをビルドすることができないわけです。 パッケ

    バージョンの充足可能性問題 | POSTD
    syuu256
    syuu256 2017/02/01
  • チュートリアル – システムコールの書き方 | プログラミング | POSTD

    しばらく前に私は、「 C言語でシェルを書く方法 」というタイトルで、皆さんが日常的に使っているツールの内部動作を理解するのに役立つチュートリアルを書きました。単純なシェルであっても、数例を挙げるだけでも read 、 fork 、 exec 、 wait 、 write それから chdir など多数のシステムコールが呼び出されていました。この探索に続く次なる旅として、今回はLinux環境においてシステムコールがどのように実装されているのかについて学んでいきましょう。 システムコールとは何か システムコールを実装するに当たって、それが何なのかをまずきちんと理解しておきましょう。そう遠くない昔の私がそうでしたが、素直なプログラマならシステムコールをCライブラリで提供されている関数のことだと定義するかもしれません。しかしこれは全く正しくありません。確かにCライブラリに含まれる関数群はシステムコ

    チュートリアル – システムコールの書き方 | プログラミング | POSTD
    syuu256
    syuu256 2017/01/29
  • #Anthony Calandra / モダンC++の機能 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) (注:2017/02/07、タグが誤っていたので修正いたしました。) C++11/14/17 概要 C++11/14/17に関する記述や例の多くは、様々なリソース(詳しくは謝辞の項目をご覧ください)を参考にしており、それらを自分の言葉でまとめてみました。 C++17には、以下の新しい言語機能が導入されています。 クラステンプレートに対するテンプレート引数の推論 autoによる非型テンプレートパラメータの宣言 フォールド式 かっこ付き初期化リストを持つauto推論の新しい規則 constexprラムダ インライン変数 入れ子になった名前空間 構造化されたバインディング 初期化子によるステートメントの選択 constexpr if C++17には、以下の新しいライ

    #Anthony Calandra / モダンC++の機能 | POSTD
    syuu256
    syuu256 2017/01/24
  • OSのデバッグ:メモリアロケーション講座 | POSTD

    追記:やあやあHacker Newsさん!おひさしぶり!メモリ管理を深く掘り下げた私の投稿を読む邪魔はしたくないし、私の投稿のあら探しをする人たちを邪魔するつもりもありません。技術的なマル秘テクニックに注目するのもいいでしょう(いや、わかりますよ。楽しいですしね!)。でも、私たちはひとりぼっちでソフトウェアを書いているわけではないのです。だから、ためになる技術的なコンテンツ(私の記事もそうでありたいものです)を捜すだけじゃなくて、政治的な話題にも目を向けることを強くおすすめします。ソフトウェア開発者である私たちは、今後数十年にわたって社会を変える最前線に立つ特権を与えられています。私たちは、自分たちの仕事を社会全体に役立てられるようにするための情報や知識を必要としています。 そういう意味でみなさんには、 Hacker Newsが「政治的」なコンテンツを検閲すると言い出したこと に反対しても

    OSのデバッグ:メモリアロケーション講座 | POSTD
  • Python 3を使うべきでない場合(なんてない) | POSTD

    数日前、著名なライターで開発者でもあるZed Shawが “The Case Against Python 3”(Python3を使うべきでない場合) というブログ記事を書きました。私はZedの功績にとても敬意を払っているし、彼の( Learn Python the Hard Way )というの手法は、 私の に非常に似ているので、私はいつも、 私の講座 を受講しようとしている人には予習するときに彼のを読むように伝え、講座を修了した後に練習を積みたい人には復習するときに読むように伝えています。 ですから、今回のPython 3に関するZedの記事が私には賛同できないものだったことは、とても残念でした。 説明しましょう。私の仕事の90%は、さまざまな大企業でのPython講師としての仕事です。幅広い背景に対応して、クラスは「プログラム未経験者のためのPython」や「Python入門」

    Python 3を使うべきでない場合(なんてない) | POSTD
    syuu256
    syuu256 2017/01/11
  • 技術的負債の返済 – レガシーコードをリファクタリングで救うには | プログラミング | POSTD

    レガシーコードをうまく手なずけて、もう一歩成熟させるにはどうすればいいのでしょう?この投稿では、大規模なレガシーウェブアプリケーションと格闘してきた私が学んだことを紹介します。レガシーコードをうまく手なずけて 、もう一歩成熟させるにはどうすればいいのでしょう?この投稿では、大規模なレガシーウェブアプリケーションと格闘してきた私が学んだことを紹介します。 レガシーコードはリファクタリングで救出可能 耳寄りなお知らせがあります! リスたちは毎年何千もの木を植えてくれています 。まあ自分たちが隠したドングリのありかを忘れてしまった結果ですけどね。そしてもうひとつ。 あなたのプロジェクトも救出できる のです。 ボスから任されたプロジェクトが どんなに醜い泥まみれのレガシーコードだったとしても 、そこには 必ず 道があります。道は曲がりくねっていて、木陰にはモンスターが待ち構えていることでしょう。

    技術的負債の返済 – レガシーコードをリファクタリングで救うには | プログラミング | POSTD
    syuu256
    syuu256 2017/01/04
  • コードの半減期とテセウスの船 | POSTD

    プロジェクトが発展する際は、単純に新しいコードが古いコードの上に追加されているのでしょうか。もしくは、時間をかけて徐々に古いコードが新しいコードに置き換えられているのでしょうか。これを解明するために、手ごわい GitPython プロジェクトの助けを借りて、Gitプロジェクトを分析する 簡単なプログラム を構築してみました。履歴を年ごとに振り返り、 git blame を実行してみようと思ったのです(この処理を多少でも速くすることは簡単ではないと分かりました。しかし、ファイルのキャッシングを便宜的に含ませることや、変更された点を履歴から見つけること、 git diff を使って変更したファイルを無効にすることなどの詳細を、いつかお伝えします)。 頭がさえている時に、 テセウスの船 をダサくもじって、 “テセウスのGit” と名付けました。私は父親になって、ひどいダジャレを作れるようになった

    コードの半減期とテセウスの船 | POSTD
    syuu256
    syuu256 2016/12/27
  • 最も割高なアンチパターン : 構造化されたデータを文字列関数で操作する「printfアンチパターン」について | POSTD

    記事では、私の知る最も割高なアンチパターンとなるプログラミングについて述べます。 それは、 構造化されたデータフォーマットを文字列関数を使って操作すること です。 以後これを” printfアンチパターン “と称します。 コスト 私がこれを”最も割高な”アンチパターンと呼ぶのは、根拠のない主張ではありません。 cve.miter.org のデータを使って 脆弱性をタイプ別にカウントし 、下記のように、上位を占める脆弱性のタイプ別リストを作りました。 rexec: 19268 DoS: 14849 xss: 9236 memory: 8212 sqlinj: 6230 privilege: 3321 dirtraversal: 2762 arith: 1260 csrf: 1117 私の方法に対する批判や良いご提案があれば遠慮なくどうぞ。 上位を見ると、XSSとSQLインジェクションの数が

    最も割高なアンチパターン : 構造化されたデータを文字列関数で操作する「printfアンチパターン」について | POSTD
    syuu256
    syuu256 2016/12/26
  • プログラミングスタックをEveはどのように統合するのか | POSTD

    この投稿では、エキサイティングで魅力的な新しいプログラミング言語、 Eve について紹介していきたいと思います。今回は6パートのシリーズのうち、パート1です。 1. プログラミングスタックの全体をEveはどのように統合するのか 2. When logic programming meets CQRS(ロジックプログラミングがCQRSに出会う時) 3. Throwing off our scope chains(スコープチェーンを取り除く) 4. Smalltalk and protein programming(Smalltalk言語とプロテインのプログラミング) 5. The rock-solid foundation for Eve’s big vision(Eveの壮大なるビジョンのための強固な基盤) 6. Why Eve will be perfect for realtime a

    プログラミングスタックをEveはどのように統合するのか | POSTD
    syuu256
    syuu256 2016/12/20
  • Q&A:人工知能の未来(前編) | POSTD

    人工知能とは? コンピュータに知的な動きをさせる方法の研究です。大ざっぱに言えば、コンピュータは間違ったことよりも正しいことをする範囲内において知的と言えます。正しいこととは、それがどのようなものであれ、最も目標を達成しそうなアクションであり、より専門的には、期待される効用を最大限に高めるアクションと言えるでしょう。AI人工知能)のタスクには、学習、推論、計画、知覚、言語理解、ロボティクスなどが含まれます。 一般的な誤解 AIは特定の技術である。 例えば、1980年代や1990年代には、多くの記事がAIとルールベースエキスパートシステムを混同していました。また、2010年代においては、多階層の畳み込みニューラルネットワークと混同している例が見られます。このことは、物理学と蒸気エンジンを混同するのに、ある意味では似ていると言えるでしょう。AIは、機械における知性創造の一般的な 問題 を研究

    Q&A:人工知能の未来(前編) | POSTD
    syuu256
    syuu256 2016/12/09
  • CQRSとイベントソーシングの使用法、または「CRUDに何か問題でも?」 | POSTD

    書き込みと読み込みのどちらに力を入れているかは、ストレージエンジンによって異なります。たとえば昔ながらのリレーショナルデータベースは、外部キーなどの制約を使ってデータの整合性をうまく制御できるようになっています。一方でNoSQLデータベースは、スループットとスケーラビリティを確保するために、そういった組み込みのガードレールをはずしてしまいました。データ層においても、どちらか一方に特化した最適化をすることがあります。たとえば、あらかじめ計算済みの値を保持しておけば、「一日あたりのサイト訪問者数」などの読み込み操作を効率よく行えるでしょう。ストレージソリューションのメーカーはどこも、「うちのプロダクトならあらゆるニーズを満たせます」などと自社製品の機能を自慢します。しかし実は、昔ながらのCRUDモデルに沿ってストレージエンジンを選んでデータ層を設計した時点で、さまざまな関心事の間で何らかの妥協

    CQRSとイベントソーシングの使用法、または「CRUDに何か問題でも?」 | POSTD
  • くだらないAPIなんていらないよ – 2016年のウェブスクレイピング事情 | POSTD

    ソーシャルメディアのAPIとそのレート制限は、あまり気分のよいものではありません。特にInstagram。あんな制限つきAPIを欲しがる人がいったいどこにいるんでしょうね? 最近のサイトは、スクレイピングやデータマイニングの試みを阻止するのがうまくなってきました。AngelListはPhantomJSすら検出してしまいます(今のところ、他のサイトでそこまでの例は見ていません)。でも、ブラウザ経由での正確なアクションを自動化できたとしたら、サイト側はそれをブロックできるでしょうか? 並行性を考えたり、さんざん苦労して用意した結果として得られるものを考えたりすると、Seleniumなんて最悪です。あれは、私たちが「スクレイピング」と聞いて思い浮かべるようなことをするためには作られていません。しかし、賢く作り込まれた今どきのサイトを相手にして、インターネットからデータを掘り当てるための信頼できる

    くだらないAPIなんていらないよ – 2016年のウェブスクレイピング事情 | POSTD
    syuu256
    syuu256 2016/12/03
  • H.264の秘密 | POSTD

    (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) (2016/12/11、いただきましたフィードバックをもとに翻訳を修正いたしました。) H.264は、動画圧縮コーデックの標準規格です。ネット上の動画、Blu-ray、スマホ、セキュリティカメラ、ドローンなどなど、今やあらゆるところでH.264が使われています。 H.264は注目すべき技術のひとつです。たったひとつの目標、つまりフルモーションビデオの送信に要するネットワーク帯域を削減することを目指した30年以上の努力の結晶なのです。 技術的な面でも、H.264はとても興味深い規格です。この記事では、その一部について概要レベルでの知識を得られることでしょう。あまり複雑だと感じさせないようにするつもりです。今回おはなしする概念の多くは動画圧縮全般にあてはまるものであり、H.264に限ったものではありません

    H.264の秘密 | POSTD
    syuu256
    syuu256 2016/12/02
  • フロントエンドにおいてModel-View-Controllerは死んだのか? | POSTD

    多くのフロントエンド開発者が 一方向のアーキテクチャ を採用し始めている中で、Model-View-Controller(MVC)に未来はあるのでしょうか。 状況を把握するために、まずはフロントエンドのアーキテクチャの進化を振り返ってみたいと思います。 過去4年にわたり、私は多数のWebプロジェクトに取り組み、フロントエンドの構築、そしてフロントエンドとフレームワークの統合に多くの時間を費やしてきました。 2010年以前は、従来のウェブサイトにDOM操作を追加する場合は大抵JavaScript( jQuery が書かれたプログラミング言語)が使用されていました。当時の開発者はアーキテクチャ自体についてはそれほど気に掛けていなかったと思います。コードベースを構造化する場合、 Revealing module pattern のようなものがあれば十分でした。 現在、多くの議論が交わされているフ

    フロントエンドにおいてModel-View-Controllerは死んだのか? | POSTD
    syuu256
    syuu256 2016/12/01
  • C言語、知ってるつもり? | POSTD

    「Cならわかるよ」というプログラマーは大勢います。確かにCの文法はよく知られているし、44年の歴史を誇るわけだし、あいまいな機能に悩まされることもありません。簡単ですよね! あ、「Cならわかるよ」と 言うだけなら 簡単ですよねっていう意味ですよ。学校で習った人もいるだろうしお仕事で使ったことがある人もいるでしょう。覚えることもそんなに多くないし、完璧だという人もいるかもしれません。いいでしょう。でも、Cって実は、そんなにシンプルではないのです。 嘘だと思うなら、今から挙げる問題を解いてみましょう。たった5問です。基的にはどれも同じで「戻り値は何ですか?」という問題ばかりです。四択方式で、どの問題も正解はひとつだけです。さあどうぞ。 第1問

    C言語、知ってるつもり? | POSTD
    syuu256
    syuu256 2016/11/30
    未定義
  • 『モンスターワールドII ドラゴンの罠』1989年オリジナル版のリバースエンジニアリング:正確性の探究 | POSTD

    こんにちは、Lizardcube社(現在フランスのパリを基点にしています)のOmarです。私は新作ゲーム「 Wonder Boy: The Dragon’s Trap 」のテクニカルディレクタ兼プログラマです。このゲームは、1989年にセガ/ウエストンにより発売された『モンスターワールドII ドラゴンの罠』のリメイク版です。このオリジナルは、初期のmetroidvaniaスタイル( 訳注:メトロイド(METROID)や悪魔城ドラキュラ(Castlevania)風 )のアクションアドベンチャーであり、カルト的な古典作品になっています。我々はこのゲームのライセンスをオリジナルの開発者から買い取りました。ゲームは DotEmu で公開される予定です。 メカドラゴンの呪いにより半人半竜のモンスターにされてしまった孤独な冒険者の、一生に一度の挑戦が始まる! 姿を変えられたアンチヒーローは呪いを解く方

    『モンスターワールドII ドラゴンの罠』1989年オリジナル版のリバースエンジニアリング:正確性の探究 | POSTD
    syuu256
    syuu256 2016/11/28
  • MITライセンスを1行1行読んでいく | POSTD

    全てのプログラマが理解すべき171語の文章 MITライセンス は、最も有名なオープンソースソフトウェアのライセンスです。この記事では、その内容を一行一行読んでいきます。 ライセンスを読む オープンソースソフトウェアを利用しているものの、これまでライセンス全文(原文:171語)を読む機会がなかった方は、大した量ではないので、今すぐ読んでください。あなたにとってライセンスが身近なものでないなら尚更です。理解できない箇所などがあれば、その部分は心に留めておき、明確にするようにしてください。これから背景や解説とともに、全文を分割して順番に紹介していきますが、大事なことは全容を頭に入れておくことです。 MITライセンス(MIT) Copyright (c) <年> <著作権保持者> ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)のコピーを入手する全ての人に対し、それらに関する無償のライ

    MITライセンスを1行1行読んでいく | POSTD
    syuu256
    syuu256 2016/11/25
  • もしもディスプレイが壊れたら(ヒマラヤで) | POSTD

    もしラップトップのディスプレイが壊れたら、文句を言いつつもお金を出して修理してもらうのが普通でしょう。修理用のパーツが届くまでの間は、外付けディスプレイでしのぐのでしょう。面倒ではあるけれど、それで作業が止まってしまうわけではありません。でも、いちばん近い町までバスで2日かかるうえに、貴重品を安心して送れるサービスも整っていない場所にいるとしたらどうでしょう?私の置かれた状況がまさにそれでした。インド北部のラダック、ヒマラヤに囲まれたところでそんな目にあったのです。私がここに来たのは、日々の仕事から離れて執筆に専念するためでした。執筆にはコンピュータが欠かせません。でも、日々の生活はそれほどコンピュータに依存していなかったので、ハッカーらしい解決策をゆっくり考えてみました。 私のハックのポイントは、スマホを「モニター」として使ったことです。VNCやXのポートフォワーディングで映像出力を直接

    もしもディスプレイが壊れたら(ヒマラヤで) | POSTD
    syuu256
    syuu256 2016/11/21
  • たった1バイトの書き込みが引き起こすルート権限での実行の脆弱性 | POSTD

    2016年9月22日(木)。こんなメールが私のもとに飛び込んできました。 件名: arescreatequery OOB write c-aresプロジェクト のメンテナのひとりとして、c-aresにセキュリティ問題の恐れがあるというメールを受け取ったのです。実際、そのとおりでした。この問題を知らせてくれたのは、かつてChromeOSの脆弱性をGoogleに報告したこともある人でした。 このc-aresの不具合を悪用すると、 ChromeOS上で、rootユーザーとしてJavaScriptのコードを実行できる ことがわかりました。ChromeOS史上最悪の脆弱性かもしれません。報告者には、相当な額の報奨金が贈られることでしょう。 この動きを実現したり、どうやって実現するのかを説明したりするのはとても面倒な作業だったでしょう。報告者がこれを発見したこと、そしてさらに深く掘り下げて、再現可能な

    たった1バイトの書き込みが引き起こすルート権限での実行の脆弱性 | POSTD
    syuu256
    syuu256 2016/11/17
  • try { return } finally {} | POSTD

    class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa(); System.out.println(y); } } 上の質問に回答する前に、次の問題には答えられるでしょうか? try ブロック内に return 文がある場合、 finally ブロックは return の実行時に処理されるのでしょうか。 finally が実行されるなら、いかにして return と finally の両方の実行が実現するのでしょうか。 もし答えが分からなければ、どうぞこのまま読み進め

    try { return } finally {} | POSTD
    syuu256
    syuu256 2016/11/02