つまづいた石ころ、ぶつかった壁

問題(と解消)の記録

SQLSERVER 物理ファイルを移動する(mdf、ldf)

SQL SERVERで運用中のデータベースの物理ファイルを移動させようと思うと、
デタッチ⇒アタッチで可能ですが、ログだけ別のドライブに分けたいといった場合に、GUIからは
操作できません。
※プロパティのファイルのパスは編集不可です。

次のSQLでパスを書き換えます。

ALTER DATABASE sample/*データベース名*/ MODIFY FILE(
   'sample_log'/*ファイル名*/
  ,'E:\ldf\sample_log.ldf'/*ファイルパス*/
);
/*SQLSERVER再起動後に反映される旨のログが出ます*/

この後、以下の手順でファイルを移動します。

  1. SQLSERVERのサービスを停止
  2. ファイルを所定の場所へ移動
  3. SQLSERVERのサービスを開始

パスを書き換えた後、データの書き込みを行っても問題ありません。



ファイル名、パスなどの情報は以下のシステムテーブルより参照できます。

  SELECT * FROM sys.database_files

ASPでExcelを編集する(ADO)

ASPからExcelを編集するとなると、値段の張るExcelCreatorなんかでゴリゴリ編集コードを書く、なんてことになりますが、
単純にデータを落とすぐらいなら、ADOでできるとのこと。


やり方

DBからデータを取得するのと同じ要領です。

'DBに接続するのと同じく、ConnectionとRecordsetを用意
Set conExl = Server.CreateObject("ADODB.Connection")
Set rsExl = Server.CreateObject("ADODB.Recordset")
'Excelへの接続文字列
conExl.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\home\myexcel.xlsx;Extended Properties=""Excel 8.0;"""
'編集したいセルをSELECT
rsExl.Open "SELECT * FROM [SHEET$B1:B13]", conExl, 3, 2
While Not rsExl.EOF
	'値を入れて、Update
	rsExl.Fields(0).Value = m_strTenpoTel
	rsExl.Update
	
	rsExl.MoveNext
Wend
rsExl.Close
conExl.Close


こんなに簡単にできるならもっと早く言ってほしいです。。

Node.js on Windows 手始め

node.jsやってみました。

参考サイト

Windows+Node.js+Socket.IO

そもそもどう起動する?

IISApacheではサーバを起動して、指定したルートディレクトリのファイルにリクエストを投げることで応答が返ってきますが
、node.jsも同じです。

入門記事を見ていると、以下のようなserver.listen(ポート番号)でOKというのがまずはじめに出てきます。

var http = require('http');
 
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.write('Hello ');
  response.end('World\n');
}).listen(8124); //このポートでアクセスしてきたやつに「Hello World」って言ってやる!
 
console.log('Server running at http://127.0.0.1:8124/');

どこでどうやって?と思っていましたが、コマンドラインからnode.exeの引数に
上記の内容を保存したjsファイルを指定して実行するだけで、サーバーが起動した状態となります。

node c:\node\hello.js

止める時は「Ctrl + C」です。


ブラウザからhttp://127.0.0.1:8124/にアクセスすると、Hello World!!と表示されます。

npm

モジュールのインストールに使うnpm。
node.jsのインストール時にパスも通っているので、単に

npm install socket.io

という感じでコマンドを叩くだけです。

iPhone 画面に何も映らなくなって、あせる気持ちを落ち着かせる方法

突然でした

iPhoneを見てみると、画面に何も映りません。
ホームボタンを押してもだめ、電源ボタンを押してもだめ。
サウンド オン/オフを切り替えると反応はあったので、生きてることは生きてるようです。。

修理に出さなくちゃ

・・・と思って焦っていたのですが、ちょっと調べてみると同じ現象の人が見つかりました。
再起動すればいいとのこと。

手順

  1. ホームボタンと電源ボタン(スリープボタン)を10秒間長押し
  2. 待ちます


直りましたよ!!


iOS6へアップデートかけたまま放置していて、どうなったかと思えば
何も映らなくなっていて、やばいな修理なんて・・・保障どうだったかな〜と
とにかく焦っておりました。

その他参考サイト

iPhone本体 各名称
思ってたのと違う名前です。。

ラズベリーパイ

クリスマスにラズベリーパイが届くことになりました。
素敵なプレゼントですね。


Raspberry Pi


昨日メールが届きまして、10月中旬の予定だったのですが、
生産の遅れで12月25日になります、とのこと。
素敵な演出です(よ)ね!


ちなみに発注日からの詳細は以下の通りです。

  • 注文  :7月26日
  • 出荷予定:10月17日
  • 変更後 :12月25日

注文から発送まで、5ヶ月ということになりますね。
おあずけ期間ながいです。



そうだ、SDカードがないっ

jQuery Templates テンプレートエンジン の使い方

サーバ側でhtmlまで生成していたのですが、JSONデータのみにして軽量化したいのですが、
クライアント側でDOM組み立てる処理を書くのはちょっとやってられないので、テンプレートエンジンを探していました。


JSテンプレートエンジンについてググってみたところ、さまざまなものがあるようですが、
jQueryでもプラグインがあるようなので、手始めにこれでやってみました。

本家:jQuery - Templates
参考:jQuery公式のテンプレートplugin 「jQuery Templates」

  • テンプレート(html側)
<ul id="movieList"></ul>
<script id="movieTemplate" type="text/x-jquery-tmpl">
	<li><b>${Name}</b> (${ReleaseYear})</li>
</script>
  • js
var movies = [
	{ Name: "The Red Violin", ReleaseYear: "1998" },
	{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
	{ Name: "The Inheritance", ReleaseYear: "1976" }
];
//テンプレートから生成したDOMを対象にappendします
$( "#movieTemplate").tmpl(movies).appendTo( "#movieList" )


おー、見たまんま動きます。
${}がJSONのプロパティと置き換わります。

{hoge:"ほげ"}
<span>${hoge}<span><span>ほげ<span>

それを配列分繰り返します。



もう他のを試さなくても、これで十分すぎました。

クラシックASP BASP21を使わないファイルアップロードについてのまとめ(編集中)

BASP21を使わない方法です。

というのも<input type="file" multiple>で複数のファイルをアップロードしようとしたときに、
BASP21では実現できませんでした。


.Netを使ってひとまずアップロードはできたのですが、以前見たBASP21を使わないコードを思い出して、
参考にして実際にやってみようと思い、今ここです。

ひとまずBASP21を使わないでアップロードする方法をググってみた

Request.BinaryReadで取得したデータをADODB.Streamで保存すればできます、ということでした。


また、以前見たコードというのはここの回答にある、

FCKEditorのファイルアップローダにあるよ!です。


FCKEditorはWYSIWYGエディタを探していたときに触ったことがあり、ファイルアップローダがいくつかの言語
から選べるようになっていて、その中にASPVBScript)も含まれていました。

FCKEditorはここの一番下です。(退役済み)
http://ckeditor.com/download
今はCKEditorです。
CKEditor
CKEditorではファイル関連はCKFinderとして分離されています。
CKFinder

切り出し方

このアップローダのコードを読んでみると、POSTされたデータからファイルのバイナリ部分を切り出しているのかがわかります。
やっている内容としては、

  1. POSTデータの中の改行(crlf)を検索
  2. 最初の改行までが区切り文字(Boundary) 
  3. 次の二連続した改行までがフォームの情報(name属性、ファイル名)
  4. 次の改行までがファイルのデータ
  5. これをADODB.Streamでファイルに保存

必要になるもの

vbscriptとして、ここで使うものは主に以下の3つです。

  1. Request.BinaryRead:POSTデータのバイト配列の読み出し
  2. ADODB.Stream:ファイルの保存、バイト配列のテキスト変換(.ReadText() )
  3. InStrB:バイト配列から改行を検索

このコードではファイルへの保存が別メソッドになっていましたが、
データ取得部分をコピーし、とりあえずファイルのデータを切り出したら即保存するようにして、
アップロードを確認できました。

そのほか気になる点など

  • 改行探すのはいいけど、<textarea>の改行は大丈夫?
  • FormとFileでそれぞれ別の配列(Dictionary)を作っているけど、そもそも1つのフォームから送られるのに受け側で分けてしまうのはなんだかしっくりこないのでFormだけにしたい

multipart/form-dataとboundaryについて

RFC2388
サンプルデータ

-----------------------------41184676334
Content-Disposition: form-data; name="files"; filename="new.txt"
Content-Type: text/plain 

ingredients 
-----------------------------41184676334
Content-Disposition: form-data; name="files"; filename="bew.png"
Content-Type: image/png

PNG

&#65533;&#65533;&#65533; IHDR&#65533;&#65533;&#218;&#65533;&#65533;&#216;&#65533;&#65533;&#65533;&#202;&#175;&#65533;&#65533;&#65533; pHYs&#65533;&#65533;&#139;&#65533;&#65533;&#142;sD&#220;&#65533;&#65533;c&#236;IDATx&#156;&#236;&#157;a|&#148;E&#250;&#199;&#183;÷&#222;&#179;&#155;&#222;{#´@&#232;]&#138;;*r&#246;&#179;\&#241;&#238;&#252;&#235;&#157;w&#222;&#217;&#209;;&#207; *¨&#135;&#244;&#222;&#139;&#132;&#132;&#150;&#132;&#244;&#158;&#236;n&#178;&#155;&#237;&#189;&#239;&#255;yw! R&#131;&#243;&#253;,&#225;&#221;÷&#157;w&#222;y&#223;&#157;&#242;{&#230;}f&#134;q&#129;@ &#226;V@&#186;&#213; @ &#129;@ ~&#189; 9&#142;@ &#129;@&#220;2&#144;G &#129;@ nH&#142;#&#129;@ &#183;$&#199;&#129;@ &#136;[&#146;&#227;&#129;@ &#196;-&#201;q&#129;@ &#226;&#150;&#129;&#228;8&#129;@ q&#203;@r&#129;@ &#129;&#184;e 9&#142;@ &#129;@&#220;2&#144;G 
-----------------------------41184676334--

ここで、「-----------------------------41184676334」がboundaryです。