タグ

ブックマーク / hagino3000.blogspot.com (8)

  • エンジニアの採用面接におけるコーディングテストとフィボナッチ数列

    ソフトウェア開発者採用面接のコーディングテストについて。最低限のコーディング能力があるかどうかを見極めるのに、フィボナッチ数を求める関数が出題される事がある。というか自分も出題した事がある。 ホワイトボードに書く形式だと、どうしても行数の少ない実装になってしまうが。手元の端末で自由に書いて良いとなれば、いろいろな解法が出てきて、想定していないコミュニケーションが生まれるかもしれない。最近は専ら採用する側になってしまったのだが、とりあえず自分ならどう書くかなと列挙してみた。使った環境はIPython Notebookである。

    エンジニアの採用面接におけるコーディングテストとフィボナッチ数列
  • vim-python-pep8-indentプラグインで幸福実現した

    Pythonのコーディングスタイルチェックにはflake8を使っていたのだが、インデントルールの次の二つは守れないでいた。 E126 continuation line over-indented for hanging indent E128 continuation line under-indented for visual indent 具体的にはvimのインデント(Visualモードで範囲選択して = )だとpep8のインデントルールになってくれないので、ignore = E128,E126 していた。 そこで、@seizansに教えてもらった vim-python-pep8-indent を入れたらvimのインデントがpep8準拠になり、ほぼノーコストでpep8対応が完了できるようになった。これは良い。 .vimrcの記述は次の通りにした。 " flake8 NeoBundle

    vim-python-pep8-indentプラグインで幸福実現した
  • wheelを使ってPythonのC拡張モジュールを本番デプロイする

    Pythonの話。wheelを使ってC拡張モジュールをデプロイする仕組みが上手く稼動したのでメモ。 依存パッケージの番デプロイ アプリケーションが依存しているPythonパッケージをどうやって番サーバーにデプロイするか。大抵はrequirements.txtにpip freezeで吐いた内容を保存しているだろう。とすると、番サーバーでpip install -r requirements.txtすれば良いんだが、githubが落ちてたりPyPIが落ちてたりすると、外部要因でデプロイスクリプトが途中でコケる、というダサい事態になる。それを避けるために事前にパッケージを固めて各サーバーに配布する仕組みが必要になる。C拡張モジュールを使いたいけど番サーバーでCコンパイラが自由に使えない、という時も同様で、事前にコンパイル済みの物を配布する必要がある。 pip bundleを使う場合 (d

    wheelを使ってPythonのC拡張モジュールを本番デプロイする
  • botoを使ってAWS SNSのMobile Pushを利用する (APNs編)

    boto自体使うのが初めてだったので、おかしい所があるかもしれないが動作はした。APNsのSSL証明書作成等は毎度の事なので省略。Application ARNはAWS Consoleから既に作成してあるとする。 デバイス指定でメッセージ送信する # -*- coding: utf-8 -*- import boto.sns AWS_ACCESS_KEY = 'xxxx' AWS_SECRET_ACCESS_KEY = 'yyyyyyyy' APPLICATION_ARN = \ 'arn:aws:sns:ap-northeast-1:0000:app/APNS_SANDBOX/aaaa' # SNSに接続 sns_connection = boto.sns.connect_to_region('ap-northeast-1', aws_access_key_id=AWS_ACCESS_K

    botoを使ってAWS SNSのMobile Pushを利用する (APNs編)
  • RabbitMQ 3.1の導入とCluster構成を検証する

    RabbitMQ 3.1の導入と冗長化の検証をしたのでメモ。 検証のための構成はフロントのAPサーバー、RabbitMQが動作するキューサーバー、ワーカーそれぞれ二台づつ。キューサーバーが片方死んでも全体が動作し続けられる事、両方がダウンしたとしてもデータは損失しない事が確認できれば良い。要するに単一障害点にならないようにRabbitMQを使いたい。 サーバーの準備 仮想マシン6台はVagrantを使えば一発で用意できる、メモリ16GB積んでてよかった。ホスト名を後でいじるとrabbitmqctlで停止・再起動がうまくいかなくなった。ホスト名周りはEC2で使う時に面倒な事になりそうだ。 各サーバーの /etc/hosts にrabbit1とrabbit2は追加しておく。 RabbitMQ 3.1 のインストール 起動確認 vagrant@rabbit1:~$ sudo rabbitmq-s

  • NASAハッカソンでGalactic Impact部門のHonorable Mentionを受賞しました

    グローバル審査の結果が出たのでエントリにします。 世界規模のハッカソンであるInternational Space Apps Challengeが4月に開催されました。昨年も同じ時期に開催されましたが、今回は開催地が44カ国、83都市。正式にサブミットされたプロジェクトは750を越えたとの事で、圧倒的な規模です。 私が参加したプロジェクトは日ローカル2位*1となり、グローバル審査ではGalactic Impact部門のHonorable Mention(選外佳作)となりました。ハッカソンから1ヶ月以上経っていますが、今だに作業は続いているので嬉しい限りですね。 主に次の3つの機能を開発しました。 MODIS Cloud Maskの取りこみ、集計 地図上へのマッピング ソーラーパネル発電による収支のシミュレーション サブミットしたプロジェクトページ Cloudless Spots for

    NASAハッカソンでGalactic Impact部門のHonorable Mentionを受賞しました
  • Tincrを使って、Chrome Developer Toolsでの変更をソースコードに反映する

    --> tree app app ├── 404.html ├── favicon.ico ├── index.html ├── robots.txt ├── scripts │ ├── main.js │ └── vendor │ ├── jquery.min.js │ └── modernizr.min.js └── styles └── main.css Chrome Developer ToolsのTincrタブでProject Typeを選択、Http Serverの場合はルートディレクトリの設定のみ。 Enable Loggingにチェックを入れておくとConsoleタブにログが出てくる。 Content for url http://localhost:8000/scripts/main.js matches local file /Users/tnishibayashi/d

    Tincrを使って、Chrome Developer Toolsでの変更をソースコードに反映する
  • makefileを廃絶してgruntを使う

    JavaScriptを使った開発で必要となるconcat, minify, lint, test といったタスクを動かすのに使うツール、最近はgruntをよく見かけるのでオレオレmakefileから移行してみた。 既存のmakefileは以下の通り。makefile + makeターゲットから呼び出される各種タスクに対応した処理を行なうプログラムという構成。make minifyと打てば圧縮版のファイルを生成、make testと打てばテストが実行される寸法だ、圧縮にはuglify.js, lintにはjshint、全てnodeモジュールを使っているのでそのまま移行できるはず。concatにはmuというテンプレートエンジンを使っていた。 makefileからの移行 まず、gruntの制御に必要なgrunt.jsファイルは grunt init:gruntfile して生成する。concat

    makefileを廃絶してgruntを使う
  • 1