タグ

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

  • また初心者にプログラミングを教える機会があった

    プログラミングでわからないところがあるので教えてほしいと以下のようなことを聞かれた。 こういうJavaScriptの関数がある。 // valuesは配列 // elementはvaluesの要素型の値 // 配列valuesに値elementと等しい要素があるならばそのインデックスを返す。 // それ以外の場合、-1を返す function find_index( values, element ) { for ( let i = 0 ; i !== values.length ; ++i ) { if ( values[i] === element ) return i ; } return -1 ; } 質問は、「なぜreturn -1にelseはいらないのか」というものであった。 似たような問題に、昔遭遇した気がするが、別人だ。 まずここにelseを書くべき文法はJavaScrip

    rryu
    rryu 2019/10/07
    配列に対するループをfold的な思考で見ているような感じがする。そうすると最後に値が2つ残るからどちらの値を返すかの分岐が無いのはおかしいということになるのではないだろうか。
  • 職質裁判一審で不当判決、曰く、110番通報を要請することは不審事由にあたる

    警察官に職務質問をされた話が2017年の7月、これが違法な職務質問であると考えたので国賠訴訟をし、一審判決が今日言い渡された。 曰く、「原告の請求を棄却する」。負けたわけだ。ではなぜ負けたのか。判決の言い渡しでは主文しか読み上げられないので、判決文を取りに行く。 当日は、東京都(警察)の主張によれば、パトカーで私とすれ違った際、私を視認し、しばらくみていたところ、私はパトカーを見るなり顔を伏せて足早に通り過ぎたということだ。裁判所は東京都(警察)のこの主張を採用しなかった。というのも、車道と歩道の間には植え込みが多くあり、私をしばらく見るなど不可能であるからだ。したがって今回の職務質問は適切な不審事由なしで始まっていることが認められた。 その後10分間ほど、私を路上にとどめて職務質問が行われた。裁判所はこれを適切であると判断した。不審事由がなく始まった職務質問ではあるが適切だそうだ。 その

    rryu
    rryu 2019/03/17
    判決文の「第3 当裁判所の判断」の「(1) 警職法上の職務質問としての適否について」の「ところで」からの展開が強引すぎる。
  • DNAの読み取りについてプログラマーが誤解していること

    世の中にはDNAの読み取りを使った技術が実用されすぎている。DNAを使った生物の共通祖先の判定、人間の出アフリカ以降の移動の推定、特定の病気にかかりやすい遺伝子を持つかの判定、親子鑑定、刑事裁判におけるDNA鑑定などなど。 あまりにもDNAの読み取りを使った技術が実用化されすぎているため、世間ではDNAの読み取りは簡単なものだと考えている。プログラマーとて例外ではない。 大抵のプログラマーはヒトDNAの読み取りを以下のように考えている。 「一の長い磁気テープを先頭から末尾までシーケンシャルにリードする」 より現実的に例えると以下のようになる。 長さ30kmの長大な磁気テープをだいたい長さ1cmのテープ片に切断する 上記1cmのテープ片を数百複製する 上記複製した数百の1cmテープ片をマイクロメートル単位のテープ片にズタズタに切り裂いて混ぜ合わせる 上記混ぜ合わせたマイクロメートル単位

    rryu
    rryu 2018/09/03
    化学系は大体直接観測できなくて、こういう物資が含まれていればこういう反応になるはずみたいなのばかりで、そんなので大丈夫なのだろうかと思ったりするのだが、まあ大丈夫なのだろう。
  • 本の虫: GCCのgit移行が難航中

    GCCはgitへの移行を計画しているが、GCCの既存のsubversionレポジトリをgitレポジトリに変換する作業が難航している。 GCCの移行作業を検証しているのは他ならぬEric S. Raymond(ESR)だ。 ESRお手製の変換ツール、reposurgeonはsubversionからgitへの変換ができる。 Resource page for reposurgeon 3.44 しかしGCCは30年もの歴史を持ち、そのsubversionレポジトリも複雑だ。 ESRはGCCのためにreposurgeonのバグを潰し、勢い変換しようと試みたが、意外な障害に出くわした。メモリ不足だ。 GCC's Conversion To Git Is Being Held Up By RAM, a.k.a. Crazy DDR4 Prices - Phoronix ESRの所有する64GBのメモリ

    rryu
    rryu 2018/08/02
    うまくいったところまでのコミットから再開できるようにできないのだろうか。巨大な物への処理は再開できるようになっていないと非常につらい…
  • 世の中にはプログラミングを理解できない人間が存在する

    現在、C++によるプログラミングの入門書を書いているので、初心者のプログラミングの学習過程にとても興味がある。私自身も初心者の気持ちを取り戻すためにHaskellを学んでみた。最初の数日は頭が痛くなるほど難しかったが、そこを過ぎてみれば後は楽になってしまった。結局、初心者の気持ちはあまりわからなかった。結局、プログラミングの基礎はすでに学んでしまっているので、 先日、FizzBuzzがわからないから教えてくれという知人がいたので、これは初心者の気持ちを知るいい機会と話を聞いてみたところ、想像を絶する世界が見えてきた。 まずこれが動かないと悩んでいたコードだ。 for ( int i = 0 ; i <= 100 ; i++ ) { } else if ( i % 15 == 0 ) { Debug.log("FizzBuzz") ; } else if ( i % 3 == 0 ) { D

    rryu
    rryu 2018/05/30
    構文の概念が無いとそれっぽく書く以上のことはできないと思うし、自分が間違っているのではなく解釈できない方が悪いという気持ちだとあんな感じになるのではないだろうか。
  • Intelの古いマニュアルを誤読したために生じた脆弱性

    Multiple OS Vendors Release Security Patches After Misinterpreting Intel Docs Multiple OS Vendors Release Security Patches After Misinterpreting Intel Docs | Hacker News 8086でスタックを切り替えるには、ssレジスターとspレジスターを両方変更する必要がある。しかし、ssレジスターだけを変更してまだspレジスターを変更していないときに割り込みがかかると問題だ。そこで、8086は粋なはからいによって例外的にこの問題に対処した。ssレジスターを変更した直後の1命令では割り込みが発生しない。仮に割り込みが起きたとしても1命令を実行するまでは遅延される。 もし、ssレジスターを書き換えた直後の1命令でカーネルモードに入った場合、

    rryu
    rryu 2018/05/20
    スタックセグメントだけ変更してINT nする処理が思いつかないが、SP→SSの順で変更してしまったとかなのだろうか。
  • 今流行りの投機実行脆弱性の影響を一切受けないDOOM実装が公開される

    https://github.com/xoreaxeaxeax/movfuscator/tree/master/validation/doom このDOOMは条件分岐を一切使用していない。したがって今流行りの投機実行の脆弱性であるMeltdownやSpectreによる脆弱性は存在しない。 ちなみに、現代の性能のコンピューターで、1フレームの描画に7時間ほどかかるので、このDOOMで遊ぶには若干の忍耐力を要求される。しかし、脆弱性の完全な排除のためには若干のパフォーマンスの低下はやむを得ないところだろう。 このDOOM実装はオリジナルのDOOMのCコードに若干の変更を施して、M/o/Vfuscatorでコンパイルしたものだ。 https://github.com/xoreaxeaxeax/movfuscator M/o/Vfuscatorとは、IntelのMMUがチューリング完全であることを

    rryu
    rryu 2018/01/18
    「IntelのMMUがチューリング完全」なにそれ怖い。
  • VS CodeがDOMによるターミナル実装のパフォーマンスを改善できなかったためCanvasに変更

    Integrated Terminal Performance Improvements Electronという史上まれに見るそびえ立つクソのようなGUIプラットフォーム上で実装されているVS Codeが、ターミナルの実装をDOMによるものからCanvasによるものに変更したそうだ。これは、DOMによる実装ではパフォーマンスの改善が十分にできなかったからだという。 DOMでターミナルを実装する際の問題ごととして、テキスト選択、テキストアライメント、GC、パフォーマンスを上げている。 テキスト選択:ターミナルのテキスト選択を実現するためにDOMのテキスト選択の挙動をだいぶ上書きしなければならない。 テキストアライメント:一部の文字はモノスペースになってくれず、workaroundとして一文字ごとに固定長のspanで包む必要があるが、これはパフォーマンス上よろしくない。 GC:DOMでターミナ

    rryu
    rryu 2017/10/09
    等幅でないフォントを等幅に表示するのは結構大変で、DOMで作るとspanで作ったマス目を高速スクロールするみたいな狂気の実装になってしまうということなのだろう。
  • C++の未定義の挙動で呼ばれないはずの関数が呼ばれる場合

    Krister Walfridsson’s blog: Why undefined behavior may call a never-called function 以下のようなコードをClangでコンパイルすると、 #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } Clangは以下のような最適化されたコードを吐く。 main: movl $.L.str, %edi jmp system .L.str: .asciz "rm -rf /" これは以下のようなコードと同じだ。

    rryu
    rryu 2017/09/26
    だんだん鼻から悪魔の世界に近づいてきたな。
  • constexpr ifの落とし穴

    会社の同僚から、以下のようなコードが動かない、ネット上をググると解決策らしきものが見つかるがそれもいまいち納得できない、という相談を受けた。 template < typename T > void f() { if constexpr ( std::is_same<T, int>{} ) { // Tがintのときのみ発動してほしい // 実際は常に発動する static_assert( false ) ; } } C++17にはconstexpr ifが追加された。これは条件付きコンパイルではない。条件付き実体化抑制だ。 constexpr ifは以下のように使う。 struct S { int value() { return 42 ; } } ; template < typename T > int to_int(T t) { int value{} ; if constexpr

    rryu
    rryu 2017/05/12
    static_assertは副作用があるから評価のタイミングが異なると困るのか。
  • 本の虫: 誤り:paizaの問題はC++17でも成り立つ

    この記事は間違っていた。 この変更では、インクリメント演算子の副作用のコミット順序はまだ規定されていない。 paizaが以下のような質問を出している。 int i = 0; のときに評価値が1になるのは — paiza[パイザ] (@paiza_official) December 26, 2016 @paiza_official 【補足】C言語,C++,Javaを想定しています — paiza[パイザ] (@paiza_official) December 26, 2016 問題は、int i = 0 ;であるとき、以下の式を評価した結果が1になるのはどれかという問題だ。 i++ + ++i ++i + ++i i++ + i++ ++i + i++ C言語では、この式を評価した結果は未定義である。 C++14までは、この式を評価した結果は未定義である。 C++17では、サブ式の評価順序

    rryu
    rryu 2016/12/27
    遂に未定義じゃなくなったのかと思ったら違ったようだ。Javaでは定義されていたはず。
  • 高専プロコンの問題がクソすぎるのでプログラミングを放り出して人力に走るのは最適解であり協賛企業はプログラミングを軽視する企業として唾棄されるべき

    高専プロコンの問題がクソすぎるのでプログラミングを放り出して人力に走るのは最適解であり協賛企業はプログラミングを軽視する企業として唾棄されるべき 第27回高等専門学校プログラミングコンテストが不評を買っている。プログラミングコンテストと名前が付いているのにもかかわらず、選の上位入賞者は、人力で問題を説いたという。特にコンピューターを持ち込んですらいないチームまでいたという噂まで流れている始末。 なぜそんな残念な結果になるのか、高専生のアルゴリズム力が低いからこうなったのだろうか。この謎を改名すべく、筆者は課題を確認した。 http://www.procon.gr.jp/uploads/procon27/1_Apply27.pdf 課題を要約すると、以下の通りだ。 問題 「一枚の木の板(中密度繊維板)を切り出して、50個以下のピース(凹多面体を含む多角形)に分割する。このピースを枠内で組み

    rryu
    rryu 2016/10/10
    本題よりも前処理と後処理に時間がかかりすぎるので、そこを高速に処理できる人間が活用されてしまうのか。
  • npm、一見無意味なパッケージを消したら1000件ものパッケージが依存するパッケージであったことが判明

    npm、一見無意味なパッケージを消したら1000件ものパッケージが依存するパッケージであったことが判明 npmが一見無意味に思えるfsというパッケージをSPAMとみなして削除したところ、1000件ほどのパッケージが依存するパッケージだったので、削除を取り消した。 npm, Inc. Status - "fs" unpublished and restored 今日、数分ほど、"fs"というパッケージが、ユーザーからSPAMであるという報告を受けて、レジストリから非公開にされた。これは現在復旧されている。これは私(@seldo)による人為的なミスである。私は非公開が安全であるかを確認する内部のガイドラインに従っていなかった。ビルドが阻害されたユーザーに謝罪する。 詳細:"fs"というパッケージは、無意味なパッケージである。これは単に"I am fs"をログに残して終了する。このパッケージが何

    rryu
    rryu 2016/08/24
    fsモジュールに依存していることを明示したくて書いたやつがうっかり通ってしまって生き残ったとかなのだろうか。
  • Bjarne Stroustrupのプログラミング入門書の査読の感想

    C++の設計者ストラウストラップによるプログラミング入門書の最新版日語訳が、9月に @asciidwango から出版されます。 https://t.co/ssT9ubfXtT — アスキードワンゴ編集部 (@asciidwango) August 5, 2016 アスキードワンゴ編集部からBjarne StroustrupのProgramming -- Principles and Practice Using C++というの第二版の邦訳が出版される。初版は翔泳社が出していたが、C++14に対応した改訂版の第二版の版権が空いていたので、アスキードワンゴから出すための作業をしていた。私は邦訳の査読をした。 今年になってから半年は、ずっとこのの査読をしていた。このためにC++標準化委員会の最新の文書を把握する作業が数ヶ月ほど滞った。そして、この仕事は、私がドワンゴに入社して以来、最悪の

    Bjarne Stroustrupのプログラミング入門書の査読の感想
    rryu
    rryu 2016/08/06
    C++は「一見このような意味に見える書き方だが実は全然違うものとして解釈される」という罠が多すぎないだろうか。
  • Chrome 51のV8の興味深いバグ

    以下のコードを実行した結果を予想してみてほしい。 function foo() { return typeof null === "undefined" ; } for ( var i = 0 ; i < 1000 ; ++i ) { console.log( foo() ) ; } typeof nullの結果は"object"なので、"undefined"と===で比較するとfalseになる。したがって、関数fooは必ずfalseを返すはずである。1000回実行しようと常にfalseを返す関数は常にfalseを返すはずである。 では実際に実行して確かめてみよう。 実行(何度かクリック) コンソールにコピペするのとは挙動が違うが、何度もクリックすると、なぜかtrueを返すようになる。おそらく、コンソールにコピペすると毎回JITが走るので、挙動が違うのだろう。 ちなみに、workaroun

    rryu
    rryu 2016/06/21
    JITで式が定数化される時に typeof null が "undefined" と評価されるっぽい。定数化されないような式にすれば回避できると。そういうバグSafariにもあったなあ。
  • WindowsにLinuxサブシステムを載せてUbuntuのユーザースペースが動く未来が来る?

    Microsoft and Canonical partner to bring Ubuntu to Windows 10 | ZDNet 詳しいことは明日発表されるということで、未だに公式の確証はないのだが、MicrosoftとCanonicalが提携してUbuntuをWindowsに持ってくるという話が上がっている。 現在予測されている内容では、これは単にWindows上で動く仮想環境でUbuntu GNU/Linuxを動かすという話ではなく、WindowsLinux互換サブシステムを実装して、その上でUbuntuのGNU/Linux上で動くユーザースペースをそのまま持ち込むのではないかという憶測が出ている。つまり、aptでパッケージを管理してbashが使えてその他諸々のUbuntuのユーザースペースのCLIツールが全部使えるということだ。 これは、技術的に可能であろうが、Wind

    rryu
    rryu 2016/04/04
    やっぱりUbuntuよりもWindowsにまともなターミナルエミュレータが来るということの方がインパクトがあるよなあ。
  • Minecraftクライアントからdockerの管理ができるminecraftサーバー: Dockercraft

    docker/dockercraft 公式の未改変Minecraftクライアントから接続してDockerの管理ができるMinecraft互換サーバー、Dockercraftが公開されている。 Dockercraft Dockercraftの実行方法 1. Minecraftのインストール: Minecraft Minecraftクライアントは改変していないので、公式リリースをそのまま使える。 2. Dockercraftイメージをpullするかビルドする。 docker pull dockercraft もしくは、 git clone git@github.com:docker/dockercraft.git docker build -t dockercraft dockercraft 3. Dockercraftコンテナーを実行する docker run -t -i -d -p 255

    Minecraftクライアントからdockerの管理ができるminecraftサーバー: Dockercraft
    rryu
    rryu 2015/11/18
    サバイバルモードでやるとサーバ管理が命がけになるとは……
  • ビッグデータツールチェインのセキュリティはビッグリスク、あるいは、誰もHadoopをスクラッチからビルドする方法を知らない件について

    ビッグデータツールチェインのセキュリティはビッグリスク、あるいは、誰もHadoopをスクラッチからビルドする方法を知らない件について The sad state of sysadmin in the age of containers コンテナー時代のシステム管理者の惨状 システム管理は惨劇に見舞われている。現状は悲惨だ。 筆者は昔気質のシステム管理者に不満はない。システムの稼働を維持し、アップデートし、アップグレードする方法を知っている者達だ。 この憤りは、コンテナーと構築済みVMと、それらがもたらす、「信頼」や「アップグレード」の欠如による悲惨な惨劇に対するものだ。 例えば、Hadoopを見てみろ。誰もHadoopをスクラッチからビルドする方法を知っているようには見えないぞ。依存性とバージョンとビルドツールが悲惨なほどに絡まりあっている。 この手のイケてるツールの中で、古典的なmake

    rryu
    rryu 2015/04/28
    公式リポジトリに最新バージョンがない場合に謎のリポジトリからインストールする記事が結構あるのだが、ああいうのも大丈夫なのか気になる。
  • 500マイル以上離れた場所にメールが送れないのだが

    http://web.mit.edu/jemorris/humor/500-miles From: Trey Harris <trey@sage.org> 今から私が書く話は、起こりようのない問題についてだ。この話を広く一般に公開してしまうのは惜しい。というのも、いい酒の話のネタになるからだ。この物語は、退屈な詳細や問題を隠すために、多少事実を変えていて、物語を面白く脚色している。 数年前、私はキャンパスのメールシステムを保守する仕事をしていて、統計学部の学部長から電話を受けた。 「大学の外にメールを送るのに不具合が発生しているのだが」 「どんな問題でしょう?」と私はたずねた。 「500マイル以上メールを送れないのだよ」と学部長は説明した。 私はラテを吹き出した。「何だって?」 「ここから500マイル以上離れた場所にメールを送信できないのだよ」と学部長は繰り返した。「実際は、もう少しあるの

    rryu
    rryu 2015/04/09
    統計学部の学部長が500マイルの限界を見出さなかったら単なるメールが送れないという障害だったと思うと感慨深い。
  • .git/configが書き換えられるgitの脆弱性

    WindowsMac OS X用の公式gitクライアントの脆弱性により、.git/configが書き換えられ、任意のコマンドが実行されてしまう問題が修正されたようだ。 ANNOUNCE Git v2.2.1 and updates to older maintenance tracks 何が問題なのかというと、WindowsMac OS Xのファイルパスの取り扱いで、異なるが同一として扱われる文字があることだ。 たとえば、Windowsでは、".git~1/config"というファイルパスは、".git/config"というファイルパスと同等のものとして扱われる。Mac OS XのHFS+でも、U+200cのような文字が無視されるので、".g/u200cit/config"が、".git/config"と同等に扱われる。 この結果。そのような名前のレポジトリをcloneしたWindow

    rryu
    rryu 2015/01/15
    U+200C ZERO WIDTH NON-JOINERか。同じファイルを異なる名前でアクセスできるとまずいというのはApacheでもあったような。