みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Unity, Python, Processingなどのプログラミングや,脱獄, hackintoshなど

トップ / 記事一覧 / カテゴリ

jQueryでarrayに対し$.ajax()を非同期直列で呼び出す

$.ajax()を使ってarrayに格納された複数のurlを順番に取得していく方法です.

var urls = ["909253","909254","909255","909256"];
urls.reduce(function(previous,current) {
  return previous.then(function(response) {
    if (response) {
      console.log(response);
    };
    console.log(current);
    return $.ajax({
      url: "https://itunes.apple.com/lookup?id="+current,
      timeout: 2000
    });
  });
}, $.Deferred().resolve()).done(function() {
  console.log("complete.");
}).fail(function() {
  console.log("error.");
});

Array.prototype.reduce() を使います.最初に $.Deferred().resolve() を作成し,これに対して.then()を.reduce()でチェインしていくわけです.

responseは $.ajax() で取得したデータです.初回は $.Deferred().resolve() の返り値であるundefinedが帰ってくるので,ifを使用します.

最後の .done() は処理が正常完了した時の処理です..fail() はエラー時の処理です.

上記を実行すると,非同期で順番に$.ajax()が呼ばれ,iTunes Search APIから指定されたidの曲情報を取得しconsoleに表示します.

匿名関数のみでスッキリと記述できたような気がします.

Selenium3のChromeDriverでpdfをダウンロードする

Chromeにはpdfを表示するための機能が搭載されており,ChromeDriverでpdfにアクセスしても表示するだけでダウンロードされない.いろいろな拡張機能を無効にすることで,pdfをダウンロードできるようにする.

環境: MacOS 10.12.4, ChromeDriver 2.29 (Chrome 58.0), Selenium 3

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", {
  "download.default_directory": 保存先,
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "plugins.plugins_disabled": ["Chrome PDF Viewer"],
  "plugins.always_open_pdf_externally": True
})
options.add_argument("--disable-extensions")
options.add_argument("--disable-print-preview")

driver = webdriver.Chrome(chrome_options=options)
driver.get("http://example.com/sample.pdf")

これでpdfを直接ダウンロードできるようになります.

Selenium 3 をPythonで使う

最近Seleniumがversion 3になったようで,pythonのpipでインストールしてもそのまま使えなかったので,自分用にメモ.

環境

  • MacOS 10.12
  • Python 3.5.2
  • Selenium 3.0.2
  • Firefox 50.1.0

インストール

sudo pip3 install selenium

Mozillaのgeckodriverをダウンロードする.

Releases · mozilla/geckodriver · GitHub

解凍してからgeckodriverを/user/local/binにコピーする.

Pythonで以下を実行

browser = webdriver.Firefox()
browser.get('http://www.yahoo.com')

Yahooが表示されることを確認したらインストール完了.

Error

geckodriverをインストールしないと.

selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

と怒られる.

VMware上のWindows7で公的認証サービスとe-Taxを使う

普段はMacを使っているけど,公的認証サービスとかe-Taxなんて1年に1度しか使わないのに,ドライバーやクライアントソフトをインストールするともれなくJREがついてくるので,何とかしようと思い,何とかしてみたので記事にまとめました.

公的個人認証サービス ポータルサイト

普段からJavaが動いているのは気持ち悪いので,VMware FusionにWindows7をインストールし,セキュリティソフトなどで防御を固めた上で公的認証サービスのクライアントソフトをインストールしました.

機器

みーは以下のICカードリーダーを購入しました.Amazonで2000円しました.税金を収めるために2000円払うというのは残念な話です.マイナンバーカード対応となっていたので,これにしました.

NTTコミュニケーションズ 接触型 USBタイプ ICカード リーダーライター ACR39-NTTCom

NTTコミュニケーションズ 接触型 USBタイプ ICカード リーダーライター ACR39-NTTCom

ゲストOSに接続する.

このカードリーダーは専用のドライバーが必要みたいで,下記リンクからダウンロードし,インストールします.ゲストOSにドライバーをインストールするのはもちろんですが,ホストOS (=MacOS)でも認識されないとVMwareが認識しないので,Macにもドライバーをインストールします.

利用者クライアントソフトのダウンロード : 公的個人認証サービス ポータルサイト

f:id:atsuhiro-me:20170104004637p:plain

上の画像で,Adcanced Card ACR39U ICC Readerというのがカードリーダーのことです.windowsに接続します.

使ってみた

無事に使えました.3月の確定申告に間に合ってよかった.

f:id:atsuhiro-me:20170104005024j:plain

f:id:atsuhiro-me:20170104005600p:plain

クリーンインストールしたWindows7のWindows Updateが終わらない

クリーンインストールしたWindows7では,Windows Updateが全く進まないことがよく起こります.

最初に明示的に幾つかのUpdateを適応する必要があります.

Microsoft Update Catalogにアクセスして,下記のUpdateをダウンロードしてから,インターネットと接続を切った状態で,上から順番にインストールしていきます.

  • Windows Update Diagnostic

    • 最初にこれを実行することで,Windows Updateをリセットします.
  • KB3177467

    • Windows Update Clientの最新版(2016.1.3現在)をインストールするために必要
  • KB3172605

    • Windows Update Clientの最新版(2016.1.3現在)
  • KB3125574

    • Windows Updateの累積的な修正パッケージ (476.9 MB)

最後のファイルは500 Mbytesの巨大なファイルなので,安定したネットワークに接続してからダウンロードをしてください.

これらのインストールが終了したら,再起動してからインターネットに接続し,Windows Updateを自動で実行すれば完了です.

参考

Herokuのローカル開発環境の整備

VMware上のUbuntu 16.04 LSTにHerokuのローカル開発環境を作成するためのメモ.PythonのDjangoを使ったWebアプリケーションの開発を目的とした記事です.

パッケージのバージョンなどは現時点でのもので,適宜読み替えてください.

VMware FusionのゲストOSで作業をするメリット

Macに直接HerokuやPostgreSQLをインストールしてしまうと,不要なサービスが常時起動することになります.Macで映画鑑賞している間にPostgresサーバーが起動しているのは気持ちが悪いです.複数の開発環境を作成する方法としてPythonのvirtualenvなどが有名ですが,ゲストOSを複数用意するのが最も頭を使わなくて済むとみーは考えています.

Mac上に開発用のファイルを置いて,テキスト編集などはMacで行い,共有フォルダを用いてゲストOSからMac上のファイルを参照できるようにして,実行はゲストOSで行うのが簡単だと考えます.

Ubuntuの用意

Ubuntuならばapt-getで簡単にCLIからインストールができるので,ゲストOSはUbuntuを使います.

Heroku Command Line Interfaceのインストール

UbuntuでHeroku Command Line Interfaceをインストールします.

Getting Started on Heroku with Python | Heroku Dev Center

PostgreSQLのインストール,設定

DjangoでPostgreSQLを使うにはpsycopg2が必要で,postgresql-server-dev-9.5に依存しています.

sudo apt-get install postgresql postgresql-server-dev-9.5

ここではpsql 9.5.5を使用しています.

PostgreSQLをCLIで操作するのは面倒などで,pgAdmin IIIなど,GUIツールを利用するのがおすすめです.

Python3のインストール

python3をインストールし,pip3から適宜必要なモジュールをインストールします.

$ sudo apt-get install python3-pip
$ sudo pip3 install Django psycopg2

PostgreSQLの初期設定

PostgreSQLはデフォルトでpostgresという名前のユーザーが存在するので,このユーザーとしてログインします.

$ sudo -i -u postgres

PostgreSQLにアクセスするためのユーザーを作成します.-Pはパスワードを設定するオプションで,-dはデータベースの作成を許可するオプションです.

$ createuser --interactive -P -d
Enter name of role to add: xxx
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) y

これでxxxというユーザーが作成できました.pgAdmin IIIから,新規に作成したユーザーでアクセスします.Ubuntuではpeer authenticationという機能が存在するため,Ubuntuのユーザーとは独立したユーザー名とパスワードでログインするにはHostをlocalhostと明示する必要があります.