タグ

programmingとプログラムに関するedo_m18のブックマーク (18)

  • プログラムを高速化する話Ⅱ 〜GPGPU編〜

    GPUを利用して汎用演算を行う技術であるGPGPUを用いて、プログラムを高速化する技法についてまとめました。高速化の具体例も適宜用いて解説しています。 CPU編はこちら https://www.slideshare.net/KMC_JP/ss-45855264

    プログラムを高速化する話Ⅱ 〜GPGPU編〜
  • 別にパソコンがなくてもプログラミングはできるよ - jfluteの日記

    書く時間と考える時間 o 仕事を早く終わりにして帰りたい o スキルアップのためにプログラミングたくさんやりたい o オープンソース活動のための時間を確保したい こういう感じの様々な悩みがあるかと思いますが、 ズバリ! 書く時間と考える時間を分離する をオススメします。 これができれば、通勤の電車でも、 用事があって歩いているときでも、 ご飯をべているときでも、 お風呂を入っているときでも、 横になって休憩しているときでも、 ストレッチしているときでも、 ショー待ちしているときでも、 プログラミングができて捗ります。 書いて考えて書いての繰り返し 月並みですが、プログラミングは、ただひたすら書くだけの作業ではありません。 今の時代のプログラミングであればなおさら、プログラミング言語やフレームワークの進化により、書く量に対して考える量が増えていると思います。 もちろん、書きながらじゃないと

    別にパソコンがなくてもプログラミングはできるよ - jfluteの日記
    edo_m18
    edo_m18 2017/09/28
    すげー分かる。というか自分が書いてるじゃないかと思うくらいだった。
  • FIRフィルタ - 人工知能に関する断創録

    Pythonで音声信号処理(2011/05/14) 今回からしばらくディジタルフィルタの実験をいろいろやろうと思います。 ディジタルフィルタは、 乗算器 加算器 遅延器 の3つの要素の組み合わせによって構成されます。この組み合わせ方によって、 FIR(Finite Impulse Response)フィルタ IIR(Infinite Impulse Response)フィルタ の2種類にわけられるとのこと。今回は、FIRフィルタを実装してみます。 FIRフィルタ FIRフィルタの定義式は、 となり、畳み込みの定義式と同じです。x(n)は入力信号、y(n)は出力信号、b(i)は乗算器のフィルタ係数、Nは遅延器の数(フィルタ係数の数はN+1)です。式は難しそうだけどシグマをほぐしてみるとけっこう簡単。 b(0) x(n) 最新の入力信号x(n)にフィルタ係数b(0)をかける b(1) x(n-

    FIRフィルタ - 人工知能に関する断創録
  • クソコードにならない為に、これだけは守って欲しい7つのこと - Qiita

    まえがき 今回書く内容は、ある程度経験あるエンジニアでも、陥りがちなものに絞って書いてみたつもりですので、[重複コードは書かない]などの超あたりまえの事は書いていません。 2017/03/16 最近よく見られてそうなので1つ追記[そもそも継承するな!!!] そもそも継承するな!!! 継承するのは、どうしようもない場合のみにしてください。 その前に、strategyパターンや、compositeパターンなどの他のやり方を考慮してもなお、継承するのが妥当である場合のみにしてください。 基的に継承しないほうが、スケーラブルだし、テストコードも容易にかけます。 継承はis-a関係 「あー、継承ね。はいはい」で飛ばしてんじゃねーよ。 いやマジで!!! ほぼ全てのエンジニアは[is-a]が何か知っています。 というのも全てのオブジェクト思考の書籍には出てくる概念だからです。 しかし、私の経験上この概

    クソコードにならない為に、これだけは守って欲しい7つのこと - Qiita
    edo_m18
    edo_m18 2016/08/18
    日本語で分かりやすく簡潔に書くことと、プログラムを分かりやすく簡潔に書くことは結構似てると思ってる。
  • 誰もが知ってるけど敢えて言わない確実に身につくプログラミング学習法

    誰もが知ってるけど敢えて言わない確実に身につくプログラミング学習法 The kings road to be a programming ninja 2016.04.27 Updated by Ryo Shimizu on April 27, 2016, 08:34 am JST 学問に王道なしと言いますが、プログラミングを上達するために最も効果的であるにも関わらず、いまや誰もその有効性を指摘しなくなってしまった方法がひとつだけあります。 それは「写経(しゃきょう)」です。 写経・・・文字通り、教科書に書いてあるプログラムリストをそのまま書き写すことです。 「そんなバカな。そんなことで上達が早まったら苦労しない」 と思うかもしれません。 しかし、実際には写経ほど効果的な学習法はないのです。 例を示しましょう。 たとえば、プログラミングの授業で、サンプルプログラムの半完成品がファイルで配られ

    誰もが知ってるけど敢えて言わない確実に身につくプログラミング学習法
    edo_m18
    edo_m18 2016/04/28
    確かに、写すことで文法など動くものを覚えることができる。その上でアレンジを加えると、そこからの差分で気づきが多くなる、ってことなのかな。
  • より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD

    (訳注:2015/10/31、いただいた翻訳フィードバックを元に記事を修正いたしました。) 開発者は嫌うでしょう。 ここでは、標準的なコツや策略について書きますが、当に興味があるのは、別のことです。究極の奇策を見つけたいと思います。策略をひとつずつ試して、プログラミングの聖域に少しでも近づければ良いのですが。 はじめに 私が初めて書いたビデオゲームは、 Ninja Wars (忍者戦争)でした。 そう、これは、画像で埋めたHTMLのtableです。 src 属性を変えることで、動きを実現しています。JavaScriptファイルの冒頭は下記のようになっています。 var x = 314; var y = 8; var prevy= 1; var prevx= 1; var prevsw= 0; var row= 304; var endrow= 142; var sword= 296; v

    より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD
  • プログラミング :: 高速なプログラムを書く為に :: メモリ

    3. メモリ さて、プログラムの最適化で一番重要になってくるのは、メモリです。 はっきり言って、数値計算をするプログラムの一番のボトルネックはメモリアクセスです。 下手なプログラムを書くと、計算時間の殆どがメモリアクセスの時間という事になりかねません。 昔は、メモリの動作速度は高速でその様な事はなかったのですが、 最近では CPU の性能向上が激しく、メモリに追いつき追い越し物凄い差を付けてしまいました。 CPU の動作について行ける様な速さで動作するメインメモリは高価になってしまい作れません。 まあ、値段の問題は抜きにしたとしても、CPU の動作は速すぎます。 これは、少し計算してみれば直ぐに分かります。 今売られている CPU では、コアのクロック周波数が高い物では 4GHz になります。 例えば 4GHz の CPU で 1 clock の間に光が進む距離を考えると、 3×1010

    edo_m18
    edo_m18 2015/08/31
    "例えば 4GHz の CPU で 1 clock の間に光が進む距離を考えると、 3×1010 [cm/s] / 4×109 [Hz] = 7.5 cm になります。" 物理的位置が影響するくらいCPUは速い。
  • HTTPサーバプログラムの作成

    HTTPサーバはTCP/IP通信のサーバの一つです。HTTPサーバはホームページの用 サーバとなるだけでなく、インターネットにおける汎用的な情報発信サーバと して利用されつつあります。実際、HTTPサーバを組み込んだ情報家電製品など が登場してきていてます。インターネット上のすべてのコンピュータにHTTPサー バが組み込まれる時代も遠い未来ではないかもしれません。 ここでは、HTTPサーバプログラムの作成方法について解説します。取り上げる 例題は最も簡単なHTTPサーバであり、HTTPリクエストのメソッドのうち「GET」 にしか対応していません。また、重要なエラー処理以外は省略されています。 しかし、簡単な情報発信であれば十分に使えるものです。他のメソッドや例外 処理は読者の皆様にお任せすることにします。 #include <sys/fcntl.h> #include <sys/socke

  • その6 HLSLの根っこ:最初の最初からやってみる

    ホーム < ゲームつくろー! < プログラマブルシェーダ編 < HLSLの根っこ:最初の最初からやってみる その6 HLSLの根っこ:最初の最初からやってみる HLSL(High-Level Shader Language:上位レベルシェーダ言語)は頂点シェーダ及びピクセルシェーダを記述できる言語です。前章までのアセンブリによるプログラムは仕組みとしては単純なのですが、やはりアルゴリズムの構築がパズルのようで、可読性の点からも厳しいものがあります。一方でHLSLはC言語風の表記方法で、はるかに読みやすいシェーダプログラムを書くことができます。これはちょうどアセンブラとC言語の関係と同じです。そう考えると世の中がHLSLに移行するのは目に見えています。 HLSLについて書かれたは沢山あります。ただ、私がアホなだけかもしれませんが、なぜだかを見てもすっと理解できないんですよ(^-^;。それ

  • 全能感UP! GLSLで進めレイマーチング « demoscene.jp

    こんにちは。tomohiroです。 概要 最近の4k/64k introでよく使われているレイマーチング(Ray marching)法について説明する。 レイマチーングとはレイトレーシング法の一種である。 レイマーチングではレイの始点から少しづつ進みながらシーン内のオブジェクトとの交点を求める。 シーン内のオブジェクトはDistance functionという関数で記述される。 なぜレイマーチング, Distance functionを使うのか Distance functionは数行程度のコードによって実装できるので, 小さなデータで3D形状を表現する事ができる。 複雑な形状も関数をいくつか組み合わせる事によって作る事ができる。 しかし三角形ポリゴンほど汎用的に形状を表現するのは難しい。 レイマーチングを使うと Distance functionで表現された形状を少しのコードでレンダリン

  • 各種ゲームのプログラム解析

    目次 はじめに 解析結果についての解説 ファイナルファンタジーIV ファイナルファンタジーV ファイナルファンタジーVI ドラゴンクエストV ドラゴンクエストVI ドラゴンクエストI・II ドラゴンクエストIII ロマンシング サ・ガ2 ロマンシング サ・ガ3 技術資料 ファイナルファンタジーIV ファイナルファンタジーV ファイナルファンタジーVI ドラゴンクエストV ドラゴンクエストVI ドラゴンクエストI・II ドラゴンクエストIII ロマンシング サ・ガ2 ロマンシング サ・ガ3 今後の予定 おわりに はじめに ゲームの内部で起こっている処理を推測するのはなかなか難しいものです。ユーザーサイドから見れば、ゲームの内部処理はほとんど「ブラックボックス」のようなものです。ユーザーサイドでは「(内部で複雑な処理が行われた末の)最終結果」しかわかりませんし、ゲーム中の様々な要素(各種パラメ

  • Codespell – Java言語がそのまま呪文となる教育用3Dゲーム

    カリフォルニア大学サン・ディエゴ校の計算機科学者達が開発した Codespell は、一人称視点の3Dゲームなのですが、その一番の特徴は、プレイすることでJavaプログラミングを身につけられるという点です。 Codesp […] カリフォルニア大学サン・ディエゴ校の計算機科学者達が開発した Codespell は、一人称視点の3Dゲームなのですが、その一番の特徴は、プレイすることでJavaプログラミングを身につけられるという点です。 Codespellでは、プレイヤーは小動物ノーム(gnome)たちが住む土地にやってきた魔法使いです。ノーム達は過去に魔法を使って生活していたのですが、今は魔法をうまく使えなくなっています。魔法の呪文はJava言語プログラムで、物体を浮遊させるとか火を起こすといった7つの手持ちの呪文を使って、ノーム達を助け、火を消したり川を渡ったりといったクエストを解き、バッ

    Codespell – Java言語がそのまま呪文となる教育用3Dゲーム
  • 職業プログラマーなら必ず読むべき「Code Complete」 - $shibayu36->blog;

    Code Completeの上下巻を読んだ。 CODE COMPLETE 第2版 上 完全なプログラミングを目指して 作者:スティーブ マコネル日経BPAmazonCODE COMPLETE 第2版 下 完全なプログラミングを目指して 作者:スティーブ マコネル日経BPAmazon 読んだ感想としては、職業プログラマーなら必ず読むべきだなと感じた。 このではソフトウェアコンストラクションに関する話題を扱っている。このの中でソフトウェアコンストラクションとは、詳細設計、コーディングやデバッグ、単体テストなどなど、要求定義が終わった後、ソフトウェア製作に必要なプロセス全般のことを指している。 主なテーマとして、どうやってソフトウェアにおける複雑さを減らすことが出来るのか、について書かれている。そのテーマをいろいろな観点から説明されている。例えば以下の様な観点がある。 上流工程の欠陥による

    職業プログラマーなら必ず読むべき「Code Complete」 - $shibayu36->blog;
  • プログラムが書けない人に「仕様変更」について説明するには | tech - 氾濫原

    「仕様変更」という言葉はプログラム書く人じゃないと、そのイメージが掴めないと思う。イメージが掴めない人に対してそれを説明するとしたら何がいいだろう? と思った。 とりあえず、料理に例えたらいいのではないかと思ったので、それに例えて考えてみる。 仕様とはレシピのことであり、最終的には具体的に「べることができる美味しい料理」すなわち「うまく動くプログラム」を作ることを目的としている。 仕様というのは、最初は「イタリア料理」「日料理」「中華料理」程度しか示されない。当然この時点では方針程度しか考えることができない。材を買うこともできない。せいぜい使う調味料を揃えるぐらいしかできない。 もう少し進むと、料理名まで具体化される。スパゲティを作りましょうとか、ピザを作りましょうとかだ。とりあえずここまできたら小麦粉を買おうとかまではできるかもしれない。でも実際に作りはじめることはできない。 さら

  • Boidsとは

    Boid(ボイド)とは、1987年にCraig Raynoldsによって発表された理論です。 この理論は、3つのルールを規定するだけで鳥の群れをシミュレーションできるというものです。 ちなみにBoidという名の由来は、鳥もどきという意味の言葉birdoid(バードイド)が短くなりこのように呼ばれるようになりました。 さて、Boidsの3つのルールとは、以下の通りです。 Separationは、近くの鳥や物体に近づきすぎたらぶつからないように離れるルールです。 もし、ボイド同士が近づきすぎてしまったら、前を飛んでいるボイドはスピードを速くし、 後ろを飛んでいるボイドはスピードを遅くするようにします。 障害物、例えば柱とか壁とかに対しては、それにぶつからないように方向転換して衝突を避けるようにします。 Alingmentは、近くの鳥たちと飛ぶスピードや方向を合わせようとするルールです。 すなわ

  • 新人プログラマーに読ませて欲しいネーミングの大切さ - プログラマー幸福論

    Photo from Kıvanç Niş ネーミングについてまじめに長文を書いてみました。もし、あなたの会社にネーミングに疎い新人プログラマーがいたら読ませてやってください。 ちなみに、この記事はシステム開発のネーミングについて書いています。また、このブログの特性上、英語でのネーミングを想定していますが、日語のネーミングでも同様に考えることができると思います。 1. ネーミングの重要性 一般に、熟練のプログラマーほど、プログラミングにおける ネーミングに時間をかけます。それはなぜでしょうか。 あなたが付けたその変数名 data は、その時点では、自分のために付けた「目印的なもの」であったかもしれません。しかし、そのソースコードを引き継いだ担当者など多くの人が、その名前を見ることになります。 // データを取得する var data = getData(1); そしてその名前は、そのソー

    新人プログラマーに読ませて欲しいネーミングの大切さ - プログラマー幸福論
  • プログラマーの格言(盗作多し)

    プログラマーの格言(盗作多し) 頼む、96になるまで盗作を続けさせてくれ プログラマーの格言(盗作多し) 一日は24時間ある。 今日中という意味は明日の朝までという意味である。 プログラマーの格言2(盗作多し) プログラムは思った通りに動かない。書いた通りに動く。 プログラマーの格言3(盗作多し) 要求仕様はプログラム完成後に完結する。 基仕様は完成品を顧客が見てから決定される。 詳細仕様は使用者がプログラムを動かしてから固まる。 プログラマーの格言4(盗作多し) 私は、ソフトウェア設計には 二つの方法があるという結論に達した。 一つは、欠陥がないことが明らかなほど単純にする方法である。 もう一つは、明らかな欠陥がないほど複雑にする方法である。 C.A.R.Hoare プログラマーの格言5(盗作多し) コードは開発現場で書くんじゃない! 納品先で書くんだ! デバグは納期前にするんじゃない

  • JavaScriptで配列をシャッフル

    配列をシャッフル、つまりランダムに要素の位置を入れ替えるというのを、sortメソッドを使ってやってみたのだけど、明らかにダメダメなものになってしまった。その後、あーでもないこーでもないと考えたのだけど、算数が得意すぎて頭が痛くなった。ということを某所でぼやいたらはてのくんがコードを見つけてくれた。どうやらFisher-Yatesという有名なアルゴリズムでやると良いらしい。 最初に書いたコードは、 var a = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); a.sort( function (a, b) { return Math.ceil(Math.random() * 3) - 2; } ); というもの。sortメソッドは、パラメータに与えられた関数が負の値・0・正の値を返すことによって要素の順序を決定するので、その関数がランダムに値を返せばランダ

    JavaScriptで配列をシャッフル
  • 1