NEW <- : 1 2 3 4 5 : -> OLD

2019/08/12

highlight.jsを導入してみる

別になんてこたないんだけどね。

highlightjs.orgというサイトで公開されているライブラリを使用すれば、ブログ記事とかにプログラムのコードを貼り付けると自動的にシンタックスハイライトをしてくれるらしい。

blosxomのプラグインとしてコードをシンタックスハイライトする奴を作ろうかなー、とか思ってたけど既にあったわ。という話。

というわけで、ちょっと実験。

Option Explicit

'---------------------------------------------------------------------------------------------------
' クイックソート関数(SourceArray   <配列>)
'   説明: 渡された配列の要素をクイックソート(非安定ソート)で昇順に並び替える。
'---------------------------------------------------------------------------------------------------
Public Function QuickSort(ByVal SourceArray As Variant) As Variant

    Dim valSwap As Variant      'バッファ(値交換用)
    Dim valLEnd As Variant      '左端の値
    Dim valREnd As Variant      '右端の値
    Dim valMed As Variant       '中央値
    Dim bndLEnd As Long         '左端の位置
    Dim bndREnd As Long         '右端の位置
    Dim stackSize As Long       'スタック配列のサイズ(最大添字)
    Dim stackBottom As Long     'スタック配列の最小添字
    Dim bndLEnds() As Long      '左端の位置を記憶するスタック(配列)
    Dim bndREnds() As Long      '右端の位置を記憶するスタック(配列)
    Dim ptrStack As Long        'スタック(配列)のポインタ
    Dim ptrLtoR As Long         '左端から右に向かって探索するポインタ(Lポインタと呼称)
    Dim ptrRtoL As Long         '右端から左に向かって探索するポインタ(Rポインタと呼称)

    If Not IsArray(SourceArray) Then
        Exit Function
    End If

    '初期処理
    Let bndLEnd = LBound(SourceArray)   '引数の左端と右端の位置(スタックサイズ計算・スタック積み上げに使用)
    Let bndREnd = UBound(SourceArray)
    Let stackBottom = LBound(Array())   'スタックの最小添字(底のスタックポインタ)
    Let stackSize = Int(Log(bndREnd - bndLEnd + 1) / Log(2)) + stackBottom  'スタックサイズはLog2(n)個で足りる
    ReDim bndLEnds(stackSize)           'スタック確保
    ReDim bndREnds(stackSize)
    Let ptrStack = stackBottom          '全体の範囲をスタックの底に積み上げ
    Let bndLEnds(ptrStack) = bndLEnd
    Let bndREnds(ptrStack) = bndREnd

    'メイン処理
    Do Until ptrStack < stackBottom     'すべてのスタックが処理されるまで繰り返す

        'スタック・値取り出し
        Let bndLEnd = bndLEnds(ptrStack)    'スタックから両端の位置を取り出す
        Let bndREnd = bndREnds(ptrStack)
        Let ptrLtoR = bndLEnd               '両端の位置をLポインタ・Rポインタにそれぞれセット
        Let ptrRtoL = bndREnd
        Let valLEnd = SourceArray(ptrLtoR)  '両端の値と中間位置の値を取り出す
        Let valREnd = SourceArray(ptrRtoL)
        Let valMed = SourceArray(ptrLtoR + Int((ptrRtoL - ptrLtoR) / 2))

        '中央値取得(左端の値・右端の値・中間位置の値、の3値から中央値を求める)
        If valLEnd > valMed Then
            If valREnd > valLEnd Then
                Let valMed = valLEnd
            ElseIf valREnd > valMed Then
                Let valMed = valREnd
            End If
        ElseIf valLEnd > valREnd Then
            Let valMed = valLEnd
        ElseIf valMed > valREnd Then
            Let valMed = valREnd
        End If

        'スタック範囲内探索・値交換
        Do Until ptrLtoR > ptrRtoL          'LポインタとRポインタの位置が逆転するまで繰り返す
            Do Until SourceArray(ptrLtoR) >= valMed
                Let ptrLtoR = ptrLtoR + 1   '左から右へ、中央値以上の値の位置を探索する
            Loop
            Do Until SourceArray(ptrRtoL) <= valMed
                Let ptrRtoL = ptrRtoL - 1   '右から左へ、中央値以下の値の位置を探索する
            Loop
            If ptrLtoR <= ptrRtoL Then
                If ptrLtoR < ptrRtoL Then               'Lポインタ<Rポインタ であれば、左の値と右の値を交換する
                    Let valSwap = SourceArray(ptrLtoR)  '(左の値は中央値以上、右の値は中央値以下になっている)
                    Let SourceArray(ptrLtoR) = SourceArray(ptrRtoL)
                    Let SourceArray(ptrRtoL) = valSwap
                End If
                Let ptrLtoR = ptrLtoR + 1   'Lポインタ≦Rポインタ であれば、範囲を1つずつ狭める
                Let ptrRtoL = ptrRtoL - 1
            Else
                Exit Do                     'LポインタとRポインタの位置が逆転したら探索・交換を終了する
            End If
        Loop

        '探索範囲の分割・交換(左範囲[左端~交差したRポインタ] 右範囲[交差したLポインタ~右端])
        If ptrRtoL - bndLEnd < bndREnd - ptrLtoR Then   '※ポインタの間に要素がある場合、その要素の位置は確定
            Let ptrLtoR = ptrLtoR Xor bndLEnd   '右範囲の方が広い場合、左端とLポインタ、右端とRポインタの
            Let bndLEnd = ptrLtoR Xor bndLEnd   '位置情報を交換し(Xor交換)、広い右範囲を先にスタックする
            Let ptrLtoR = ptrLtoR Xor bndLEnd   '(左範囲の方が広い場合は左範囲を先にスタックする)
            Let ptrRtoL = ptrRtoL Xor bndREnd   'スタック順は広→狭、処理順は狭→広となり、スタックのサイズを
            Let bndREnd = ptrRtoL Xor bndREnd   'Log2(n)以下に抑えられる
            Let ptrRtoL = ptrRtoL Xor bndREnd
        End If

        'スタックへ積み上げ(広い方の範囲)
        If bndLEnd < ptrRtoL Then               '範囲内の要素が2以上あればスタックに積み上げる
            Let bndLEnds(ptrStack) = bndLEnd    '(1つしかない場合はその要素の位置が確定したためスタックしない)
            Let bndREnds(ptrStack) = ptrRtoL    '現在処理中のスタックは上書きされる(実質的にPOPと同じ動作)
            Let ptrStack = ptrStack + 1         'スタックポインタに1加算=次の空きスタックへ移動
        End If

        'スタックへ積み上げ(狭い方の範囲)
        If ptrLtoR < bndREnd Then               '上記と同じ処理
            Let bndLEnds(ptrStack) = ptrLtoR
            Let bndREnds(ptrStack) = bndREnd
            Let ptrStack = ptrStack + 1
        End If
        Let ptrStack = ptrStack - 1     '次に処理すべきスタックへ移動
    Loop
    Let QuickSort = SourceArray
End Function

コードは前に何かで使ったクイックソート。さて、どうかな?

2014/02/11

blosxomとさくらのレンタルサーバのApacheにまつわる問題点

書いておかないと後で''ぜってー忘れる''ので、忘れないうちにメモしておく。

というか過去の記事を漁るともしかすると過去に同じ問題に遭遇していたかもしれないけど探すの面倒なのでやめた。

1.環境変数を追加できない
Apacheには環境変数モジュール(mod_env)というものがあり、これで環境変数を制御しているが、さくらのレンタルサーバではCGIを実行する際の環境変数は制御できない。
ホストにログインした際の環境やCRONを実行する際の環境は制御できる。
blosxomでユーザー環境変数を使いたかったのだが諦めた。さくらのレンタルサーバはsuExec環境なので当然と言えば当然であるが、すっかりド忘れしていたのでアホだ。
2.MultiViewsオプションを無効化できない
MultiViewsとはApacheの「コンテントネゴシエーション」モジュールで提供されている機能の一つ(多分)で、リクエストURIにファイル名のみ(拡張子を除いて)しかなく、かつ同名のディレクトリが存在しなかった場合、該当ディレクトリ内の同名の拡張子付きファイルを勝手に探し出してページに表示してしまう機能である。
例を挙げると、"http://hogefuga.jp/test/unko"をリクエストしたが"unko"ディレクトリが存在せず、"test"ディレクトリ内に"unko.conf"ファイルが存在した場合、「あ、これきっと"unko.conf"ファイルのことなんだね」とか勝手に解釈してファイルの中身を表示したりする。
"unko.conf"、"unko.cgi"、"unko.log"等と複数のファイルがあった場合、「たぶんこのユーザーは"unko.cgi"がほしいんじゃないかな」とかその都度選別してファイルの中身を表示したりCGIを実行したりする。
なお、末尾にスラッシュついてようがついていまいがお構いなしに勝手にファイルとして解釈する。
さくらのレンタルサーバの場合、Optionsがユーザー側で設定できないため、無効化することすらできない。
なおMultiViewsは基本的にMIMEが認識している拡張子を探し出す、という動作をしていた。なのでそこんとこをなんとか無効化できないかとあれこれ試してみたがどれもうまくいかなかった。
MultiviewsMatchというOptionは操作できるが、これは要はマッチタイプを追加する機能であって、減らすことはできない。
リライトモジュール(mod_rewrite)で上書きできないかと試してみたが、RewriteよりMultiViewsが優先されており、先にファイルにアクセスされてしまった。どうしようもない。
これはもう単純に、''ディレクトリ内に同名のファイルとディレクトリは作らない''ことで回避するしかない。
なおblosxomの場合、「CGIを設置しているディレクトリ内のファイル名」と、「エントリを保存しているディレクトリ内のサブディレクトリ名」が重複しないようにしなければならないので、注意すること。めどい。
なるべくblosxomの設定ファイル名を変えずに使いたかったのだが諦めた。早々に諦めればよかったのにあれこれと抗った挙げ句に結局できなかったのでアホだ。

ま、何が言いたいのかと言うと blosxom 2.1.2 を導入しようとしてなるべくblosxom.cgiを改変することなく使いたかったのだができなかったのでアホだ。

コメント投稿ルールについて(2014/02/09時点)

まぁこんな糞ブログ今となっては誰も見ていないわけですし、コメント投稿するのは糞スパム業者しかいない訳ですが、 未来の自分の為(ぜってー設定とか忘れるので)にも、コメント投稿のルールを記載しておきます。

  • 本文がない投稿は許可されておりません。
  • 不正なリファラの投稿は許可されておりません(正しいリファラでない・リファラがない、など)。
  • HTTPヘッダー情報が不正な投稿は許可されておりません。
  • 日本語(漢字・ひらがな)の含まれていない投稿は許可されておりません。
  • スパム等が確認されたIPアドレスからの投稿は許可されておりません。
  • その他、種々の事情により投稿が許可されない場合があります。

以上、よろしくお願い致します。

2008/11/21

模様替えの季節です

また HP のデザインを色々いじる予定。そろそろもうちょっとちゃんとした真面目なデザインというものを考えようかなー。 あと、TOP ページの表示。今までどおり記事名だけをリストするか、以前のように記事を表示しようか。 やっぱ普通は記事本文を表示してるんだよなー。うーんどうしよう。

デザインはどうしよう。やっぱコントラストとかを考えなければならないのだろう、 この HP を見てから他のものを見るとこう、目に残像が、ね。

大層なことを書いておいて、自分は、ねぇ。

とりあえず誰かこう、デザイン等に関する妙案があればマジでアドバイスくdふぁさい。

2008/03/14

「まぶしっ」

おんみょうだんではない。

とある友人においらのこのサイトを見せたところ、タイトルどおりの感想を得たので逆に暗くしてみた次第。

逆に見づらいとかなんか感想意見あればくださいっす

クリックでおっきいの。
ついでだからスナップショットも貼っておこう。自分でもいつデザイン変えるかわからないから。

NEW <- : 1 2 3 4 5 : -> OLD

Search

Option
全体 タイトルのみ
Any All
部分一致 完全一致

Document

Comment

カテゴリ名変更&新しい楽器がふえたよ
02/14 : そうこ
06/26 : 室井
08/20 : そうこ
09/22 : そうこ
春よ、来い
05/08 : simuzy
05/08 : simuzy
05/12 : そうこ
Google Chrome Extensions
08/15 : Menow
08/19 : そうこ

Tackback

リタリンの処方が打ち切られた
03/27 : ノビじいの鬱々日記
foreshortenedプラグイン改造
01/23 : ISO TANK!

Log

2019年
8月
2014年
2月
2008年
11月 3月
2007年
11月 6月 4月 3月 2月
2006年
11月 10月 6月
2005年
12月 11月 9月 8月 7月

Link