タグ

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

  • コーディングに対する考え方を変える6つのプログラミングパラダイム | POSTD

    私は時折、コーディングに対する考え方を変えさせられるような、従来と非常に異なるプログラミング言語に出会います。記事では、その中でも特に気に入っている発見をいくつかご紹介したいと思います。 これは、先賢による「関数型プログラミングは世界を変える!」的な投稿ではありません。記事で挙げるのは、もっと「知る人ぞ知る」的なリストです。多くの読者の方にとって、以下の言語やパラダイムは聞いたことのないものが大半だと思いますので、私が経験したように、これらの新しい概念を学ぶ楽しさを感じていただければ幸いです。 注:私は以下の言語の多くに関して最低限の経験しかありません。その発想に引き込まれたのであって、専門的知識は持ち合わせていないため、訂正すべき点や誤りがあればどうぞご指摘ください。また、記事で取り上げていない新しいパラダイムや概念に出会った方は、ぜひお知らせください。 最新情報:記事が r/p

    コーディングに対する考え方を変える6つのプログラミングパラダイム | POSTD
    syuu256
    syuu256 2017/06/20
  • 私はC言語を知らない | POSTD

    (注:2017/04/27、いただいたフィードバックを元に翻訳を修正いたしました。) この記事では、皆さん(特にC言語のプログラマ)に「自分はCを分かっていなかった」と気付いてもらうことを目標にしています。 Cの落とし穴は、思っているよりもずっと身近なところにあります。ちょっとしたコードにも 未定義の動作 が潜んでいることを以下で示しましょう。 この記事はQ&A形式になっており、それぞれの例題は独立したソースコードとして扱ってください。 1. Q: これは正しいコードでしょうか? (変数の二重定義エラーが発生するでしょうか。上述の通り、これは独立したソースファイルであり、関数体や複合ステートメントの一部ではありません) 解答 A: 正しいコードです。1行目は仮定義であり、2行目でコンパイラが処理した後に “定義” になります。 2. extern void bar(void); void

    私はC言語を知らない | POSTD
    syuu256
    syuu256 2017/04/25
  • 200行のコードへのブロックチェーンの実装 | プログラミング | POSTD

    ブロックチェーン の基的な概念は非常にシンプルです。分散型データベースで、順序付けられたレコードのリストが連続的に増加していきます。しかしシンプルとは言え、ブロックチェーンやそれを使うことで解決しようとしている問題について話をする際に、頭を悩まされることがよくあります。これは、 ビットコイン や イーサリアム といった、一般にもよく知られているブロックチェーンベースのプロジェクトでよく聞かれる話です。「ブロックチェーン」は、 取引 や スマートコントラクト 、または 暗号通貨 といったコンセプトと強い結びつきがあります。 そのため、来シンプルであるべきブロックチェーンの理解がより困難になってしまっています。抜け目のないソースコードであれば尚更です。 そこで、 NaiveChain という、200行のJavascripitに実装した、非常にシンプルなブロックチェーンを紹介したいと思います

    200行のコードへのブロックチェーンの実装 | プログラミング | POSTD
    syuu256
    syuu256 2017/04/24
  • Dockerの本番運用 | POSTD

    以前に私が書いた「 Docker番運用:失敗の歴史) 」という記事は、非常に多くの反響を呼びました。 その後、長い議論を交わして、何百件ものフィードバックや何千件ものコメントを読み、さまざまな人々や主要事業者とも顔を合わせました。Dockerでの試みが増えるほど、その失敗談は増えていきます。そうした現状を、今回アップデートしておきたいと思います。 この記事では、最近の交流や記事から得た教訓を紹介しますが、その前に簡単におさらいをして軽く背景を説明しましょう。 免責事項:対象読者 たくさんのコメントから、世の中には10種類の人々が存在するということが明らかになりました。 1) アマチュア 実際のユーザがいない試用版のプロジェクトやサイドプロジェクトを実行している人々です。Ubuntuのベータ版を使用するのが当然だと考えており、「安定したもの」は古いものと見なすようなタイプです。 注釈:書

    Dockerの本番運用 | POSTD
    syuu256
    syuu256 2017/04/20
  • どのようにして5,000ドルのGoogleマップXSSを発見したか | POSTD

    数ヵ月前、私はGoogleマップを、もっと正確に言うとGoogleストリートビューを利用しました。Googleストリートビューは子供の頃に思い描いた未来的なテレポートみたいで、とても気に入っています。私は、普段そうするように、その時もアドレスバーを見ました。2014年のいつ頃からか、パラメータは単なるクエリの文字列ではなくなり、その代わりに感嘆符で区切られた英数字の奇妙な寄せ集めになったようです。 難解で、現在のところ公開されたドキュメンテーションもなく、多くの人々に毎日使用され、リバースエンジニアリングが可能なプロトコル。こういうコードを目の前にすると、私は解読したくてウズウズしてきます。 私はブラウザのWebコンソールも見てみました。AJAX APIへのリクエストが同じようにエンコードされていただけではなく、もしレスポンスの一部が画像だった場合、その他のレスポンスは暗号を用いたバイナリ

    どのようにして5,000ドルのGoogleマップXSSを発見したか | POSTD
    syuu256
    syuu256 2017/04/18
  • JOSE(JavaScriptオブジェクトへの署名と暗号化)は、絶対に避けるべき悪い標準規格である | POSTD

    注: 稿は元はJSON Web Tokens(JWT)について書いたものですが、JWTはJavascript Object Signing and Encryption(JOSE)のサブセットであるため、以下の批評はどちらかというとJOSE全体に焦点を当てています。 もし既にJavascript Object Signing and Encryption(JOSE)を実装することを決めているなら、それがJSON Web Tokens、JSON Web Encryption(JWE)、JSON Web Signatures(JWS)のいずれであっても、その決断に疑問を持つべきです。間違いを犯そうとしている可能性があります。 この投稿に書いたことはすべて、RFC 7519、RFC 7515、そしてRFC 7516に則っています。将来、新規のRFCでは以下に挙げるような欠陥はなくなっている可能

    JOSE(JavaScriptオブジェクトへの署名と暗号化)は、絶対に避けるべき悪い標準規格である | POSTD
    syuu256
    syuu256 2017/04/18
  • #/usr/binとその同種の周辺を探る | POSTD

    (注:2017/04/10、いただいたフィードバックを元に翻訳を修正いたしました。) はじめに 私はLinuxが大好きです。コンピュータとのやりとりが楽しくなるし学ぶことも多くなります。OSとハードウェアの基盤となる基原則を学びたい人にとって、Linuxはとてもいい出発点と言えるでしょう。 ご存じのとおりLinuxとは大抵の場合プログラム(コマンド)を通してやりとりします。Linuxと他のUNIX系システムが持っている特徴は、コマンドラインと、パイプのコンセプトです。プログラムの提供する入力と出力を統合すれば、データを操作するのに非常にパワフルなプラットフォームになります。 Linuxのコマンド、プログラム、バイナリ(何と呼んでもいいのですが)の大部分は、/usr/bin、/usr/sbin/、/binそして/usr/local/binに存在しています。これらのディレクトリを見れば、プロ

    #/usr/binとその同種の周辺を探る | POSTD
    syuu256
    syuu256 2017/04/04
  • 効率的にゲームを更新する | POSTD

    先日、 Things that can go wrong when downloading(ダウンロード時に上手くいかないものごと) についての記事を書きました。その記事に、ネットワークの問題から妥当でないコンテンツ、不完全なハードウェアに至るまで、ゲームを最初にインストールする際に発生することがある一連の原因をリストアップしました。 今回の記事では、ゲームの前バージョンが正常にインストールされているときに、そのゲームを新しいバージョンにアップグレードするのにどんな方法が使えるかについて考えます。 圧縮 あるユーザが利用できる帯域の量は、通常、一定です。ユーザのインターネットアクセスの論理的な最大速度は20mbps、100mbps、1gbps、または、国によってはそれよりずっと低いものです。 私の自宅にはまだ光ファイバが引かれていないので、アクセスは20mbpsという遅さですが、インターネ

    効率的にゲームを更新する | POSTD
  • なぜリフレクションは遅いのか | POSTD

    .NETのリフレクションが遅い のは周知の事実ですが、なぜなのでしょうか。この投稿では、リフレクションの 実装 を見ながらなぜ遅いのかを解明します。 CRL型システム設計目標 リフレクションが速くない理由の1つとして、そもそも 高いパフォーマンス が設計上の目標にされてはいないことを挙げることができます。 型システム概要 – 設計の目標および非目標 では次のように記載されています。 目標 コード(リフレクションではない)の実行時に必要となる情報へのアクセスが高速なこと。 コード生成のためにコンパイル時に必要となる情報へのアクセスが容易であること。 ガベージコレクタ/スタックウォーカが必要な情報へアクセスする時に、ロックを解除したりメモリを割り当てたりしなくてよいこと。 一度にロードされる型の数が最小限であること。 指定された型をロードする時、ロードする数が最小限であること。 型システムのデ

    なぜリフレクションは遅いのか | POSTD
    syuu256
    syuu256 2017/03/16
  • Gitのスケーリング(と、その背景) | POSTD

    数年前、Microsoftは、社内全体のエンジニアリングシステムを活性化させるため、数年間にわたる投資を行う決定をしました。私たちは山のような数のチームを抱える大企業です。チームはそれぞれ、担当のプロダクト、独自の優先順位、プロセス、ツールを持っています。”共通の”ツールもありますが、チームによって様々に異なる点も多く、内部で開発した単発のツールも数え切れないほどあります(「チーム」とは社の部門のようなもので、数千のエンジニアの集まりです)。 この状況にはたくさんのマイナス面があります。 似たようなツールを構築しているチームがいくつもあり、巨額の冗長な投資が生まれている 「クリティカルマス(損益分岐点を超える生産量、普及率)」に向けた設備投資ができない 皆がバラバラのツールやプロセスを用いているため、従業員が異動しにくい 組織の垣根を越えてのコード共有が難しい “MS限定”ツールの過多のた

    Gitのスケーリング(と、その背景) | POSTD
    syuu256
    syuu256 2017/03/10
  • ニューラルネットワークの動物園 : ニューラルネットワーク・アーキテクチャのチートシート(前編) | POSTD

    新しいニューラルネットワークのアーキテクチャがその時々で誕生するため、それら全部を把握することは困難です。全ての略語を覚えようとすると、最初はその数の多さに圧倒されてしまうでしょう(DCIGNやBiLSTM、DCGANを知っている人はいますか?)。 そんなわけで、これらのアーキテクチャの多くを盛り込んだチートシートを作ることにしました。そのほとんどはニューラルネットワークです。しかし、中には全く異なるアーキテクチャも潜んでいます。どれも独特で目新しいアーキテクチャばかりですが、ノードの構造を描くことで基的な関係が分かりやすくなってきます。 これらをノードマップとして描くことの問題点は、これらがどのように使われるかを明確に示していないという点です。例えば、変分オートエンコーダ(VAE)はオートエンコーダ(AE)と同じように見えますが、実際は訓練過程が全く異なりますし、訓練したネットワークの

    ニューラルネットワークの動物園 : ニューラルネットワーク・アーキテクチャのチートシート(前編) | POSTD
    syuu256
    syuu256 2017/03/03
  • JVMはそんなに重くない | POSTD

    Clojureに反対する大きな理由がJVMです。この役立たずは重いですからね。 これは、数週間前に ZA TechSlackで見た投稿です。休暇中にClojureの話題を何件か見たのですが、投稿者はJVMについても繰り返し言及していました。 私はこの投稿について Slack上で少しつぶやいていました が、もっと広く理解され議論されるように、稿を書くことを決めました。 背景 以前は、私もJVMは重いと思っていました。2000年代の初めにJVMとPHPと比べていた頃の話です。当時は、.NETやColdFusionなど、別の重い製品が他にもありました。また、PerlPythonという軽めの製品もありましたが、私はWindowsを使っていたのでActivePerlやActivePythonはやはり少し重めでした。 私が初めてJVMに対する“恐れ”を克服したのは、小規模な製品アプリを、JRu

    JVMはそんなに重くない | POSTD
    syuu256
    syuu256 2017/03/03
  • 学校では習わないコーディングスキル:オブジェクト所有権 | POSTD

    プログラマとして身に着けるべきスキルはたくさんありますが、中には、ソフトウェアエンジニアリングの標準カリキュラムに組み込まれていないものもあります。そうしたスキルは少しずつ自然に、あるいは経験豊富な人と一緒に仕事をする中で学ぶ必要があります。1つDavid MacIverが取り上げているのは、 値の型を追跡するスキル です。 他には、コード中のオブジェクト所有権を理解するスキルも必要です。つまり、コードのどの部分がメモリ内の特定オブジェクトを所有し、それがどんなアクセスを予期しているかを知るということです。 その理解なしにコードを書くと、プログラムがクラッシュしたり厄介なバグに悩まされたりすることになるかもしれません。さらに悪いことに、プログラミング言語の中には、この問題に役立つ手段さえ提供してくれないものもあるでしょう。 自然に身に付ける これは、私がこのスキルを学んだ方法です。私は大学

    学校では習わないコーディングスキル:オブジェクト所有権 | POSTD
    syuu256
    syuu256 2017/03/01
  • 私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD

    文:Daniel Sim 分析:Lee Shangqian、Daniel Sim、Clarence Ng ここ数ヶ月、シンガポールのMRT環状線では列車が何度も止まるものの、その原因が分からないため、通勤客の大きな混乱や心配の種となっていました。 私も多くの同僚と同じように環状線を使ってワンノースのオフィスに通っています。そのため、11月5日に列車が止まる原因を調査する依頼がチームに来た時は、ためらうことなく業務に携わることを志願しました。 鉄道運営会社SMRTと陸上交通庁(LTA)による事前調査から、いくつかの電車の信号を消失させる信号の干渉があり、それがインシデントを引き起こすことが既に分かっていました。信号が消失すると列車の安全機能である緊急ブレーキが作動するため、不規則に電車が止まる原因となります。 しかし8月に初めて発生した今回のインシデントは、不規則に起こっているように見えるた

    私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD
    syuu256
    syuu256 2017/02/25
  • 一から学ぶベジェ曲線 | POSTD

    (編注:SVGアニメーションを元記事にならい追加しました。リクエストありがとうございました。) 皆さんは線分のことをどう表現しますか? 線分は、端点によって考えられるかもしれません。その端点を P0 、 P1 と呼ぶことにしましょう。 線分を厳密に定義するならば、「 P0 と P1 を結ぶ直線において、 P0 と P1 の間にある全ての点の集合」と言えるかもしれません。これは以下のように表せるでしょう。 便利なことに、上記の定義から、その線分上のどこにある点の座標でも簡単に求めることができます。例えば、中点は L(0.5) にあります。 実は、2点間のどんな値でも、任意の精度で 線形補間する ことが可能です。そのため、時間関数 L(t) の t で線をたどるといった、より複雑なことができるのです。 ここまで来ると、「それが曲線と何の関係があるのか?」と不思議に思うかもしれません。2つの点だ

    一から学ぶベジェ曲線 | POSTD
    syuu256
    syuu256 2017/02/24
  • どれだけ速く文字列からスペースを削除できるのか | POSTD

    時によってプログラマは文字列から不要な文字を取り除きたい場合があります。例えば、テキストの一部からすべての行の末尾文字を削除したいとします。 その時、全スペース(‘ ‘)や改行コード(‘\n’および‘\r’)を削除する問題を考えてみましょう。 効率的に実行するにはどのような方法がいいのでしょうか。 size_t despace(char * bytes, size_t howmany) { size_t pos = 0; for(size_t i = 0; i < howmany; i++) { char c = bytes[i]; if (c == '\r' || c == '\n' || c == ' ') { continue; } bytes[pos++] = c; } return pos; } 上記のコードはUTF-8でエンコードされた文字列で動作します。UTF-8がASCII

    どれだけ速く文字列からスペースを削除できるのか | POSTD
    syuu256
    syuu256 2017/02/21
  • 糸が紡ぎ出す明暗 | POSTD

    少し前、私は Petros Vrellis が作り出した芸術作品に出会いました。それを見て、私の中のエンジニア魂が叫びました。「自動化だ!」下の画像で分かるように、Petrosは丸い織機を使って糸で肖像画を作ります。しかし、これにはかなりの根気が必要です。これから、私がざっとこのプロセスを自動化するステップをやってみます。しかし、もちろん、称賛されるべきは、この驚くべきアイディアを思い付くきっかけとなったアーティスト人です。最終的に出来上がるのは、糸だけを使って画像をハーフトーンで表現したものです。 この主なアイデアは、3つのステップに分かれます。ステップ1で、様々な入力画像に対して、糸で作品を表現するためにちょっとした前処理を行います。ステップ2で、最善の画像表現とするために製作者が長い糸をどのように配置していくのか決める処理をPythonで行います。ステップ3では、私の場合、この重労

    糸が紡ぎ出す明暗 | POSTD
    syuu256
    syuu256 2017/02/15
  • すばらしいビット | POSTD

    unsigned int v; //only works if v is 32 bit v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++;

    すばらしいビット | POSTD
  • 仮想DOMの内部の動き | POSTD

    PreactでVDOMがどのように機能するかを示すフローチャート 仮想DOM(VDOMあるいはVNode)は魅力的です✨ しかし複雑で、理解が難しいものでもあります???? React や Preact 、その他同様のJSのライブラリでは、これをコアで使っています。残念ながら私は、これを詳細かつ分かりやすく説明している優れた記事や資料を見つけられませんでした。ですから、自分で書こうと思い立ったのです。 備考:これは非常に長い記事です。内容をシンプルに表すために画像を山ほど挿入しましたが、それゆえにさらに長い記事になってしまいました。 私は Preact のコードとVDOMを使いました。容量が小さくて済み、将来、簡単に見なおすことができるからです。しかし、概念のほとんどはReactにも共通していると思います。 皆さんがこれを読んだ後、仮想DOMをよく理解できるようになり、できればReact

    仮想DOMの内部の動き | POSTD
  • エンコード方式 base-122 | POSTD

    base-64よりもスペース効率の良い方法。 GitHub レポジトリ 1 概要 バイナリをテキストに変換するエンコード方式としての base-64 は、そのデータ量を33%増大させます。この記事では、UTF-8のテキスト変換方式であり、元のデータから14%増大するbase-122を紹介します。base22はWebを念頭において作られました。 実装 には、Javascriptのデコーダを使い、base-122でエンコードしたリソースをWebページに読み込ませる過程が含まれます。 免責事項 3で示すように、base-122は 大半のWebページが該当します gzip圧縮ページでの使用は推奨しません。ですが、base-122は一般的な文字エンコード方式として役に立つ可能性があります。 1.1 はじめに 画像、フォント、オーディオなどの外部のバイナリリソースは、base-64でエンコードする デ

    エンコード方式 base-122 | POSTD
    syuu256
    syuu256 2017/02/07