SQLの窓

2014年05月31日

Program Files 内にアクセスする為の『管理者用』TeraPad ショートカット

おそらく UAC を変更すれば何も必要無いのでしょうが、それを確認してもあまり役に立ちそうにないので現状に対する対症療法として。



エクスプローラのアドレスに sendto と入力すると、『送る』フォルダが表示されます。通常の TeraPad のショートカットをコピーして『TeraPad(管理者用)』を作成して、プロパティから詳細設定ボタンをクリックします。



そこで『管理者として実行』にチェックします。



※ 通常のショートカットの名称の頭に ! があるのは、表示を先頭にする為です。

普通のショートカットでは、TeraPad が以下のようにメッセージを表示して、編集不能状態で表示されます




最近、こういう苦労が多いです・・・

ちなみに、管理者として実行する時に確認ダイアログが表示されて、デスクトップが暗くなりますが、この事を『デスクトップの暗転』と呼ぶそうです。




posted by at 2014-05-31 08:57 | Comment(0) | Windows | このブログの読者になる | 更新情報をチェックする

2014年05月27日

カレントディレクトリを AnHttpd の Alias として登録する

以前 HTA で作成していましたが、管理者権限等の関係で使いづらくなっていたので、単純な VBScript に変更しました。


Set Shell = CreateObject("Shell.Application")
if WScript.Arguments.Count = 0 then
	Shell.ShellExecute "cmd.exe", "/c Cscript.exe """ & Wscript.ScriptFullName & """ dummy & pause", "", "runas", 1
	Wscript.Quit
end if

Set WshShell = CreateObject("WScript.Shell")
Set Fso = CreateObject("Scripting.FileSystemObject")

Set objBasic = new basic : objBasic
Set objWmireg = new wmireg : objWmireg

Call SetAlias()

Function SetAlias( )

' ***********************************************************
' 処理開始
' ***********************************************************
	' 対象のレジストリを決定
	strTarget = "default"
	strTarget = "SOFTWARE\AnHttpd\" & strTarget & "\Alias"
	' 仮想ディレクトリの一覧を取得する
	Set var = objWmireg.GetLValueArray( strTarget )
	
	' 仮想ディレクトリ名を決定
	strAlias = " /" & objBasic.var("ScriptCurDirName")

' ***********************************************************
' 既にあれば上書き、無ければ追加
' ***********************************************************
	if not var.Exists( strAlias ) then
		nValue = var("Count") + 1
		objWmireg.SetLDword strTarget, "Count", nValue
	end if
	' 物理ディレクトリは、このスクリプトのあるパス
	objWmireg.SetLString strTarget, strAlias, objBasic.var("ScriptCurDir") 


	Wscript.Echo objBasic.var("ScriptCurDir") & vbCrLf & " を AnHttpd の一般パスのエイリアスとして登録しました" & vbCrLf

End Function

Class basic

Public var
Public objWMIService
 
' ************************************************
' コンストラクタ
' ************************************************
Public Default Function InitSetting()

	Dim obj,objOS

	Set var = CreateObject( "Scripting.Dictionary" )

	' スクリプトが存在するディレクトリ(WSH用)
	on error resume next
	ScriptCurDir = WScript.ScriptFullName
	Set obj = Fso.GetFile( ScriptCurDir )
	Set obj = obj.ParentFolder
	var("ScriptCurDir") = obj.Path
	Set obj = Fso.GetFolder( var("ScriptCurDir") )
	var("ScriptCurDirName") = obj.Name
	on error goto 0

	Set objWMIService = GetObject("winmgmts:" _
	 & "{impersonationLevel=impersonate}!\\.\root\cimv2")

	Set obj = objWMIService.ExecQuery( _
		"Select * from Win32_OperatingSystem")
	on error resume next
	For Each objOS in obj
		var("OsName") = objOS.Caption
		var("ComputerName") = objOS.CSName
		var("ServicePack") = objOS.ServicePackMajorVersion _
		& "." & objOS.ServicePackMinorVersion
		var("WinDir") = objOS.WindowsDirectory
		var("SysDir") = objOS.SystemDirectory
	Next
	on error goto 0

end function

' ************************************************
' 環境文字列の一覧の取得
' ************************************************
Function GetAllValue()

	Dim str,key

	str = ""

	For Each key in var
		str = str & key & " = " & var(key) & vbCrLf
	Next

	GetAllValue = str

end function
 
' ************************************************
' 非同期実行
' ************************************************
Function RunASync( strPath )

	Call WshShell.Run( strPath )

end function

' ************************************************
' 同期実行
' ************************************************
Function RunSync( strPath )

	Call WshShell.Run( strPath, , True )

end function

' ************************************************
' コマンドプロンプト同期実行( プロンプトを開く )
' cmd.exe /c 以降を指定
' ************************************************
Function CmdSyncWithConsole( strPath, bPause )

	if bPause then
		Call WshShell.Run( _
		"cmd.exe /c " & strPath & " & pause", , True )
	else
		Call WshShell.Run( _
		"cmd.exe /c " & strPath, , True )
	end if

end function

' ************************************************
' コマンドプロンプト同期実行( プロンプトを開かない )
' cmd.exe /c 以降を指定
' ************************************************
Function CmdSyncWithoutConsole( strPath )

	Call WshShell.Run( _
		"cmd.exe /c " & strPath, 0, True )

end function

End Class

const WMI_HKEY_LOCAL_MACHINE = &H80000002
const WMI_REG_SZ = 1 
const WMI_REG_EXPAND_SZ = 2 
const WMI_REG_BINARY = 3 
const WMI_REG_DWORD = 4 
const WMI_REG_MULTI_SZ = 7 

Class wmireg

Public objReg 
 
' ************************************************
' コンストラクタ
' ************************************************
Public Default Function InitSetting()
 
	Set objReg = _
		GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		".\root\default:StdRegProv") 
 
end function

' ************************************************
' サブキーの配列を取得
' ************************************************
Function GetLSubKeyArray( strPath )

	Dim aSubKeys,str

	objReg.EnumKey WMI_HKEY_LOCAL_MACHINE, strPath, aSubKeys
	GetLSubKeyArray = aSubKeys
 
end function

' ************************************************
' 値の一覧の連想配列を取得
' ************************************************
Function GetLValueArray( strPath )

	Dim aValueNames, aValueTypes, strValue, aValue

	Set var = CreateObject( "Scripting.Dictionary" )

	objReg.EnumValues WMI_HKEY_LOCAL_MACHINE, strPath,_ 
		aValueNames, aValueTypes 
	For i=0 To UBound(aValueNames)
		Select Case aValueTypes(i) 
			Case WMI_REG_SZ
				objReg.GetStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_EXPAND_SZ
				objReg.GetExpandedStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_DWORD
				objReg.GetDWORDValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_MULTI_SZ
				objReg.GetMultiStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),aValue
				var(aValueNames(i)) = aValue
			Case WMI_REG_BINARY 
				objReg.GetBinaryValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),aValue
				var(aValueNames(i)) = aValue
		End Select 
	Next 

	Set GetLValueArray = var

end function

' ************************************************
' 文字列セット
' ************************************************
Function SetLString( strPath, strName, strValue )

	objReg.SetStringValue _
		WMI_HKEY_LOCAL_MACHINE,strPath,strName,strValue 

end function

' ************************************************
' 整数セット
' ************************************************
Function SetLDword( strPath, strName, dwValue )

	objReg.SetDWORDValue _
		WMI_HKEY_LOCAL_MACHINE,strPath,strName,dwValue

end function

End Class




posted by at 2014-05-27 20:50 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年05月25日

Eclipse : プライベートクラスの作成

プライベートクラスを作成するソースコードを選択して右クリックします



『エンクロージング型』をチェックし、その横の名前がソースコードのクラス名である事を確認し、private ラジオボタンを選択して、スーパークラスは特に必要なければ、『java.lang.Object』のまま完了します



すると、ソースコードの先頭にプラベートクラスのブロックが作成されます



▼ ブロックの位置変更は、『アウトライン』で

ドラッグして移動させます





posted by at 2014-05-25 00:00 | Comment(0) | Java | このブログの読者になる | 更新情報をチェックする

2014年05月24日

インポート用レジストリ

Microsoft サポート

.reg ファイルを使用してレジストリ サブキーおよび値を追加、変更または削除する方法( https://support.microsoft.com/ja-jp/kb/310516 )


インポート用レジストリ

上記リンク先(インポート用レジストリ)は、XP 時代の古い情報がほとんどですが、レジストリに関して少し遊んで見たい場合の資料として少しは役に立つかもしれません
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cmd]
@="コマンドプロンプト(&P)"

[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="cmd.exe /k \"cd %L\""

上の『ディレクトリコマンドプロンプト』は、今でも動作するはずですが、Windows7 では、SHIFT キーを押しながらの右クリックで最初から登録されており、書き方も少し違います(厳密にはレジストリへの登録方法の仕様も少し変わっています)。
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cmd]
"NoWorkingDirectory"=""
@="@shell32.dll,-8506"
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="cmd.exe /s /k pushd \"%V\""




posted by at 2014-05-24 23:20 | その他 | このブログの読者になる | 更新情報をチェックする

JavaScript : 文字列で表現された日付を論理チェック

業界では、日付の妥当性チェックを日付論理チェックと言ったりします。(ひょっとしたら死語かもしれませんが)

JavaScript の Date オブジェクトの実装は試してみると解りますが、結構中途半端です。結局日付チェックとしては後述のような結構長い記述になってしまいます。

"2014/03/01".isDate() とかすると、true が返ります。

あと、通常は未入力をエラーとしたくないので "".isDate() は true が返ります。

フォーマットチェックは、/^\d{4}\/[\d]+\/[\d]+$/ です。
<script type="text/javascript">
String.prototype["isDate"] = function() {
	var str = this.valueOf();
	if ( str == "" ) {
		return true;
	}
	if ( !str.match(/^\d{4}\/[\d]+\/[\d]+$/) ) { 
		return false; 
	} 
	var parts = str.split( "/" );
	var nYear = Number(parts[0]); 
	var nMonth = Number(parts[1]) - 1;
	var nDay = Number(parts[2]);
	// 月,日の妥当性チェック 
	if ( 0 <= nMonth && nMonth <= 11 && 1 <= nDay && nDay <= 31 ) { 
		var dt = new Date(nYear, nMonth, nDay); 
		if( isNaN(dt) ) { 
			return false; 
		}
		else if(
			dt.getFullYear() == nYear &&
			dt.getMonth() == nMonth &&
			dt.getDate() == nDay ) {
			return true;
		}
		else{ 
			return false;
		}
	}
	else{ 
		return false;
	}
};

var str = "2014/2/29";
console.log(str.isDate());

</script>
このコードで重要な部分は( このチェックと言うより、Date オブジェクトの特性 )
if(
	dt.getFullYear() == nYear &&
	dt.getMonth() == nMonth &&
	dt.getDate() == nDay ) {
	return true;
}
のところで、new Date(nYear, nMonth, nDay) で渡す 月と日で正しく無い内容でも、起点となる日付の経過日数として換算して、オブジェクトが作成されてエラーとならないからです。出来上がった日付と、最初の文字列が同じならば意図した結果ですが、そうで無い場合はいわゆる『論理エラー』となっています。
posted by at 2014-05-24 00:53 | JavaScript | このブログの読者になる | 更新情報をチェックする

2014年05月23日

PHPで使用する為にフォント(.TTC)の分解

昔は、BREAKTTC.EXE が使われていましたが、今は日本発の普通のリーソフトである UniteTTC で簡単に分解できます。

以下の記事は、メイリオを ttc から ttf に分解して利用する手順です

TCPDF で非埋め込み型として『メイリオ』を使う手順



関連する記事
posted by at 2014-05-23 23:52 | PHP | このブログの読者になる | 更新情報をチェックする

2014年05月15日

DAZ3D : 立体機動三部作 : 『先』 『臨』 『斬』

フリーダウンロードギャラリー(進撃の巨人)へ移動

立体機動。『先』



某イラストコミュニケーションサービスで、『進撃の巨人イラストコンテスト』ってのをやってたので、勢いで作成したイラストです。

かなり、勢いなんで探り探りでいろいろ作ったもんで、この上着は男性用のものを部分的に非表示にしたりして着せています。後からのも基本的には同じなんですが、この時はまだやり方が解らずに女性の胸の部分を平坦にして上着からはみ出ないようにしています。キャラの作りこみも出来ていない結構苦労作。

立体機動。『臨』



かなり慣れて来て、上着を女性に合わせてモーフしています。これで DAZStudio に謎の仕様がある事を知ったのですが、単なるバグかもしれません。ある手順を踏むと、男性用の上着なのに女性用のモーフハンドルが出現するんですが・・・・。

立体機動。『斬』



かなり余裕が出てきて、ワイヤーとかに色の効果を付けたりしてます。血のりの効果は『たぶんこうしたらうまく行く』という根拠の無い作業だったんですが、本当にうまく行きました。正直どうやったかあんまりはっきり覚えて無かったり。でも、GIMP の普通の機能で普通にやった記憶があります。もちろんベースとなるレイヤーは買ったものですけれど。

これで初めて、『テーマが技術を磨く』という事に気が付きました。リクエストって結構修行用として意味ありますね。



posted by at 2014-05-15 13:55 | DAZ3D DAZStudio イラスト 2014 | このブログの読者になる | 更新情報をチェックする

DAZ3D : 荒ぶる。レディ・バンパイア

フリーダウンロードギャラリーへ移動


▼ 2014/05/15
やっとギャラリーを作成しました。自分でもどんな画像を作ったか正直はっきりしないし、分類もしていなかったのでとても解りやすくなると思います。登録するのが結構たいへんですが、全てダウンロードして自由に使ってもらってけっこうなものです。画像は全部 Picasa にあって、Picasa が持っている画像の縮小機能を使ってサムネイルを表示しています。これは実に便利ですよ。

DAZ3D で極端に口をあけるカットは結構難しいんですが、バンパイアなんで牙を強調したいので、ギリギリの表情です。やはり人肌色より青やグレイが合うし、陰影も濃いほうが合います。なんで、PNG で出力して背景は別に重ねたほうがいいです。







posted by at 2014-05-15 03:40 | DAZ3D DAZStudio イラスト 2014 | このブログの読者になる | 更新情報をチェックする

2014年05月14日

Java の授業で社員マスタメンテを作成しています

DB 処理に関しては以下の汎用コードを使い、MS Access のみに限定して作成しました。( 殆どコピペと微調整で作成できます )

Eclipse + WindowBuilder : JDBC と ODBC を使った、オールマイティなデータベース接続サンプル( MySQL / SQLServer / Oracle / Postgres / MS Access)

処理そのものより、Eclipse + WindowBuilder の機能を使う練習です。変数名や、クラス名、アクションを使ったイベント作成等、ソースコードの見渡しがかなりすっきりしているはずです。
public class Main extends JFrame {

	private JPanel contentPane;
	private JTextField syainCode;
	private JTextField syainName;
	private final Action checkAction = new CheckAction();
	private final Action cancelAction = new CancelAction();
	private JButton checkButton;
	private JButton updateButton;
	private JButton cancelButton;

	private String currentDir = null;
	private Connection con = null;
	private Statement stmt = null;
	private ResultSet rset = null;
	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main frame = new Main();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Main() {
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowActivated(WindowEvent arg0) {
				Main.this.setLocationRelativeTo(null);
				
				currentDir = System.getProperty("user.dir");
				System.out.println(currentDir);
			}
		});
		setResizable(false);
		setTitle("\u793E\u54E1\u30DE\u30B9\u30BF\u30E1\u30F3\u30C6");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel label = new JLabel("\u30B3\u30FC\u30C9");
		label.setBounds(31, 32, 50, 13);
		contentPane.add(label);
		
		JLabel label_1 = new JLabel("\u6C0F\u540D");
		label_1.setBounds(31, 88, 50, 13);
		contentPane.add(label_1);
		
		syainCode = new JTextField();
		syainCode.setBounds(78, 29, 50, 19);
		contentPane.add(syainCode);
		syainCode.setColumns(10);
		
		syainName = new JTextField();
		syainName.setEnabled(false);
		syainName.setColumns(10);
		syainName.setBounds(78, 85, 202, 19);
		contentPane.add(syainName);
		
		checkButton = new JButton("\u78BA\u8A8D");
		checkButton.setAction(checkAction);
		checkButton.setBounds(304, 28, 106, 21);
		contentPane.add(checkButton);
		
		updateButton = new JButton("\u66F4\u65B0");
		updateButton.setEnabled(false);
		updateButton.setBounds(304, 170, 106, 21);
		contentPane.add(updateButton);
		
		cancelButton = new JButton("\u30AD\u30E3\u30F3\u30BB\u30EB");
		cancelButton.setAction(cancelAction);
		cancelButton.setEnabled(false);
		cancelButton.setBounds(304, 208, 106, 21);
		contentPane.add(cancelButton);
		
		
	}
	
	private class CheckAction extends AbstractAction {
		public CheckAction() {
			putValue(NAME, "確認");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			
			// 実際は、getConnect が失敗した場合の処理が必要です
			getConnect();
			
			try {
				
				stmt = con.createStatement();
				String scode = syainCode.getText();
				rset = stmt.executeQuery ( "select * from 社員マスタ where 社員コード = '" + scode + "'" );
				if ( rset.next() ) {
					syainName.setText(rset.getString( "氏名" ));
					
					syainCode.setEnabled(false);
					checkButton.setEnabled(false);

					syainName.setEnabled(true);
					updateButton.setEnabled(true);
					cancelButton.setEnabled(true);
					
					syainName.requestFocusInWindow();
					syainName.selectAll();
					
				}
				else {
					JOptionPane.showMessageDialog(contentPane, "入力した社員コードは存在しません");
					syainCode.requestFocusInWindow();
					syainCode.selectAll();
				}
				
				rset.close();
				stmt.close();
				
			} catch (Exception e1) {
				// TODO 
				e1.printStackTrace();
			}			
			
			con.close();

		}
	}
	private class CancelAction extends AbstractAction {
		public CancelAction() {
			putValue(NAME, "キャンセル");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			Main.this.syainCode.setEnabled(true);
			Main.this.checkButton.setEnabled(true);

			Main.this.syainName.setEnabled(false);
			Main.this.updateButton.setEnabled(false);
			Main.this.cancelButton.setEnabled(false);
			
			syainName.setText("");
		}
	}
	

	private boolean getConnect() {
		
		boolean connect_result = true;
		String connectionString = "";

		// *********************************************
		// ODBC 用接続文字列
		// *********************************************
		// MDB
		connectionString = "Provider=MSDASQL"
				+ ";Driver={Microsoft Access Driver (*.mdb)}"
				+ ";Dbq=" + currentDir + "\\data\\販売管理C.mdb" + ";";

		
		try {
			Properties prop = new Properties();
			prop.put("charSet", "MS932");
			System.out.println(connectionString);
			con = DriverManager.getConnection("jdbc:odbc:"+connectionString, prop);
			
		} catch (Exception e1) {
			// TODO 
			e1.printStackTrace();
			connect_result = false;
		}
		
		return connect_result;
	}
	
}

ウインドウの初期処理として windowActivated を使っているのは、このイベントが重要だからです。初期処理であれば、インスタンス内より呼び出すメソッドを一つ作成すればいいのですが、この段階ではこちらのほうが勉強になります。また、コンストラクタ内は WindowBuilder が自動的にコードを書くのでこの段階ではあまり触りたく無いという事情もあります。

まだ、項目や入力チェックは殆ど実装されていません。


posted by at 2014-05-14 02:28 | Comment(0) | Java | このブログの読者になる | 更新情報をチェックする

2014年05月06日

MySQL : バックアップ : mysqldump --host=localhost --user=root --password=パスワード データベース

mysqldump.exe で処理する場合、-- 構文と - 構文がありますが、パスワードを記述してバッチ処理を可能にする為には、-- 構文を使用する必要がありました。- 構文では、パスワードは最後のオプションにする必要があり、かつ、パスワードは入力でした。

▼ -- 構文

mysqldump --host=localhost --user=root --password=パスワード データベース > %temp%\dump.sql

▼ - 構文

mysqldump -h localhost -u root -p データベース > %temp%\dump.sql
リダイレクト先を %temp% としているのは、インストール先のディレクトリをパスに登録せずに行っているからで、C:\Program Files\MySQL\MySQL Server 5.6\bin は管理者権限でないと書き込みができません。


posted by at 2014-05-06 11:12 | Comment(0) | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX