ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

木曜日, 1月 29, 2009

alt=json-in-scriptリクエストのjson内のlink[]内容の順番が変わってた。。。

俗にいう"New Blogger"改造(その2)アーカイブのカレンダー化
で紹介させてもらったアーカイブカレンダーなんですが、
さっき、見たらjson内のfeed内の出力順序が変わってた。。。

しっかり調べればorderby=publishedとかで。
出力順を制御できるかも知れないが、

残念ながら時間がないんで、
対応方法だけ。。。
コールバックで呼び出すfunction cReadArchiveの中身をいじります。
22行目をvar link = entry.link[4].href;に変更します。
元はlist[0].hrefが投稿内容だったんですが、今はコメントのURLになってます。。。
function cReadArchive(root){
// Check for Leap Years
  if (((calYear % 4 == 0) && (calYear % 100 != 0)) || (calYear % 400 == 0)) {
      fill[2] = '29';
   }
  else {
      fill[2] = '28';
   }
    closeStatus();
    document.getElementById('lastRow').style.display = 'none';
    calDis = document.getElementById('calendarDisplay');
    var feed = root.feed;
    var total = feed.openSearch$totalResults.$t;
    var entries = feed.entry || [];
    var fillDate = new Array();
    var fillTitles = new Array();
    fillTitles.length = 32;
    var ul = document.createElement('ul');
    ul.id = 'calendarUl';
    for (var i = 0; i < feed.entry.length; ++i) {
      var entry = feed.entry[i];
      var link = entry.link[4].href;
      var title = entry.title.$t;
      var author = entry.author[0].name.$t;
      var date = entry.published.$t;
      var summary = entry.summary.$t;
      isPublished = date.split('T')[0].split('-')[2];
      if(isPublished.charAt(0) == '0'){
         isPublished = isPublished.substring(1);
         }
      fillDate.push(isPublished);
      if (fillTitles[isPublished]){
          fillTitles[isPublished] = fillTitles[isPublished] + ' | ' + title;
          }
      else {
          fillTitles[isPublished] = title;
          }
      li = document.createElement('li');
      li.style.listType = 'none';
      li.innerHTML = ''+title+'';
      ul.appendChild(li);

      }
   calDis.appendChild(ul);
   var val1 = parseInt(calDay, 10)
   var valxx = parseInt(calMonth, 10);
   var val2 = valxx - 1;
   var val3 = parseInt(calYear, 10);
   var firstCalDay = new Date(val3,val2,1);
   var val0 = firstCalDay.getDay();
   startIndex = val0 + 1;
  var dayCount = 1;
  for (x =1; x < 38; x++){
      var cell = document.getElementById('cell'+x);
      if( x < startIndex){
          cell.innerHTML = ' ';
          cell.className = 'firstCell';
         }
      if( x >= startIndex){
          cell.innerHTML = dayCount;
          cell.className = 'filledCell';
          for(p = 0; p < fillDate.length; p++){
              if(dayCount == fillDate[p]){
                  if(fillDate[p].length == 1){
                     fillURL = '0'+fillDate[p];
                     }
                  else {
                     fillURL = fillDate[p];
                     }
                  cell.className = 'highlightCell';
                  cell.innerHTML = '<a href="/search?updated-max='+calYear+'-'+callmth+'-'+fillURL+'T23%3A59%3A59'+timeOffset+'&updated-min='+calYear+'-'+callmth+'-'+fillURL+'T00%3A00%3A00'+timeOffset+'" title="'+fillTitles[fillDate[p]].replace(/"/g,'\'')+'">'+dayCount+'</a>';
                 }
              }
          if( dayCount > fill[valxx]){
             cell.innerHTML = ' ';
             cell.className = 'emptyCell';  
             }
          dayCount++;  
         }
      }
    visTotal = parseInt(startIndex) + parseInt(fill[valxx]) -1;
    if(visTotal >35){
        document.getElementById('lastRow').style.display = '';
       }
  }

金曜日, 1月 09, 2009

まさか、要望が届いてしまうとは。。。

つい最近の出来事で
DB2 v8.2 + IBM Data Studio 1.2でコードインテリセンスの中でA5:SQL Mk-2について

with句の入力補完が効かないんで面倒だなぁ~ってのをPOSTしたんですが、

どんなミラクルが起こったのか!?

作者様からコメントが!!!



ver 2.3.1では対応と言うようなコメントを頂きました♪

\(*´▽`)/

松様ありがとうございます。


こんなブログまで目を通して頂けて感謝感激でございます♪

こう言ったパターンは初めてだっただけにかなり嬉しいっす!

木曜日, 1月 08, 2009

DocBookの使い方を覚えたい

内部資料とかでよく手順書と言われるものを用意することがある。

しかし、いつもエクセルで用意してこれ見てね的に作成しています。


特に複雑な手順書の場合にはリンク付きのPDFとかを用意したいんですが、
如何せんそんなPDFの作り方はわかんない!

でもね。前から興味を持っていたDocBookでPDFが作れたよなぁ~って思いだして、
とりあえず、簡単に調べてみると
やっぱり、使ってる人は使ってるんだなぁ~って言うのが率直な感想

多かったのはApache FOPってのを使っている紹介が多かったのですが、
色々見てみるとホントかどうか自分で試してないんで不明ですが、
PDF上で日本語検索ができないとか。。。

ダメじゃん!!

しかし、根気よく色々見ていると
platex経由でPDF変換すれば行けるという情報を手に入れた!

たしかDocBookってさまざまなフォーマットに変換できるというのが売りの一つのはず!

これだ―!!

って思ったんですが、
問題がひとつあって

そもそも、latexなんて触れたこともないんですよね。。。

前々から触ってみたいなぁ~とは思ってはいるんですが。。。


とりあえず、必要な知識は
  • DocBook(できればver5で)
  • latexの知識
  • platexの知識
  • こんなところかな?

    また、時間ができたときにでも調べてみよう。

    火曜日, 1月 06, 2009

    DB2 v8.2 + IBM Data Studio 1.2でコードインテリセンス

    仕事場で使える無料のDB2のSQL入力補完機能付きツールが欲しくて欲しくて
    色々探してみてるんですが、
  • A5:SQL Mk-2
  • 黒猫 SQL Studio
  • ValueSQL

  • 今のところはA5:SQL Mk-2が一番かな?

    しかし!複雑なSQLを作るときとかに僕はwith句をよく利用してるんですが、
    正直言ってそこまではコード補完が追いついてくれないのが悲しいところです。。。

    Oracle]ならosqleditで決まりなんですが、
    こっちもwith句部分のコード補完は効いてくれないんですよね。。。

    でもってIBM Data Studioを試してみようと
    仕事場でこっそりインストールw
    しかし、インストールの段階ですぐに気が付いたのですが、
    Eclipseベースのアプリなんですね。

    OS依存で結構なんで軽いソフトをお願いします。
    いや、まじで。。。

    ちなみにやっぱりwith句の入力補完はできませんでした。。。

    でも、フォローしておくとER図に「外部キーを類推する」オプションが意外と使えるかも。。。
    悲しいかな僕の仕事場ではRDMSなのに外部参照を利用しないというシステムばかりで、
    関連キーについての情報をER図を用意しておかないと訳が分からなくなるんです。。。

    木曜日, 8月 21, 2008

    WPFを活かせるかもしれん

    ずっと考えていた 何とかしてXAMLをプレゼンテーションとして扱い内部のモデル部分はJavaってな具合にできないかと で、やっぱりありました! eFaceっていうフレームワークだそうな まだ、触ってないけどEclipseのプラグインもあるそうなので、 そのうち触ってみようと思う。 何か面白そうと思ったのでメモメモ

    火曜日, 7月 22, 2008

    ほんと色んな情報サイトがあるもんだ

    InfoQってサイトに登録してみた。 今まではよくIBMさんとこのDeveloperWorksとかMSDN等々を読んでいたんですが、 いかんせん、続きが読みたくても
    • 第2回分は和訳されてなかったり・・・
    • 英文と和訳のタイトルが違っていたり
    • 和訳のリンク先は英文だったり
    と踏んだり蹴ったりなところがありました。。。 まぁ、今回見つけたのはざっとしか見ていませんが、 何となく今の僕の触手が動くようなネタがあれこれあって楽しかったです。 まだまだ、読みたいと思える記事もあったので、 のんびり読んでいこうと思います。 正直、まだこの感覚が残っていて良かった~と思いましたよ。

    木曜日, 7月 03, 2008

    WebGISか。。。

    今日、MySQLがSunと統合したそうな。。。
    だからと言ってJavaとMySQLで何かがってわけでもないんですけどね。

    それで、めずらしくニュースをよく読んでると、
    「WebGIS」って文字が目に入ってきた。
    GISってのは身近なものに置き換えればカーナビみたいに2次元(もしくは3次元)のマップにコンビニやら、GSとかの情報がマッピングされたものだ。

    カーナビとかになると組み込みになるんですが、
    Webって付いたらゼンリンさんとかGoogleMapsとかみたいなのに何かプラスでマッシュアップしたものすべてを指すのかな?と思っていたら、
    僕的には意外と盲点だった部分をつく位置情報ってのがあった。
    それは、配管とかなんですけど
    以前、アスペクトとユースケースの本を読んでいるときに
    最初の方で複数の地図を重ねるようなもんだ的な一文があったんですけど、
    もっと、ミクロに見ればうまくそのあたりの情報をまとめた設計がGIS的な手法でできるんじゃないのか?って思った。

    まぁ、設計上の何を「地図」とすればいいのかは思いつかないんだけどね。。。

    日曜日, 6月 08, 2008

    サイトのwidthを思い切って1000pxにしてみる

    前々から思っていたことなんですが、3カラムのレイアウトを使っていると どうしても使いにくいというか読みにくなぁ~と思うことがたびたびあった。 そこで! 思い切って横幅を1000pxにしてみました。 analyticsの解像度とかを見てる限り、 まぁ、世間一般的に問題ないだろうと思う。

    木曜日, 5月 29, 2008

    なるほどブリッジ接続なのか!

    えーと、ずいぶん前に無線ルータを購入して使用していたんですが、 CTU(ルータ込み)+ルータと2段ルータになってたんです。。。 ずっと、どうしたもんかと考えていたんですが、 CTU→ルータのWAN以外のポートに繋げばOKだったなんて。。。 ただいま、のんびりLANのネットワークアドレスを修正中

    水曜日, 5月 28, 2008

    [Trac]Timing and Estimation Pluginのpost-commit-hookではメールが飛ばない!?そして解決

    Timing and Estimation Pluginのpost-commit-hookを 普通に信じて使おうとしていたんですが、

    Tracのpost-commitでメールが飛ばないよ~

    って状況になっていたんですが、 やっとこさ解決した。 (というか、スクリプトをバリバリ改造してみた。) オリジナルではそのまま送信しようとすると env.abs_hrefなんて属性は無いぞ!!って怒られてたんですが、 従来のtrac-0.10.3.1-ja-2.zipに付いていたtrac-post-commit-hookでenv.abs_hrefを設定している部分を発見した。 そこで、さっそくそのあたりのコードを移植してみた。 こんな感じ
    --- trac-post-commit.py.org Wed May 28 13:05:22 2008
    +++ trac-post-commit.py Wed May 28 13:14:35 2008
    @@ -103,6 +103,7 @@
    from trac.ticket.web_ui import TicketModule
    # TODO: move grouped_changelog_entries to model.py
    from trac.versioncontrol.api import NoSuchChangeset
    +from trac.web.href import Href
    
    logfile = "/var/trac/commithook.log"
    LOG = False
    @@ -193,6 +194,10 @@
           self.rev = rev
           self.msg = "(In [%s]) %s" % (rev, chgset.message)
           self.now = int(time.time())
    +        if url is None:
    +            url = self.env.config.get('project', 'url')
    +        self.env.href = Href(url)
    +        self.env.abs_href = Href(url)
    
           cmd_groups = command_re.findall(self.msg)
           log ("cmd_groups:%s", cmd_groups)
    最近になってユニファイド形式のdiff情報が便利だということにやっと気が付きました。。。 これで、Subversionサイドでコミットした際にコマンドがメッセージに記述されていたら、 チケットにコミットログを書き込みして、チケットの変更上をメールで送信することまでできるようになります。 しかし、これだけだとあくまでチケットが更新されたというメールしか飛びません。 (要はメッセージ内にこのスクリプトに反応するコマンドが書き込まれていないとメールなんて飛んでこない) そこで、メールを送信するスクリプトを作ってみた。 ※特殊文字が含まれると落ちちゃいます。。。 だめじゃん。。。 ※ちなみにWindows環境下で作っているんで、pathとかは適当に見直したほうがいいと思います。
    #!D:/Tools/Trac/Python24/python.exe
    # -*- coding: utf-8 -*-
    # needs: nkf, head
    
    import re
    import sys
    import popen2
    import smtplib
    
    smtpserver = 'xxx.xxx.xxx.xxx'
    fromaddr = '○○○○○○'
    maxdiffsize = 80000  # in bytes
    repo_url = 'http://utsuutsu/projects/repo/changeset/'
    _svnlook = 'D:/Subversion/bin/svnlook.exe'
    
    logfile = "D:/Trac/projects/trac/log/mailsender.log"
    LOG = True
    
    if LOG:
      f = open (logfile,"w")
      f.write("Begin Log\n")
      f.close()
      def log (s, *params):
          f = open (logfile,"a")
          f.write(s % params)
          f.write("\n")
          f.close()
    else:
      def log (s, *params):
          pass
    
    def fromSJIStoISO2022JP(s):
      u = unicode(s,'japanese.shift_jis','replace')
      return u.encode('japanese.iso-2022-jp')
    
    def fromUTF8toISO2022JP(s):
      u = unicode(s,'utf_8','replace')
      return u.encode('japanese.iso-2022-jp')
    
    class CommitMailSender:
    
      def __init__(self, repo, rev):
          self.repo = repo
          self.rev = rev
    
          conffile = popen2.popen2(_svnlook + ' cat %s -r %s' % (self.repo, self.rev))[0].read().splitlines()
          changed = popen2.popen2(_svnlook + ' changed %s -r %s' % (self.repo, self.rev))[0].read().strip()
    
          log('%s' % (repo))
          log('%s' % (rev))
          log('%s' % (conffile))
          log('%s' % (changed))
    
          # changed     ->   pathlist
          # ------------------------
          # U    file1\n
          # U    file2\n    ['file1','file2']
          #
          pathlist = [l.split()[1] for l in changed.splitlines()]
          if log:
              for l in pathlist:
                  log('path=%s' % (l))
    
          to = []
          to += ['xxx@utsuutsu']
    
          # decide who to send
          for line in conffile:
              lines = line.strip().split()
              if len(lines) < rule =" lines[0]" addrs =" lines[1:]" rule="%s" rule ="=" addrs ="=" path="%s" rule="%s" _author =" popen2.popen2(_svnlook" _author =" fromSJIStoISO2022JP(_author)" _date =" popen2.popen2(_svnlook" _date =" fromSJIStoISO2022JP(_date)" _log =" popen2.popen2(_svnlook" _log =" fromSJIStoISO2022JP(_log)" _changed =" popen2.popen2(_svnlook" _changed =" fromSJIStoISO2022JP(_changed)" _diff =" popen2.popen2(_svnlook" _diff =" fromSJIStoISO2022JP(_diff)" project_name =" fromUTF8toISO2022JP('プロジェクト名')" author_title =" fromUTF8toISO2022JP('更新者')" date_title =" fromUTF8toISO2022JP('日時')" log_title ="fromUTF8toISO2022JP('ログ')" changed_title =" fromUTF8toISO2022JP('変更箇所')" msg =" (">
    reply-to: xxx@utsuutsu
    Mime-Version: 1.0
    Content-Type: text/plain; charset=iso-2022-jp
    Content-Transfer-Encoding: 7bit
    Subject: [%s] Revision:%s commit
    
    [%s] Revision:%s commit to %s
    %s:%s
    %s:%s
    
    %s:
    %s
    
    %s:
    %s
    
    diff:  (up to %d bytes)
    ------------------------
    %s
    """ % (project_name, rev, project_name, rev, repo_url+rev, author_title, _author, date_title, _date, log_title, _log, changed_title, _changed, maxdiffsize, _diff)
          )
    
    
          # send!!
          mail = smtplib.SMTP(smtpserver)
          mail.sendmail(fromaddr, to, msg)
          mail.quit()
    
          log(str(to))
    これをさっきのtrac-post-commit.pyでコマンドが無い場合のみ呼び出すようにします。
    --- trac-post-commit.py.org Wed May 28 13:27:19 2008
    +++ trac-post-commit.py Wed May 28 13:28:32 2008
    @@ -104,6 +104,7 @@
    # TODO: move grouped_changelog_entries to model.py
    from trac.versioncontrol.api import NoSuchChangeset
    from trac.web.href import Href
    +from CommitMailSender import CommitMailSender
    
    logfile = "/var/trac/commithook.log"
    LOG = False
    @@ -200,6 +201,9 @@
           self.env.abs_href = Href(url)
    
           cmd_groups = command_re.findall(self.msg)
    +        # 追加
    +        if len(cmd_groups) == 0:
    +            CommitMailSender(url, rev)
           log ("cmd_groups:%s", cmd_groups)
           tickets = {}
           for cmd, tkts, xxx1, xxx2 in cmd_groups:
    しかし、思いつきで作った割りにはしっかり動いているじゃないかw

    金曜日, 5月 16, 2008

    こうして一週間が過ぎていく

    結局、来週の予定は決まらずじまいで終わってしまった。。。 やったことといえば、やるのか?やらないのか?よくわからん基本設計をちょこっとだけ。 ただ、昨日Doxygenでハマっていた部分は解消した!! (あんまり仕事とは関係ないんですが。。。) iconvのソースを昨日のminwgではなくcygwinでビルドしてみました。 iconv.exeがでけたー!! しかし、これホントにいるのかなぁ~?? iconvのソースやドキュメントを読んでいたら、 どこにもShift_JISなんて記述がない。。。 でもって、ふと気がついたMS932もといCP932なら。。。 あ、ありましたよ!! それで、doxygenの設定ファイルを書き換えると、 無事にShift_JISソース→UTF-8のドキュメント生成に成功しました!! どこを探しても情報が見つからなかったので、かなり思いつきでやってみたんですが、これで良かったのかな?

    日曜日, 5月 11, 2008

    Python2.5でTracを動かすonWindows そして挫折。。。

    Windows上で
    • Python 2.5
    • ClearSilver 0.10.5
    • Postgres 8.3.0
    • Trac 10.4-ja
    を使ってTracを構築しようとしたんですが、 Clearsilverでつまずいてしまって。。。 ちなみに現時点ではPostgres+ClearSilverでPython2.5用のmsi形式インストーラは用意されていません。 Postgresの方は何とか2.5用のインストーラを作ってできたんですが、ClearSilverが。。。 どう頑張ってもできなかったんです!! そもそもWindows上でソース持ってきてmakeしようとか言ってる時点で何かあれれ?ってところはあったんですが、Cygwinのようにエミュレータを使ったりすればいいんですが、 ちょっとねぇ~ それくらいならLinux使います!! というわけで次回はLinuxを使って構築してみようと思う。

    木曜日, 4月 24, 2008

    いあ、間違ってはないんだけど。。。

    クリボウさんとこのBlogger beta の Widget 追加ボタンの作り方を参考にしながら、SyntaxHighlighterのwidget追加ボタンを作ろうとしてみました。 しかし、本来ダウンロードしてして使えといわれているものをそのままSubversionのリポジトリを参照して使おうとすると、 スタイルシートのMIMEタイプがtext/plainになっていて読み込まれなかった。 あ、ちなみに僕が使っているのはFireFoxです。 で、確かにtext/cssじゃないんだけど @import "http://*****"; しても @import url("http://*****"); 効いてくれない。。。 調べてみるとFirefoxでは、その辺りをDOCTYPEの定義の有無で厳密にMIMEタイプをチェックしてるみたいですね。。。 参照:外部CSSファイルはStandardモード時に一部サーバで使用できません あとは無理やりDOM操作でもしてstyleタグでも作りこめば何とかなるとは思うんですが、 やっぱ、そりゃめんどうだよなぁ~ 確かにSubversionのリポジトリを直接参照してる時点で、そんなことを設定してくれなんてとてもじゃないが言えない。。。 所詮はソースブラウザの内容を使ってるようなもんですから。。。 しかし、Javascriptは認識してくれるのにスタイルシートは認識しないなんて。。。 中途半端な気がしなくもないなぁ~

    火曜日, 4月 22, 2008

    YahooUIのTabviewを使ったウィジット

    たまにはBloggerネタでも タイトルの通りなんですが、YahooUIを利用したウィジットを見つけたので投稿してみます。 元ネタはHoctro's PlaceさんのIntroducing TabView Widget - Part 1ってやつです。 とりあえず、Hoctroさんの記事にはコメントを入れておいたんですが、勝手に紹介するな!!って怒られたらどうしよう。。。 結果的にはこんな感じになります。 主な特徴としては
    • 対象feedを元に一覧を作成する
    • なんと!他所さまのfeedを使える
    • 最新の投稿一覧とかコメントとかを見れる
    • ラベルで集約した結果を1つのタブとして表示できる
    いろいろと準備が必要です。 注意事項として全文feedは使わないでください。 1:まず、肝になるJavaScriptを用意します。
    /* ここはYahooUIを参照 */
    <!-- Dependencies -->
    <!-- Sam Skin CSS for TabView -->
    <link href='http://yui.yahooapis.com/2.5.1/build/tabview/assets/skins/sam/tabview.css' rel='stylesheet' type='text/css'/>
    
    <!-- JavaScript Dependencies for Tabview: -->
    <script src='http://yui.yahooapis.com/2.5.1/build/yahoo-dom-event/yahoo-dom-event.js' type='text/javascript'/>
    <script src='http://yui.yahooapis.com/2.5.1/build/element/element-beta-min.js' type='text/javascript'/>
    
    <!-- OPTIONAL: Connection (required for dynamic loading of data) -->
    <script src='http://yui.yahooapis.com/2.5.1/build/connection/connection-min.js' type='text/javascript'/>
    
    <!-- Source file for TabView -->
    <script src='http://yui.yahooapis.com/2.5.1/build/tabview/tabview-min.js' type='text/javascript'/>
    
    <style type='text/css'>
    
    /* ここからはウィジット用 */
    .yui-content {
    padding:1em; /* pad content container */
    }
    
    .yui-navset .yui-content {
    border:1px solid #ccc;
    }
    .yui-navset .yui-nav .selected a, .yui-navset .yui-nav a:hover {
    background-color:#fff;
    }
    
    .yui-navset .yui-nav li a {
    background:#e5e5e5 url(http://developer.yahoo.com/yui/examples/tabview/img/round_4px_trans_gray.gif) no-repeat;
    }
    .yui-navset .yui-nav li a em {
    background:transparent url(http://developer.yahoo.com/yui/examples/tabview/img/round_4px_trans_gray.gif) no-repeat top right;
    padding:0.5em;
    }
    
    /* top oriented */
    
    .yui-navset-top .yui-nav { margin-bottom:-1px; } /* for overlap, based on content border-width */
    .yui-navset-top .yui-nav li a {
    border-bottom:1px solid #ccc;
    }
    
    .yui-navset-top .yui-nav .selected a { border-bottom:0; }
    .yui-navset-top .yui-nav .selected a em { padding-bottom:0.6em; } /* adjust height */
    </style>
    
    // ここにウィジット側からパラメータを与えます。
    <script type='text/javascript'>
    // Developed by Hoctro - All rights reserved 2007
    // This credit must be included in all your derived usages.
    
    // "cb" is intended to be a common library, where different widgets would
    // utitlize the shared operations such as getTitle, getLink, etc. from a json object.
    var cb = {
    // search function requires these parameters:
    // 1. query: a blogger address, such as "hoctro.blogspot.com",
    // 2. type: type of return data, either "comments" or "posts",
    // 3. start: the start-index parameter (where to start extracting data)
    // 4. increment: the number of elements the json will get back. (the smaller value, the faster time to travel back)
    // 5. func: the returned function the json object will feed.
    
    search: function(query, type, start, increment, func) {
    var script = document.createElement('script');
    script.setAttribute('src', 'http://' + query + '/feeds/' + type + '/default?alt=json-in-script&start-index='
    + start + '&max-results=' + increment + '&callback=' + func + '&orderby=published');
    script.setAttribute('type', 'text/javascript');
    document.documentElement.firstChild.appendChild(script);
    },
    
    // searchLabel function return a result of posts w/ a label query
    // it requires these parameters:
    // 1. query: a blogger address, such as "hoctro.blogspot.com",
    // 2. an array of labels
    // 3. func: the returned function the json object will feed.
    searchLabel: function(query, label, func) {
    var script = document.createElement('script');
    script.setAttribute('src', 'http://' + query + '/feeds/posts/default/-/' + encodeURIComponent(label) +
    '?alt=json-in-script&callback=' + func + '&orderby=published');
    script.setAttribute('type', 'text/javascript');
    document.documentElement.firstChild.appendChild(script);
    },
    
    // getTotalResults needs the json object, and it'll return the total number of comments (or posts) of the blog.
    getTotalResults: function(json) {
    return json.feed.openSearch$totalResults.$t;
    },
    
    // getStartIndex gets the start index of a search inside an json object.
    getStartIndex: function(json) {
    return json.feed.openSearch$startIndex.$t;
    },
    
    // getLink return a href link if "name" matches the content inside "a" tags) of the link
    getLink: function(entry, name) {
    var alturl;
    
    for (var k = 0; k < entry.link.length; k++) {
    if (entry.link[k].rel == name)
    alturl = entry.link[k].href;
    }
    return alturl;
    },
    
    // getTitle gets the title of the title of an entry of a json object.
    getTitle: function(entry) {
    return entry.title.$t;
    },
    
    // getContent gets the content inside an entry of a json object.
    getContent: function(entry) {
    return entry.content.$t;
    },
    
    // getCommentAuthor: gets the commenter name inside an entry of a json object.
    getCommentAuthor: function(entry) {
    return entry.author[0].name.$t;
    },
    
    // Given a json label search, this function return the decoded label.
    getLabelFromURL: function(json) {
    for (var l = 0; l < json.feed.link.length; l++) {
    if (json.feed.link[l].rel == 'alternate') {
    var raw = json.feed.link[l].href;
    // The next two lines are borrowed from Ramani's Neo Template
    // code. Thanks Ramani!
    var label = raw.substr(raw.lastIndexOf('/')+1);
    return decodeURIComponent(label);
    }
    }
    },
    txt : function (s) {
    return s + " Widget by <a href='http://hoctro.blogspot.com" + "'>Hoctro</a>";
    }
    };
    </script>
    
    こんな感じです。 このオブジェクトを操作するようなウィジットになってます。 2:ウィジット側を実装
    <b:widget id='HTML1' locked='false' title='MultiTab Widget' type='HTML'>
    <b:includable id='main'>
    <div class='widget-content'>
    <!-- only display title if it's non-empty -->
    <b:if cond='data:title != ""'>
     <h2 class='title'/>
    </b:if>
    <div id='doc'>
     <div>
       <h2>がらのうつうつ日記 TabView Widget</h2>
       <div class='yui-navset' id='multiTab1'/>
     </div>
    </div>
    <div id='103'/>
    </div>
    
    <script type='text/javascript'>
    // Developed by Hoctro - All rights reserved 2007
    // This credit must be included in all your derived usages.
    var p1 = document.createElement('h6');
    document.getElementById('103').appendChild(p1);
    p1.innerHTML = cb.txt('TabView');
    
    function listOneTab(json, tabView, title, act) {
     var label = '';
     var text = '';
     var nPost = 10;
    
     if (title == '')
       label += cb.getLabelFromURL(json);
     else
       label += title;
    
     text += '<div class=' + "tabview" + ' id=' + label + '><ul>';
    
     var numberPost = (json.feed.entry.length <= nPost) ? json.feed.entry.length : nPost;
    
     for (var i = 0; i < numberPost; i++) {
       var entry = json.feed.entry[i];
       text += '<li>' + '<a href="' + cb.getLink(entry, 'alternate')
    + '">' + cb.getTitle(entry) + '</a></li>';
     }
    
     text += '</ul></div>';
    
     tabView.addTab( new YAHOO.widget.Tab({
       label: label,
       content: text,
       active : act
     }));
    }
    
    var blog1 = 'utsuutsu.blogspot.com';
    var tabView1 = new YAHOO.widget.TabView('multiTab1');
    var labels1 = ['日記','うつ','開発'];
    function listTab1(json) {
     listOneTab(json, tabView1, '', false);
    }
    function listLatestPostsTab1(json) {
     listOneTab(json, tabView1,'最新の投稿', true);
    }
    function listLatestCommentsTab1(json) {
     listOneTab(json, tabView1, '最新のコメント', false);
    }
    
    // Activating calls!
    
    // Latest Posts
    cb.search( blog1, 'posts', 1, 25, 'listLatestPostsTab1');
    
    // Latest Comments
    cb.search( blog1, 'comments', 1, 25, 'listLatestCommentsTab1');
    
    // Preferred Labels
    for (var i=0; i < labels1.length; i++)
     if (labels1[i]) cb.searchLabel(blog1, labels1[i], 'listTab1');
    </script>
    </b:includable>
    </b:widget>
    気をつけておかないといけないことが数点あります。
    • <h2>がらのうつうつ日記 TabView Widget</h2>はお好きなタイトルを
    • labels1 には集約して表示したいラベルを
    • nPostには一度に表示したい件数を
    3:僕が勝手に変更している部分 タブ内のスタイル操作の為にulタブにtabviewという名前のclass属性を追加しています。 このスタイルを
    ]]></b:skin>
    の手前に定義しています。
    /*tabview
    ----------------------------------------------- */
    .tabview li {
    text-align: left;
    }
    とりあえず、今はこれしか入れてないですけど。。。 これでもう少し勝手が効くかな?
    こういうことができるってことは、他のYahooUIを使って楽しいことができそうでもあるなぁ~

    月曜日, 4月 21, 2008

    whos.amusing.us

    whos.amusing.usというオンラインのしている人の数がわかるというウィジットを追加してみた。 恐ろしく簡単 No setup or registration required. のとおり、登録もいらなければ特別なセットアップもいりません。 このコードを入れるだけ、
    <a href="http://whos.amung.us/show/ibvvrklv">
    <img src="http://whos.amung.us/widget/ibvvrklv.png"
          alt="web stats"
          width="81"
          border="0"
          height="29" />
    </a>
    
    いやぁ~、ホントに簡単だw

    金曜日, 4月 18, 2008

    Googleのカスタム検索機能を追加してみた

    Google Custom Search Engineを入れてみました。 思いのほか簡単に設置きました。 Googleの検索結果に移動することなく、 検索結果が表示される(イメージ的にはGoogleMapsの検索結果みたいにオーバーレイ表示)ので 僕的にはお気に入り。 ちょっと、登録したりすれば案内のメールが届くんで、そこでちょこっと設定すればOKでした。 ちなみにビジネス版は$100とかって書いてたような。。。

    土曜日, 4月 12, 2008

    OpenLDAP+Subversion

    Webを調べてみれば 出てくる出てくるOpenLDAP+Subversion+Apacheの組み合わせ 僕が使いたいのはApacheは使わないけどLDAPの認証をsvn+sshで使いたいだけなんです。 で、やってみたらsmbldap-toolsを使うだけで問題なくできた。 まぁ、前ふりとして LDAPでSSHの鍵認証を利用してみる でやったパッチとLDAP情報の書き換えは必要だとは思うけど。。。 後は x86_64Fedora8にSubversionをインストールする でしたのを少し変えるだけ
    ここからは覚書
    yum install subversion.x86_64
    mkdir /var/svn
    smbldap-groupadd svn-users
    smbldap-usermod -G "Domain Admins",svn-users user<=ユーザにグループを追加
    cd /var/svn/
    chgrp -R svn-users .
    chmod -R 770 .
    chmod -R g+s .
    umask 002
    svnadmin create repo
    

    月曜日, 3月 31, 2008

    VS2008でAnhkSVNのロードに失敗する

    VSを起動すると以下のようなメッセージが表示されます。
    --------------------------- An error occurred while Ankh was loading (Press Ctrl-C to copy this message to the clipboard) --------------------------- System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 場所 svn_config_get_config(apr_hash_t** , SByte* , apr_pool_t* ) 場所 NSvn.Core.ClientConfig.Init(String dir) 場所 e:\projects\2003\ankh\build-3\src\nsvn.core\clientconfig.h:行 73 場所 NSvn.Core.ClientConfig..ctor() 場所 e:\projects\2003\ankh\build-3\src\nsvn.core\clientconfig.h:行 21 場所 NSvn.Core.Client..ctor() 場所 e:\projects\2003\ankh\build-3\src\nsvn.core\client.cpp:行 95 場所 Ankh.AnkhContext.SetupFromConfig() 場所 E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:行 552 場所 Ankh.AnkhContext.LoadConfig() 場所 E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:行 516 場所 Ankh.AnkhContext..ctor(_DTE dte, AddIn addin, IUIShell uiShell) 場所 E:\projects\2003\Ankh\build-3\src\Ankh\AnkhContext.cs:行 49 場所 Ankh.Connect.OnConnection(Object application, ext_ConnectMode connectMode, Object addInInst, Array& custom) 場所 E:\projects\2003\Ankh\build-3\src\Ankh\Connect.cs:行 89 --------------------------- OK ---------------------------
    なんじゃこりゃ? 前はきちんと使えてたのに。。。 で、調べてみると http://ankhsvn.open.collab.net/ds/viewMessage.do?dsForumId=582&dsMessageId=49819 ってのがあった。 何かDLLの衝突??が起きてモジュールが正しくロードされないらしい。 これを解決するには SubversionとTortoiseSVNのディレクトリを一時的にリネームしてロードできないようにしてVSを立ち上げると無事動いた。 それから、リネームしたディレクトリを元に戻しても無事動いた。 なんてややこしいんだ。。。

    日曜日, 3月 16, 2008

    Ubuntuのインストールがうまくいかない。。。

    Ubuntu Server 7.10 adm64を入れてやろうと四苦八苦しています。 やっぱり、VMwareServer2Betaを使いたいんです。 WebUIが良いんです。 何とかならんかなぁ~ いろいろ調べることは調べたんだが、 曰く
    1. インストール時の起動オプションの最後を削除すべし
    2. Grubでのブートオプションの最後を削除すべし
    しかし、うまく動かん。。。 たぶん、たぶんだけど、IDEとシリアルポートでHDDのからみでうまく動いてくれないんだと思ってます。 あぁ、あとVMwareでvmdkの仕様書がダウンロードできるみたいで、登録してみたら。。。 メールが届くんですが、そのリンク先に何も無いんです。。。 勘弁してください。 昨日、考えていた物理ディスクを認識させるにはvmdkファイルフォーマットのことがわかってないとできないような気がしてはいるんです。 ESX Serverいいなぁ~と思っていたら、Oracleでも仮想化ソフトが出てたんですね。 VMWareの3倍速いとか言ってるけど、サポートしてるゲストOSの種類が少ない上に、今のバージョン(2.1)ではWindowsの動きも悪いようで、がんばって作ってます的なPDFを読みました。。。 まぁ、とりあえずはUbuntuが入らんことには話にならないんですよ。。。

    木曜日, 2月 21, 2008

    syntaxhighlighterを使ってみる

    こっちに変えてみました。 ありがとう、Blogger Mode やっぱり、Subversionのリポジトリを直接参照してみた。 ※cssだけは、テンプレートに直接書いておいた。。。
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js"></script>
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js"></script>
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js"></script>
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js"></script>
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js"></script>
    <script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js"></script>
    <script language="javascript">
     dp.SyntaxHighlighter.BloggerMode();
     dp.SyntaxHighlighter.HighlightAll('code');
    </script>
    
    こんな風になった。
    public class Test
     public static void main(String[] args) {
       System.out.println("色がかわるかな?");
     }
    }

    failed to read qemu headerのときのメモ

    かなり久々。。。 忘れないようにここに書きこんでおく。 ちょっとした手違いで libvirtでイメージを起動しようとすると failed to read qemu header なんておっしゃられて起動しない。。。 vmwareserverを使って...