ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

PhantomJS2.0のバイナリをLinuxで使う

f:id:shinsuke789:20150804174808p:plain

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.


しかし、問題があるようでビルドしても時間がかかって最終的にエラーでバイナリが生成されません。

shinsuke789.hatenablog.jp


現在では、gitからチェックアウトするとビルドできるようになっていますが、「2.0.1-development」ということで正式版ではありません。

試しにLinuxで動かすと動くけどもっさりしてて、CPU使用率が高めです。

PhantomJS2.0のバイナリをダウンロードする

次のサイトにパッチを当てたビルド方法が書かれていて、最後に2.0のバイナリがダウンロードできるようになっています。

blog.rampinteractive.co.uk

ビルドしても時間がかかるだけなので、素直にバイナリをダウンロードしましょう。

Chromeユーザーも必見!ブラウザでファイルをダウンロードするなら10倍速くなるFireFoxアドオンの「DownThemAll!」を使おう!

f:id:shinsuke789:20150804170046p:plain


--- 注意事項 ---
FIreFox57以降では、使用できず、代替のダウンローダプラグインが全くありません。
そのため、FireFox56以下を使用するようにして下さい。
自動更新されてしまった場合、「56をダウンロード→ネット切断→設定で自動更新しない→ネット接続」の手順で56に戻しましょう。


FireFoxのアドオンに「DownThemAll!」というものがあり、これを使ってファイルのダウンロードを行うと通常の10倍でダウンロードが可能です。

https://addons.mozilla.org/ja/firefox/addon/downthemall/addons.mozilla.org


ISOファイルなどのGB単位でダウロードに時間が掛かるファイルに使うとかなり速くダウンロードが可能になります。

MSDNでISOファイルをダウンロードするときに利用すると、途中で切断されることもなくダウンロードできます。


高速にダウンロード出来る機能の他に、ダウンロードを一時停止して途中からダウンロードを行うレジューム機能にも対応しています。


Chrome使いの方も、巨大ファイルをダウンロードする時はFireFoxを使うことをおすすめします。

設定画面

一般

f:id:shinsuke789:20150804164013p:plain

操作

f:id:shinsuke789:20150804164017p:plain

ネットワーク

ダウンロードの上限数、サーバーごとの上限数を最大にしておきます。

f:id:shinsuke789:20150804164024p:plain

プライバシー

f:id:shinsuke789:20150804164030p:plain

フィルター

f:id:shinsuke789:20150804164034p:plain

詳細

ダウンロードの最大分割数を最大の10にして常時高速化するようにしておきます。
f:id:shinsuke789:20150804164039p:plain

f:id:shinsuke789:20150804164043p:plain

f:id:shinsuke789:20150804164048p:plain

ダウンロード時

保存

DownThemAll!を選択すると高速にダウンロードが可能です。

f:id:shinsuke789:20150804164053p:plain

ダウンロード追加

チェックサムを設定すると、正常にダウンロードできたか確認してくれます。

f:id:shinsuke789:20150804164058p:plain

進捗

f:id:shinsuke789:20150804164105p:plain

ダウンロード情報

緑のグラフで分割してダウンロードしているのが分かります。

f:id:shinsuke789:20150804164110p:plain

VMwareFusionのNAT接続でゲストOSのIPアドレスを固定する

f:id:shinsuke789:20150629054540p:plain:w300

環境

VMwareFusion 6.0.6、8.0.2
ホストOS MacOS 10.9
ゲストOS CentOS 6.4

手順

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は固定用、128254はDHCP)
}

4.設定を有効にするためにホストOSを再起動します。

5.ゲストOSで設定したIPアドレスになっているか確認します。


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)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

SQLパズル 第2版 プログラミングが変わる書き方/考え方

SQLパズル 第2版 プログラミングが変わる書き方/考え方

C#/VBでフォームを1つしか表示させないようにする

フォームを1つしか表示させないようにする方法を調べていると、次のサイトに説明がありました。

フォームが一つしか表示されないようにする: .NET Tips: C#, VB.NET

フォームを静的プロパティ、シングルトンを使って保持する

静的プロパティ、シングルトンを使うと実現はできますが、フォーム毎にそのコードを書く必要があり、メンテナンス性が低下します。

シングルトンを使った場合、フォームを閉じる処理でフォームを閉じるのではなく、フォームを隠す必要があるようです。

閉じる処理が、本来とは別の処理になってしまうので良くないですね。

VBの「My.Forms」を使う

VBに特化しているのでC#で使うことができません。
VBだけで使うのならありですが、汎用的に使えるに越したことはないので、この方法は使えません。

新しい方法「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

はてなブログのソースコード色付けで代表的な表記のまとめ

はてなブログで記事を書いている時、時々ソースコードの色付けで何を指定するのかわからなくなります。
忘れないために代表的な言語をまとめてみました。


公式サイトのヘルプがリニューアルされたようで、以前より探しやすくなっています。help.hatenablog.com


基本的には言語の名称そのままでいけそうです。

Web関連

言語 表記
CSS css
HTML html
Javascript javascript
JSP jsp

データーベース

言語 表記
SQL sql
PLSQL plsql

その他

言語 表記
XML xml
YAML yaml
シェル sh
Zシェル zsh


公式サイト見る限り何に使うのか不明なものがたくさんあります。
使える表記だけでなく、この表記はこの言語と対応表が欲しいところですね。