2008/3/3 月曜日

ExcelVBAでUTF-8のcsvファイルを書き出す

このエントリをはてなブックマークに追加ExcelVBAUTF-8csv<ゃ吾冴のはてなブックマーク被リンク数
Filed under: windows — akky @ 21:56:06

表題の通り。

ADODB.Streamdでは、クローズするときにファイル名を指定するのはしっくりこないな。名前の通りにストリームだから「ファイル名なんて飾りですよ」ののりなのかな。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdobjstream.aspにあるマニュアルを探し出せるまで満足に実行することもできなかった。

Const SHEETNAME As String = "Sheet1" ' 対象とするシート名
Const STARTROW = 2 ' 開始行
Const LASTCOL = 13 ' 最終列

Private Sub cmdCSVoutput_Click()
    Dim excelFiles As Variant
    Dim exceiFile As String
    Dim csvFile As String
    Dim i As Integer

    ' 複数指定で対象とするファイルを指定
    exelfiles = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", MultiSelect:=True)
    ' キャンセル
    If Not IsArray(exelfiles) Then
        Exit Sub
    End If

    For i = 1 To UBound(exelfiles)
    ' 同じパスで拡張子をcsvへ変更してCSVファイルを書き出す
        exceiFile = exelfiles(i)
        csvFile = Mid(exceiFile, 1, Len(exceiFile) - 3) + "csv"
        csvputput exceiFile, csvFile
    Next i

End Sub

'
' 指定されたExcelファイル
'
Private Sub csvputput(ByVal excelFile As String, ByVal csvFile As String)
    Dim wb As Workbook

    Dim ws As Worksheet ' データがあるシート
    Dim lastRow As Long ' 最終行
    Dim col As Long ' 現在の対象列
    Dim row As Long ' 現在の対象行

    Dim buf As String
    Dim v As Variant

    ' 文字コードにUTF-8を指定して書き出すCSVファイルをオープン
    Set outStream = CreateObject("ADODB.Stream")
    outStream.Open
    outStream.Charset = "UTF-8" ' ファイルの文字コード
    outStream.LineSeparator = -1 ' CRLF
    outStream.Type = 2    ' テキスト

    ' 指定されたシートを開く
    Set wb = Workbooks.Open(excelFile)
    Set ws = wb.Worksheets(SHEETNAME)
    ' 出力するCSVファイルを開く

    ' ヘッダを飛ばして2行目からを書き出す
    lastRow = getLastRow(ws)
    For row = STARTROW To lastRow
        ' 1行分のデータを作成
        buf = ""
        For col = 1 To LASTCOL

            buf = buf & ",""" & ws.Cells(row, col) & """"
        Next
        buf = Mid(buf, 2)

        ' ファイルへ書き出し 文字コード変換は ADODB.Stream がやってくれる
        outStream.WriteText buf, 1

    Next
    ' ファイル名を指定してクローズ
    outStream.SaveToFile csvFile, 2
    outStream.Close

    ' Excelを閉じる
    wb.Close

End Sub

'
' 指定されたシートの最終行を取得する
'
' 行の各セルに値がなければ無効行と判断する
'
Private Function getLastRow(ws As Worksheet)
    Dim i As Long

    ' シートの末尾から先頭方向へ向かって有効な行がある位置を探す
    For i = ws.Cells(65535, 1).End(xlUp).row To 1 Step -1
        If isValidRow(ws, i) Then
            Exit For
        End If
    Next

    ' 最終行を戻り値に設定
    getLastRow = i
End Function

'
' 指定された行の値を検査して、一つでも値が入っていれば有効な行と判断する
'
Private Function isValidRow(ws As Worksheet, row As Long)
    Dim i As Long
    Dim b As Boolean

    b = False

    For i = 1 To LASTCOL
        If ws.Cells(row, i) <> “” Then
            b = True
            Exit For
        End If
    Next

    isValidRow = b
End Function

2008/2/12 火曜日

sambaのPDCにログインしたらプロファイルが無いって言われる。

このエントリをはてなブックマークに追加sambaPDC違ゃ潟<ゃ<c荐のはてなブックマーク被リンク数
Filed under: windows, linux — akky @ 20:09:28

この手順で作成したドメインへログインすると

移動プロファイルのサーバー用コピーが見つからないため、ローカルプロファイルを使ってログオンしようとしています。プロファイルへの変更は、ログオフ時にサーバーにはコピーされません。ネットワークの問題が発生しているか、セキュリティの権限が不足していることが原因と考えられます。問題が解決しない場合は、管理者に問い合わせてください。

とか

ローカルのプロファイルが見つかりません。一時的なプロファイルでログインしています。ログオフ時にこのプロファイルへの変更は失われます。

って言われる。samba userのサイトを見ながらわかったことは、ldapのsambaProfilePathのディレクトリが無いのが原因。/etc/samba/smb.conflogon pathをどれだけ編集していても解決できないわけだった。smbldap-usershowlogon pathが指すディレクトリを作成することでエラーの原因は解決。

smbldap-usermod -Fでldapのlogon path/etc/samba/smb.conflogon pathが同じディレクトリを指すように変更しておく。あと、ldapのlogon path/etc/smbldap-tools/smbldap.confuserProfileをテンプレートとしているので、これも修正しておく。

2008/1/29 火曜日

LDAPに登録したユーザを管理するツール LAM

このエントリをはてなブックマークに追加LDAP脂蚊若吟膊∞若 LAMのはてなブックマーク被リンク数
Filed under: windows — akky @ 22:38:16

先日作成した、LDAPサーバに登録してあるユーザを管理する方法を考えてみる。ベーシックにldifファイルで頑張るってもの方法だけど、メンドクサイ。LDAPの中身の直接見せてくれるツールでもいいのだけど、使い勝手が悪い。で、見つけたのが、
LDAP Account Manager (LAM)

ブラウザベースだし、日本語でも表示してくれる。でも・・・
更新するとエラーになっちゃうんだよ〜。プロパティが足りていないとか言われる。

Notice: Undefined index: userPassword in /usr/local/ldap-account-manager-2.2.0/lib/modules/inetOrgPerson.inc on line 614

とか

Notice: Undefined index: delPhoto in /usr/local/ldap-account-manager-2.2.0/lib/modules/inetOrgPerson.inc on line 627

とか。LDAPに入れてある属性が足りていないのかな。でも、ここでエラーと言われるのはキツイな。

2008/1/27 日曜日

CentOS5 に sambaを使ってドメインコントローラー

このエントリをはてなブックマークに追加CentOS5  samba篏帥c<ゃ潟潟潟若爾里呂討淵屮奪マーク被リンク数
Filed under: windows, linux — akky @ 21:44:45

足掛け2週間かけて、CentOSにOpenLDAP+Smbaを使ってドメインコントローラーを構築。なかなか、ドメインコントローラーへログインできずに手間取った。終ってみると、samba.confの記述が適切ではなかったのかな・・・
今後のためにも、手順を記載しておく。

環境はこちら。

OS
CentOS5.1。カーネルのバージョンは2.6.18-53.el5
OpenLDAP
yumでインストールした2.3.27-8
Samba
yumでインストールした3.0.25b-1.el5_1.4

手順はCentOS 5 で Samba を PDC にするを参考に、実践! Samba移行術 第2回:NT4.0→ Samba3.0への移行(1)以降の連載を見ながら。

以降は手順

LDAP インストール

# yum install openldap-servers

ldapのsamba用スキーマをコピー

# cp /usr/share/doc/samba-3.0.25b/LDAP/samba.schema /etc/openldap/schema/

LDAPサーバの設定ファイル /etc/openldap/slapd.conf を編集

# vi /etc/openldap/slapd.conf

追加
 include         /etc/openldap/schema/samba.schema
変更
 suffix          "dc=my-domain,dc=com"
 rootdn          "cn=Manager,dc=my-domain,dc=com"
↓
 suffix          "dc=example,dc=co,dc=jp"
 rootdn          "cn=Manager,dc=example,dc=co,dc=jp"
追加
 rootpw          ramius
追加
 access to * by * read

 access to attrs=userPassword,sambaLMPassword,sambaNTPassword
        by self write
        by users read
        by anonymous auth

LDAPのサービス開始

 # service ldap start
 # cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
 # service ldap restart
 # chkconfig ldap on

認証の変更

# authconfig-tui

authconfig-tui - (c) 1999-2005 Red Hat, Inc.

            ┌───────┤ 認証の設定 ├───────────│
            │  ユーザー情報         認証                          │
            │  [ ] キャッシュ情報   [*] MD5 パスワードを使用      │
            │  [ ] Hesiod を使用    [*] シャドウパスワードを使用  │
            │  [*] LDAP を使用      [*] LDAP 認証を使用           │
            │  [ ] NIS を使用       [ ] Kerberos 5 を使用         │
            │  [ ] Winbind を使用   [ ] SMB 認証を使用            │
            │                       [ ] Winbind 認証を使用        │
            │                       [*] ローカル認証は十分です    │
            │                                                     │
            │         ┌─────┐                ┌──┐      │
            │         │ 取り消し │                │ 次 │      │
            │         └─────┘                └──┘      │
            │                                                     │
            └──────────────────────────┘

次の画面

authconfig-tui - (c) 1999-2005 Red Hat, Inc.

            ┌─────────┤ LDAP 設定 ├───────────│
            │           [ ] TLS を使用                            │
            │  サーバー: ldap://127.0.0.1/_______________________ │
            │ ベース DN: dc=example,dc=co,dc=jp________________ │
            │                                                     │
            │          ┌───┐                  ┌──┐       │
            │          │ 戻る │                  │ OK │       │
            │          └───┘                  └──┘       │
            │                                                     │
            └───────────────────────────┘

/etc/samba/smb.conf を編集

smbldap-xxはこの後インストールします。

[global]
        dos charset = CP932
        display charset = UTF-8
        workgroup = TECHBEAT
        passdb backend = ldapsam
        guest account = Guest
        add user script = /usr/sbin/smbldap-useradd -m '%u'
        delete user script = /usr/sbin/smbldap-userdel -r '%u'
        add group script = /usr/sbin/smbldap-groupadd -p '%g'
        delete group script = /usr/sbin/smbldap-groupdel '%g'
        add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
        delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
        set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
        add machine script = /usr/sbin/smbldap-useradd -w '%u'
        domain logons = Yes
        os level = 64
        preferred master = Yes
        domain master = Yes
        wins support = Yes
        ldap admin dn = cn=Manager,dc=my-domain,dc=com
        ldap group suffix = ou=Groups
        ldap machine suffix = ou=Computers
        ldap passwd sync = Yes
        ldap suffix = dc=techbeat,dc=co,dc=jp
        ldap user suffix = ou=Users
        add share command = /usr/lib/samba/bin/addshare
        change share command = /usr/lib/samba/bin/chgshare
        delete share command = /usr/lib/samba/bin/delshare
        admin users = Administrator
        force unknown acl user = Yes
        dos filetime resolution = Yes

        load printers = no
        disable spoolss = yes

;       logon home =
;       logon script = %u.bat
;       logon path = \%LProfiles%u
;       logon path =
        logon drive = H:s

[C$]
        path = /
        valid users = administrator
        write list = administrator

[homes]
        comment = Home Directories
        read only = No
        browseable = No

[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No

[netlogon]
        comment = Network Logon Service
        path = /var/lib/samba/netlogon
        write list = administrator
        guest ok = Yes

[Profiles]
        path = /var/lib/samba/profiles
        create mask = 0600
        directory mask = 0700
        guest ok = Yes
        profile acls = Yes
        browseable = No

netlogonとprofilesのディレクトリ作成

 # mkdir -p /var/lib/samba
 # mkdir -p /var/lib/samba/{netlogon,profiles}
 # chown root:root -R /var/lib/samba/
 # chmod 0755 /var/lib/samba/netlogon
 # chmod 1755 /var/lib/samba/profiles

LDAPの管理者(rootdn)のパスワード登録

# smbpasswd -w パスワード

smbldap-tool を設定

 # cd /usr/share/doc/samba-3.0.25b/LDAP/smbldap-tools-0.9.2
 # vi Makefile
prefix=/usr
sbindir=$(prefix)/sbin
sysconfdir=/etc
 # make install
 # chmod 755 configure.pl
 # ./configure.pl

configure.plを使うと、対話形式で/etc/smbldap-tool のsmbldap.confとsmblda_bind.confを設定できます。
これらのファイルは/usr/sbin/smbldap-xxが参照する設定ファイルです。途中エラーもでますが、無視(^ ^;)して進めちゃいます。

LDAPサーバへの初期データ投入

 # wget http://dag.wieers.com/rpm/packages/perl-Crypt-SmbHash/perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
 # rpm -ivh perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
 # cpan install Unicode::MapUTF8
 # /usr/local/sbin/smbldap-populate -a Administrator -b Guest

sambaへ登録したドメイン管理者のパスワード設定

# smbldap-passwd Administrator

sambaサービスを再起動

# service smb start
/var/log/samba/smbd.log に下のエラーが手続けるのは、 ldapに管理者で接続できていない。のが原因

[2008/01/25 11:45:31, 1] lib/smbldap.c:another_ldap_try(1153)
Connection to LDAP server failed for the x try!

対応は
・「smbpasswd -w パスワード」を再実行
・/etc/samba/smb.conf の 「ldap admin dn」を確認

sambaへグループを登録

# smbldap-groupadd -a regularStaff

sambaへユーザを登録

# smbldap-useradd -a -m -P -g regularStaff ldapuser
Domain Usersにも含めたいときは -G “Domain Users”

samba(といかLDAP)に登録したユーザとシステム認証との関係を確認

authconfig-tuiとldapへの登録が行なえていると、
# getent passwd
でユーザの、
# getent group
でグループの一覧が見れます。/etc/passwd及び、/etc/groupとLDAPへ登録した内容が合わされて表示されます。LDAPに登録した分が表示されないのであれば、authconfig-tuiを見直してください。

2007/12/11 火曜日

LinuxからWindowsのファイル共有をmountする。 cifsで。

このエントリをはてなブックマークに追加LinuxWindows<ゃ掩mountcifsсのはてなブックマーク被リンク数
Filed under: windows — akky @ 12:07:00

smbmountでWindowsXPの共有をmountしようとしたけど、漢字の文字化けを解決できなかった。コマンドはこんなん。ちなみに、smbmountを実行しているのは、CentOS4.5。localeはja_JP.UTF-8。

smbmount ‘//WindowsXPのIPアドレス/共有名’ /media/smb -o username=WindowsXPのユーザ,password=WindowsXPのパスワード,codepage=cp932,iocharset=utf8

マウント自体はできるものの、漢字を含む文字化けを解消できない。

でぐるぐるして、cifsにたどり着く。Windows上のファイルにLinuxからアクセスするには(mount.cifs編)を参考にして、cifsでマウントする。

mount -t cifs ‘//WindowsXPのIPアドレス/共有名’ /media/smb -o username=WindowsXPのユーザ,password=WindowsXPのパスワード

2007/10/1 月曜日

画面キャプチャーのツール

このエントリをはてなブックマークに追加脂≪cc若若のはてなブックマーク被リンク数
Filed under: windows — akky @ 17:22:25

数ある画面キャプチャーツールの中で愛用しているのは

の二つ

CaptureXPはタイマー指定でキャプチャーが便利。、ツールバーやプルダウンメニューなどを含めてキャプチャーしたい時に、キャプチャーしたいメニューを表示した状態でctl+PrintScreenを押してしまうとメニューがない状態でのキャプチャーになってしまう。そこで、CaptureXPをタイマー指定でキャプチャーを開始し、タイマーで待っている間にメニューを表示させ待つ。待ちが終るとキャプチャーしたいウィンドウを指定してキャプチャー。
写真を撮影するカメラのセルフタイマーを使って撮影するのに似ている。

もう一つのFastStone Captureは画面スクロールしてキャプチャーしてくれるのが便利。延々と縦スクロールする画面を部分々でキャプチャーしてペイントで切り貼りしていた手間がアホに感じられる。惜しく感じるのはウィンドウの内側だけなので、ウィンドウのタイトルやメニュー部分を含められないということ。Ver5.3までは無料でVer5.4以降はシェアウェアになってしまったので使っていないため最新事情は分からない。もしかすると改善されているのかもしれない。

2007/9/26 水曜日

Microsoft Script Editorを使ったIEで動作しているJavaScriptをデバックする方法

このエントリをはてなブックマークに追加Microsoft Script Editor篏帥cIEу篏JavaScript号のはてなブックマーク被リンク数
Filed under: windows — akky @ 21:45:53

Webアプリの開発をしていて、FireFoxにFirebugを使ってデバックしているのだけど、どうしてもブラウザ実装の差異でIEでは動かない場面が出てきてしまう。これまでIEでデバックするときは古典的な方法でalertを使いせっせと変数の値を参照していたのだけど、どうしても面倒になってしまう。
IEではJavaScriptでエラーになったときに表示される警告ダイアログ内の行と文字を見ても、問題となった箇所へたどり着くのが困難な場合が多いので、Office2003に入っているMicrosoft Script Editorを使うとデバッガが立ち上がりエラーの箇所を示してくれる。でも、変数の値を参照できない(?)のでデバッガが立ち上がったからといって問題を解決できている状況でもない。
この状況で、IEでのデバックの効率を上げるために数日模索していた結果、Microsoft Script Editorを使いブレイクポイントを設定してデバックする方法が分かったので、その手順を記録しておく。

あっ。Visitual Stadioをいう案もあるのかもしれないけど、JavaScriptをデバックするためだけにあんな重たいものをインストールするのは無し。

  1. Microsoft Script Editorのインストール。英語だけどHOW-TO: Debug Javsscript in Internet Explorerを参考
  2. IEを起動して、デバックしたいページへ遷移
  3. Microsoft Script Editorはスタートメニューに登録されないので、「名前を指定して実行」からバイナリーを直接起動C:\Program Files\Microsoft Office\OFFICE11\MSE7.EXE
  4. 「デバック」→「プロセス」を選択して、プロセス一覧を表示
    Microsoft Script Editor デバック1
  5. プロセス一覧のタイトルにはウィンドウのタイトルが出ているので、これを頼りにIEのプロセスを特定して、「アッタチ(A)」ボタンを押す。
    Microsoft Script Editor デバック2
  6. 「プロセスにアッタチ」というウィンドウが表示されるので、そのまま「OK」。
    Microsoft Script Editor デバック3
  7. アッタチしたら、プロセス一覧のウィンドウは必要ないので閉じる。
  8. 「デバック」→「ウィンドウ」から「実行中のドキュメント」を選択して、「実行中のドキュメント」を表示する。
  9. 「実行中のドキュメント」からデバックしたいJavaScriptのソースファイルを選択(ダブルクリック)する。
    Microsoft Script Editor デバック5
  10. ソースコードが表示されるので目的の場所へブレークポイントを設定。

    Microsoft Script Editor デバック6
  11. アッタチされたIEから操作を行なうと、ブレークポイントで停止する。この後は、ウォッチとステップ実行でデバックを進める
  12. 終るときは、「デバッグ」→「すべてデタッチ」を選択して、IEのプロセスをMiscsoft Script Editorから解放。
    Microsoft Script Editor デバック7

2007/8/22 水曜日

Windows XP proだけな環境でのNetBIOS名の解決 メモ

このエントリをはてなブックマークに追加Windows XP pro医сNetBIOS茹f浦<△里呂討淵屮奪マーク被リンク数
Filed under: windows — akky @ 18:33:30

直接的な解決方法ではないです

マスタブラウザを調べる

@IT Windowsネットワークのマスタ・ブラウザを調査する

borwstat.exeは C:\SUPPORT\TOOLS\SETUP.EXE を実行してインストールする

nbtstat を使ってみる

@IT ホスト名からIPアドレスを見つける方法

nbtstat -a ホスト名
16バイト目の説明 http://www.winningball.com/jp/software/wbNbtStat/wbNbtStat01.html

マイ ネットワークで表示される一覧をコマンドラインから

net view

LMHOSTSを編集して反映させる

NetBIOS名は%windir%\system32\drivers\etc\lmhostsに記述する。編集しただけではWindowsを再起動させないと反映されない。再起動させなないで反映させるにはnbtstatをつかう。
nbtstat -RR

Microsoft TechNet nbtstat コマンドを使って NetBIOS 名を解放および更新する

@IT LMHOSTSファイルの更新を即座に反映させる方法 

2007/4/17 火曜日

MSN サーチツールバー を入れてIEでタブブラウズ

このエントリをはてなブックマークに追加MSN 泣若若 ャIEс帥困里呂討淵屮奪マーク被リンク数
Filed under: windows — akky @ 0:00:00

普段つかうwebブラウザはFirefoxが自分的標準なのだけど、仕事でIE(だけ?)をサポートするものを作っているとIEを使わざるを得ない。IEはWindowsXPの標準的なVer.6SP2を使っていて、ウィンドウの数が増えてくるとウィンドウを切り替えるのが使いにくい。Sleipniを使うことも考えたのだけど、何かあったら(って何だ?)いやなのでIEで行きたい。

そこで見つけたのがMSN サーチ ツールバー本来はgoogle disktopのMicrosoft版でそのおまけ程度にタブブラウズの機能がついている。検索の機能は使わないので即効でoff。タブブラウズの機能としては特段目新しいものは無いが、ウィンドウの数が増えなくて快適。快適。

次のページ »