2015 年 6 月の記事一覧です(6 件)

[Python]剰余算の真理値判定とエラトステネスの篩

例えばこのような奇数を求めるコードがあって

In [1]: list(filter(lambda x: x % 2, range(10)))
Out[1]: [1, 3, 5, 7, 9]

このなかの x % 2 は真理値判定となっていて、余りがあればTrueであり、なければFalseである。ところが(俺だけかもしれないが)これがどうもしっくりこない(笑)% は余りを求めるのだから、余りがあればTrueなんだということは頭では理解しているつもりなのだけど、余りがゼロの場合に割り切れたんだからTrueだ、とふと思ってしまう。なんでだろうとずっと考えていたのだけれど、どうやら俺は奇数より偶数のほうが好きだからかもしれない。。

# -*- coding: utf-8 -*-

def sieve(num):
    primes = list(range(3, num, 2))
    for i in range(len(primes)):
        if primes[i]**2 > primes[-1]: break
        primes[i+1:] = filter(lambda p: p % primes[i], primes[i+1:])
    print(primes)

if __name__ == '__main__':
    import sys
    sieve(int(sys.argv[1]))

上記コードにも偶数をフィルタリングして除外する箇所があって、そこでも剰余算の真理値判定をしている。これはエラトステネスの篩という有名なアルゴリズムらしい。

良いもの。悪いもの。: アルゴリズムの素晴らしさに気付かせてくれたのはエラトステネスの篩だった
こちらのサイトのコードを Python3で書き直させてもらった。


[Python]NZMATHのインストールで若干ハマった

NZMATHを少し使ってみたくなってpipでインストール出来るとどこかに書いてあったのでやってみたのですが、

$pip install nzmath
Downloading/unpacking nzmath
  Could not find any downloads that satisfy the requirement nzmath
  Some externally hosted files were ignored (use --allow-external nzmath to allow).
Cleaning up...
No distributions at all found for nzmath
Storing debug log for failure in /Users/foobar/.pip/pip.log

となってインストール出来ません。

use --allow-external nzmath to allow

と出ているので、

$pip install nzmath --allow-external nzmath

としてみたところ、今度は

Downloading/unpacking nzmath
  Could not find any downloads that satisfy the requirement nzmath
  Some insecure and unverifiable files were ignored (use --allow-unverified nzmath to allow).
Cleaning up...
No distributions at all found for nzmath
Storing debug log for failure in /Users/foobar/.pip/pip.log

となるので

$pip install nzmath --allow-external nzmath --allow-unverified nzmath
両方付けてみるとうまくいきました。因みに環境はOS X Yosemite 10.10.3 Python2.7.6 です。多分Python2系じゃないとうまく動きません

素因数分解など

In [1]: import nzmath.factor.methods as methods

In [2]: methods.factor(123456)
Out[2]: [(2, 6), (3, 1), (643, 1)]
In [3]: from nzmath import prime

In [4]: prime.nextPrime(643)
Out[4]: 647

参照サイト
良いもの。悪いもの。: 2013年と2014年の違い


[Mac]Yosemiteでデフォルトブラウザの変更

OS Xでデフォルトブラウザを変更するには Safari を起動して Safari の設定内で行うものと相場が決まっていましたが、Yosemiteからは違うようです。システム環境設定の一般の中にデフォルトブラウザの設定項目がありました。


スクリーンショット 2015-06-08 21.35.00

今まではデフォルトブラウザ変更のために Safari を起動させていましたが、これで余程のことが無い限り Safari を立ち上げることはないでしょう。



werckerでemail-notifyの設定をする

werckerのdeploy完了後に通知が欲しくなったのでemail-notifyの設定してみました。設定後のwercker.ymlはこんな感じです。追加したのはdeployセクションにあるafter-stepsの箇所ですね。

box: wercker/python
 # Build definition
 build:
   # The steps that will be executed on build
   steps:
     # Use this virtualenv step for python 3.3
     - virtualenv:
         name: setup virtual environment
         python_location: /usr/bin/python3.3
 
     # A step that executes `pip install` command
     - pip-install:
         requirements_file: "requirements.txt" # Optional argument.
 
     # A custom script step, name value is used in the UI
     # and the code value contains the command that get executed
     - script:
         name: make html files
         code: |
             python freeze.py
 # Deploy definition
 deploy:
   steps:
       - s3sync:
           key_id: $KEY
           key_secret: $SECRET
           bucket_url: $URL
           source_dir: build/
+
+  after-steps:
+      - email-notify:
+          from: alerts@wercker.com
+          to: example@example.com
+          username: $EMAIL_USER
+          password: $EMAIL_PASSWORD
+          host: smtp.gmail.com:587

$EMAIL_USERと$EMAIL_PASSWORDはwerckerのApplication設定で変数登録(PIPELINEのAdd new variable)をしてあげればwercker.ymlにパスワード等を直接記載必要がなくて安全です。
ひとつ注意点ですが、smtpにGmail(及びGoogle Apps)を使用する場合で二段階認証を設定している場合は普段使用しているパスワードでなく、アプリごとにパスワードを発行する必要があるのでwercker用のパスワードを発行し、それを登録する必要があります(思いっきりハマりました。。)。


[JavaScript] TrifleJS を使ってみる

仕事関連でInternet Explorerをヘッドレスで動かしたくてtrifleJSを試してみた。
trifleJS: Headless automation for Internet Explorer

サイトの冒頭に書いてある通り、PhantomJS互換でトライデントエンジンをヘッドレスで動かすもののようで、WebDriverサポートは未だらしい。とりあえずIE9でこのブログのスクリーンショットを撮ってみる
環境はWindows7 Professional 32bitです。因みにシステム要件はこちら

c:\TrifleJS> TrifleJS.exe --emulate=IE9 --render=http://blog.aoshiman.org

同梱されているexamplesフォルダには様々なサンプルスクリプトがある。 その中のloadspeed.jsを使ってみる(ついでにproxyを通してみる)。
これはコマンドライン引数にURLを指定し、サイトタイトルと掛った時間を表示させるもの。

c:\TrifleJS>
c:\TrifleJS>cd examples
c:\TrifleJS\examples>
c:\TrifleJS\examples>..\TrifleJS.exe loadspeed.js http://blog.aoshiman.org/ --proxy=192.168.xxx.xxx:8080
Page title is aoshiman.org
Loading time 988 msec

Roadmap を見ると道半ばというよりはまだまだこれからというところっぽい。 WebDriverをサポートすると嬉しい気もするが、IEはもういいよという気もしないでもない(笑)


PAGE TOP