2014年10月8日水曜日

タブレットでもdraganddropを実現可能とするライブラリ jQuery UI Touch Punch

百聞は一見に如かず。ということで、以下サイトのデモサイトをご覧ください。

http://touchpunch.furf.com/

タブレット (xperia tablet z)でも、問題なく操作できました。

jqueryuiでは、タブレット対応していないので(2014年10月現在)、
タブレットでドラッグアンドドロップを対応するための選択肢の一つかと思います。


タブレット、スマートフォン対応のライブラリ系は他にもあるとは思いますので
随時更新していきたいと思います。

2014年10月7日火曜日

同時接続・同時操作が簡単なターミナルソフト「rlogin」

以前の記事でTeraTermのブロードキャスト(同時操作)について書いてますが、
私の環境での同時接続数が50を超え、画面いっぱいに表示しても
表示しきれなくなってきたので、別のソフトを探していたところ、
複数同時接続が前提のターミナルソフトがありました。

その名は「rlogin」です。

http://nanno.dip.jp/softlib/man/rlogin/

TeraTermからの乗換を考慮しつつ使ってみたところのまとめです。


【主だった特徴】

・タブ形式の切替で、複数の接続先を1画面で確認できます。


 Tab系の画面でよくある「ALT + TAB」キーにより、タブを切り替えられますので
 ブロードキャストの結果を順次確認するときなど相当便利です。



・接続先も、タブ(グループ化)管理により、別々でOK


 TeraTermでは、入力 Or プルダウンからの選択だったので、
 一覧で表示、選択できるは大きなメリットです。


・ブロードキャスト(同報:同時操作)もOK
 これは当然できるものとして選定しているので、問題なくOK。
 TeraTermとの違いをあげるとするならば、
 TeraTermではブロードキャスト先を選択し、ブロードキャスト用画面で
 入力した結果を各画面へ一斉配信しますが、rloginでは
 親となるウインドウ(接続先)を指定すると、現在接続されている
 すべてのウインドウへ同報されます。
 コンソールを操作しつつ、結果、別の接続先にも反映されている感じになるので
 直観性は上がっているような気がします。
 ブロードキャストしつつ、コマンドを入力後、ALT+TABで実行結果を確認。なんてのが
 最近の操作ルーチンになってます。


・設定系は一通りありそう
 パッと見、主だった設定はありそうです。今のところ、
 設定項目がなくて苦労したケースはありません。
 設定はテキストファイルとしてまとめてエクスポートできるので、
 設定名さえ把握できれば、テキスト上で一括置換も容易です。
 ※端末Aで保存した設定を端末Bで読み込ませると、パスワードの
 再入力を求められたので、機密性的にもしっかりしています。
  ⇒その場合、端末Bでパスワード保存して暗号化されたテキスト文字を置換で、万事解決


TeraTermはシンプルで使いやすいので手放すつもりもないのですが
同報が必要な操作はrloginを使っていこうと思ってます。


2014年9月17日水曜日

Mybatisを使う中でのTips (軽め

使っているライブラリのバージョンは、3.0.4です。
マニュアルをきちんと読めばわかる内容なので、自分用メモです。

IF文について


else はありません。
比較演算子は、 != か、 == です
ELSEを使いたければ、chooseを。

例) Order Byを可変にする例

OEDER BY
<if test="sortId != null and sortId!=''">
  ${sortId} ${sortType}
</if>
<if test="sortId == null or sortId == ''">
  COLA ASC
  ,COLB DESC
</if>

別途定義しているSQLを利用する方法


定義:

<sql id = "commonQuery">
SELECT 1
</sql>

呼び出し

<include refid="commonQuery"/>


2014年9月16日火曜日

MySQLでサブクエリでUPDATE

以外と便利です。ただ、方言なので、ANSI的なSQLとは違います。


UPDATE `tableA` r,
    (SELECT id,c.hoge
    FROM `tableA` r
       JOIN tableB e ON r.aa = e.aa
       JOIN tableC c ON c.bb = e.bb) x
SET
r.hoge = x.hoge
WHERE
r.id = x.id;

2014年9月12日金曜日

サーバーOSのシャットダウン時にtomcatが正常にシャットダウンしない件

仮想環境で新たにアプリが動作するサーバー環境を作成したところ、
OSのシャットダウン時にTomcatが正しく終了せず、OSが終了できなくなってしまいました。

色々と調べたところ、解消したので経緯を残しておきます。


事象

サーバOS上で、shutdown -h nowを行うと、tomcatの終了スクリプトで待ち状態。そのうち
UnknownHostExceptionを出して、うんともすんともいかなくなる。


java.net.UnknownHostException: hostname: hostname
    at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
    at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:490)
    at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:288)
    at org.apache.jk.server.JkMain.pause(JkMain.java:726)
    at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
    at org.apache.catalina.connector.Connector.pause(Connector.java:1037)
    at org.apache.catalina.core.StandardService.stop(StandardService.java:578)
    at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
    at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)


結果

ホスト名が原因ではなく、tomcatのサービスが正しくインストールされていなかったため。

過程

・ホスト名の解決
 /etc/hostsに、hostnameを書いていなかったので、書きました。

しかし、ダメ。

・シャットダウンの詳細確認

きちんと動いているサーバーもあるので、シャットダウンの時の内容を比較。
すると、tomcatの終了順が違う事がわかりました。

終了順をさらに調べていくと、以下な感じ
cd /etc/rc.d

【OKケース】

[root@host rc.d]# ls -l -R | grep tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
【NGケース】

[root@host rc.d]# ls -l -R | grep tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
終了スクリプトがない・・・


というわけで、


chkconfig --del tomcat
chkconfig --add tomcat
chkconfig tomcat on


を実施し、きちんと生成されて、正しくシャットダウンできる事が確認できました。

インストールに失敗したのかもしれません・・・


2014年9月9日火曜日

CentOS6.5 + mod_mono で起動時にエラー「Failed to connect to mod-mono-server after several attempts to spawn the process.」

いつもの通りCentOS環境でmod_monoをソースからインストールして起動したところ
「Failed to connect to mod-mono-server after several attempts to spawn the process.」
のエラーが出てしまい、対処をしたので手順をメモしておきます。

概略

  1. ソースからmod_monoをインストール
  2. /testエイリアスを作成し、mod_monoのサンプルサイトへアクセス
  3. 503エラーとなったので、/var/log/httpd/error_log を参照したところ、上記のエラー

原因

SELINUXが標準でインストールされ、稼働していたためでした。

SELINUUXの動作状況確認


#getenforce

enforcing : 有効 , disabled : 無効




SELINUXの無効化設定


/etc/selinux/config
SELINUX=disabled


サーバー再起動で、完了です。


2014年8月18日月曜日

Kendo UI で、Cultureを変更する

モックアップを作りたいだけなので、簡単にメモ。

<script src="../../../kendoui/js/cultures/kendo.culture.ja.min.js"></script>

<script>
kendo.culture("ja");
</script>

ある程度使えるかどうかの評価をすることになったらちゃんと記事にしていきます。

2014年8月14日木曜日

ビルドされているモジュールのプラットフォームを確認する方法(corFlags.exe)

CorFlags.exe というFrameworkに付属しているツールを利用すると
モジュールがビルドされたプラットフォームを確認する事が出来ます。

私の場合、64bit環境で動作有、原因を調べるのに使いました。

http://msdn.microsoft.com/ja-jp/library/ms164699(v=vs.110).aspx


【使用例】
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>CorFlags.exe aspnet_merge.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.30729.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 11
ILONLY    : 1
32BIT     : 1
Signed    : 1

正しい使い方はあれこれありそうですが、私の場合には32bitでビルドされたことが
わかって、それでOKだったので、話題としては終わりでした。


プログラム入れ替えにより ASP.net WebサービスでPermissionsエラーが発生

IIS ASP.net環境で動作しているプログラムの入替を行ったところ
Permissionエラーが発生するようになってしまいました。
その対処の一部始終をメモしておきます。

【概況】

・IIS + ASP.netで稼働しているWebサーバ。 (Webサービスを稼働中) Win2008R2 , IIS7.0

・Webサービスの1つに不具合があり、プログラムの入替を行う。

【環境】

・WebService Directory
 |-web.config
 |- bin
  |- Program.dll ←今回これだけを入替
  |- *.dll

【やったこと】

・Program.dllをコピーして別の場所へバックアップ
・持参した、Program.dllを、上書きコピー


結果、これでアウトでした。
起きたエラーがコレ。

型 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。
場所System.Security.CodeAccessSecurityEngine.Check(Objectdemand,StackCrawlMark&stackMark,BooleanisPermSet)
  場所System.Security.CodeAccessPermission.Demand()
  場所System.Reflection.Assembly.VerifyCodeBaseDiscovery(StringcodeBase)
  場所System.Reflection.Assembly.get_CodeBase()


【原因】

・Internetゾーンから取得したファイルを、そのままIIS稼働環境へコピーしたため。

【対処】

・ファイルのプロパティにてブロックを解除する。
 で、ダメだったので、あれこれやっているうちに、できるようになりました。

結果としては、アプリケーションプールにキャッシュされていたようです。

・アプリケーションプールの、停止、再起動を行う。
 使っていたアプリケーションプールは共有だったので、個別に新規で一つ作り
 新規で作ったアプリケーションプールを割り当ててみました。
 その結果、改善されました。
 それで、通常使っているアプリケーションプールを一旦再起動して、
 アプリケーションプールの設定を元に戻すと、正常稼働。

 アプリケーションプールの再起動時に、動作中プロセスの影響からなのか
 「アプリケーションプールを起動できません」的なエラーが出て焦りましたが、
 少し待ってから起動したら動いたので、結果問題なしといったところです。

【他に調べたこと】

・IISにキャッシュされていないか
 ⇒Windows\Microsoft.net\Framework**\Version\Temporary ASP.NET Files に
  IISが自分のロードしたモジュールをキャッシュします。
⇒結果、問題なし。
  念のため、
  ・アプリケーションとしての設定を解除
  ・該当キャッシュをクリア
  ・再度アプリケーションへ変換
  とやり、キャッシュの再構成を行いましたが、改善せず

【やりたかったけど試してない事】

・IISの再起動
 他にもアプリが動いていて、止めるにはいろいろと手間があったので、今回は除外

【まとめ】

普段はUSB媒体でプログラムの持ち込みをするのですが、今回はWeb経由で
プログラムを持ち込んだため、はまりました。

インターネットから取得したデータの扱いには十分注意しましょう。

2014年8月10日日曜日

ネットワーク(LAN)はループさせてはいけません(ブロードキャストストーム)

先日、お客様先へシステム納品時に、LAN障害が発生。
結局はループだったであろう。という事なのですが、
改めてその爆発力を目の当たりにしたのでまとめておきます。

現象

・ネットワークがつながったり、切れたりする。
・PINGを継続して実行していると、何回かに1回くらい、Request Timeoutが出る。

インフラ屋さんがあれこれ調べてやっていたのですが、ひょんなところで気がついた
ハブに、ネットワークループがありました。
その片方を取り外したところ、解決。

結論


ネットワークはループさせたらだめ。
※但し、STP(スパニングツリープロトコル)を持っているハブを利用しているだとか
 VLANとか、意図的にループ経路を作っている場合には別


そもそもネットワークのループって?

ループってどういうことか?っていうと、
・1本のLANケーブルを、同じハブに挿したらダメ。ということです。
・ハブ間は、1本のLANケーブルでつなぐことが基本で、二重化のようにつないだらダメという事です。
・ぐるっと回って1周。というようなLAN配線はダメということです。


詳しくはASCIIさんあたりを参照。
http://ascii.jp/elem/000/000/451/451629/
http://ascii.jp/elem/000/000/561/561903/


何も知らないユーザーさんだと、気にもならないのでしょうけども、
以外に単純な落とし穴で、ネットワークが使えなくなってしまう。


余談

そのお客さんは半日間、全システムがほぼダウンで、業務になってませんでした。