タグ

2017年12月21日のブックマーク (10件)

  • 高速で汎用的なスライスの操作を求めて - Qiita

    高速に、汎用的に、スライスのフィルタリングをしたい。 仮に邪悪なことに手を染めることになっても。 この投稿では… この投稿は、以前投稿した sort.Slice に学ぶ高速化のヒント をスライスのフィルタリングの実装に適用してみた、という内容になっています。 (この投稿はチュートリアル的な内容となっています) 汎用的な処理を実現するにはリフレクションの力が必要ですが、それだけでは低速になってしまいます。 この投稿では、リフレクションでの実装から始まり、段々と高速な実装にしていきます。 その経緯で少しだけ道を踏み外します。 注意書き 一部、unsafe な機能を使っています。 来は、言語のメモリモデルにそって注意深く実装すべきものです。 が、今回はネタということで、無鉄砲に実装していきたいと思います。 リフレクションで解決してみる まず最初に、どのようなスライスでもフィルタリングできるよう

    高速で汎用的なスライスの操作を求めて - Qiita
    tyru
    tyru 2017/12/21
  • sort.Slice に学ぶ高速化のヒント - Qiita

    sort.Slice の実装をかいつまんで紹介し、様々な型 (特に様々なスライス型) を受け取りつつ速度を落とさず処理をするヒントを探ってみようと思います。 Go 1.8 から追加されている sort.Slice は、従来の sort.Sort と同等の速度で動作します。 気になるのが、sort.Slice には様々な型のスライスを渡せるのに、要素の交換についての処理をユーザーが記述しなくても良いということです。 // 従来の sort.Sort では、ソート対象に関する操作を定義して sort.Interface として渡している。 type ByValue []string func (s ByValue) Len() int { return len(s) } func (s ByValue) Swap(i, j int) { s[i], s[j] = s[j], s[i] } fu

    sort.Slice に学ぶ高速化のヒント - Qiita
    tyru
    tyru 2017/12/21
  • go-sqlrow

    この記事はGo2 Advent Calendar 2017 13日目の記事です。 昨日は@kami_zh さんの Goで標準出力をキャプチャするパッケージを書いた でした。 go-sqlrowGo言語で標準パッケージを使用してRDBMSからデータを取ってくるには、以下の様に書きます1。 type Person struct { ID string Name string } db, _ := sql.Open("dn", "dsn") row, _ := db.Query(`SELECT id, name FROM person where id='foo'`) var p Person row.Scan(&p.ID, &p.Name) SQL文を発行するまではいいのですが、最後の行、sql.Row#Scanがくせ者です。 上記の例のように、sql.row#Scanは可変長個のポインタを引

    go-sqlrow
  • Goで格闘ゲームのマクロを実装してみた - 谷本 心 in せろ部屋

    このところ、夜な夜な格ゲーの動画を撮ってはYoutubeにアップしては、SRK(shoryuken.com)に取り上げられて承認欲求を満たしている [twitter:@cero_t] です。SRKは世界最大の格ゲーコミュニティだよ! http://shoryuken.com/?s=Shin+Tanimoto このエントリーは Go2 Advent Calendar 2017 の7日目です。 https://qiita.com/advent-calendar/2017/go2 はじめに まえがき 学生時代、僕は格闘ゲームの連続技(コンボ)の研究を嗜んでおりまして、学校に行くぐらいならゲーセンを行く、試験勉強するぐらいならコンボの研究をする、卒論を書くぐらいならコンボビデオを撮るという、クズみたいな学生生活を送っておりました。当時、いまは亡き「ゲーメスト」というアーケードゲーム雑誌で体験ライタ

    Goで格闘ゲームのマクロを実装してみた - 谷本 心 in せろ部屋
    tyru
    tyru 2017/12/21
  • 第46回 Perl 5.26で変わること(3) | gihyo.jp

    (1)はこちら、(⁠2)はこちらから。 Perl 5.26で新たに追加されたもの このように非互換性の話ばかりしているとPerl 5.26へのアップグレードをためらう声も出てきそうですが、Perl 5.26にはセキュリティ上のメリットだけでなく、性能的なメリットや便利な新機能などもあります。 インデント付きヒアドキュメント ある程度まとまった分量の、特に複数行にわたる文字列を扱いたい場合は、ヒアドキュメントを利用するのが定番です。

    第46回 Perl 5.26で変わること(3) | gihyo.jp
    tyru
    tyru 2017/12/21
    コンフリクトマーカーをヒアドキュメントと認識してしまうのは盲点だったw
  • Big Sky :: 簡単に goroutine の実行個数を制限する方法

    Go は簡単に軽量スレッドが起動できるのがウリなのだけど、その使い方が難しいと思われているきらいがある。 Goへの誤解について - GolangRdyJp よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事は Goアドベントカレンダー2017 その3 の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね... http://golang.rdy.jp/2017/12/20/go-fact/ 慣れていない間は、処理を並行化する際に「どうやったら並行化できるんだ」が分からない事があるのだと思う。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量に

    Big Sky :: 簡単に goroutine の実行個数を制限する方法
  • 日経電子版 サイト高速化とPWA対応 / nikkei-high-performance-pwa

    html5j Webプラットフォーム部 第19回勉強会 W.A.S.M featuring PWA https://html5j-webplat.connpass.com/event/74013/

    日経電子版 サイト高速化とPWA対応 / nikkei-high-performance-pwa
    tyru
    tyru 2017/12/21
  • REST is the new SOAP

    Written by Pascal Chambon, reviewed by Raphaël Gomès Update: this article mostly deals with the RESTish ecosystem, which now constitutes a major part of webservices. For more in-depth analysis of the original REST, and of HATEOAS, see my follow-up article. How come REST means so much WORK? This is both a paradox, and a shameless pun. Let’s dive further into the artificial problems born from this d

    REST is the new SOAP
    tyru
    tyru 2017/12/21
  • エンジニアのフリーランスの始め方/働き方/やめ方。あるいは業務委託の利点と正社員の利点 - みんからきりまで

    この記事はフリーランスアドベントカレンダーの19日目です。 adventar.org タイトルはmizchi氏のこちらのエントリをパクりました。 mizchi.hatenablog.com 何故かというと、このエントリを読んで「ベンチャーからフリーランスになった人」との対比として「フリーランスからベンチャー社員になった人」という視点でエントリを書いてみたいなと思ったからです。 といっても、ぼくは別に廃業したわけではないので、正確にはフリーランスをやめてはいないし、副業としてコード設計のアドバイスしてほしいみたいな話は歓迎ですし、今後ずっと正社員として生きていくという気持ちがあるわけでも特にないです。 はじめましての方に説明すると、自分の経歴は 情報系専門学校卒業 => 新卒で零細SIer(Android) 1年 => 転職して零細ゲーム会社(Unity) 2ヶ月 => フリーランス(And

    エンジニアのフリーランスの始め方/働き方/やめ方。あるいは業務委託の利点と正社員の利点 - みんからきりまで
    tyru
    tyru 2017/12/21
    フリーランスで SES 契約から正社員になった人の話
  • チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン - 詩と創作・思索のひろば

    生成が重いリソース(や重い処理の実行権)を goroutine 間で共有し使いまわすようなパターンです。よく知られていて名前がついていそうだけど、ぐぐっても分からなかったので書いておく。 コネクションプールに近い感じで、最初にリソースを生成したあと、それらを大事に取り回します。リソースが空いてなかったら goroutine は待つことにする。sync.Pool は「プールにあったら使うけど、なかったら新しく作る」くらいの感じなので、ちょっとスタンスが違う。 チャンネルによる実装は簡単で、以下のエントリにも書いたセマフォを応用すればよい。 ざっくりと書いてみた例がこちら: https://play.golang.org/p/QWAXsA_89Y チャンネルによるセマフォの実装は、「バッファありチャンネルに何か(struct{})を挿入できた goroutine が実行の権利を持つ」というもの

    チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン - 詩と創作・思索のひろば
    tyru
    tyru 2017/12/21