PhantomJS2.0のバイナリをLinuxで使う
PhantomJS+CasperJSを使ってスクレイピングするプログラムを作成し、Macでは正常に動作していました。
サーバー環境であるLinuxで動作させると、なぜかリンクのクリックでエラーが出てプログラムが動作しません。
Mac環境では、PhantomJS2.0、CasperJS1.1-bata3で問題なく動作していますが、
Linux環境では、PhantomJS1.9.8、CasperJS1.1-bata3で問題が発生しています。
Macと同じ2.0のバイナリを使う方法がないか調査してみました。
ソースからビルドする
公式サイトには、Linux版のバイナリが配布されておらず、各自ビルドするように書かれています。
Binary packages for Linux are still being prepared. There are still issues to be solved until a static build is available (see issue 12948 for more details). In the mean time, it is recommended that you build the Linux version from source.
しかし、問題があるようでビルドしても時間がかかって最終的にエラーでバイナリが生成されません。
現在では、gitからチェックアウトするとビルドできるようになっていますが、「2.0.1-development」ということで正式版ではありません。
PhantomJS2.0のバイナリをダウンロードする
次のサイトにパッチを当てたビルド方法が書かれていて、最後に2.0のバイナリがダウンロードできるようになっています。
ビルドしても時間がかかるだけなので、素直にバイナリをダウンロードしましょう。
Chromeユーザーも必見!ブラウザでファイルをダウンロードするなら10倍速くなるFireFoxアドオンの「DownThemAll!」を使おう!
--- 注意事項 ---
FIreFox57以降では、使用できず、代替のダウンローダープラグインが全くありません。
そのため、FireFox56以下を使用するようにして下さい。
自動更新されてしまった場合、「56をダウンロード→ネット切断→設定で自動更新しない→ネット接続」の手順で56に戻しましょう。
FireFoxのアドオンに「DownThemAll!」というものがあり、これを使ってファイルのダウンロードを行うと通常の10倍でダウンロードが可能です。
https://addons.mozilla.org/ja/firefox/addon/downthemall/addons.mozilla.org
ISOファイルなどのGB単位でダウロードに時間が掛かるファイルに使うとかなり速くダウンロードが可能になります。
MSDNでISOファイルをダウンロードするときに利用すると、途中で切断されることもなくダウンロードできます。
高速にダウンロード出来る機能の他に、ダウンロードを一時停止して途中からダウンロードを行うレジューム機能にも対応しています。
Chrome使いの方も、巨大ファイルをダウンロードする時はFireFoxを使うことをおすすめします。
設定画面
一般
操作
ネットワーク
ダウンロードの上限数、サーバーごとの上限数を最大にしておきます。
プライバシー
フィルター
詳細
ダウンロードの最大分割数を最大の10にして常時高速化するようにしておきます。
ダウンロード時
保存
DownThemAll!を選択すると高速にダウンロードが可能です。
進捗
ダウンロード情報
緑のグラフで分割してダウンロードしているのが分かります。
VMwareFusionのNAT接続でゲストOSのIPアドレスを固定する
手順
1.ゲストOSで「ifconfig」を実行し、ネットワークのMACアドレスを取得します。
MACアドレスは「HWaddr」の部分です。
ifconfig eth1 Link encap:Ethernet HWaddr 00:50:56:2D:7D:C8 inet addr:192.168.152.3 Bcast:192.168.152.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe2d:7dc8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11 errors:0 dropped:0 overruns:0 frame:0 TX packets:20 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2430 (2.3 KiB) TX bytes:3031 (2.9 KiB)
2.ホストOSで「dhcpd.conf」ファイルを編集します。
sudo vi "/Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf"
3.「dhcpd.conf」にゲストOSの固定IPアドレスを定義します。
最終行にある「###〜」以降に「host」を追加して固定IPアドレスを定義します。
subnet 192.168.152.0 netmask 255.255.255.0 { range 192.168.152.128 192.168.152.254; option broadcast-address 192.168.152.255; option domain-name-servers 192.168.152.2; option domain-name localdomain; default-lease-time 1800; # default is 30 minutes max-lease-time 7200; # default is 2 hours option netbios-name-servers 192.168.152.2; option routers 192.168.152.2; } (中略) ####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" ####### # ゲストOSのIPアドレスを固定する host guest { # guestの部分はなんでもOK hardware ethernet 00:50:56:2D:7D:C8; # ゲストOSのMACアドレス fixed-address 192.168.152.3; # 好みのIPを設定する(3~127は固定用、128〜254はDHCP) }
4.設定を有効にするためにホストOSを再起動します。
5.ゲストOSで設定したIPアドレスになっているか確認します。
CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)
- 作者: サーバ構築研究会
- 出版社/メーカー: 秀和システム
- 発売日: 2015/03/25
- メディア: 単行本
- この商品を含むブログ (2件) を見る
SQL関数「COALESCE」でサブクエリを使うにはひと工夫が必要
SQL関数「COALESCE」でサブクエリを使うには少しだけ工夫がいるようです。
サンプルコードはOracleを想定しています。
COALESCEとは
値がNULLの場合、代替値を設定するSQL関数です。
COALESCEの通常の使い方
SELECT COALESCE(NULL, 0) AS value FROM dual -- 結果:0
COALESCEでサブクエリを使う
SELECT COALESCE( SELECT NULL FROM dual , 0) AS value FROM dual -- 結果:ORA-00936: 式がありません
COALESCEでひと工夫してサブクエリを使う
ひと工夫とは、サブクエリに括弧を追加することです。
SELECT COALESCE( ( SELECT NULL FROM dual ), 0) AS value FROM dual -- 結果:0
SQLを極めるのに役立つ書籍
SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)
- 作者: ミック
- 出版社/メーカー: 技術評論社
- 発売日: 2015/04/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
- 作者: ジョー・セルコ,Joe Celko,ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/02
- メディア: 大型本
- 購入: 18人 クリック: 335回
- この商品を含むブログ (26件) を見る
C#/VBでフォームを1つしか表示させないようにする
フォームを1つしか表示させないようにする方法を調べていると、次のサイトに説明がありました。
フォームが一つしか表示されないようにする: .NET Tips: C#, VB.NET
フォームを静的プロパティ、シングルトンを使って保持する
静的プロパティ、シングルトンを使うと実現はできますが、フォーム毎にそのコードを書く必要があり、メンテナンス性が低下します。
シングルトンを使った場合、フォームを閉じる処理でフォームを閉じるのではなく、フォームを隠す必要があるようです。
閉じる処理が、本来とは別の処理になってしまうので良くないですね。
新しい方法「Application.OpenForms」を使う
メンテナンス性が良く、言語に依存しない形を探した所、Application.OpenForms
が有力だったのでそれで実装してみました。
Application.OpenForms
は、インスタンス化されているフォームを取得することができます。
コード説明
Application.OpenForms
を使用して表示させたいフォームがインスタンス化されているかを判断します。
インスタンス化されていればそのまま表示し、なければ新規でインスタンス化しフォームを表示させます。
フォームをForm.Hide
で隠していたとしても、インスタンスとしてまだ存在しており、Application.OpenForms
で取得できるので、そのままフォームを表示させます。
C#
public static void ShowOnlyOneForm(Type formType) { Form openForm = Application.OpenForms[formType.Name]; if (openForm == null) { Form form = (Form)Activator.CreateInstance(formType); form.Show(); } else openForm.Show(); }
VB
Public Shared Sub ShowOnlyOneForm(formType As Type) Dim openForm As Form = Application.OpenForms(formType.Name) If openForm Is Nothing Then DirectCast(Activator.CreateInstance(formType), Form).Show() Else openForm.Show() End If End Sub
CentOSのバージョンを確認する方法
良く忘れるので記事にしておきます。
cat /etc/redhat-release CentOS release 6.4 (Final)
はてなブログのソースコード色付けで代表的な表記のまとめ
はてなブログで記事を書いている時、時々ソースコードの色付けで何を指定するのかわからなくなります。
忘れないために代表的な言語をまとめてみました。
公式サイトのヘルプがリニューアルされたようで、以前より探しやすくなっています。help.hatenablog.com
基本的には言語の名称そのままでいけそうです。
プログラミング言語
言語 | 表記 |
---|---|
C言語 | c |
C++ | cpp |
Java | java |
Scala | scala |
Clojure | clojure |
C# | cs |
VB | vb |
D言語 | d |
Go | go |
Ruby | ruby |
PHP | php |
Python | python |
Groovy | groovy |
CoffeeScript | coffee |
Web関連
言語 | 表記 |
---|---|
CSS | css |
HTML | html |
Javascript | javascript |
JSP | jsp |