Quantcast
Channel: ソフラボの技術ブログ
Viewing all 166 articles
Browse latest View live

PhantomJSをCentOSでビルドしたらエラーが出てインストールできない

$
0
0

既存のサイトからデータを取得して欲しいという要望があったので、PhantomJSを使ってプログラムからブラウザを操作し、スクレイピングすることを最近行っています。

Macにはすんなりインストールできて、プログラムもある程度出来上がったのでサーバーにもインストールして動作確認をしてみようと、PhantomJSをインストールしてみたけどエラーが出てインストールが完了しませんでした。

その時のエラー内容を記載しておきます。
まだきっちり調べてませんが、他の人も問題に上げているようで解決方法がはっきりしていないように感じます。

環境

CentOS6.4
PhantomJS1.9 or 2.0

PhantomJSのインストール方法

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 to build the Linux version from source.

バイナリの代わりにソースからインストールする方法も書かれているので、それに従ってインストールします。
Build | PhantomJS


まず必要なパッケージをyumでインストールします。

sudo yum -yinstall gcc gcc-c++ make flex bison gperf ruby \
  openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
  libpng-devel libjpeg-devel


その後、PhantomJSのソースをGitから取得しビルドします。

cd /usr/local/src
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh

PhantomJS2.0をビルドした結果

2.0でビルドすると次のエラーが発生し、インストールに失敗します。
最終あたりのログを抜粋しています。

Encountered 4 configuration warning(s):

 ! QtQuick module not found, QML APIs will not be built
 ! Missing GStreamer or QtMultimedia, disabling HTML5 media element support
 ! Missing QtTest module, disabling DumpRenderTree, WebKitTestRunner and tests
 ! QtWebKitQml will not be build. It is not supported with static linking

The WebKit build was disabled for the following reasons: 
    * Missing gperf from PATH
    * Missing ruby from PATH 

make: `first'に対して行うべき事はありません.Building main PhantomJS application...cd src/ && ( test -e Makefile.phantomjs || /usr/local/src/phantomjs/src/qt/qtbase/bin/qmake /usr/local/src/phantomjs/src/phantomjs.pro -o Makefile.phantomjs ) && make -f Makefile.phantomjs Project ERROR: Unknown module(s) in QT: webkitwidgetsmake: *** [sub-src-phantomjs-pro-make_first-ordered] エラー 3

PhantomJS1.9をビルドした結果

2.0では失敗するので1.9でやればうまくいくと書かれているものがあったので、やってみたけどこれも失敗します。

# /usr/local/src/phantomjsで
git checkout 1.9
./build.sh


最終あたりのログを抜粋しています。

g++ -m64-Wl,-O1 -Wl,-rpath,/usr/local/src/phantomjs/src/qt/lib -o ../bin/phantomjs phantom.o callback.o webpage.o webserver.o main.o csconverter.o utils.o networkaccessmanager.o cookiejar.o filesystem.o system.o env.o terminal.o encoding.o config.o childprocess.o repl.o gif_err.o gifalloc.o egif_lib.o gif_hash.o quantize.o gifwriter.o mongoose.o linenoise.o utf8.o qcommandline.o minidump_file_writer.o convert_UTF.o md5.o string_conversion.o crash_generation_client.o exception_handler.o log.o linux_dumper.o linux_ptrace_dumper.o minidump_writer.o file_id.o guid_creator.o memory_mapped_file.o safe_readlink.o moc_phantom.o moc_callback.o moc_webpage.o moc_webserver.o moc_networkaccessmanager.o moc_cookiejar.o moc_filesystem.o moc_system.o moc_env.o moc_config.o moc_childprocess.o moc_repl.o moc_qcommandline.o qrc_phantomjs.o qrc_ghostdriver.o qrc_WebKit.o qrc_InspectorBackendStub.o    -L/usr/local/src/phantomjs/src/qt/lib -L/usr/local/src/phantomjs/src/qt/plugins/codecs -lqcncodecs-L/usr/local/src/phantomjs/src/qt/lib -lqjpcodecs-lqkrcodecs-lqtwcodecs-lQtWebKit-lQtGui-lfreetype-lfontconfig-lQtNetwork-lQtCore-lm-ldl-lrt-lpthread 
/usr/bin/ld: cannot find-lQtWebKit
collect2: ld はステータス 1で終了しました
make[1]: *** [../bin/phantomjs]エラー 1
make[1]: ディレクトリ `/usr/local/src/phantomjs/src'から出ますmake: *** [sub-src-phantomjs-pro-make_default-ordered] エラー 2

エラーの原因

1.9、2.0とも「QtWebKit」に問題があると出ています。

「QtWebKit」はブラウザのレンダリングエンジンのライブラリなのかなと思います。
少しだけ調べると、「Qt」というライブラリがあるようです。
PhantomJSにWebKitは含まれているらしいのですが、それに問題があるのでしょうか。

もう少し調べてみようと思います。


IIJmioのデータ量が4月から増量される!キャリア契約が不要になるのも近いかも!

$
0
0

f:id:shinsuke789:20150315083159j:plain

IIJmioで2015年4月1日から無料データ量が現行より増量されます。

IIJmio:サービス仕様改定のお知らせ(IIJmio高速モバイル/Dサービス)

3GB,5GB,10GB 価格はそのままデータ増量!|IIJmio
3GB,5GB,10GB 価格はそのままデータ増量!|IIJmio

月額とデータ増加量

月額料金は据え置きで、データ量のみ増加します。

プラン容量データのみ月額音声+データ月額
ミニマムスタートプラン2GB→3GB900円1,600円
ライトスタートプラン4GB→5GB1,520円2,220円
ファミリーシェアプラン7GB→10GB2,560円3,260円

※月額は税抜き

以下のパッケージ、カウンターからの契約も対象となります。

もうキャリア契約は不要!?

最安のミニマムスタートプランでも3GBまで制限なしで使えるので、高額なキャリア契約は不要になるかもしれません。

料金プランがわかりやすいauと比較してみます。

データプランのみ比較

容量IIJmioau差額
3GB900円4,200円3,300円
5GB1,520円5,000円3,480円
10GB2,560円8,000円5,440円


auIIJmioより3〜4倍の料金が発生します。
au高すぎです。ボッタクリすぎです。

音声通話で比較

IIJmioau備考
音声通話700円2,700円auはかけ放題
データ通信(3GB)900円4,200円
LTE NETなし300円
合計1,600円7,200円差額5,600円


auは電話がかけ放題なので比較しにくいですが、5,600円(4.5倍)も差があります。
その差額でauの月額料の約8割をまかなえてしまいます。
節約分を貯めていくと約1年ぐらいで新品のスマホが買えてしまいますね。


IIJmioの特徴として、データ量を翌月まで繰り越すことができます。
3GBの場合、最大ひと月で6GBまで使うことができます。
6GBとなると足りないということはなかなかないのではないでしょうか。

贅沢な悩み、無料データ量が使い切れない

データ量が増えてうれしいのですが、そこまでデータ通信しない方には使い切れないと思います。

私は、現在ミニマムスタートプラン(現行2GB)を利用しています。
毎日、スマホで頻繁に通信をしてるわけではないので、2GB/月を使い切るのに困っています。

スマホでの通信頻度を増やすか、テザリング等を行って通信量を増やして消化するしかないですね。

おすすめのSIMカード

他にもIIJmio系列のSIMカードとして「BIG SIM」「DMM SIM」があります。
基本的にIIJmio系列のSIMカードを契約しておけば安心だと思います。

同じサービスでも、料金、データ量、オプションが異なっているので使い勝手の良いサービスを選択すればいいと思います。

DMM SIM

料金を節約したいというなら「DMM SIM」の1GBプランが660円と最安でおすすめです。
データ量も細かく区切られていてプランが豊富です。

DMM mobile データSIMプラン 1GB


今回IIJmioがサービス改定を発表したので、DMMとプランが同じものがでてきました。
ひょっとするとDMMもサービス改定を行うかもしれません。

BIG SIM

IIJmioと全く同じプランを提供しています。
違いは、オプションサービスとして公衆無線LAN「Wi2」が無料で使える特典がついています。
外出先でデータ量を気にせず通信を行いたい方におすすめです。

BIC SIM(ビックシム)-ビックカメラ.com

サービスへの要望

キャリアでは、条件を満たすと無料でデータ量を増量するサービスがあります。
MVNOもそれをマネてサービス向上を行うのではと思います。

キャリアからMVNOへMNPして使っている方には、データ量が増えた方がいいと思います。
でも、スマホはデータ通信専用、モバイルルータを持っている、複数端末でSIMカードを使っているなど、SIMカードをデータ通信のみで使用している方には、無料データ量を細かく分けて、料金を安くして欲しいと思います。

私の場合、月1.5GBもあれば十分なので、データ量を増やすのではなく料金を安くしてほしいです。

まとめ

2015年5月からSIMロック解除が義務化されるので、携帯関連に変化があり競争が激化すると思われます。

今までは携帯本体と通信会社はセットとして扱われてきましたが、それが別々に選択できるようになってきます。
まだまだSIMフリー端末は、高い印象があり、身近に購入できる存在ではないです。
それも時間とともに安くなり、家電と同じように端末のみで購入できる日がくるでしょう。

そういう環境が整ってくると、docomoausoftbankで契約する意味というのはなくなってくるはずです。
いくらMNPで乗り換えてスマホが無料でもらえるからといっても、通信費が月7,000円以上かかるのはメリットが薄いように感じます。

目先の利益よりもトータルでどれだけお得になるのかを考えて契約するのがいいと思います。

ChromeがフリーズしすぎるのでFirefoxに乗り換えたら快適になった

$
0
0

f:id:shinsuke789:20150329193048j:plain


会社のパソコンでは、ブラウザにGoogle Chromeを使用していました。

以前よりページの読み込み時にフリーズすることがあり、試行錯誤して対処方法を探していました。

環境

会社のパソコンの環境は次のとおりです。

メーカーlenovo
モデルT520
CPUCore i5 2520M
メモリ8GB
HDD500GB


スペック的には十分なのですが、Chromeではなぜかフリーズします。
意味がわかりません。

HDDに障害があるのではと思い、チェックディスクや障害確認ツール等で調べましたが全く異常なしでした。

何をやっても改善されないので、諦めてブラウザをFirefoxに乗り換えることにしました。

Firefoxに乗り換えてから快適!!

Firefoxに乗り換えると、Chromeでのフリーズのストレスから解放され、快適にブラウザイングできるようになりました。

もっと早く乗り換えていたらと思いました。

Chromeと少し使い勝手が異なる所がありますが、慣れれば特に問題なしです。

Firefoxをもっと快適にするための設定

普通に使っても快適ですが、更に快適に使用するためにキャッシュをメモリ上に置くようにします。

次のサイトで詳しく解説しているので参考にして下さい。【Firefox】CacheをRAM上に保存する方法 | ハルパスblog.halpas.com


まとめ

Chromeは、アップデートされるたびにどんどん重くなっています。

Chromeが謳っている「スピード、シンプル、セキュリティの 3 つに重点を置いて開発されたブラウザ」の「スピード」とは何なのか疑問に感じます。

私の環境では、会社のパソコンだけで動作が重く、プライベートで使用しているMacWindowsでは全く問題はありません。
違いとしては、HDD、SSDの違いです。
物理的な速度は全然違いますが、それにしてもHDDの場合重すぎます。

Chromeの遅さにイライラしている方は、これを機会にFirefoxに乗り換えてみてはいかがでしょうか。

CentOSにPhantomJSとCasperJSをインストールする

$
0
0

以前、CentOSに最新のPhantomJSをインストールしようとするとエラーが発生するという記事を書きました。PhantomJSをCentOSでビルドしたらエラーが出てインストールできない - Webサービスで起業を目指すプログラマーblogshinsuke789.hatenablog.jp


その後、さらに調べてみると古いバージョンのバイナリが配布されていることがわかり、これをインストールすると問題なく使用できたので、その時の手順を紹介します。

環境

OSCentOS 6.4
PhantomJS1.9.8
CasperJS1.1.0-beta3

手順

PhantomJS

1.PhantomJSのBitbucketよりバイナリファイルをダウンロードします。そのままwgetすると長いURLになってしまうので、別名で保存します。

# 保存先に移動するcd /usr/local/src

# バイナリをダウンロードする
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2 -O phantomjs-1.9.8-linux-x86_64.tar.bz2

# 解凍する
tar jxvf phantomjs-1.9.8-linux-x86_64.tar.bz2

# 解凍するとディレクトリができるので移動するcd phantomjs


2.「/usr/local/bin」にシンボリックリンクを作成します。

# phantomjsディレクトリで実行する(/usr/local/src/phantomjs)
ln -sf`pwd`/bin/phantomjs /usr/local/bin/phantomjs


3.インストールバージョンを確認します。

# 「/usr/local/src/phantomjs/bin」で実行する
phantomjs --version
1.9.8


パスの設定は行わず、そのままCasperJSのインストールを行います。

CasperJS

1.公式サイトのインストール手順(git)に従ってインストールを行います。

# gitより取得する
git clone git://github.com/n1k0/casperjs.git

# ディレクトリに移動するcd casperjs

# 「/usr/local/bin」にシンボリックリンクを作成する
ln -sf`pwd`/bin/casperjs /usr/local/bin/casperjs


2.インストールバージョンの確認を行います。

casperjs --version
1.1.0-beta3


この時点でPhantomJS、CasperJSともパスが通っているので、追加の設定は不要です。

サンプルプログラムの実行

1.Googleサイトのタイトルを取得する簡単なサンプルプログラム「test.js」をviエディタ等で作成します。

test.js

var casper = require('casper').create();

casper.start('http://www.google.co.jp/', function() {this.echo(this.getTitle());
});

casper.run();


2.サンプルプログラムを実行し、「Google」と出力されれば動作確認完了です。

casperjs test.js
Google

PhantomJS掲載の雑誌

WEB+DB PRESS Vol.77

WEB+DB PRESS Vol.77

  • 作者:中川勝樹,山内沙瑛,舟崎健治,吉荒祐一,今井雄太,八木橋徹平,安川健太,近藤宇智朗,奥野幹也,天野祐介,賈成カイ,伊藤直也,住川裕岳,北川貴久,菅原一志,後藤秀宣,久森達郎,登尾徳誠,渡邊恵太,中島聡,A-Listers,小俣裕一,はまちや2,川添貴生,石本光司,舘野祐一,沖田邦夫,澤村正樹,卜部昌平,吉藤博記,片山暁雄,平山毅,WEB+DB PRESS編集部
  • 出版社/メーカー:技術評論社
  • 発売日: 2013/10/24
  • メディア:大型本
  • この商品を含むブログ (3件) を見る

CasperJS掲載の雑誌

WEB+DB PRESS Vol.80

WEB+DB PRESS Vol.80

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

$
0
0

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


公式サイトのヘルプがリニューアルされたようで、以前より探しやすくなっています。[はてな記法]ソースコードを色付けして表示する(シンタックス・ハイライト) - はてなブログ ヘルプhelp.hatenablog.com


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

Web関連

言語表記
CSScss
HTMLhtml
Javascriptjavascript
JSPjsp

データーベース

言語表記
SQLsql
PLSQLplsql

その他

言語表記
XMLxml
YAMLyaml
シェルsh
Zシェルzsh


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

CentOSのバージョンを確認する方法

$
0
0

良く忘れるので記事にしておきます。

cat /etc/redhat-release
CentOS release 6.4 (Final)

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

$
0
0

フォームを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#

publicstaticvoid 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 AsType)Dim openForm As Form = Application.OpenForms(formType.Name)If openForm IsNothingThen
        DirectCast(Activator.CreateInstance(formType), Form).Show()Else
        openForm.Show()EndIfEndSub

SQL関数「COALESCE」でサブクエリを使うにはひと工夫が必要

$
0
0

SQL関数「COALESCE」でサブクエリを使うには少しだけ工夫がいるようです。

サンプルコードはOracleを想定しています。

COALESCEとは

値がNULLの場合、代替値を設定するSQL関数です。

COALESCEの通常の使い方

SELECT
    COALESCE(NULL, 0) AS value
FROM
    dual

-- 結果:0

COALESCEでサブクエリを使う

SELECT
    COALESCE(
        SELECTNULLFROM
            dual
    , 0) AS value
FROM
    dual

-- 結果:ORA-00936: 式がありません

COALESCEでひと工夫してサブクエリを使う

ひと工夫とは、サブクエリに括弧を追加することです。

SELECT
    COALESCE(
        (
            SELECTNULLFROM
                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版 プログラミングが変わる書き方/考え方


VB6からVS2013へのマイグレーションで注意すること

$
0
0

f:id:shinsuke789:20141128121500j:plain

マイグレーション時に遭遇した問題を覚えている範囲で書きました。

マイグレーション後に使えなくなる機能

REXEC

Socketクラスでrexecの仕組みを作成する必要があります。

Shell関数

TcpClinet?等を使ってTelnetを行う形などへ書き換えが必要です。

LenB関数

VB.NETでは存在しません。独自で用意する必要があります。

Oracle OO4O

ODP.NETへの書き換えが必要です。

PictureBox

ほどんとの機能が使えないので書き換える必要があります。
Microsoft公式サイトに互換表がありますが、サンプルがないので置き換えができません。

VB6とVB.NETで座標の単位が変わっています。
VB.NETでは単位がピクセルなので、単位変換等が不要でそのままの数値が使えます。

DDE

VB.NETには存在しません。
別途DDEライブラリを使用すれば使えます。NDde

固定長文字列配列

VB.NETではサポートされていませんので書き換えが必要です。

VB6にしかない定数

VB.NETに対応しているものがあればそれに置換し、それ以外の場合修正が必要です。

Printer関連

コードアップグレードではエラー・警告が一切でないですが、印刷に関しては全く動きません。
VB.NETから仕組みが全く違うので全て書き換えるが必要です。

修正が必要になってくる機能

OnErrorGoTo?のエラー処理

基本的にVB.NETでも動作しますが、エラー発生時の詳細が取得できないので、どのクラスの何行目でどういったエラーが発生しているかがわかりません。
そのためTry-Catch-Finallyに書き換える必要が出てきます。

FormのActivatedイベント

VB.NETからVB以外の他のプログラムからの切替時にもイベントが動作するようになりました。
そのため、イベント発生回数が増え画面がちらついたり、意図しない動きが発生します。
なるべく使わないように修正する必要があります。

VB6.GetItemString

リストから文字を取得する関数ですが、.NETで使うとかなりパフォーマンスが悪くなります。
ListBox?.Items(index)の形に書き換える必要があります。
あるシステムで関係する部分を書き換えると、処理時間が2分→1秒未満になりました。

VB6系の関数

VB6系の関数は、パフォーマンスが悪いものが多いので、可能な限り.NETの仕組みに書き換えるようにしましょう。

見積り

見積の段階でアップグレードマイグレーションを行い、コンパイルエラーの確認、上記の事項がどれくらいあるのか確認しておきます。

マイグレーション作業は、実際にやってみないと隠れた作業がわかりません。

見積として出す時間は、多めに見ておいた方が良いでしょう。

実際、動作確認の段階で予期せぬ対応がでてきたので、余計に時間がかかったりしました。

GMOとくとくBBで4日間限定!超鬼安でWiMAX2+が月額1980円で使える!

$
0
0

f:id:shinsuke789:20141129073014p:plain

GMOとくとくBBのWiMAXで格安で有名な「鬼安」キャンペーンに、期間限定で「超鬼安」が登場しました。

鬼安MAX2+ キャンペーン| 激安WiMAX 2+ なら【GMOとくとくBB】

WiMAX2+が最安値で契約できます。
検討されている方はぜひこの機会に!

キャンペーン詳細

11月28日(金)~12月01日(月)PM12:00の4日間に申し込むと、WiMAX2+が月額1,980円で使えます。

事務手数料3,000円
初月無料
月額1,980円
端末無料
契約期間2年

※別途消費税がかかります

### 追記 ###
2014/12/13時点で超鬼安が2,490円で申込可能になっています。

安さの理由

個人的には、まもなくキャリアアグリゲーションに対応したWiMAX2+端末が出るのではないかと思います。
そのため、端末の在庫処分を行っているように思えます。

WiMAXの下り速度が13.3Mbpsになるので今後の契約はWiMAX2+にしよう - Webサービスで起業を目指すプログラマーblog

それ以外にも、決算が近いので売上の確保のためかもしれません。

以前あったWiMAX月額399円よりはひどくないと思います。

サービス品質

月額料金が安いからといってWiMAXが繋がりにくいとか、制限があったりとかする訳ではありません。

WiMAXの電波特性の方が、サービス品質に影響しています。

電波特性上、屋内での使用(特に地下や店舗の内部)は電波が届きにくくなっているので、途切れたり使えなかったりすることが多いです。

速度は、WiMAXが40Mbps、WiMAX2+が110Mbpsとなっており、WiMAX2+の方が約3倍速いです。
実際に使った人の感想では、かなり速いと聞いています。

解約が心配な方

GMOとくとくBBの解約方法がわかりにくいと聞いていて契約するのは不安」という方には、次の記事で解約の方法を詳しく紹介していますので参考にしてください。

GMOとくとくBBのWiMAXを確実に解約する方法 - Webサービスで起業を目指すプログラマーblog

解約の仕方がわかれば、不安は解消されると思うので、最安値のWiMAX2+を心置きなく使えます。

キャンペーン申し込みに間に合わなかった…

4日間限定なので受付期間が短いです。
申し込みたかったけどすでに終了していた…という方におすすめのWiMAX2+を紹介します。


安心して使用したいならキャッシュバックもあるSo-netです。
So-net モバイル WiMAX2+


GMOとくとくBB以外で最安のWiMAX楽天ラ・クーポンです。
RaCoupon WiMAX

40,550円分のWebサービスが無料で使える!GMOペパボWiMAXが登場

$
0
0

f:id:shinsuke789:20141202004148p:plain

GMOペパポからWiMAXのサービスが登場しました。

サイトは、シンプルなデザインで非常に見やすくわかりやすくなっています。
残念ながら解約の情報は発見できませんでした。

すごい特典

今までになかった形の特典を提供しています。

ペパボが提供している次のサービスの初期費用および月額利用料12ヶ月分が無料になります。

レンタルサーバー ヘテムル|WordPress簡単インストール対応

写真共有・保存サービス 30days Album™

サービスプラン料金
ヘテムルスタンダートプラン21,950円
グーペDXプラン15,000円
30days AlbumPROプラン3,600円

合計40,550円が無料になります。

今までのWiMAXで1番還元率が高いと思われます。

料金

料金的には、GMOグループのとくとくBBとあまり変わりません。

他社に比べて良い所は事務手数料3,000円がかからないところです。

WiMAXWiMAX2+
事務手数料0円
端末+配送料0円
初月0円
月額3,609円
契約期間2年

おすすめの対象者

Web関連の開発者、デザイナー向けのWiMAXです。

レンタルサーバー、ホームページ作成サービスの利用を検討している方には大変おすすめのサービスになっています。

サービスの無料期間は12ヶ月なのでお試しや検証環境としても使っていいかもしれません。

PEPABO WiMAX(ペパボワイマックス)

b-mobileより月額1,980円でデータ通信無制限のSIMカードが登場!

$
0
0

f:id:shinsuke789:20141209124020p:plain

ぷらら、U-mobileに続いてb-mobileよりデータ通信無制限のSIMカードが登場しました。

発売日は、2014年12月12日(金)です。

b-mobile SIM 高速定額 | b-mobile

特徴

データ通信が無制限で、3日間連続使用1GBの制限はなしです。

他社よりも月額料金が低く抑えられています。

データ通信料金に800円加算することで音声通話も使用できます。
音声通話は、キャリア携帯と同じく20円/30秒です。

データ通信に無制限もいらないという方には、「ライトプラン」で3GBまで制限なしで使えますのでそちらを利用して下さい。

3社比較

ぷららU-mobileb-mobile
初期費用3,000円3,000円3,000円
月額料金(データのみ)2,760円2,480円1,980円
月額料金(音声+データ)×2,980円2,780円
通信速度3Mbps制限なし制限なし
音声最低利用期間×6カ月4カ月
音声解約手数料×6,000円8,000円

※ 価格は税抜き

現時点でb-mobileが一番安いです。

申し込み

申し込みは以下の方法で可能です。

VB.NETでXMLをデシリアライズするときのパターンまとめ

$
0
0

XMLでデシリアライズする方法を書いた記事があまりなかったので少しまとめてみました。

シリアライズができれば簡単にクラスとマッピングできて楽ちんです。

1階層の基本を覚えておけば、2階層移行ネストしていても使えます。
プロパティの型は、Stringですが適宜他の型に置換して下さい。

コードはVB.NETですが、C#に置き換えても使えます。

環境

VisualStuido2010
.NET Framework4.0

シリアライズ

コード

'XDocument使用時Dim xml AsString=""Dim xdoc As XDocument = XDocument.Parse(xml, LoadOptions.None);

Dim serializer AsNew XmlSerializer(GetType(User))Dim user As User = serializer.Deserialize(xdoc.CreateReader)'XElement使用時Dim xelementAs XElement= XElement.Parse(xml);

Dim serializer AsNew XmlSerializer(GetType(User))Dim user As User = serializer.Deserialize(xelement.CreateReader)

階層なし

<root><id></id><name></name></root>
<Serializable()>Public Class User

  <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd Class

1階層のリスト

<root><user><id></id><name></name></user></root>
-------------------------
<root><user><id></id><name></name></user><user><id></id><name></name></user></root>
<Serializable()>Public Class Root

  <XmlElement("user")>PublicProperty users As List(Of User)End Class

<Serializable()>Public Class User

  <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd Class

グルーピングのある1階層のリスト

<root><users><user><id></id><name></name></user><user><id></id><name></name></user></users></root>
<Serializable()>Public Class Root

  <XmlArray("users")><XmlArrayItem("user")>PublicProperty users As List(Of User)End Class

<Serializable()>Public Class User

  <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd Class

XMLクラス

XDocument

正式なXMLでないと定義できません。
<?xml version="1.0" encoding="utf-8"?>は必須です。

VB.NETXMLリテラルを使うとこんな感じです。

Dim xdoc As XDocument =<?xml version="1.0" encoding="utf-8"?><root><user><id></id><name></name></user></root>

XElement

<?xml version="1.0" encoding="utf-8"?>がなくても定義できます。

例えばXMLの一部のみ定義することができますが、<root>のようなまとめるタグが必須です。

VB.NETXMLリテラルを使うとこんな感じです。

Dim xdoc As XElement =<root><user><id></id><name></name></user></root>

XML属性

XmlElement

XMLのタグとマッピングします。

次の場合、<user>と対応します。

<user id=""name="" />

XmlAttribute

XMLの属性とマッピングします。

次の場合、id属性、name属性と対応します。

<user id=""name="" />

XmlArray

XMLでグルーピングを行うタグとマッピングします。

次の場合、<users>と対応します。

<users><user></user><user></user></users>

XmlArrayItem

XMLでグルーピング配下にあるタグとマッピングします。
XmlArrayと併用して使います。

次の場合、<user>と対応します。

<users><user></user><user></user></users>

まとめ

XmlSerializeクラスを使うとXMLからオブジェクト、オブジェクトからXMLに簡単に変換できます。
XMLと対応するクラスの作成が面倒くさいですが、一度作ってしまうと使い回しが効くので便利です。


XMLと対応するクラスを作るとき、保守しやすいようにプロパティ名は、XMLのタグ・属性と同じ名称にするのが良いです。
VB.NET予約語を使う場合、「[date]」というように角括弧を使います。


配列やリストなのでプロパティの属性に「XmlArray」を使うというわけではないことがわかりました。
他サイトでXmlSerializerクラスは、ネストしたものを扱えないとありましたが、普通に深い階層でも自動で値を設定してくれます。


今回、SOAPAPIとのやりとりとのために使用しました。
別でSoapFormatterというクラスがあり、SOAPと相性がよく自動でなんでもやってくれると思ったら何もしてくれませんでした。

逆引き大全

Visual C# 2013逆引き大全 555の極意

Visual C# 2013逆引き大全 555の極意

私が2014年にリリースしたWebサービス

$
0
0

私が2014年にリリースしたWebサービスを紹介します。

全て開発したわけではなく、少し関わったサービスも含まれます。

格安データ通信SIM比較

今話題の格安データSIMを検索、比較できるサービスです。

格安データ通信SIM比較 - docomoのMVNOの格安データ通信SIMの検索・比較ができるWebサービスです。

2014年の1月にリリースし、デザインの変更を1回だけ行いました。
毎月初めに各サイトを巡回してデータを最新のものに更新しています。

まとまった開発の時間が確保できていないので、改善スピードがかなり遅くなっています。
現在データSIMだけの対応ですが、音声通話SIMも追加したいと思っています。

Javaで動作しています。
自前のサービスで唯一収入が発生しているサービスになります。

オデ速!

モデル募集などのオーディション情報を提供するサービスです。

オデ速!オーディション応募速報!

オーディション開催の方が、オーディション情報を登録し、オーディションに応募したい方が、直接開催元にアポを取る仕組みです。

WordPressで動作しています。
WordPressプラグインを少しカスタマイズするのに関わりました。

ネトビジ!

インターネットでの「貯める」「稼ぐ」をキーワードに役立つ記事を提供するサービスです。

賢くお金を貯める方法 | ネトビジ!

通常のブログと同じで記事を投稿することでコンテンツが溜まっていきます。

WordPressで動作しています。
ときどき記事の投稿を行う程度で関わっています。

サービスをリリースしての感想

子持ちで1人で1からサービスを作るのは、1つが限界と感じました。
やろうと思えば2サービスはできそうですが、運用に手が回らなくなりそうです。


WordPressだと簡単なものがすぐに作れるので大変良いです。
しかし、機能の追加を行うとカスタマイズが発生し、アップデートでの修正リスクが高くなりそうです。
ブログのパッケージでシステムを作るというのは好きではないので、Java等を使って従来通り作りたくなります。


まだまだ作りたいサービスはあるのですが、プライベートでの時間だけでは足りなさすぎて辛いです。
サラリーマンでいる限り、自分の作りたいサービスを全て完成させるのは厳しそうです。
ですが、限りある時間を少しでも確保し、コツコツ開発していこうと思います。


開発したら終わりではなく、運用のノウハウも蓄積していきたいと思います。

GoogleスプレッドシートでGET/POST通信を行いコンテンツを取得する

$
0
0

f:id:shinsuke789:20150103164126p:plain

必要なもの

  • ネット環境
  • Google SpreadSheet

スクリプトの作成

1.Googleスプレッドシートを開き、ファイルメニュー「ツール」→「スクリプトエディタ」と選択します

f:id:shinsuke789:20150103163133p:plain:w230


2.スクリプトエディタのファイルメニュー「ファイル」→「新規作成」→「スクリプトファイル」を選択します

f:id:shinsuke789:20150103163139p:plain:w400

スクリプトファイル名は拡張子を除いて入力すると、自動的に「.gs」ファイルとして作成されます。

GET

// アクセス先var url = "http://www.google.co.jp/"// GETリクエストvar response = UrlFetchApp.fetch(url);
// HTMLの結果を取得(引数のcharsetは設定したほうが良い)var content = response.getContentText("UTF-8");

POST

// POSTデータvar payload = {"user_id" : "userid",
  "password" : "pass",
  "submit" : "ログイン"}// POSTオプションvar options = {"method" : "POST",
  "payload" : payload
}// アクセス先var url = "http://hoge.jp/"// POSTリクエストvar response = UrlFetchApp.fetch(url, options);
// HTML結果を取得(引数のcharsetは設定したほうが良い)var content = response.getContentText("UTF-8");

Cookie

// Request Cookie// クッキー(複数ある場合、「;」で区切るvar cookie = "hoge=1234; foo=abcd";
// headersにCookieを設定var headers = {"Cookie" : cookie;
}// リクエストオプションにheadersを設定var options = {"headers" : headers
}// リクエストvar response = UrlFetchApp.fetch(url, options);


// Response Cookie// レスポンスヘッダーからCookieを取得var cookies = response.getAllHeaders()["Set-Cookie"];
for (var i = 0; i < cookies.length; i++) {
  Logger.log(cookies[i]);
}

コンテンツからの値の取得

取得したコンテンツから値を取得したい場合、Javascriptの「String.match(regex)」を使います。

var content = response.getContentText("UTF-8");
var id = content.match(/name="hoge_id" value="(.+)"/)[1];  

まとめ

ドキュメントが英語なので調べるのが結構大変でした。
英語は読めなくてもコードさえあればわかるので、今回はStackOverflowに大変お世話になりました。


簡単なスクリプトを書くだけでHTTP通信ができます。
ネット環境とGoogleSpreadSheetされあれば、開発ができてしまうのは魅力的です。


GoogleAppsScriptは、サーバーサイド言語ですのでサーバー側で実行されます。
fetch毎にサーバーのIPアドレスが変わる仕様のようで、セッションを維持する必要のあるサイトへ接続し、一連の処理を行おうとしても、IPアドレスが変わっているため同一セッションと扱われないので注意してください。


Javascriptに似た言語」なのでJavascriptで使えるものが全て使えるわけではないです。
今回は、joinが使えないことがわかりました。


やはりスクリプト言語ということで、多機能ではないようです。
本格的な処理をさせたい場合、Javaなどの通常の言語を使用することをおすすめします。

貴重なGoogleAppsScript書籍

誰でもできる!  GoogleApps導入ガイド

誰でもできる! GoogleApps導入ガイド

Google クラウドスクリプティング Google Apps ScriptによるGoogleパワーアップ活用ガイド

Google クラウドスクリプティング Google Apps ScriptによるGoogleパワーアップ活用ガイド

Google Appsでつくる仕事便利ツール ?Google Apps Scriptで実践構築?

Google Appsでつくる仕事便利ツール ?Google Apps Scriptで実践構築?


VB.NETでXMLリテラルを使ったXMLの定義方法

$
0
0

f:id:shinsuke789:20141128121500j:plain

XMLリテラル

VB.NETでは、XML文字列をXMLオブジェクトとして簡単に定義できます。

Dim element As XElement =<root><users><user id=""/></users></root>

変数を使う

変数を使って値を設定したい場合、<%= 変数名 %>を使用します。

Dim id AsInteger=1Dim element As XElement =<root><users><user id=<%= id %>/></users></root>

要素を変数で定義する

要素名を変数で定義し、</>を設定します。

Dim elementName AsString="users"Dim id AsInteger=1Dim element As XElement =<root><<%= elementName %>><user id=<%= id %>/></></root>

属性を変数で定義する

属性名と属性値を別々の変数で定義し、「=」を挟んでXMLを定義します。

Dim attr AsString="id"Dim id AsInteger=1Dim element As XElement =<root><users><user <%= attr %>=<%= id %>/></users></root>

配列やリストを展開する

配列やリストを展開してXMLを追加したい場合、LINQFrom / Selectを使用します。

Dim list AsNew List(Of Integer)(NewInteger() {1,2,3})Dim element As XElement =<root><users><%= From id In list
          Select<user id=<%= id %>/>
      %></users></root>

条件によって要素を追加する

条件によって要素を追加したい場合、ワンライナーIfを使用し、条件に一致しない場合、Nothingを設定すると追加されません。

Ifは、VS2008から使用できます。それ以前の場合、IIF関数を使用します。

Dim id AsInteger=1Dim flg AsBoolean=TrueDim element As XElement =<root><users><%=If(flg,<user id=<%= id %>,Nothing) %></users></root>

逆引き大全

WiMAX(無印)がキャリアアグリゲーション対応の影響を受けているようで遅い

$
0
0

f:id:shinsuke789:20150112171455p:plain

WiMAX2+が2015年春からキャリアアグリゲーションで下り220Mbpsに高速化されます。

春からなのでWiMAX(無印)を使っている私にはまだ影響はないなと思っていました。
が、最近、WiMAXの通信速度がダイヤルアップ並に遅く、かなり切れやすい現象にあっています。

WiMAX(無印)を使っている友達からも同じ現象に合っていると聞きました。WiMAXの下り速度が13.3Mbpsになるので今後の契約はWiMAX2+にしよう - Webサービスで起業を目指すプログラマーblog

遅さの理由

2015年春からWiMAX2+がキャリアアグリゲーション対応ということで、順次設備を切り替えているのではないかと推測します。
そのため、WiMAXの帯域が移行予定の最大13.3Mbpsに制限がかかっているように思います。


基地局の数に対して利用者が多いエリアで特に速度が低下しているように思います。
主に都市部がそのような影響を受けやすそうです。

逆に基地局の数に対して利用者が少ない都市部から少し離れたエリアでは、それほど速度低下の影響を受けてないように感じます。

速度の遅さの具合

かなりイライラします。
まさにダイヤルアップ並みに画面の描画がチラチラしてかなり時間がかかります。

ひどい時は下り500k、上り30kぐらいです。

時間帯的遅いのは、夜の利用者が多いときです。
朝方は利用者が少ないのか普通に使えます。

すでに利用している人の対策

キャリアアグリゲーションが開始されるとさらに遅くなりそうです。

現在の契約の更新が間近の方は、しばらく辛抱してWiMAX2+や他社に乗り換えましょう。
更新がまだ先だという方は、解約違約金が発生しないWiMAX2+乗り換えキャンペーンを利用した方がいいかもしれません。

先に述べたように、都市部から離れているエリアで利用者が少ないエリアは、そんなにストレスを感じないかもしれません。
都市部で利用者が多いエリアの方は、乗り換えないとほんと毎日イライラすると思います。

乗り換え先

引き続きWiMAXを契約するなら、次の2社が安いです。

【GMOとくとくBB】WiMAX2+キャッシュバックキャンペーン
HWD15を契約するなら鬼安よりお得です。

RaCoupon WiMAX

WiMAX2+で220Mbps対応の端末が発表されました

$
0
0

f:id:shinsuke789:20150115173531p:plain

2015年1月15日、遂に下り220Mbpsのキャリアアグリゲーション対応のWiMAX2+端末が発表されました。
WiMAX 2+ 新サービス・新デバイス発表会 1/15 11:00よりUstream中継実施!

発表会の様子はGIGAZINEで書かれています。
2倍の220Mbpsで月間通信量制限なし「ギガ放題」を2015年2月からUQ WiMAXが開始、その実力を引き出す新端末は?

新端末

220Mbps対応の端末は2種類発表されました。

Speed Wi-Fi NEXT W01 クレードルセット | UQ WiMAX
Speed Wi-Fi NEXT WX01 | UQ WiMAX

製品名W01WX01
製品元HUAWEINEC
幅(W)120mm109mm
高さ(H)59mm66mm
厚さ(D)10mm9mm
重さ113g97g
Wi-FIac/n/a/g/bac/n/a/g/b
連続通信時間(220M)未発表6.5H
連続通信時間(110M)8.0H8.5H
連続通信時間(WiMAX)非対応11.0H
休止状態730H600H(リモート起動なし)
待機状態(クイック)36H35H
バッテリー容量2,300mAh2,500mAh
交換可能
WiMAX2+(220M)FW更新で対応対応
WiMAX2+(110M)対応対応
WiMAX非対応対応
au 4G LTE対応非対応
発売日2015年1月30日2015年3月上旬
主な特徴LTE
タッチパネル
4×4MIMO
Bluetoothテザリング


W01は発売時点で220Mbpsに対応しておらず、将来的にファームウェアのアップデートで対応するとのことです。
個人的には、NECのWX01が魅力的に感じます。4×4MIMOでとにかく速いらしいです。

新料金プラン

WiMAXは「制限がない」が売りです。
今回の新料金プランで月7GB制限を気にしなくて良いプラン「ギガ放題」が登場しました。

プラン名ツープラスツープラスギガ放題
月額3,696円4,380円
月額(割引終了後)4,195円4,880円
制限7GB/月なし

月の制限はないですが、3日3GBの制限があり、制限にかかると通信速度が700Kbpsとなるようです。

光ファイバーに比べると安いし導入が簡単なのでギガ放題プランはおすすめかもしれません。

ただ月額4,000円となると高く感じます。
それも考慮しているのか、月単位でツープラス、ツープラスギガ放題のプランの切り替えが可能になっています。

「今月はツープラスギガ放題プランにしたけど、使用量を見ると7GB未満だったので、翌月はツープラスプランにしよう」とことが可能です。

ギガ放題プラン以外で制限なしにする方法

ギガ放題プランは月額4,380円と高く感じますよね。
実は、ギガ放題より安く月7GBの制限を受けない方法があります。

それは、2015年2月19日までにWiMAX2+を契約するということです。

現在WiMAX2+を契約されている方は、契約期間中は月7GBの制限がなく無制限に使用できます。
この無制限期間が2月19日に終了するので、それまでに契約すればいいのです。

固定回線として使用されている方は、この日までに申し込むことをおすすめします。

現時点で新端末に対応したお得なプロバイダー

一番安い「GMOとくとくBB」

キャッシュバック23,790円を考慮すると業界で最安です。
GMOとくとくBB WiMAX2+ 月額3,609円

別で鬼安というキャンペーンをやっていて、安さをアピールしていますが、端末によっては上記の申込の方が安い時があります。

解約方法がよく分からないので評判が悪いというのがありますが、次の記事にまとめているので大丈夫だと思います。
GMOとくとくBBのWiMAXを確実に解約する方法 - Webサービスで起業を目指すプログラマーblog

安心の「So-net

GMOとくとくBBでは解約時が心配という方は、安心のSo-netをおすすめします。
So-net モバイル WiMAX 2+

安心感がありつつも、キャッシュバック15,000円があります。
また利用料やショッピングでソネットポイントが貯まり、ソニーストアでソニー製品を買うことができます。

シンプルで安い「ラクーポン」

残念ながらラ・クーポンWiMAXは新端末に対応していません。
そのうち新端末に対応したものが出てくると思います。

比較

プロバイダーGMOSo-net
月額3,609円3,695円
キャッシュバック23,790円15,000円
実質月額(25ヶ月)2,680円3,080円
新端末W01W01

まとめ

WiMAXの速度が徐々に速くなっていき、光ファイバーと同等になるようです。
その頃になると光ファイバーもまた速くなっているようには思います。


これからWiMAXを契約する方、乗り換えを検討されている方は、2月19日までに契約していた方が良いようです。
私もWiMAXが更新月が5月ですが、特典を貰うために解約せず、新規でWiMAX2+を契約し3ヶ月ほど2重運用しようと思っています。


WiMAXで更新月までまだまだ日数がある方は、タダ替え大作戦で乗り換えた方がいいかもしれません。
キャッシュバックはないですが、現在契約しているものの違約金が無料になります。
プロバイダーによっては新端末に対応していない場合があるのでよく説明を読むようにして下さい。

Gradleでよく使うコマンド

$
0
0

f:id:shinsuke789:20150120152843g:plain

# バージョン確認
gradle -v# Javaライブラリ用プロジェクト作成
gradle init --type java-library
 
# Eclipse用構成作成
gradle eclipse
 
# ビルド
gradle build

# クリーン
gradle clean

# クリーン&ビルド
gradle clean build

# 依存関係の出力
gradle dependencies > dependencies.txt

Gradle本

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradleでプロキシ設定を行う

$
0
0

f:id:shinsuke789:20150120152843g:plain

プロキシ設定

環境に応じて「gradle.properties」を次の場所に置きます。

Windows
C:\Users\ユーザー名\.gradle

Mac
/Users/ユーザー名/.gradle

gradle.properties

# http
systemProp.http.proxyHost=プロキシURL
systemProp.http.proxyPort=プロキシポート
systemProp.http.proxyUser=ユーザーID
systemProp.http.proxyPassword=パスワード
systemProp.http.nonProxyHosts=localhost

# https
systemProp.https.proxyHost=プロキシURL
systemProp.https.proxyPort=プロキシポート
systemProp.https.proxyUser=ユーザーID
systemProp.https.proxyPassword=パスワード
systemProp.https.nonProxyHosts=localhost

Gradle本

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Viewing all 166 articles
Browse latest View live