ソフラボの技術ブログ

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

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


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

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

以前、CentOSに最新のPhantomJSをインストールしようとするとエラーが発生するという記事を書きました。shinsuke789.hatenablog.jp


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

環境

OS CentOS 6.4
PhantomJS 1.9.8
CasperJS 1.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

# 解凍後のディレクトリ名を変更する
mv phantomjs-1.9.8-linux-x86_64 phantomjs

# 移動する
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がなければインストールする
yum install git

# gitより取得する(作業ディレクトリ:/usr/local/src)
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

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

f:id:shinsuke789:20150329193048j:plain


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

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

私が試した方法

以前の記事に3通り試した方法を書きました。


shinsuke789.hatenablog.jp

shinsuke789.hatenablog.jp

shinsuke789.hatenablog.jp

環境

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

メーカー lenovo
モデル T520
CPU Core i5 2520M
メモリ 8GB
HDD 500GB


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

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

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

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

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

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

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

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

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

次のサイトで詳しく解説しているので参考にして下さい。blog.halpas.com


まとめ

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

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

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

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

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

f:id:shinsuke789:20150315083159j:plain

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

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


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

月額とデータ増加量

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

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

※月額は税抜き

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

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

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

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

データプランのみ比較

容量 IIJmio au 差額
3GB 900円 4,200円 3,300円
5GB 1,520円 5,000円 3,480円
10GB 2,560円 8,000円 5,440円


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

音声通話で比較

IIJmio au 備考
音声通話 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円以上かかるのはメリットが薄いように感じます。

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