タグ

programmingに関するmEGGrimのブックマーク (49)

  • デブサミで僕が話したことの簡単なまとめ - 宇宙行きたい

    デブサミが 10 周年でした。 残念ながらオファーなかったのですが、一昨日くらいに急に参加していいよって言われたので 「From Legacy to Agile 〜レガシー開発からアジャイル開発へ〜」に乱入してきました。 そこでチームビルディング的な話を話させてもらいました。 資料とか特に作っていなかったので僕がリーダーとしてチームメンバーにお願いしている決まり的なことを簡単にまとめておこうと思います。 テストを書け 問題を根性で解決するな 人を殺す以外なら何やってもいい 失敗を引きずるな 個別に補足書いて行きます。 一応状況の簡単な説明をしておくと、最初は 3 人しかいないチームに 「手伝ってくれないか?」と言われ合流しました。その後、僕がリーダーになり 今は 15 人前後のチームで動いています。 テストを書け これは僕がチームに入るときに最初に宣言しました。 「テストを書かないようなプ

    デブサミで僕が話したことの簡単なまとめ - 宇宙行きたい
  • コンピュータジョーク

    Internetから集めたジョークの意訳です。日語で面白くないものは外したり、若干アレンジしています。 Bjarne Stroustrup氏のインタビュー記事は、こちら Computer One Liners ペンティアムはコンピュータの中でとけて手でとけない 宇宙の秘密をお教えしよう: それは@鮪*蟻&^^^ NO CARRIER エラー:キーボードが接続されていません。続行するにはF1キーを押してください Cプログラムは動く。Cプログラムはクラッシュする。Cプログラマは燃え尽きる。 "ディスク#3を入れろ"と書いてあるけど、このコンピュータには2つしか口がないよ! ちょうど、最後のバグを直したところなんだ。 デバッグという作業がバグを取り除くことなら、プログラミングとはバグを注入する作業に違いない --- ダイクストラ "#define QUESTION ((bb) || !(bb)

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • TDDのはじめかた #TddAdventJp - 千里霧中

    エントリはTDD Advent Calendar jp: 2011の12/8の担当分の記事で、id:t-wadaさんの「右手に感情、左手に数値 - カバレッジを味方にしよう - t-wadaの日記」に続くものです。 はじめに TDDはシンプルな原則に則った手法ですが、とっつきの悪さもしばしば持たれがちです。また一連のTDD Advent Calendarで起こった議論や会話の中でも、TDDの始め方はどうすれば良いかという話が散見されましたので、自分の担当枠では「TDDのはじめかた」についてまとめたいと思います。なお紹介するのはあくまで数ある入門方法のうちの1つです。たぶん他にも色々な良い入門方法があると思います。 全体像 紹介する入門方法は以下のようなステップバイステップの構造となります。 いつでも軽快に使えるユニットテスト環境を構築する 必要と感じたらすぐテストを活用する テスト並行を

    TDDのはじめかた #TddAdventJp - 千里霧中
  • 「どのくらいまで設計したらプログラム組んでいいんですか?」 - 発声練習

    自分が何を作るのかがちゃんとわかったらプログラム組んだら?で、誰がどういう状況で、何を処理するためにそれを使うの?入力と出力は何?

    「どのくらいまで設計したらプログラム組んでいいんですか?」 - 発声練習
  • バグのないプログラムを作るための技術 - eomole blog 4 くらい

    2015/12/10 追記: バグを気で無くしたい方はこんな良く辺鄙なブログなんて見ずにソフトウェアエンジニアリング系の国際学会に行くなり、そこの論文を読むなりするといいと思います。ICSEなんかは日語の勉強会資料もあってとっつきやすいでしょう。 バグのないプログラムを作る方法について色々聞きかじったことを, 脈絡なく訳の分からない説明でつらつらと書きならべます. テスト 割と古典的な方法ですね. プログラミングコンテストでもお馴染みの方式です. Java だと JUnit (4) みたいなのを使います. 手作りケース とりあえず試してみるケース コーナーケース ミスの発生しやすそうなところを突くためのケース ランダムケース ランダムに爆撃するためのケース みたいなものを作って, 仕様とマッチするか確認します. 当たり前ですが, 基的には下手な鉄砲も数撃ちゃ当たる方式なので, 運が悪

    バグのないプログラムを作るための技術 - eomole blog 4 くらい
  • 竹内関数で音楽生成 - aike’s blog

    Lisperの人ならみんな知ってる竹内関数(たらいまわし関数)という関数があります。 定義としてはこんな感じ。 そのシンプルな定義からは想像もつかないほど複雑で膨大な再帰呼び出しがおこなわれるとても興味深い関数です。たとえば引数にTarai(10,5,0)を与えると343,073回も再帰呼び出しされたりします。 この関数呼び出しの引数がどのように変化するか知りたくてプログラムを書いて調べてみたところ、Tarai(10,5,0)の場合は3つの引数がそれぞれ0〜10(xは-1〜10)の間で少しずつ変化するなかで、2つの値を固定してひとつの値が下降していくような挙動があったりして、なんだか音楽の3和音のコード進行を思わせるような動き方です。 そういうことなら、ということで実際に音にして聴いてみました。Tarai関数が呼ばれるたびに引数のx、y、zを、0=ミ、1=ファ、2=ソ、……、のように音に割

    竹内関数で音楽生成 - aike’s blog
  • モダン並列・並行プログラミング ~ Concurrent Revisions による実装と現実 ~ - Preferred Networks Research & Development

    日社内向けのTechTalkにて、並列・並行プログラミングに関する話を行いました。 昨今、プログラムの並列化はなくてはならないものとなっています。しかし、そのプログラミング環境は依然としてロックを用いたものが主流です。今回の発表の主張を端的に申し上げますと、 “Locks must go!” ということになります。並列プログラミングに銀の弾丸はありません。しかし、ロックは別の何らかの安全性を確保したプログラミングモデルで置き換えられなければいけません。そうでなければ、再現しにくいバグに苦しめられ、終電を逃す日々と決別することはできないでしょう。また、ロックによるプログラミングの抱える質的問題にも言及しています。 この界隈の最新の動向として、去年OOPSLA’10にて発表されたConcurrent Revisionsについての解説も行なっております。また、弊社研究開発において、先日Con

    モダン並列・並行プログラミング ~ Concurrent Revisions による実装と現実 ~ - Preferred Networks Research & Development
  • ソースコードの品質向上のための効果的で効率的なコードレビュー

    This document summarizes a microservices meetup hosted by @mosa_siru. Key points include: 1. @mosa_siru is an engineer at DeNA and CTO of Gunosy. 2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway. 3. Challenges discussed were managing 30 microservices, ensur

    ソースコードの品質向上のための効果的で効率的なコードレビュー
  • セキュリティ・プログラミングキャンプ2011の感想 - 眠いのです

    問題ジャンル:プログラミング 得点:300点 以下の文章を解読せよ ただし文章内には"わたし"という文字列が含まれているものとする ᓵᔋᓵᓽᓵᔵᓵᔺᓵᔖᓵᓳᓱᓶᓵᔧᓵᔽᓵᔀᓵᔹᓵᔯᓵᕃᓵᔀᓵᓽᓵᔳᓵᕃᓵᔧᒂᒀᒁᒁᔄᔆᔑᔫ ᓵᔦᓵᔽᓵᔀᓴᔗᓴᔟᔚᕃᔉᕀᓴᔇᓴᔖᓴᓴᓴᔮᓴᔋᓴᕃᓴᔗᓴᔇᓴᔏᓴᓼᓱᓴᒈᑿᒁᒁᓱᔑᒈᑿᒁᒄᓴᔞᔄᔦᓱᓴᓵᔋᓵᓽᓵᔵᓵᔺᓵᔖᓵᓳᓱᓶᓵᔧᓵᔽᓵᔀᓵᔹᓵᔯᓵᕃᓵᔀᓵᓽᓵᔳᓵᕃᓵᔧᒂᒀᒁᒁᓴᔞᔈᔐᔈᔼᓵᓿᓵᔹᓵᔉᓴᔛᔋᔂᔂᔓᓴᔅᓴᔋᓴᔖᓴᓴᓴᔏᓴᔐᓴᓴᓴᔖᓴᓽᓴᔮᓴᔇᓴᔏᓱᓵ ᓵᔋᓵᓽᓵᔵᓵᔺᓵᔖᓵᓳᓱᓶᓵᔧᓵᔽᓵᔀᓵᔹᓵᔯᓵᕃᓵᔀᓵᓽᓵᔳᓵᕃᓵᔧᑸᔀᔚᔂᔌᓵᔋᓵᔧᓵᓽᓵᔳᓵᕃᑹᓴᔘᓴᓴᓴᓶᓴᔞᓴᔟᒂᒂᔊᔠᔀᔚᔂᔌᔒᔠᔎᔭᓴᔛᒄᔗᕃᒅᔖᕌᓴᔗᓵᔧᓵᔽᓵᔀᓵᔹᓵᔯᓵᕃᓵᔀᓴᔮᓴᔏᓴᔟᓵᔋᓵᓽᓵᔵᓵᔺᓵᔖᓵᓳᓴᔛᓴᔔᓴᓴᓴᔖᔚᔩᔆᓿᓴᔉᓴᔻᓵᓴᓵᔩᓵᕃᓵᔘᓴᔗᓴᔉᓱᓵ ᓴᔅᓴᔖᓱ

    セキュリティ・プログラミングキャンプ2011の感想 - 眠いのです
  • Preferred Research サマーインターン2011問題を解いてみた - ブログ執筆中

    http://research.preferred.jp/2011/07/intern2011_problem/ 基方針: 異なる種類の文字同士を見つけて消去して、最後に残った文字の種類を出力する。 出現回数が最大の文字をaと呼ぶことにする. aの出現回数はn/2より大きい、別の言い方をすれば、a以外の文字の出現回数の合計はaの出現回数よりも小さい。そのため、異なる種類の文字同士を見つけて消去していくと、仮に消去の組み合わせの一方が全てaだったとしても、文字種が1種類になるときには必ずaが残る。 文字列をstrとすると、回答は以下: i = 0 j = 1 while j != n if str[i] == str[j] j += 1 else str[i] = ILLEGAL_VALUE str[j] = ILLEGAL_VALUE while str[i] == ILLEGAL_VA

    Preferred Research サマーインターン2011問題を解いてみた - ブログ執筆中
  • 本の虫: rvalue reference 完全解説

    目的 この記事は、C++0xのrvalue referenceを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からrvalue referenceを恐れることなく使う物のC++0xプログラマになれるだろう。 lvalueとrvalueについて Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。 誤解を恐れずにいえば、lvalueとは、明示的に実体のある、名前付きのオブジェクトであり、rvalue

  • CUDAアトミック関数 - PukiWiki Plus!

    アトミック関数 あるスレッドがグローバルメモリやシェアードメモリ上のデータを読み込み,修正し,書き込む(read-modify-write)という一連の処理を行うとき,その処理中にそのメモリ領域に他のスレッドが書き込みが行われないようにしたい場合があります.CUDAにはこれを保証するアトミック関数が用意されており,32bitまたは64bitワード長のread-modify-write操作中に他のスレッドからの干渉を防いでくれます. CUDAのアトミック関数はその名前がatomicから始まっているのでわかりやすいと思います. また,signed integerとunsigned integerのみ対応しています(atomicExch()を除く). 各関数は引数として,intもしくはunsigned intのアドレスと値を取ります (atomicExch()はfloatも,atomicInc

  • On programming language design - プログラミング言語を作る日記

    InfoQの以下の記事経由で、 Andrej Bauer氏の語るプログラミング言語の設計 こういう記事を見つけたので、 On programming language design | Mathematics and Computation 日語に(勝手に)訳してみました。 英語が得意なわけでもないので(ていうか苦手なほうなので)変なところ等ありましたらご指摘願います。 ――というかHaskellをちゃんと勉強したくなった。 In a recent post I claimed that Python’s lambda construct is broken. This attracted some angry responses by people who thought I was confused about how Python works. Luckily there were

    On programming language design - プログラミング言語を作る日記
  • さあ、Yコンビネータ(不動点演算子)を使おう! - よくわかりません

    前回、おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりませんというエントリで、Yコンビネータ(不動点演算子)と再帰の絵解き解説をしました。 Yコンビネータ自身は、結局のところ再帰を産み出してくれるだけです。関数(正確にはλという単純な文字列変換ルール)だけで出来て、プログラミングに関するいろんな原理の研究を可能にするのが凄い訳です。その辺のさわりを、きしださんが解説されています。しかし、単なる再帰なら、実際のプログラミングではYコンビネータなんて使わなくても出来ます。 じゃあ、Yコンビネータとか不動点とかは、偉い学者さんとかが研究に使えばいいもので、普通のプログラマには何の意味もないモノなのでしょうか? というわけで、今回はポジティブに、Yコンビネータや不動点で出てくる考え方を、理論だけじゃなく、実際のプログラミングに応用する例を見てみましょう。 今回、プログラムの例を

  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • プログラミングできる人とできない人との間の深い溝 - masatoi’s blog

    どうしてプログラマに・・・プログラムが書けないのか?を読んでいて出てきたので出展の一つを訳してみた。Separating Programming Sheep from Non-Programming Goatsの和訳。 プログラミングというものには向き不向きが強く出るということはわりと知られていると思うが、このエントリではプログラミングができるかできないかは比較的簡単なテストによって、プログラミングの訓練を始める前の段階で分かると主張している。どうしてプログラマに・・・プログラムが書けないのか?では、そもそもこの事前テストをパスしていないような人達までプログラマとして応募してくると言っており、その判定法として有名なFizzBuzz問題を挙げている。 追記(2019/2/28) 注意: なおこの論文はしばらく前に著者の一人によって撤回されたようです Camels and humps: a r

    プログラミングできる人とできない人との間の深い溝 - masatoi’s blog
  • そろそろ分かっておきたいY Combinator - I am Cruby!

    Rubyもうすぐ年明けだし,Yコンビネータの魔法みたいな動きに惑わされる人たちがでてくるんじゃないかなと思ってRubyで解説してみます. 参考に[ruby-list:35058] Y CombinatorY CombinatorY Combinator Y Combinatorって何?3年周期くらいでお騒がせのYさんってそもそも何なのかという話ですが,動機として 再帰の時に自分の名前を使わずに,なんとかして関数そのものを呼びたい というのがあって,例えば階乗とかしたいときに def fact(n); n == 0 ? 1 : n * fact(n-1); end # ここを消したい! と言う事です.何が嬉しいのかというと,さっぱり分かりませんし,arguments.calleeとか普通に名前使える所では使えばいいんじゃないのかな. 前置きRuby1.9のlambdaでは ->{|n| pu

  • C++ - boost::function はどのように可変長引数に対応しているのか

    「超汎用関数ポインタ」のコメントより boost::functionは難しくてギブアップ・・・ 可変長のオーバーロードをどうやって解決しているのか が知りたかったんだけど、 (以下略) C++ の真骨頂はプリプロセッサとテンプレートを駆使したメタプログラミングにある。メタプログラミングこそが、C++ を他言語の追随を許さない超言語に押し上げていると共に、比類なき難度を持った言語にしている。 boost::function も、そこそこにメタしている実装のひとつだ。 とりあえず、プリプロセスされていない状態では理解が難しいので、プリプロセスだけ実行する。そうすれば格段にソースコードは読み易くなる。Visual C++ なら「/E」「/PE」「/EP」コンパイラオプションを使うと、プリプロセスした結果が得られる。 以下は、boost::function をプリプロセスした結果の抜粋だ(実装は省

  • 「暗号技術入門」RSAの実装 - すちゃらか社員日記

    , Python | 16:23 | 前回から間が空いてしまったが、結城浩さんの「暗号技術入門」を読みながら Python で RSA の実装をしてみた。そういや結城さんが前回のエントリにスターをつけているのを見てちょっとうれしかったり。呼び捨てにしてスミマセン。RSA は前述のシーザー暗号や使い捨てパッドの様に古典的な暗号とは異なり、現在非常に良く利用されている暗号である。公開鍵と秘密鍵により鍵の事前共有による鍵の配送問題を解決している。公開鍵秘密鍵ペアの生成は次の通り。 素数 p, q を元に N = p * q を求める p-1 と q-1 の最小公倍数を求める 1 1 これにより、公開鍵の E, N と秘密鍵の D, N が求められる。暗号化は平文**E mod Nその複合化は暗号文**D mod Nとして求められる。次の様に実装した。 #!/usr/bin/env python