ブックマーク / x1.inkenkun.com (39)

  • あなたのPythonを爆速にする7つの方法

    最近プロコン(プログラミング・コンテスト)をはじめました。 基的にはアルゴリズム勝負なのですが、とにかく速度を競うプロコンです。 小手先の速度チューニングもバカにできません。 何が速くて何が遅いのかはっきりさせるため、ボトルネックになりそうな操作のベンチマークを取りました。 実行環境は下記のとおりです。 python2.7.5 OS: MacOSX 11 CPU: Core i7 2GHz (4core) MEM: 16GB その1. 配列の初期化を高速化する まずはプロコンの基中の基、配列の初期化です。 下記7つの初期化方法を比較してみます。 空配列へappendして配列をつくる for内包表記で配列をつくる サイズ1(None)の配列を乗算してから値を代入する サイズ1(None)の配列を乗算する サイズ1(ゼロ)の配列を乗算する すべてゼロのarrayをつくる 0〜nのarra

    haske11
    haske11 2015/05/08
    pythonで速度チューニング
  • IPython Notebook をインストールしてsupervisordでプロセス管理したい

    ちょっと前にバツイチちゃんが、anacondaでipythonを入れてって書いてましたが、ローカルなマシンならいいとしてサーバーに入れる場合個別にpipで入れたかったりしますよね そこでpipでipythonを入れて、プロセスをsupervisorで管理する方法を紹介します。 ipythonをインストール ipython notebookのインストール方法は簡単です。 pip install ipython もしくは pip install "ipython[notebook]" です。 インストール直後は設定ファイルがないので、設定ファイルを作ります。 ipython profile create 「.ipython/profile_default/」この中に設定ファイルが作られます。 ipython notebookの設定ファイルは「ipython_notebook_config.py

    haske11
    haske11 2015/01/14
    IPythonらぶ♥
  • Apache SparkからGoogle Cloud Strageを使う

    Google Cloud StorageをHadoopのファイルシステムとして使うことのできるようになるGoogle Cloud Storage Connector for HadoopというライブラリがGoogleから出ています。 これを使うと、SparkはHDFSではなくGoogle Cloudに対してジョブを実行できるようになります。 Google Cloud Storage Connector for HadoopによってHDFSが使えなくなるわけではなく、HDFSと併用してGoogle Cloudを使うことができるようになるだけなので、キャッシュやテンポラリ・ファイルはHDFSの方に載せた方がよいでしょう。 早速使ってみます。 1. 秘密鍵の発行 まずはGoogle Cloud Service接続用のクライアントIDと秘密鍵の発行を行います。 これはGoogle Develope

    haske11
    haske11 2015/01/09
    SparkとBigQuery!
  • 最強のJVMチューニング・ツール: GCログを可視化するGCViewerとリモート接続でプロファイリング可能なVisualVM

    まずは倍率を1000倍から5000倍に上げます。 Data Panelも一旦非表示にします。 さて、これを見ると、使用済みヒープと使用済みNew領域は比例しつつ一定の間隔で上下しています。 ここからは特異点は見えないので、一旦非表示にします。 イニシャル・マークレベル(黄色の線)も一定で、分析対象としづらいので非表示にします。 すっきりして少し見やすくなりました。 ここから、 最も時間がかかっているのはイニシャル・マーク イニシャル・マークは1分間に2回程度発生している ということが読み取れます。 イニシャル・マーク では、そもそも、コンカレントGCにおけるイニシャル・マークとは何なのでしょうか。 OracleのドキュメントのReviewing GC with the CMSによると、New領域から参照されているオブジェクトをマークするのだと。 Stop the Worldを伴い、マイナー

    haske11
    haske11 2014/12/23
    JVM Advent Calender 2014
  • Apache Spark+IPython notebook(&Mesos)インストール〜動作確認

    前回、Cloudera Managerを使ってHDFSクラスタを構築しました。 今回はこのHDFS上でApache Sparkを動かします。 Apache Sparkを扱うOSSのGUIをいろいろ探してみたのですが、現状ではIPython + notebook最強伝説です。 というわけでまずはMesosのマスター/スレーブを構築していきたいのですが、その前に、Mesosとは何か?です。 0. Mesosとは ■ Mesos 分散アプリケーションもしくはフレームワークに対して効率的なリソース分離、共有を提供するクラスタ管理アプリケーションです。 つまり、分散アプリケーションで実行されるタスクを管理し、効率的にリソース分配を行うものです。 要はYARNと同じ役割ですが、YARNとの違いは下記に詳しい記述がありました。 [Mesos]Hadoop YARNとApache Mesosの違いって何?

    haske11
    haske11 2014/12/17
    Apache Spark + IPython notebook 最強伝説。
  • sprayでwebサービス作るチュートリアル 第3回

    第2回ではsprayのテンプレート・プロジェクトをデバッグ実行してみました。 今回は、かんたんなTODO登録を作成してみます。 掲載したコードはGithubにて公開しています。 https://github.com/x1-/spray-sandbox 1. パッケージ名の変更 まずは・・・sprayのテンプレートは、ソース・パッケージがcom.exampleのままなので適切なパッケージ名に変更しておきます。 ソース・パッケージ上でShift+F6押すとrenameダイアログが立ち上がります。 私はcom.inkenkun.x1に変更しました。 build.sbtの定義も変更します。 organization := "com.inkenkun.x1" version := "0.1" scalaVersion := "2.11.2" scalacOptions := Seq("-unchec

    haske11
    haske11 2014/11/08
    sprayでTODO登録を作ってみたましたヾ(*´∀`*)ノ
  • sprayでwebサービス作るチュートリアル 第2回

    前回はsprayのサンプルをsbtで動かしただけでしたが、今回からWebサービスを作っていきたいと思います。 まずはsprayプロジェクトのテンプレートを取ってくるのと、IDEでのデバッグ実行を行いたいと思います。 5分で終わります。 1. テンプレートを取ってくる sprayは親切なことに、新規プロジェクトを作成する際のひな形を公開してくれています。 spray-template これをspray-sandboxという名前でcloneします。 git clone https://github.com/spray/spray-template.git spray-sandbox ※おまけ — Gitリポジトリに登録する cd ./spray-sandbox # リモートホストがspray/spray-templateに向いているので、originをupstreamにrenameしておきます

    haske11
    haske11 2014/11/05
    sprayチュートリアル!
  • 第5回テキストマイニングシンポジウムへ行ってきました

    2014年9月11日〜12日にかけて東京ミッドタウンのヤフー株式会社で第5回テキストマイニングシンポジウムが行われていました。 12日(金)の午前中だけ参加してきたので、レポートします。 ニコニコ動画からのポジティブなコメントの抽出 成蹊大の石淵さんの発表です。 ニコニコ動画に投稿されたコメントからポジティブなコメントのみを抜き出す、という研究でした。 ドワンゴと未来検索ブラジルと国立情報学研究所が研究者向けに公開している、ニコニコ動画に投稿されたコメント及びタグのデータを使用したそうです。 ニコニコ動画に投稿されたコメントと言えば、 「まんせー」や「wwwwww」、「すげええええ!!!」 などの、通常の辞書には載っていない品詞の嵐です。 これらのコメントのうち、どんなコメントをポジティブと判断するか、がこの研究の肝になります。 簡単に手順を述べると、 ポジティブタグを抽出する(教師データ

    haske11
    haske11 2014/09/13
    第5回テキストマイニングシンポジウム、ニコニコ動画のコメント分析とかヤフーリアルタイム検索のセンチメント分析とかいろいろ参考になりましたヽ(*´∀`)/
  • まじめにJVMチューニング: 第2回 GCログをみる

    きほんのきです。 まずはログを見ます。 GCログを出すようにしていない場合は、GCログを出すようにします。 -Xloggc:/var/log/gc.log # 出力先パス -XX:+PrintGCDetails -XX:+PrintGCDateStamps の3つのパラメータを指定してjavaを起動します。 java -XmsXXXXM -XmxXXXXM -Xloggc:/var/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -classpath <クラスパスとか> <プラグラム> <引数> このようにして実行しGCログを採取します。 (上記の例では/var/log/gc.log) で、開いてみると、こんな感じの文字列がつらつらと並んでいます。 ※私の環境では、GCアルゴリズムをコンカレントGCとしています。 2014-01-

    haske11
    haske11 2014/09/12
    JVM statを解析する良いツールがあったので、記事を追加したいです。
  • ScalaMatsuri2014行ってきました

    sprayチュートリアル書きかけなのですが、Scala Matsuri 2014に参加したのでレポートします。 ScalaMatsuri2014 1日目 私は実はこの日、ボランティアで運営のお手伝いをしておりまして、、、 朝8:30から設営準備を行っておりました。 ボランティアの話はさておき、AM10:00という休日としては絶望的に朝早くに始まったScala Matsuri 2014ですが、 開始前にはもう会場を人が埋め尽くしていました。 そんなScala Matsuri 2014は、総責任者のkmizuさんこと水島宏太さんの挨拶ではじまり、言わずと知れたScalaの産みの親、Martin Odersky博士の基調講演へと続きました。 全プログラム オープニング – 水島 宏太 基調講演 – Scala 進化論 – Martin Odersky sbt、傾向と対策 – Typesafe E

    haske11
    haske11 2014/09/06
    今年も大盛況のScalaMatsuri!とても豪華な1日目に行ってきました!
  • ScalaでフォルトトレラントなRabbitMQクライアントと方肺実験

    ScalaでフォルトトレラントなRabbitMQクライアントをつくりました。 sstoneのamqp-clientというライブラリを使っています。 このライブラリでかんたんにフォルトトレラントなRabbitMQクライアントが作れちゃいます。 sstone/amqp-client https://github.com/sstone/amqp-client Githubにはサンプルコードもコミットされており、とてもわかりやすいです。 amqp-clientなのですが、内部的にakkaとRabbitMQが公式に提供しているjavaライブラリを使用しています。 作成時点のバージョンは下記です。 scala: 2.11.0 akka: 2.3.2 amqp-client: 1.4 RabbitMQの2台構成クラスタリングが存在しているものとして話をすすめます。 192.168.0.101:5672

    haske11
    haske11 2014/06/07
    RabbitMQレプリケーション実験
  • Cassandra vs Riak vs Redis 〜 NoSQLの性能を比較してみた

    CassandraとRiakとRedis、どれが一番速いのかなーってことで性能を比較してみました。 後ほど詳しく書きますが、若干Redisに有利なベンチマークの取り方しています。 各ミドルウェアの条件と特徴はこれ。 アーキテクチャ比較 version: 2.0.5 構成: cluster depend: Java, Python データモデル: カラム指向 アーキテクチャ: Gossip ノード管理: 設定ファイル/コマンド/GUI 無停止ノード管理: 無停止 CUIクライアント: cqlsh 管理ツール: 付属のweb ui Cassandraのインストール〜クラスター構築はこちらをどうぞ。 Cassandra2系のクラスターをRHEL系LInuxに構築する version: 2.0.0pre11 構成: cluster depend: Erlang データモデル: Key-Value

    haske11
    haske11 2014/06/01
    渾身のベンチマーク
  • 広告をクリックされやすいサイトをつくる方法

    インケンくんからいつも「記事がつまらない」と言われているのでたまにはキャッチーな記事を。 現在私は広告関連の仕事をしてまして。 広告を掲載しているサイトを分類した結果、広告をクリックされやすいサイトにある一定の法則があったので、それについて書きます。 「広告収入(アフィリエイト)で稼いで生活」なんて一度は憧れますが、実は9割のアフィリエイターの月収が5,000円以下というのが実情ですΣ( ̄□ ̄; ) 。 アフィリエイトの報酬は大別して、 クリック報酬(アクション報酬含む) PV報酬 に分けられます。 PV報酬は一日のページビュー(PV)が相当多くないと子どものお小遣い程度にもなりません。 よって、広告で稼ごうと思ったら、クリック報酬です。 サイトを見に来たユーザに「如何に広告をクリックしてもらうか」なのです。 では、広告をクリックされやすいサイトを作るにはどうしたら良いか、です。 SEO

    haske11
    haske11 2014/05/07
  • Cassandraインストール後にOpsCenter入れたらcqlshが動かなくなった件の対応

    Cassandra管理用WebアプリケーションのOpsCenter・・・! 便利そうだったのでCassandraと同じサーバにインストールしてみたのですが、OpsCenterの「Data Explorer」ビューにエラーが表示されてしまいました(´・_・`) Note: The Data Explorer feature in Ops Center is in the process of being deprecated in favor of DataStax DevCenter, a visual CQL tool. You can find more information about DevCenter and a link to download at http://www.datastax.com/download/clientdrivers とりあえず、接続確認します。 C

    haske11
    haske11 2014/03/10
  • REST APIサーバーがエラー多発してきた時のためのNginx PHP-FPM設定

    昨今では、サーバーサイド側はJSONをやりとりするだけのREST APIサーバーにして、フロントでJSをゴリゴリしてサイトを作るってのが流行ってますよね。 インケンが携わっているプロジェクトでも、PHPAPIサーバーとフロントがBackbonejsという構成になっています。 今までの経験上、WEBサイトって大抵の場合DBがボトルネックになっているのですが、インケンが携わっているプロジェクトにてAPサーバーが悲鳴を上げだしたので、サーバーの設定を見直しました。 例えば、負荷が高まるとこんなエラーが出てきます。 Nginx /var/log/nginx/error.log [error] 16347#0: *2141360 recv() failed (104: Connection reset by peer) while reading response header from upst

    haske11
    haske11 2014/03/03
  • scheme事始め

    schemeを触る機会があったのでメモメモ…..φ(・∇・`〃 ) 実行環境 とりあえずschemeでHello Worldやってみます。 schemeのインタプリタもしくはコンパイラを用意しなくちゃ・・・ということでschemeを探しました。 schemeファミリー、いろいろあるんですねえ。。。 Gauche・・・インタプリタ。 Scheme48・・・schemeインタプリタ&コンパイラ。 BiwaScheme・・・JavaScript上でSchemeを実行。 Racket(PLT Scheme)・・・IDE付き。 MIT-Scheme・・・言わずと知れたMITのScheme。 この中で最も使いやすそうだったRacketを選択しました。 ※実はRacketに至るまでにMIT-SchemeやGauche等もさわってみたのですが、いろいろ難ありでRacketに落ち着きました。 ※おもしろい

    haske11
    haske11 2014/02/18
  • Nodejsのレコメンドエンジン recommendationRaccoonを使って、 「あなたにおすすめの、、、」のあれ

    実際運用で、興味ない商品なんてどうやって取得するんだよ!って思いますが、dislikeデータは入れなくてもスコアリングはできるので、試しに入れてみます。 データ挿入はこんな感じ var raccoon = require('raccoon'); raccoon.connect(6379, '127.0.0.1'); raccoon.config.nearestNeighbors = 5; raccoon.config.className = 'item'; raccoon.config.numOfRecsStore = 30; raccoon.config.factorLeastSimilarLeastLiked = false; raccoon.liked('1', '20', function(){}); raccoon.liked('1', '11', function(){});

    haske11
    haske11 2014/02/04
  • BeautifulSoupでロト7の当選番号をすっぱ抜いてくる

    前回に引き続きPython初心者シリーズ みずほのサイトからロト7の当選番号をすっぱ抜いてくるサンプルを紹介します。 スクレイピング PHPスクレイピングをやろうとすると、curlで取ったHTMLをpreg_match等を使ってDOMを解析することになりますよね(今はもっと便利なモジュールがあるのかもしれないけど) Pythonだと、BeautifulSoupという大変便利なモジュールがあります。 パースされたデータに対しての操作が超絶便利です。 サンプルソース 今回もGitにあげてあります。 https://github.com/inkenkun/python_scraping 必要モジュール #HTMLパーサー sudo pip install BeautifulSoup 上記で入れると、BeautifulSoup の3系が入ります。 新しい4系を入れたい場合は、pip instal

    haske11
    haske11 2014/01/08
    BeautifulSoup
  • Elasticsearchのインデックス登録をRabbitMQ経由でやる

    バツイチちゃんがSolrのこと書いてたので、インケンはElasticsearchのこと書きます。 xmlよりjson派なインケンとしてはsolrなんかより、elasticsearch押しです。solr使ったことないけどね! elasticsearchはRESTリクエスト飛ばせば、検索登録更新削除すべて行うことができるのですが、RabbitMQのプラグインを使うと、登録更新削除をキューにメッセージ投げるだけでいいので、大変便利です。 MQにメッセージ投げる際には、elasticsearchのbulk api形式で送る必要があります。 その辺がわかりづらかったので、サンプル交えてご紹介します。 elasticsearch、rabbitmqプラグインのインストールは割愛します。 elasticsearchにrabbitmq用のインデックスを登録する まずはelasticsearchにrabbit

    haske11
    haske11 2014/01/07