2014年3月31日月曜日

Oracleで正規表現

10gより、正規表現が使えます。

REGEXP_LIKE という関数を使います。

構文例

SELECT * FROM DATA
WHERE
REGEXP_LIKE(ATAI,'^[0-9]+[\.]*[0-9]*$')


数値:^[0-9]+[\.]*[0-9]*$
数字範囲:^[0-9]+[\.]*[0-9]*~[0-9]+[\.]*[0-9]*$


正規表現はあまり詳しくないのでお許しくださいませ。

これで、よくネットでQAが上がっている「ISDATEと同等の関数ありませんか?」とか
「ISNumericと同等の関数ありませんか?」とかが少しでも
解決するのではいかという気がします。


追伸:他のRDBMSでも類似機能がありました。
MSSQL : LIKEで可能
MySQL : LIKEと似た機能で、Col RegExp 正規表現 という形で実現


2014年3月28日金曜日

Oracleで別テーブルの値を参照してデータを更新するときの簡単な方法

マスタからあるKEYでトランザクションを結合して、
マスタの値を一括更新したい!なんて時、ありますね。

そんな時、昔書いていた方法を探していたら、別のアプローチを見つけました。

今まで知らなかったのが勿体ない。
というか、何事も片手間でやってはいけないな。と反省です。


実装例

インラインビューという方式を使います。
要は副問合せ、サブクエリです。

UPDATE
(SELECT
  DS.KEYSEQ
  ,DS.HYOJI_NM
  ,M.HYOJI_NM DISP
 FROM
  DATA DS , MASTER M
 WHERE
  DS.KEYSEQ = M.KEYSEQ
)
SET HYOJI_NM = DISP


何のことはない、サブクエリでKEY結合したものを外でSETしているだけです。

Oracleでできるので、他のRDBMSでも同等の機能はありそうですね。

暫くOracleをさわっているので、それ関連の記事が続きそうです。

2014年3月26日水曜日

VSS (Visual Source Safe) を利用するときのTips

VSSはVisualStudioと連携して利用できるソース管理ツールであり、
.netが世に出る前から開発をされている方などにはなじみの深いツールの1つかと思います。

現在はTeamFoundationServerへの置換なども推奨されており段々と新規での利用シーンは減ってきそうですが
とはいえ、過去に開発したシステムなどはVSS管理のものも多いと思います。


そこで、VSSを使う上で、良く聞くTipsを纏めておきます。

○サーバーからデータを取得すると、更新日時が取得日時となるので何とかしたい

設定で変更できます。
 ⇒[ツール] → [オプション] → [ローカルファイル タブ] → [ローカルファイルの日付と時刻] を、「変更時刻」にする
 ※プロジェクトごと必要です

○PDFファイルなど、バイナリファイルを格納するとデータが破損する

設定で変更できます
 ⇒[ツール] → [オプション] → [ファイルの種類 タブ] → [バイナリファイル] に、[*.pdf] などを追加

○VisualStudioを起動した際に、ユーザー名とパスワードを省略したい

⇒OSのログインユーザー、パスワードをVSSと合わせると、自動的にOSのログインユーザーでログインできます。

○VSSとVisualStudioのソース管理連携を外したい

⇒VisualStudioを開き、[ファイル] → [ソース管理] → [ソース管理の変更] から、「切断」
  その後、VSS用の管理ファイル類ファイルを削除
  ※コマンドラインで[del /s *.*scc /a:r]などで一括削除が楽です

○文字化けが発生する

 Visual Source Safeのバージョンかもしれません。
 VisualStudio6.0に付属しているVSSは6.0dですが、このバージョンはUTF-8に対応してません。
 最新は、VisualStudio2005に付属のVSSです。


2014年3月24日月曜日

sugarcrmにてログインパスワードを忘れてしまった場合の対処方法

sugarcrmにてログインパスワードを忘れてしまったときの対処です。
自分でやらかしてしまったので、備忘録的にメモ。

フォーラムで紹介されていたものの転用です。

なお、画面やツール等は提供されていないので、データベースの値を
直接変更する必要があります。


1)mysqlへログイン

$mysql -uusername -pPassword

2)データベースを選択

use sugarcrm

3)ユーザーを確認

mysql> select id,user_name,user_hash from users;
+--------------------------------------+----------------------+----------------------------------+
| id                                   | user_name      | user_hash                              |
+--------------------------------------+----------------------+----------------------------------+
| 1                                    | admin          | 06b277a9ac1c17d4e1ac8420258df870       |
| 92b52357-03c2-a86a-b2a6-52a5754d10ee | NULL           | NULL                                   |
| a41b1dc0-7a35-53bf-9365-52a576c3a36f | username1      | 7c5d92e64c229fb078825416aeb8c63e       |
| 86767bc1-b3b9-0849-c875-52a577d97fc3 | username2      | 7fe2434a2c4fb1994c39991c55f42b55       |
+--------------------------------------+----------------------+----------------------------------+

idを確認します。

4)パスワードを変更

update users set user_hash = '4a7d1ed414474e4033ac29ccb8653d9b' where id = 'a41b1dc0-7a35-53bf-9365-52a576c3a36f';


パスワードはmd5ハッシュとなっています。本サンプルでは'0000'を指定しています。

これで、ログイン画面からパスワード0000でログインできるようになりました。

2014年3月18日火曜日

mysqlでリモート接続を可能とする

このメモは、リモート接続でデータベースアクセスをするためのDMLです。


create user remoteuser@192.168.100.100 IDENTIFIED BY 'password'
GRANT ALL PRIVILEGES ON databasename.* TO remoteuser@192.168.100.100

権限を適当にしてしまっていますが、運用に合わせて適切に。。。


別手法として、 remoteuser@% ってのもありますのでご参考まで(自分は使ってません

2014年3月17日月曜日

昨今のプログラム自動生成ツール

昨今のプログラム自動生成ツールについてです。


先日、ジェネクサスジャパン様のプレゼンを拝聴しました。

ジェネクサスジャパン様は、プログラム自動生成ツールを取り扱っており、
GeneXusというツールを使い、管理画面で各種設定をすることにより、
各種プログラムが自動生成されます。

対応しているプログラムは、Web,Windowsアプリ、iPhone,iPad向けアプリ、Android向けアプリと多様

最近はここまで来ているか。と感心したものですが、過去さかのぼってみると
昔からこの手の話題はありました。


いま改めて調べてみても、いくつかありましたので要約
※検証はしてません。


○blanco Framework
 Excelから自動生成してくれる、オープンソースのツール

○MDFrame
 別途XUpperという上流ツールが必要かもしれませんが、
 同じく、ソースを自動生成してくれます。

○GeneXus
 アジャイル向きという事でした。1つの設定でマルチプラットフォームへの
 対応が可能なところには驚き。
 ウルグアイで開発されているそうなので世界的な動きにも対応していそうです。
 一方、基本機能で対応できない事をやろうとすると、専用の言語習得が必要。
 ※とはいえ、Excelライクな関数などだったのでさほど苦でもないかも。

○Wagby
 Java用。Struts, Spring, Hibernateの構成で動作するソースを自動生成
 社長様がGeneXusとの比較記事を書いていました。

その他、色々沢山ありました。が、時間の都合上省略します。



開発、運用をしている立場からの観点で気になった事としては、
「継続的に改修・改良に耐えうる仕組みであるか?」という事です。
継続的インテグレーションってやつですね。

作るのは1回でも、改修改良は、システムが使われる限り永続です。
私個人的には初期の開発より、改修改良に重きを置いて作り込みたいと思ってます。

今回丁度いいきっかけを頂いたので、今後、色々と使ってみたいと思います。


記事のラベルを整理する意味と勘所(私見)

日々何となく書いている記事なので、ラベルも何となくつけてます。
ようやく、100記事も間近となってきたので、記事を整理してみました。

【結論】
○ラベルには、製品名、言語名など、ピンポイントの項目名をつける。
○可能であれば、その上位の概念レベルの項目名もつける

派生として、ラベルで絞った時に、タイトルで記事にたどり着けるようにすること。


【整理して思ったこと】

意味なしラベル
○Microsoft,開発言語,データベース -> 広すぎて役に立たない
○.netとvb.net -> 混在でいいので.netへ統合 (vb.netに限らない記事も多いし)
※私の記事における意味なしです。念のため


逆に、あっていいなと思ったもの
○ツールや、言語、製品名を特定するもの(EclipseとかOracleとか
○言語名


きちんと設定して、使いやすくしておきたいと感じました。

2014年3月14日金曜日

GreaseMonkeyを活用する (初級編)

今までは、提供されていたものを使うだけだったのですが、
JavaScript,jQuery周りの知識がついてきたのと、Webの仕事が増えてきたので、
GreaseMonkeyを使って、自分でスクリプトを書いてみる事にしました。

GreaseMonkeyも覚えられて、jQueryも使う事ができるようになって、
仕事も効率化。と、いいことづくめになりそうです。


インストールなどの説明は省き、使っているケースの紹介です。

ケース1 :ログイン画面で、自動的にIDとパスを表示する

システム開発におけるテストとか、運用保守とかに使えそうです。
毎度入れるのが手間だったりするので、大助かり。


// ==UserScript==
// @name     IDを自動セットする処理
// @namespace  domain.com
// @description 任意の文字
// @include   対象のurl
// @version   2
// ==/UserScript==
  $("#txtloginID").val('loginid');
  $("#txtfPASSWORD").val('password');

jQueryで値をセットしているだけですね。簡単です。



ケース2:ボタン機能を追加することで機能拡張



// ==UserScript==
// @name     フィルタ機能の実装
// @namespace  domain.com
// @description 任意の文字
// @include   対象のurl
// @require   http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js
// @resource jQueryUICSS https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css // @version 2 // ==/UserScript==

大事なのは、@requireを入れるところ。
jQuery対応していないサイトだったのですが、以下1文を入れるだけで
jQuery対応となります。CSSを読むには同じ要領で、@resourceを指定します


フィルタのボタンを入れる。(alertはダミーです

$(document).ready(function(){
  $('input[name=RE]').after('<input type="button" name="filter" value="フィルタ" onclick="alert(&apos;&apos;);">');
});


ケース3:カスタムCSS


var cssValue = ".custBtn{color:blue;background-color:lightgreen;margin:0 2px 0 2px;}";
var style = document.createElement('style');
style.textContent = cssValue;
document.getElementsByTagName('head')[0].appendChild(style);



あとは通常のjavasscript(jquery)で何とでもなりそうです。

2014年3月13日木曜日

TeraTermでの複数ホスト接続をバッチ一発で実行

Linux機の運用を行っていると、複数端末に対してまとめて作業を
実施したいケースが出てきます。

仕組みを予め作り込んでおくことにより、使う時にはバッチ一発起動で
複数のホスト接続ができるようになります。

今回は接続までですが、改良する事によりそれ以降の処理も可能です。

構成イメージ

 


概略

  1. URLリストを作る
  2. バッチでURLリストを読み込み、TTPMacroを繰り返しで呼び出し
  3. TTPMacroで、URLを受け取り、ユーザとパスワード等を使って組み立てて、接続

実行するバッチの記載例

#TTPMacro.exeが存在するパスを指定
SET MACROEXEPATH=c:\Program Files (x86)\teraterm

#TTPMacro.exeを指定(固定
SET MACROEXE=ttpmacro.exe

#マクロが存在するパスを指定します。(フルパス必須)
SET MACROPATH=%~dp0\loginall.ttl

#ディレクトリを移動
cd /d %MACROEXEPATH% 

#urllist.txtを読み込んで、引数としてTTPMacro.exeを起動
for /F %%i in ( %~dp0\urllist.txt ) do start %MACROEXE% %MACROPATH% %%i

#元の位置に戻る
cd %dp~0

pause

実行するマクロの記載例

;パラメータ受け取り
HOSTADDR = param2
;ユーザー名とパスワードの定義(パラメータで受け取っても良いかも)
USERNAME = 'remoteuser'
PASSWORD = 'remotepassword'
;接続文字列の組み立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
;接続
connect COMMAND
;応答を待機
wait 'remoteuser@'
;マクロ終了
end

jquery 1行tips (入門編

自分用メモです。

select要素の値を設定する


$("select[name='selectname']").val(値);

イベントのバインド


$("#button").bind("click", function() {/*実行処理*/;});

要素の列挙(each)


$("select[name='selectname'] option").each(function()
{
    alert($(this).val());
});

select要素の指定値を削除


$("select[name='selectname'] option[value=1]").remove();

配列の中を検索して結果を返す


var arr = [ 4, "Pete", 8, "Pete", "John" ];
if (jQuery.inArray("Johnnn", arr)
{
    alter('not Found');
}

要素のコピー


$("#BackupArea").append($("select[name='MARKETCD']").clone(true););

要素のコピー(応用)


$("input[name='buttonname']").after('<div id="customBackupArea" style="display:none"></div>');
var backupElm = $("select[name='MARKETCD']").clone(true);
backupElm.attr('name','MARKETCD_BAK');
$("#customBackupArea").append(backupElm);

ラジオボタンの選択


$("input[name='name']").val(['0']);

ラジオボタンで選択されているものを取得


$("input[name='name']:checked").val();

2014年3月7日金曜日

Windowsでコマンドを利用してネットワークドライブの割り当て

自分用備忘録。
画面からやるとエラーとなってしまうのでコマンドを使う事にしました。


構文

net use [ドライブ] [共有フォルダ名] [パスワード] [ユーザー名]

Example

net use z: \\172.31.5.26\Repository password /user:domain\username
net use z: \\172.31.5.26\Repository password /user:username

net use z: \\172.31.5.26\Repository
ユーザー名とパスワードを聞かれるので、入力

'172.31.5.26' のユーザー名を入力してください:
172.31.5.26 のパスワードを入力してください:

サンプル上のネットワーク共有名は適宜書き換えてください。


追伸

Windows8.1でいくらやってもきちんとつながらないな・・・と思っていたら、使っているコマンドプロンプトが管理者でした。
管理者だと参照領域が違うようです。

2014年3月6日木曜日

ドメイン移管の簡単な方法(onamae.com)

ドメイン移管とは、ドメインの管理者を変更する手続きです。
時と場合により呼び方は様々ですが、
ドメインという商品の性質上、簡単にはできないようになってます。

特に、gTLDドメインなどでは、認証手続き(AuthCode)が必要で、
相手先とのやり取りが何度か発生し、それにより時間もかかります。


今回、お名前.comで提供している機能(方式)により、
簡単にドメイン移管ができましたので手順を残しておきます。


前提

移管元、移管先の双方が、お名前.comを利用している必要があります。

手順

1) 移動元のお名前.com管理画面より、「お名前ID付け替え」機能を利用して
  対象のドメインを、新しいお名前.comのIDへ移動
2) 新しいお名前.comのIDでログインし、同じく「お名前ID付け替え」機能を
  利用して、対象のドメインを、移管先のお名前.comのIdへ移動

ざっくりいうと、ダミーのIDを作り、それを経由して移動する。という事です。

手順がお名前.comのサイトにありましたので公式。費用も掛かりません。


公式情報

・お名前ID付け替え
http://www.onamae.com/guide/details.php?g=27

・お名前ID/パスワードを移管元にお互い通知できない場合
http://help.onamae.com/app/answers/detail/a_id/8139



今後ドメイン移管の際には、管理しているレジストラがお名前.comかを聞くようにしようと思いました。

2014年3月5日水曜日

管理者モードでのコマンドプロンプトの挙動に対する注意点

コマンドプロンプトを使っていると、
「この操作を実行するのに十分な特権がありません」

と出る事があります。
これは、WindowsVista以降で組み込まれたWindowsのユーザー・アカウント制御(UAC)による挙動で、
「Windowsにとって」特別な操作の場合、利用者への注意喚起を行う仕組みです。


本題ですが、これではまりました。
通常モードで実行できるコマンドを、管理者のコマンドプロンプトで
実行すると、通常の動作と異なる。

言い換えると、管理者特権が必要なアプリケーションにしか反映されません。


以下、net useコマンドで表示される結果

通常の権限で実行

ステータス  ローカル名 リモート名         ネットワーク名
------------------------------------------------------------------------------
利用不可   M:     \\192.168.1.201\music   Microsoft Windows Network
K      P:     \\srv\Project       Microsoft Windows Network
K      Q:     \\srv\common$       Microsoft Windows Network
K      Z:     \\srv\Repository
                        Microsoft Windows Network
------------------------------------------------------------------------------

管理者権限で実行

ステータス  ローカル名 リモート名         ネットワーク名
------------------------------------------------------------------------------
K      Z:     \\srv\Repository
------------------------------------------------------------------------------

出てくる行数が違います。

管理者モードで net use ドライブ パス とやって、ネットワークドライブを作成しても、
エクスプローラ上には出てきませんでした。
当然、通常のモードのコマンドでも出てきません。

設定をかけてもうまくいかず、コマンドの構文なのか環境なのかと疑ってかかり、
たどり着いたのがこれという結果・・・

まとめ

日常的に管理者のコマンドプロンプトを使っていたのですが、
これからは必要な時にのみ使うようにします。

2014年3月4日火曜日

【雑記】おつりが少なくなるように支払うことの意義

IT関連の記事ではありませんが、改めて考えさせられたのでまとめてみました。

長文になってしまったので結論から。

! お店ではつり銭にも経費かかります。できる限り協力したほうがみんな幸せ !

※決して、私がお店を経営しているとか、そういうわけではありません。


というわけで、本文

スーパーや飲食店、雑貨店のレジでよく「**が不足しています」というポップ(貼紙)を見ることがあります。

そのときには「ふ~ん」としか思っていなかったのですが、
先日、顔なじみの店で小銭で支払った時に「ありがとうございます。助かります」と言われ、ふと気づきました。


★銀行での両替には手数料が発生する 

そういえば、数年前(ネットでさかのぼって記事を探すと10年前にはそうなっていた)に
そんなニュースを聞いたような覚えがあります。


それをふと思い出したのです。


銀行により手数料は無料の範囲などはまちまちのようですが、
ある一定の量を超えると累進的に手数料があがっていく。

それも、枚数により変わる。


気になってどうしようもなくなったので試算


 ※クリックして拡大

赤字で記している部分がきついところです。

枚数的にたくさん出ていく部分も利益に影響する部分だと思うのですが、
それよりも、10,000円で缶コーヒー、1,000円で缶コーヒー あたりの売上比がすごいです。
1,000円だと売上の2.8% , 10,000円だと売上の4.6%にものぼります。
消費税(5%)なみなので、日々数パーセントを意識して商売をなさっている方には辛い数字ですね。


とはいっても、お釣りをもらわない生活は実質的に不可能ですし、実現しようとしたら途方もないことになります。



おつり要らずといえば、クレジットカード(CMでもやってますね)

ただ、あれも加盟店手数料(3~6%と言われている)が取られるので結果変わらず、
Suica決済は2~4%とのこと。多少安いかな。
squareなどのモバイル決済だと、3.25%~


並べて比べてみるとなんてことないじゃんって話なのですが、
とはいえ、お店からしたら経費です。1円でも少ないに越したことはありません。


聖人君子のようにお店のことを考えるのは難しいとしても、
ちょっとした配慮でそのお店に貢献できるかな。と感じました。


2014年3月3日月曜日

EmEditorを持ち運ぶ(Portable化)

タイトルの通りです。

1) メニューバーより、
「ツール」→
「インポートとエクスポート」→
「USBドライブなどのリムーバブルドライブをセットアップしてすべての設定をINIファイルにエクスポートする」を選択

2) エクスポート先ディレクトリを選択

これだけで、持ち運び可能となります。

http://jp.emeditor.com/text-editor-features/versatility/portability-options/


インストーラからでもできるようですね。