2019年5月6日のブックマーク (5件)

  • 学習目的のコードリーディングはLinuxの基本コマンドから始めよう - Qiita

    急いでる人向け moreやcatのソースは読み始めるのに丁度いいよ。 はじめに ※ コードの中身の話はしません 昔話だけど「プログラミングの勉強のためにソースコードを読みたい」という人に、よく「UNIX/Linuxのコマンドのソースを見るといいよ」と言っていたんだけど、アプリ開発(とくにC言語)からしばらく離れてるので、すっかりそういうアプローチがあったことを忘れてて… で、最近とあるイベント(飲み会)で、データベース界隈では大変有名な方に「『昔zakiさんにコマンドのソースみるといいよ』と言われたのが自分の中で大きかった」という話を(私はすっかり忘れていたんだけど…汗)ご人から聞いて、せっかくの機会なので、以前どんな風にコードリーディングをやっていたかを簡単にまとめてみました。 OSSのコードというとApache Web Serverとかのサーバ系ミドルウェアなんかを想像することが多い

    学習目的のコードリーディングはLinuxの基本コマンドから始めよう - Qiita
  • CloudflareのDNSからArchive.isが解決できない問題について

    Tell HN: Archive.is inaccessible via Cloudflare DNS (1.1.1.1) | Hacker News あの有名な1.1.1.1であるCloudflareDNSから、Archive.isが解決できない。なぜかCloudflareはローカルホストを返す。というHacker News上での質問について、Cloudflareの創業者の一人であるMatthew Princeが回答している。 We don’t block archive.is or *any other domain* via 1.1.1.1. Doing so, we believ... | Hacker News 1.1.1.1ではarchive.isも含むすべてのドメインを検閲していない。検閲は我々がサービスを立ち上げたときにユーザーに約束したDNSの正当性とプライバシーとセキ

  • DBマイグレーションを行う技術 - 発明のための再発明

    データベースのスキーマを変更するということはデータをいじる行為であり、最悪の場合データが消えます。 最悪の事態にはならなくとも、思わぬ場所に影響が起きたり、データの不整合が発生する恐怖と戦う必要が有ります。 テストや切り戻しを含めて計画し、大きな変更の場合にはダウンタイムまで考慮する必要があります。 そこで、RDBを対象にデータベースの変更を行う方法について書いていきます。 スキーマ変更 まずは、スキーマ変更について、 カラムを追加する 一番簡単で、影響も少ない変更です。 気をつけるのは、 ソースコードの変更よりも前にスキーマ変更を完了させる (長時間)ロックがかからない方法を選ぶ といったところでしょうか。 大抵の場合は、スキーマの変更とソースコードの変更の順番にさえ気をつければ問題は発生しません。 カラム名を変更する 「ALTER」でさくっと変えたくなりますが、ソースコードの変更が同時

    DBマイグレーションを行う技術 - 発明のための再発明
  • コンテナはなぜ安全(または安全でない)なのか - sometimes I laugh

    CVE-2019-5736を覚えていますか?今年の2月に見つかったrunc(Dockerがデフォルトで利用しているコンテナのランタイム)の脆弱性で、ホストのruncバイナリを好き勝手にコンテナ内部から書き換えることができるというものです。 脆弱性の仕組みに興味があったので調べたところ、コンテナを攻撃する方法というのは他にもいろいろあって、runcは頑張ってそれを塞いでいるようです。これまとめると面白いかも、と思ったので以下のようなおもちゃを作りました。 Drofuneは簡単なコンテナランタイムです。drofune runとかdrofune execなどでコンテナを起動したり、入ったりすることができます、といえば想像がつくでしょうか。 これだけでは何も面白くないので、Drofuneはわざと安全でない実装になっています。なので、今回発見されたCVE-2019-5736を利用した攻撃も成立します

    コンテナはなぜ安全(または安全でない)なのか - sometimes I laugh
  • YARV(Yet Another RubyVM)アーキテクチャ

    これは? Compiler (compile.h, compile.c) VM Generator (rb/insns2vm.rb, insns.def)命令記述 VM (Virtual Machine, vm.h, vm.c)レジスタ スタックフレームメソッドローカルフレーム ブロックローカルフレーム クラスフレーム フレームデザインについての補足 メソッド呼び出しについて 例外例外テーブル rescue ensure break, return(ブロック中)、retry 定数の検索定数検索パス 最適化手法threaded code Peephole optimization inline method cache inline constant cache ブロックと Proc オブジェクトの分離 特化命令 命令融合 オペランド融合 stack caching JIT Compile