ブックマーク / methane.hatenablog.jp (8)

  • Go が for ループをやめるために足りないもの - methaneのブログ

    ジェネリクスの話題になると常に出てくるのが、 for ループの代わりに関数型スタイルで書きたいという要望です。 for ループで書くのは、可読性が悪く、筋力がいるとまで言う人もいます。 しかし、ジェネリクスが追加されても、このスタイルのプログラミングは実用的にはなりません。ジェネリクス以外にも足りない部分がたくさんあるのです。 例えば、次のようなコードを考えてみましょう。 type PointLog struct { ID int64 UserID int64 Point int32 } // 今の書き方 func UserTotalScore(log []PointLog, userID int64) int64 { var t int64 = 0 for _, p := range log { if p.UserID == userID { t += int64(p.Point) }

    Go が for ループをやめるために足りないもの - methaneのブログ
    kenmitsu
    kenmitsu 2017/09/24
  • Re: Re: Go にジェネリクスがなくても構わない人たちに対する批判について - methaneのブログ

    kmizu.hatenablog.com Twitterである程度レスをしたのですが、やはり繰り返される話題なので残る形で書いておきたいと思います。 Goユーザーの中で、ジェネリクスがなくても構わないと主張するユーザーへの批判はしたけど、Goユーザー全てがそうだと思っているわけではない Goユーザーの中でジェネリクス不要論を唱えているユーザーへの批判はしたけど、そういうユーザーを馬鹿にしているわけではない 私の前の記事は、まさに前者の批判に対する返答です。私はGoにジェネリクスを追加することに賛成ですが、別にそうならなかったとしても失望しない程度に「なくても構わない」人です。 一方で後者は、もしGoに限らず一般論としてのジェネリクス不要論だとすれば、批判にも値しないと思いますよ。話題にするつもりはありません。 Goは特に今で言うマイクロサービス的なものを(色んな意味で)効率よく開発するため

    Re: Re: Go にジェネリクスがなくても構わない人たちに対する批判について - methaneのブログ
    kenmitsu
    kenmitsu 2017/09/22
  • Windows では2020年を待たずに Python 2.7 が使い物にならなくなっていく - methaneのブログ

    昨日 mysqlclient 1.3.10 をリリースしました。 今までは Windows 版の wheel は Python 2.7 だけに提供していたのですが、 1.3.10 からは 3.5 と 3.6 だけに提供して 2.7 はドロップしました。 そもそも今まで Python 3 に wheel を提供できてなかったのは、 MySQL Connector/C の VC14 (VS2015) に対応したライブラリが提供されておらず、 Python 3.5, 3.6 は VC14 でビルドされていて VC12 用のライブラリにリンクすると大量のエラーでるわ自分で手順読みながら頑張って MySQL をソースからビルドしてもなんか動かないわで諦めてたからです。 それが、2年待て、よーーーやく MySQL Connector/C 6.1.9 から VC14 のライブラリが同梱される用になりまし

    Windows では2020年を待たずに Python 2.7 が使い物にならなくなっていく - methaneのブログ
    kenmitsu
    kenmitsu 2017/02/22
  • 「Go による Web アプリケーション開発」書評 - methaneのブログ

    Go による Web アプリケーション開発 を読みました。 (まだ後半はパラパラめくっただけですが) このGo のチュートリアルでは無いです。 A Tour of Go とか The Go Programming Language で基的な文法などは抑えた状態で読むべきでしょう。 こので最初のサンプルアプリケーションは、 WebSocket によるチャットです。まず単に動くだけのチャットを作ってから、 Github などと OAuth2 で認証したり、各所からアイコンを引っ張ってきたりと、 Go で小さめの Web アプリを作るときに実用されそうな要素が並んでいます。 後半のサンプルアプリケーション (Twitter と連携する voting アプリ)では MongoDB や NSQ を使いはじめるので、ちょっとそのミドルウェアを使わない人にとっての実用性が落ちてきます。しかしこ

    「Go による Web アプリケーション開発」書評 - methaneのブログ
    kenmitsu
    kenmitsu 2016/02/21
  • Python の新しいプロファイラ vmprof が面白い - methaneのブログ

    PyPy 2.6 と同時に、 vmprof という CPython/PyPy 用のプロファイラが登場しました。 私はまだ PyPy では使っていませんが、CPythonプロジェクトをこれでプロファイル取ってみたらなかなか面白かったので紹介します。 概要 Python にはもともと標準ライブラリとしてプロファイラ (cProfile) が付いてきていますが、これは関数の呼び出しと戻りでコールバック関数を呼び出しつつ実行時間を計測するタイプのプロファイラで、短時間でも正確なプロファイルが取れる反面、オーバーヘッドが大きく、小さい関数をたくさん呼び出す部分がオーバーヘッドでより大きく見えてしまうなどの問題がありました。 これと別の種類のプロファイラとして、定期的にサンプリングして、サンプルが多いところが実行時間も多いハズ、というプロファイラもあります。こちらはある程度の量のサンプルを集めないと

    Python の新しいプロファイラ vmprof が面白い - methaneのブログ
    kenmitsu
    kenmitsu 2015/06/10
  • Python 3.3 以上で使える Python/C API で文字列アクセスを高速化 - methaneのブログ

    試しに英語Blog を書いてみた のですが、書くので精一杯で結局何が言いたいのか分からない感じになってしまったので今後は日Blog 書いてから英訳しようと思います。 Python 3 は 3.2 まで、文字列を unicode に統一した関係で Python 2.7 に比べて遅くなったりメモリ効率が悪くなったりしてしまっていたのですが、 Python 3.3 で PEP 393 Flexible String Representation が導入されて改善されました。 PEP 393 は Python の内部だけではなく Python/C API にも変更を加えており、内部を理解しつつ新しい API を適切に使えば、バイト列と文字列の間の変換を行うような C 拡張を高速化することができます。 そろそろ Python 3.2 のサポートを切れる時期なので、思い当たる人は目を通してお

    Python 3.3 以上で使える Python/C API で文字列アクセスを高速化 - methaneのブログ
    kenmitsu
    kenmitsu 2015/01/05
  • Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ

    id:kazeburo さんが Gazelle という高速な Perl 用の Web アプリケーションサーバーを公開されました。 Gazelle - Plack Handler for performance freaks #yokohamapm from Masahiro Nagano Gazelle の特徴のうち幾つかは、 id:mopemope 作の Meinheld と同じです。 IO周りは全てCで書かれている accept4 や writev などの Linux 独自のシステムコールを利用している 一方で異なる点もあります。 Meinheld は HTTP/1.1 に対応していて、 keep-alive が利用できる。 Meinheld は greenlet というコルーチンを利用して、 long polling や SSE に対応している。 Meinheld が http-pa

    Unix Domain Socket において keep-alive が性能に与える影響 (Gazelle vs Meinheld) - methaneのブログ
    kenmitsu
    kenmitsu 2014/12/22
  • 次世代標準非同期I/Oフレームワーク asyncio (Tulip) - methaneのブログ

    Python Advent Calendar 2013 の4日目です。 Python 3.4 で標準ライブラリに追加される asyncio を触ってみます。 なお、 Tulip とは asyncio のリファレンス実装のプロジェクト名です。 背景 Python はよく非同期 I/O プログラミングに使われます。 Twisted, Tornado, gevent, eventlet, pyuv などのフレームワークがあります。 これらのフレームワークの問題点として、ライブラリの再利用性の低さが挙げられます。 たとえば Twisted 用に書かれた XMPP ライブラリは、そのままでは Tornado で 利用することができません。 この問題の解決策として、良くイベントループの乗り入れが行われます。 GUIアプリケーションに組み込む場合などを考えて、多くのフレームワークが最初から イベントルー

    次世代標準非同期I/Oフレームワーク asyncio (Tulip) - methaneのブログ
    kenmitsu
    kenmitsu 2013/12/04
  • 1