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 |
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ともパスが通っているので、追加の設定は不要です。
PhantomJS掲載の雑誌
- 作者: 中川勝樹,山内沙瑛,舟崎健治,吉荒祐一,今井雄太,八木橋徹平,安川健太,近藤宇智朗,奥野幹也,天野祐介,賈成カイ,伊藤直也,住川裕岳,北川貴久,菅原一志,後藤秀宣,久森達郎,登尾徳誠,渡邊恵太,中島聡,A-Listers,小俣裕一,はまちや2,川添貴生,石本光司,舘野祐一,沖田邦夫,澤村正樹,卜部昌平,吉藤博記,片山暁雄,平山毅,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/10/24
- メディア: 大型本
- この商品を含むブログ (3件) を見る
CasperJS掲載の雑誌
- 作者: 鶴長鎮一,宮下剛輔,縣俊貴,中村知成,西尾泰和,新井俊一,南川毅文,伊藤直也,石垣憲一,浅木朗,渡邊恵太,中島聡,はまちや2,竹原,川添貴生,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/24
- メディア: 大型本
- この商品を含むブログ (6件) を見る
ChromeがフリーズしすぎるのでFirefoxに乗り換えたら快適になった
会社のパソコンでは、ブラウザにGoogle Chromeを使用していました。
以前よりページの読み込み時にフリーズすることがあり、試行錯誤して対処方法を探していました。
私が試した方法
以前の記事に3通り試した方法を書きました。
環境
会社のパソコンの環境は次のとおりです。
メーカー | lenovo |
---|---|
モデル | T520 |
CPU | Core i5 2520M |
メモリ | 8GB |
HDD | 500GB |
スペック的には十分なのですが、Chromeではなぜかフリーズします。
意味がわかりません。
HDDに障害があるのではと思い、チェックディスクや障害確認ツール等で調べましたが全く異常なしでした。
何をやっても改善されないので、諦めてブラウザをFirefoxに乗り換えることにしました。
Firefoxに乗り換えてから快適!!
Firefoxに乗り換えると、Chromeでのフリーズのストレスから解放され、快適にブラウザイングできるようになりました。
もっと早く乗り換えていたらと思いました。
Chromeと少し使い勝手が異なる所がありますが、慣れれば特に問題なしです。
Firefoxをもっと快適にするための設定
普通に使っても快適ですが、更に快適に使用するためにキャッシュをメモリ上に置くようにします。
次のサイトで詳しく解説しているので参考にして下さい。blog.halpas.com
IIJmioのデータ量が4月から増量される!キャリア契約が不要になるのも近いかも!
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円 |
音声通話で比較
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円と最安でおすすめです。
データ量も細かく区切られていてプランが豊富です。
今回IIJmioがサービス改定を発表したので、DMMとプランが同じものがでてきました。
ひょっとするとDMMもサービス改定を行うかもしれません。
サービスへの要望
キャリアでは、条件を満たすと無料でデータ量を増量するサービスがあります。
MVNOもそれをマネてサービス向上を行うのではと思います。
キャリアからMVNOへMNPして使っている方には、データ量が増えた方がいいと思います。
でも、スマホはデータ通信専用、モバイルルータを持っている、複数端末でSIMカードを使っているなど、SIMカードをデータ通信のみで使用している方には、無料データ量を細かく分けて、料金を安くして欲しいと思います。
私の場合、月1.5GBもあれば十分なので、データ量を増やすのではなく料金を安くしてほしいです。
まとめ
2015年5月からSIMロック解除が義務化されるので、携帯関連に変化があり競争が激化すると思われます。
今までは携帯本体と通信会社はセットとして扱われてきましたが、それが別々に選択できるようになってきます。
まだまだSIMフリー端末は、高い印象があり、身近に購入できる存在ではないです。
それも時間とともに安くなり、家電と同じように端末のみで購入できる日がくるでしょう。
そういう環境が整ってくると、docomo、au、softbankで契約する意味というのはなくなってくるはずです。
いくらMNPで乗り換えてスマホが無料でもらえるからといっても、通信費が月7,000円以上かかるのはメリットが薄いように感じます。
目先の利益よりもトータルでどれだけお得になるのかを考えて契約するのがいいと思います。
PhantomJSをCentOSでビルドしたらエラーが出てインストールできない
既存のサイトからデータを取得して欲しいという要望があったので、PhantomJSを使ってプログラムからブラウザを操作し、スクレイピングすることを最近行っています。
Macにはすんなりインストールできて、プログラムもある程度出来上がったのでサーバーにもインストールして動作確認をしてみようと、PhantomJSをインストールしてみたけどエラーが出てインストールが完了しませんでした。
その時のエラー内容を記載しておきます。
まだきっちり調べてませんが、他の人も問題に上げているようで解決方法がはっきりしていないように感じます。
環境
CentOS | 6.4 |
---|---|
PhantomJS | 1.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 -y install 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: webkitwidgets make: *** [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