タグ

ブックマーク / cpplover.blogspot.com (73)

  • C++標準化委員会の文書: P0210R0-P0219R0

    P0210R0: A light-weight, compact dynamic array 軽量な動的配列ライブラリの提案。 vectorはamortized constant timeを実現するために、実際に必要なサイズよりも大きなサイズのメモリを確保している。これはメモリ消費量を必要以上に上げる。 そのため、そのような挙動を行わない軽量な動的配列ライブラリの追加をする提案。 このライブラリは、insert, push_back, emplace{,_back}, eraseといったメンバー関数は提供しない。これらのメンバー関数は、汎用的なコンテナーの要件には定められておらず、特定のコンテナーがそのような操作を効率的に実装できる場合にのみ提供されるものだからだ。 reserveやcapacityもない。 resize(n)は要素数をnにする再確保を常に行う(ただしn == size()

    knjname
    knjname 2016/06/16
    C++標準化委員会の文書: P0210R0-P0219R0
  • アメリカ合衆国政府が公金を投じて開発されたソフトウェアは自由ソフトウェアにする法案を公開

    江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合: Amazon.co.jp: 江添亮: 江添のほしい物リスト 筆者にブログのネタを提供するために、直接に品物を送りたい場合、住所をメールで質問してください。 View my complete profile ► 2020 (31) ► December (2) ► November (2) ► September (2) ► August (4) ► Jul

    knjname
    knjname 2016/04/04
  • 普通のコンピューターからAMラジオを鳴らそう

    読者の持っている至って普通のコンピューターは、実はAMラジオを鳴らす発信装置が備わっている。 ラジオを鳴らすコードは以下にある。 https://github.com/fulldecent/system-bus-radio ただしこれはMac OS Xでしか動かないので、C++11に移植したコードが以下になる。また、このコードはスレッドを回して消費電力を上げることにより、オリジナルより出力も上げてある。 https://github.com/EzoeRyou/system-bus-radio 動かし方(GCCの場合) git clone git@github.com:EzoeRyou/system-bus-radio.git cd system-bus-radio make gmain make grun Clangの場合、以下のようにする。 make cmain make crun そし

    knjname
    knjname 2016/03/03
  • AVGのクソみたいなChrome拡張の脆弱性

    Issue 675 - google-security-research - AVG: "Web TuneUP" extension multiple critical vulnerabilities - Google Security Research - Google Project Hosting アンチマルウェアソフトウェアのAVGが、クソみたいな脆弱性を含むChrome拡張を、Chrome拡張のインストールを阻止する仕組みを意図的に迂回して無理やり入れた挙句、脆弱性を生み出していたそうだ。しかも、脆弱性の指摘に対する修正案がお粗末すぎる。このようなセキュリティ的にお粗末な対応をするところが出しているセキュリティ用のソフトウェアは一切信用できない。読者の中にAVGを利用しているものがいたら、即刻に消すべきだろう。 ユーザーがAVG AntiVirusをインストールすると、"AVG

    knjname
    knjname 2015/12/30
  • とても賢いコンパイラーの逆襲

    The Hacks of Life: The Dangers of Super Smart Compilers Clangの最適化が未定義の挙動を検出してコード片を消し去ってしまったことに引っかかった開発者の嘆き。 今日初めて、RenderFarmのDSF render(global scenaryを作成するのに使っている内部ツール)をClangで最適化コンパイルして実行した。 結果はsegfaultだった。これは驚きだ(そして自身消失だ)。というのも、最適化していないデバッグビルドは問題なく動くし、GCCでコンパイルされた最適化ビルドも正しく動く。-O0ではバグがない(つまり#if DEVコードのバグではない)ので、「最適化は何をやっているんだ」の時間だ。 大量のprintfと試行錯誤の結果、最適化は以下のようなコード片を丸ごとすっ飛ばしていることが判明した。 for(vector<me

    knjname
    knjname 2015/12/22
  • Grub2の認証でバックスペースを28回押すとレスキューコンソールに入れる脆弱性が発見された

    Back to 28: Grub2 Authentication Bypass 0-Day Grub2のバージョン1.98(2009年12月)から、2.02(2015年12月)までにおいて、脆弱性が発見された。 脆弱性はGrub2の認証機能を使っていた場合に、ユーザー名を入力すべきところで、バックスペースを28回入力すると、レスキューコンソールに入れてしまうものだ。これにより、コンピューターに物理アクセスを得ている人間が、Grub2の強力なレスキューコンソール機能を使うことができる。 脆弱性の原因も詳しく書かれていて興味深い。grub2のコードでは、'\b'が入力されるたびに、unsigned型の変数をデクリメントする。この時、アンダーフローをチェックしていない。その変数は配列の添字に渡されて、ゼロが書き込まれる。 結果として、関数のreturn addressを0x0にすることができ、関

    knjname
    knjname 2015/12/16
    アンダーフローという語句の使い方警察が来るぞー! / “本の虫: Grub2の認証でバックスペースを28回押すとレスキューコンソールに入れる脆弱性が発見された”
  • コマンド間違えると「コマンドではない。」って返してくれる江添プラギン

    コマンド間違えると「コマンドではない。」って返してくれる江添プラギンほしい — 尾上* (@on_orikami) May 27, 2015 bashの場合、.bashrcに以下のように書けばよい。 command_not_found_handle() { echo "コマンドではない。" } ちなみに、もともとのシェル関数をリネームする方法について興味深い方法があった。 bashrc - How do I teach bash in Ubuntu some curse words? - Ask Ubuntu How do I rename a bash function? - Stack Overflow これを元にUbuntuに提供されている便利な機能も維持すると、以下のように書ける。 alias_function() { eval "${1}() $(declare -f ${2}

    knjname
    knjname 2015/05/28
    "コマンド間違えると「コマンドではない。」って返してくれる江添プラギン"
  • Old New Thing: 超最新の実験的C++機能、オタマジャクシ演算子

    この実験的オタマジャクシ演算子を有効にするには、C++ファイルの上部に以下のような行を追加しなければならない。 #define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS 例えば、以下はオタマジャクシ演算子を使ったコードの例である。 #define __ENABLE_EXPERIMENTAL_TADPOLE_OPERATORS #include <ios> #include <iostream> #include <istream> int __cdecl main(int, char**) { int n = 3; std::cout << "3 + 1 = " << -~n << std::endl; std::cout << "(3 - 1) * (3 + 1) " << ~-n * -~n << std::endl; return 0; } この

    knjname
    knjname 2015/05/27
    なるほどー "本の虫: Old New Thing: 超最新の実験的C++機能、オタマジャクシ演算子"
  • constexprで非定数式の状態を保持

    Non-constant constant-expressions in C++ なんと、C++のconstexpr関数を呼び出すたびに戻り値を変える方法があるという。つまり、以下のstatic_assertが引っかかるコードだ。 int main () { constexpr int a = f (); constexpr int b = f (); static_assert (a != b, "fail"); } なんと、constexpr関数は状態を保持できる計算能力を備えているというのだ。 fはconstexpr関数である。 読んでみたところ、要するにこうだ。 noexcept演算子はオペランドが定数式かどうかを判別するのに使える。 // exprが定数式であればtrue constexpr bool b = noexcept( expr ) ; 未定義の関数は定数式ではない。

    knjname
    knjname 2015/05/04
  • 婚約者が作って欲しい料理:オムライス

    婚約者がオムライスを作って欲しいと言ったので、作ってみた。 オムライスを作るにあたって問題がある。私はケチャップが嫌いだということだ。ケチャップは安直な味がする。スパゲティにケチャップをかけるさもしい異端者になりたくはないものだ。私はケチャップと味覇を封印することを空飛ぶスパゲティモンスター様に誓っている。ラーメン。 色々と調べた結果、ケチャップではなく、ホールトマト缶で作ることに決めた。 作り方 鶏の胸肉を細かく刻んでオリーブオイルと塩とハーブ(コショウ、バジル、オレガノ)を入れたジップロックに入れておく。 タマネギ、人参、ピーマンをできるだけ細かくみじん切りする。 フライパンで肉と野菜を炒める。 ホールトマトを入れて、コンソメと塩とハーブをいれて煮込む。 ご飯を入れて炒める。 卵に牛乳を少しだけいれてよく混ぜる。 フライパンを熱して、多めにバターを入れて、溶き卵を入れる。火は10秒ほど

    knjname
    knjname 2015/05/01
    最近のC++はオムライスを要求するんですか? / “本の虫: 婚約者が作って欲しい料理:オムライス”
  • Linus Torvalds、HFS+に激怒

    CVE-2014-9390 aka "Git on case-insensitive filesystems" I did not give the… gitが影響を受けた、HFS+で、一部の文字を区別しなかったり無視したりする問題に対して、Linusが吠えている。 マジで、HFS+はたぶん最悪のファイルシステムだな。クソすぎるぜ。NTFSもutf8の正規化で似たような問題(/の非正規化された表現を使用)があったが、まあ、今は修正されたんだろうよ。OS Xの問題は根的すぎる。 そりゃ、古いさ。そりゃ、データ保護がクソすぎるってのはあるさ。だが、そういうのは、単に「すげーファイルシステムじゃない」って問題だ。「自分のケツすら拭けないマヌケによって設計された信じがたいクソ」ってわけじゃない。 HFS+の恐ろしさは、すげーファイルシステムではない、ということではない。いいアイディアがあると信じ

    knjname
    knjname 2015/01/14
    HFS+ = ひと゛い ファイル システム / “本の虫: Linus Torvalds、HFS+に激怒”
  • Google Newsに強制課金する法律、あっけなく失敗

    Spanish Newspaper Publishers' Association Now Asks Government To Help Stop Google News Closure | The Spain Report スペインでは、Webサイトが報道機関のWebサイトをわずかでも引用する場合、報道機関に対し対価を支払わなければならないという法律を、報道機関のロビー活動により成立した。それを受けて、Googleは、Google Newsはそれ自体が金を生み出してはいないので、スペイン版を廃止すると宣言した。 どうやら報道機関のロビー団体はスペイン政府にGoogle Newsを廃止しないように何か行動をせよと言っているらしい。不思議なことだ。 ちなみに、ドイツでも同等の法律ができている。そのときもGoogle Newsは廃止を宣言した。その結果、Webトラフィックが激減したため、報道

    knjname
    knjname 2014/12/16
    "Google Newsに強制課金する法律、あっけなく失敗" good read
  • 最近のC言語の配列

    N4188を読んでいて、C言語の規格を参照する必要が出てきたので、C言語の規格を読んだのだが、最近のC言語の配列は、面白いことになっている。 以下はすべて最新のC規格で合法なコードである。 void f( char a[ * ] ) ; void g( char a[ static 100 ] ) ; void h( char a[ const volatile restrict ] ) ; void wtf( char a[ static const volatile restrict 1 ] ) ; これは、関数のプロトタイプ宣言でのみ許されている。 [*]は、サイズを指定しない可変長配列型である。関数のプロトタイプ宣言スコープの中でしか使えない。[]との違いは、完全形であることだ。 [static n]は、関数を呼び出した際の実引数は、少なくともn個の要素を持たなければならない。 v

    knjname
    knjname 2014/11/14
    "最近のC言語の配列" good read
  • mp3fs : FUSEを利用したファイルシステム経由のmp3変換

    江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合: Amazon.co.jp: 江添亮: 江添のほしい物リスト 筆者にブログのネタを提供するために、直接に品物を送りたい場合、住所をメールで質問してください。 View my complete profile ► 2020 (31) ► December (2) ► November (2) ► September (2) ► August (4) ► Jul

    knjname
    knjname 2014/09/15
    “句美和わせ” ← ダブルミーニング? / “本の虫: mp3fs : FUSEを利用したファイルシステム経由のmp3変換”
  • What if? : 高額な靴箱

    Expensive Shoebox サイズ11の箱に詰め込める最も高額なものって何? (例えば、64GBのMicroSDカードに大量の購入済み音楽を詰め込むとか) Rick Lewis 箱に高額なものを詰め込んだ結果の上限は、どうやら20億ドルぐらいだ。面白いことに、この上限は高額な候補どれでも同じぐらいだ。 MicroSDカードはいいアイディアだ。iTunesの音楽はひとつあたり1ドルぐらいかかり、MicroSDカードは1ガロン(3.785411784立法メートル)あたり1.6ペタバイトの容量を持つ。男性用サイズ11の箱は、のブランドや種類により異なるが、だいたい10-15リットルぐらいだ。つまり、4MBの音楽を15億曲(それぞれ約1ドル)となる。(これは、ITunesが提供する楽曲の20倍の個数であり、同じ曲を何度も買わなければならないだろうが) Adobe®©™ Photos

    What if? : 高額な靴箱
    knjname
    knjname 2014/09/06
    靴箱いっぱいのプラチナ欲しい / “本の虫: What if? : 高額な靴箱”
  • fork()は失敗するんだぜ、覚えときな

    fork() can fail: this is important あー、fork()のことね。プロセスがもっとプロセス作るためのやつな。いや、他にもプロセス作る方法はあるけどな。ま、面白い話がもうひとつあるから聞かせてやるよ。 forkは失敗するんだぜ。分かってるか? マジで分かってるか? マジだぜ。forkは失敗するもんだ。mallocと同じさ。失敗することもある。そんなに頻繁にってわけじゃないけどさ、でも失敗したら、無視できっこないぜ。ちっとは脳みそ働かせなきゃならん。 forkが0を返したら、そいつは子プロセスで、親なら正数を返すってことは、みんな知ってるよな。その値は子のpidだ。こいつを保存しといて、あとで使うってわけだ。 失敗を確認しない場合どうなるか知ってるか? そうだよ。お前多分、"-1"(forkのエラー通知)をpidとして扱ってるんだろ。 さて、問題の始まりだ。

    knjname
    knjname 2014/08/22
    どちらかというとOSの設計のほうに問題があるように見えるんだけど / “本の虫: fork()は失敗するんだぜ、覚えときな”
  • PHPの次のバージョンはPHP 7かもしれない

    PHP: rfc:php6 PHPの次のバージョンは、PHP 6ではなく、PHP 7となる可能性があるとのこと。 敬意を説明すると、PHP 6は、次のPHPのメジャーリリースとして、2005年から盛んに開発されていたが、2010年にUnicode実装の難しさから頓挫した。言語でUnicodeを直接サポートする以外のPHP 6向けの機能は、大方PHP 5.3か5.4に取り込まれた。 この経緯のため、既存の多くのドキュメントや参考書などが、すでにPHP 5.xに存在する機能をPHP 6にやってくる新機能として紹介している。このままPHP 6を出すと、すでにPHP 6であると喧伝されているものとはことなるので、利用者が混乱するのではないか。 そういう理由で、PHPではバージョン番号6をスキップして7に行く議論があるそうだ。 ドワンゴ広告 この記事はドワンゴ勤務中に書かれた。 そういえば、今日はあ

    knjname
    knjname 2014/07/26
    iPhoneで画像はっつけると、data URLになるんだよなあ / PHPの次のバージョンはPHP 7かもしれない
  • 新たなC++世代

    先日のドワンゴC++勉強会で、筆者は若いC++世代と話をする機会を得た。若いとはいえ、筆者よりせいぜい5,6年歳が離れているだけで、C++を学び始めた歳も、筆者より5,6年遅かったので、都合10年ほど、筆者より後にC++を学び始めたというだけの話だ。しかし、C++にとって、いやプログラミング全般にとって、10年はあまりにも長過ぎる。 筆者がC++を書物で学び始めた頃、まだテンプレートはまともに実装されていなかった。筆者がコンピューターを所有し、C++を実際にコンパイル出来るようになった時、ようやく主要なコンパイラーがC++を実装し始めていた。当時最新のテンプレート事情を解説した、C++ TemplatesやC++ Template Metaprogrammingを、筆者は読んでいた。C++ Templatesは、10年後の2013年に日語に翻訳された。当時最新だった内容は、今となっては歴

    knjname
    knjname 2014/07/02
    cfrontって普通に使われていたのか / “本の虫: 新たなC++世代”
  • Old New Thing: 未定義動作はタイムトラベルを引き起こす(他にもいろいろあるけど、タイムトラベルが一番ぶっ飛んでる)

    Old New Thing: 未定義動作はタイムトラベルを引き起こす(他にもいろいろあるけど、タイムトラベルが一番ぶっ飛んでる) Undefined behavior can result in time travel (among other things, but time travel is the funkiest) - The Old New Thing - Site Home - MSDN Blogs 久しぶりに紹介するRaymond Chenのブログ記事。 C言語とC++では、様々な部分が、ドラゴンの住まう地というレッテルを貼られている。いや、正式には、未定義動作とされている。 未定義動作が発動した場合、何でもありだ。例えば、変数は同時にtrueでもfalseでもありえる。John Regehrは興味深い例のリストをまとめて、未定義動作コンテストの受賞者もある。 以下の関数を

    knjname
    knjname 2014/07/02
    動作させると未定義になるようなケースには決してならないと仮定するコンパイラさんのお仕事 / “本の虫: Old New Thing: 未定義動作はタイムトラベルを引き起こす(他にもいろいろあるけど、タイムトラベルが一番ぶっ飛ん
  • もしlambda式がconstexprだったら

    lambda式がconstexprでない理由、いや、より正確には、クロージャーオブジェクトの変換関数がconstexpr関数ではない理由。 もし、constexprの場合は、SFINAEの文脈で使えてしまうからだ。lambda式の体には任意の文を書けるので、以下のような記述が可能だ。 template < typename T, void (*)() = [](){ // write whatever expressions that depends on T. // if any expression is ill-formed for T, substitution fails. } > void f( T ) ; C++11の規格策定の最終段階で、クロージャーオブジェクトの関数ポインターへの変換関数をconstexprにしようという議論がでたが、当時、筆者はこのコードを示して、SF

    knjname
    knjname 2014/06/07
    Substitution failure is not an error refers to a situation in C++ where an invalid substitution of template paramete…