-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2010年06月09日

xpWikiが読み込むCSSのカスタマイズ

[スタイルシートについて] - xpWiki::Dev - XOOPSマニア:参考
xpWikiが読み込むCSSの実体は、
XOOPS_TRUST_PATH/modules/xpwiki/skin/css
ディレクトリにあります。

ページを表示する場合に必ず読み込まれる CSS は main.css (media="all") と main_print.css (media="print") です。

この main.css を上書きするためには、
XOOPS_ROOT_PATH(html側)/modules/[インストールディレクトリ]/skin/css ディレクトリに、main.css というファイル名でアップロードします。

さらに、スキンにより上書きすることができます。そのためには、
XOOPS_ROOT_PATH(html側)/modules/[インストールディレクトリ]/skin/[スキン名] ディレクトリに、main.css というファイル名でアップロードします。

まとめると、デフォルトのスキン「default」における main.css の読み込み順は次のようになります。

1. XOOPS_TRUST_PATH/modules/xpwiki/skin/css/main.css
2. XOOPS_ROOT_PATH/modules/[インストールディレクトリ]/skin/css/main.css
3. XOOPS_ROOT_PATH/modules/[インストールディレクトリ]/skin/default/main.css

 参考にさせていただいた上記引用、1の位置にあるmain.cssを3の位置にコピペしました。
 実際に表示されているブラウザのページで、ページのソースをみると、<div id="xpwiki_body">などという変更したい位置にあるID属性が確認が出来ます。
 CSS呼び込みの上書き(オーバライド)用に用意した
main.cssを開き、これも引用した次の説明を参考に、該当箇所を探し、編集しました。
$class は、モジュールディレクトリ名にあわせたクラスセレクタ文字列に置換されます。(モジュールディレクトリ名が xpwiki ならば、"div.xpwiki_xpwiki")

 ID属性が「xpwiki_body」の場合、次の位置を編集しました。

$class div.body {
    width:700px; ←この部分を記事の表示幅を変更するために追記しました。
    padding:0px;
    margin:0px 0px 0px 0px;
}





posted by hirono at 01:14| Comment(0) | TrackBack(0) | プログラミング

xpWikiのスタイルシートで画像ファイルを読み込むパス指定

[スタイルシートについて] - xpWiki::Dev - XOOPSマニア
背景画像などに、URLを指定したい場合に相対パスを使う場合は、XOOPS_URL/modules/[DirName]/skin/loader.php が 自己CSS のパスになりますので、この位置から計算して相対パスを指定する必要があります。

 さくらインターネットの場合、通常は、
  /home/(ユーザ名)/www/xoops/modules/xpwiki/skin/loader.php
の位置が基準ということになりそうです。

posted by hirono at 00:47| Comment(0) | TrackBack(0) | プログラミング

2009年12月24日

[Excel-VBA]メール送信の記録用のマクロ

このマクロの実行側のワークシートです。ログファイルは独立したファイルとして保存され、読み込まれます。

送信メール2009年12月24日
送信メール2009年12月24日 posted by (C)hirono-hideki

Sub createLog_Click()
    Dim cureentBook As Workbook, logBook As Workbook
    Dim strDir As String, strFileName As String, sfilename As String
    strDir = "D:\VMwareShare\Kokuhatu\Mail\Logs\" '作業ディレクトリ
    strFileName = strDir & "send-mail-log_" & Format(Now, "yyyymmdd") & ".xls" '絶対パスのファイル名
    Set cureentBook = ActiveWorkbook '現在のワークブックを保持

    'ディレクトリパスと拡張子を除いたファイル名を取得
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    sfilename = FSO.GetBaseName(strFileName)
    MsgBox sfilename
        'ログ記録用のファイルを開く、存在しない場合は新規作成。

'ブックが開かれている場合はフラグを付ける。
    Dim chk As Boolean
    For Each wb In Application.Workbooks
        If wb.Name = sfilename & ".xls" Then
            chk = True
            Exit For
        Else
            chk = False
        End If
    Next

'ブックが開かれているか確認。開かれていない場合はファイルから読み込む。
If chk Then
    MsgBox "ブックは既に開かれています。"
Else
    'ログ記録用のファイルを開く、存在しない場合は新規作成。
    If Dir(strFileName) <> "" Then
        MsgBox "存在します。開きます。"
        Workbooks.Open strFileName
    Else
      MsgBox "存在しません。新規作成します。"
    ' フォルダに指定したファイルがないとき、ファイルを新規作成して名前を付ける
        Workbooks.Add
        ActiveWorkbook.SaveAs FILENAME:=strFileName
        ActiveWorkbook.Close
        Workbooks.Open strFileName
    End If
End If

    '元のブックをアクティブにし、データ範囲をコピー
    cureentBook.Activate
    Sheets("送信").Select
      
    Range("A11:C11").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Cells(24, 5).Select
   
    Application.DisplayAlerts = False      '確認ダイアログを表示させない
    Application.ScreenUpdating = False    '画面更新を中断する<
   
    'ログファイルのブックをアクティブにし、名前をつけてシートを新規に作成し、データを貼付け。
    Set logBook = Workbooks(sfilename & ".xls")
    logBook.Activate
    Dim NewWS As Worksheet
   
    '同一シート名の確認
    Dim chkSheetName As String
    chkSheetName = Format(Now, "yyyy年mm月dd日hh時nn分")
    For Each objWS In logBook.Worksheets
        If objWS.Name = chkSheetName Then
                MsgBox chkSheetName & "というシート名は既に存在します。1分時間をずらしてやり直して下さい。"
                Application.CutCopyMode = False
                Exit Sub
        End If
    Next

    Set NewWS = Worksheets.Add

    'NewWS.Range("A1:C1").Select
    NewWS.Paste
    NewWS.Columns("A:C").AutoFit
   
    NewWS.Name = Format(Now, "yyyy年mm月dd日hh時nn分")


    'Sheet1のシートを削除
    For Each objWS In logBook.Worksheets
        If objWS.Name = "Sheet1" Then
                Worksheets("Sheet1").Delete
        End If
    Next
   
   
    Application.DisplayAlerts = True      '確認ダイアログを表示する
    Application.ScreenUpdating = True    '画面更新を再開する

    Cells(24, 5).Select
    Application.CutCopyMode = False
   
    ActiveWorkbook.Save
    'ActiveWorkbook.Close
   
End Sub

 改良しました。作成されたログファイルはこんな感じです。実際に送信しておらず、一部手を加えたところもあります。
send-mail-log
send-mail-log posted by (C)hirono-hideki


 はじめからunionというのを使っていれば、ずっと完結できたと思います。改善の余地はまだまだありそうですが、過程というのも大事なので、そのままのコードを記載しておきます。文字修飾のあたりは、面倒なので、記録した自動マクロからコピペしました。
修正コード
Sub createLog_Click()
    Dim cureentBook As Workbook, logBook As Workbook
    Dim strDir As String, strFileName As String, sfilename As String
    strDir = "D:\VMwareShare\Kokuhatu\Mail\Logs\" '作業ディレクトリ
    strFileName = strDir & "send-mail-log_" & Format(Now, "yyyymmdd") & ".xls" '絶対パスのファイル名
    Set cureentBook = ActiveWorkbook '現在のワークブックを保持

    'ディレクトリパスと拡張子を除いたファイル名を取得
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    sfilename = FSO.GetBaseName(strFileName)
    MsgBox sfilename
        'ログ記録用のファイルを開く、存在しない場合は新規作成。

'ブックが開かれている場合はフラグを付ける。
    Dim chk As Boolean
    For Each wb In Application.Workbooks
        If wb.Name = sfilename & ".xls" Then
            chk = True
            Exit For
        Else
            chk = False
        End If
    Next

'ブックが開かれているか確認。開かれていない場合はファイルから読み込む。
If chk Then
    MsgBox "ブックは既に開かれています。"
Else
    'ログ記録用のファイルを開く、存在しない場合は新規作成。
    If Dir(strFileName) <> "" Then
        MsgBox "存在します。開きます。"
        Workbooks.Open strFileName
    Else
      MsgBox "存在しません。新規作成します。"
    ' フォルダに指定したファイルがないとき、ファイルを新規作成して名前を付ける
        Workbooks.Add
        ActiveWorkbook.SaveAs FILENAME:=strFileName
        ActiveWorkbook.Close
        Workbooks.Open strFileName
    End If
End If

    '元のブックをアクティブにし、データ範囲をコピー
    cureentBook.Activate
    Sheets("送信").Select
      
    Range("A10:C10").Select
    Range(Selection, Selection.End(xlDown)).Select

    Selection.Copy
    Cells(24, 5).Select
   
    Application.DisplayAlerts = False      '確認ダイアログを表示させない
    Application.ScreenUpdating = False    '画面更新を中断する<
   
    'ログファイルのブックをアクティブにし、名前をつけてシートを新規に作成し、データを貼付け。
    Set logBook = Workbooks(sfilename & ".xls")
    logBook.Activate
    Dim NewWS As Worksheet
   
    '同一シート名の確認
    Dim chkSheetName As String
    chkSheetName = Format(Now, "yyyy年mm月dd日hh時nn分")
    For Each objWS In logBook.Worksheets
        If objWS.Name = chkSheetName Then
                MsgBox chkSheetName & "というシート名は既に存在します。1分時間をずらしてやり直して下さい。"
                Application.CutCopyMode = False
                Exit Sub
        End If
    Next

    Set NewWS = Worksheets.Add

    NewWS.Range("A7").Select
    NewWS.Paste
    NewWS.Columns("A:J").AutoFit
   
    NewWS.Name = Format(Now, "yyyy年mm月dd日hh時nn分")


    'Sheet1のシートを削除
    For Each objWS In logBook.Worksheets
        If objWS.Name = "Sheet1" Then
                Worksheets("Sheet1").Delete
        End If
    Next
   
   
    Application.DisplayAlerts = True      '確認ダイアログを表示する
    Application.ScreenUpdating = True    '画面更新を再開する

    Cells(24, 5).Select
    Application.CutCopyMode = False
   
  
    ActiveWorkbook.Save
    'ActiveWorkbook.Close
   
    cureentBook.Activate 'ログブックをアクティブ
     'Set r = Range(Cells(1, 1), Cells(8, 10))
     Set r = Union(Range(Cells(1, 1), Cells(4, 10)), Range(Cells(8, 1), Cells(8, 10)))

    r.Copy Destination:=logBook.Worksheets(NewWS.Name).Range("A1")
    NewWS.Columns("A:J").AutoFit

    logBook.Activate

    Range("D1").ColumnWidth = 10
   
    Range("A6").Value = "送信履歴"
    Range("A6").Select
    With Selection
        .HorizontalAlignment = xlDistributed
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 1
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection.Font
        .Name = "MS Pゴシック"
        .FontStyle = "太字"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 3
    End With
    With Selection.Interior
        .ColorIndex = 40
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With

End Sub



posted by hirono at 05:24| Comment(1) | TrackBack(0) | プログラミング

2009年11月16日

[MySQL]Ubuntu9.10でMySQLの文字化け解決

愉快議 〜実践塾〜 - Rails + MySQL の文字化けが直った!

 参考にさせていただきました。おかげさまで大助かりです。パソコンの環境を変え、MySQLをインストールするたびに、直面する煩わしい問題ですが、今回はもっともすっきり簡単に解決できたような感じです。

 Ubuntu9.10の場合、/etc/mysql/my.cnfははじめから存在しました。

[mysqld]の下に、
default-character-set=utf8
skip-character-set-client-handshake 
の2行を加え、
sudo /etc/init.d/mysql restart
でMySQLを再起動させるだけでうまくいったみたいです。

 あわせて、これも新規にインストールしたRailsの動作確認もできました。

こんな感じです。
u9-mysql-moji_20091116
u9-mysql-moji_20091116 posted by (C)hirono-hideki

Powered by ScribeFire.



posted by hirono at 18:45| Comment(0) | TrackBack(0) | プログラミング

2009年11月13日

Google、オープンソースのプログラミング言語「Go」リリース - ITmedia News

Google、オープンソースのプログラミング言語「Go」リリース - ITmedia News
 米Googleは11月10日、プログラミング言語「Go」をBSDライセンスの下、オープンソースで公開した。マルチコアプロセッシングに対応し、公式ブログによると、“Pythonのようなダイナミック言語での開発スピードと、CやC++のようなコンパイル言語の持つ性能を併せ持つ”という。Linux版とMac版がGoのサイトにインストール方法などの説明がある。  GoはGoogleの7人の社員が「20%の自由時間」を利用して開発した。メンバーには、Google ChromeのV8エンジンを開発したロバート・グリースナー氏、分散オペレーティングシステム「Plan 9」の創案者であるロブ・パイク氏、UNIXの開発に携わったケン・トンプソン氏、などが名を連ねる。  Goチームは、コンピュータ科学はこの10年で大きく進歩したにもかかわらず、その間新たなシステム言語は登場しておらず、コンピュータの速度にソフトウェア開発がついていっていないと考えており、こうした状況の打開を試みるためにGoを開発したとしている。

 GoogleがBSDのライセンスというのは意外な気がしました。期待の持ちたくなる最新技術です。

Powered by ScribeFire.

posted by hirono at 10:56| Comment(0) | TrackBack(0) | プログラミング

LaTeXの特殊文字

LaTeXの特殊文字
LaTeXの特殊文字

 参考にさせていただきました。

 ケースごとに試していないので、十分かどうかわからないのですが、Perlで次のような変換処理を作りました。

cat $WORKFILE | perl -ne 'unless (/^\\.+\{.+\}$/) { s/(.+)/$1\\\\/;
        s/#/\\#/g;
        s/%/\\%/g;
        s/_/\\_/g;
        s/\{/\\\{/g;
        s/>/\\>/g;
        s/\^/\\verb\|\^\|/g;
        s/~/\\verb\|~\|/g;
        s/\|/\\verb\+\|\+/g;
        s/</\\verb\|<\|/g;
        s/\}/\\\}/g;
        s/&/\\&/g;}

        print;' > $DIR/work/work.tex


 awkのなかでは、|のエスケープは必要ないみたいでした。Perlとawkの正規表現は違っているはずだと思いますが、その都度、適当にやっているので、正確にわかっていません。ただ、sedでは(や)にエスケープが必要なのに、Perlは不要なのは最近になってはっきり覚えました。

     awk '{if(/^\\.+\{.+\}$/){sub(/>/,")"); sub(/</,"(");}}
     {if(/^\\chapter/){sub(/\\chapter/, "\\section")}
            else if(/^\\section/){sub(/\\section/, "\\subsection")}
            else if(/^\\subsection/){sub(/\\subsection/, "\\subsubsection")}
            else if(/^\\subsubsection/){sub(/\\subsubsection/, "\\paragraph")}}
            {print;}' > ./work/tmp.file




Powered by ScribeFire.

posted by hirono at 01:43| Comment(0) | TrackBack(0) | プログラミング

2009年11月07日

[Perl]ワンライナーでのフィールド変数

一行野郎(one-liner)はperlにおまかせ
-aでawkっぽく

-nまたは-pさらに-aを加えると、AWKっぽい処理も可能になります。ただし、$1, $2といった、awkではフィールド変数にあたる変数はPerlではregexpで使われているので、フィールドは@Fという配列に格納されます。


 ちょっと試してみました。

u8w@u8w-desktop:~$ ppp=$(for i in `seq -f 'x=%04g' 12 | tr "\n" " "`; do echo -n "$i "; done)
u8w@u8w-desktop:~$ echo $ppp
x=0001 x=0002 x=0003 x=0004 x=0005 x=0006 x=0007 x=0008 x=0009 x=0010 x=0011 x=0012
u8w@u8w-desktop:~$ echo $ppp | perl -anle'print $F[10]'
x=0011



Powered by ScribeFire.

posted by hirono at 13:17| Comment(0) | TrackBack(0) | プログラミング

2009年10月25日

htmlのブロック要素レベルを枠付けて表示(web developer tools)

Webdeveloperのダウンロード:ミナトラボ

 だいぶん前にこのアドオンをインストールしていたのですが、ツールバーを非表示にしたまま、ほとんど使っていませんでした。JavaScriptやCSSの有効、無効を簡単に切り替えたりすることもできるのですが、htmlを編集する上でかなり役立つのではないかと思います。FirefoxのアドオンなのでFirefoxさえインストールしてあれば使うのは簡単だと思います。

こんな感じです。
web-developer_20091025
web-developer_20091025 posted by (C)hirono-hideki

Powered by ScribeFire.

posted by hirono at 21:16| Comment(0) | TrackBack(0) | プログラミング

2009年10月22日

[Perl] 正規表現(後方参照、最短マッチ)

こういうのも時間がたつと忘れてしまうのでメモしておきます。$1、$3の部分が後方参照です。[^"]+?が最短マッチです。

処理対象のファイルの内容(一時的に使うファイル名なので一文字にしています。)
FU:[tmptmp]% cat k|perl -p -e 's/^(<a href=")([^"]+)("><img src=")(http:[^"]+)(.*)/$1$2$3$2\?size=800$5/; \ s/(<img src=".+?)show([^"]+?)/$1photo_only$3/;' <a href="http://photozou.jp/photo/show/228411/28096196"><img src="http://photozou.jp/photo/photo_only228411/28096196?size=800" alt="wallpaper03_1024" width="239" height="179" style="border:0" /></a><br /><a href="http://photozou.jp/photo/show/228411/28096196">wallpaper03_1024</a> posted by <a href="http://photozou.jp/user/top/228411">(C)hirono-hideki</a>


 URLの勘違いをしていたので使い物にならないのですが、
<img src="http://art15.photozou.jp/pub/411/228411/photo/28096196.jpg"
の部分を、
<img src="http://photozou.jp/photo/photo_only/228411/28096196?size=800"
に置き換えました。



 シェルから次のように試してみるとわかりやすいかもしれません。
FU:[tmptmp]% echo "aaa bbb ccc"|perl -p -e 's/(aaa) (bbb) (ccc)/fff/'
fff
FU:[tmptmp]% echo "aaa bbb ccc"|perl -p -e 's/((aaa) (bbb)) (ccc)/$1/'
aaa bbb
FU:[tmptmp]% echo "aaa bbb ccc"|perl -p -e 's/((aaa) (bbb)) (ccc)/$2/'
aaa
FU:[tmptmp]% echo "aaa bbb ccc"|perl -p -e 's/((aaa) (bbb)) (ccc)/$4/'
ccc
FU:[tmptmp]% echo "aaa bbb ccc"|perl -p -e 's/((aaa) (bbb)) (ccc)/$3/'
bbb
FU:[tmptmp]% 

Powered by ScribeFire.



posted by hirono at 01:39| Comment(0) | TrackBack(0) | プログラミング