December 16, 2009

Ubuntu 9.10とWindowsのデュアルブートでデフォルトのOSをWindowsにする

UbuntuとWindows 7とのデュアルブートにしようとした。デフォルトで起動するOSをWindows 7にしたくてググったら、/boot/grub/menu.lstを書き換えましょう、という記事がたくさん見つかったのだけど、そもそもmenu.lstが見つからない。

で、さらに調べたらGrub2に関する記事を読め、と。

デフォルトのOSを切り替えるためにはStartUpManagerを使いなさいとのこと。

手順にしたがってソフトウェアセンターからStartUpManagerをインストールして、



システム > システム管理からStartUp-Managerを起動して設定した。


December 13, 2009

jQuery + PythonのJSONでのデータのやり取り


jQueryとPython CGIのデータのやり取りをJSONでおこないたい。
構成は、
index.html
sample.js
sample.py
(lib/jquery/jquery-1.3.2.js)

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>jQuery + Python</title>
    </head>
    <body>
        <h1>jQuery + Python</h1>
    
  <form id="hoge">
   <input type="text" name="foo" />
   <input type="text" name="bar" />
   <input type="text" name="baz" />
  </form>
  
  <a id="foo" href="#">show</a>
  <a id="bar" href="#">clear</a>
  <div id="baz"></div>

  <script type="text/javascript" src="lib/jquery/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="sample.js"></script>
    </body>
</html>


sample.js

p2jはパラメータからJSON形式に変換する関数。どこかのページに掲載されていたのですが、失念してしまいました。すいません。
var $j = jQuery.noConflict();

function p2j(d) {
 if (d.constructor != Array) {
  return d;
 }
 var data={};
 for(var i=0;i<d.length;i++) {
  if (typeof data[d[i].name] != 'undefined') {
   if (data[d[i].name].constructor!= Array) {
    data[d[i].name]=[data[d[i].name],d[i].value];
   } else {
    data[d[i].name].push(d[i].value);
   }
  } else {
   data[d[i].name]=d[i].value;
  }
 }
 return data;
};


$j(document).ready(function(){ 
 $j('#foo')
 .click(function() {  
  // クエリ
  var query = $j(":input").serializeArray();
  console.log(p2j(query));
  
  // GETリクエスト
  $j.get('sample.py', query, function(text) {
   // 結果の処理
   var json = JSON.parse(text);
   var html = "";
   for (var i in json) {
    html += json[i].key + ':' + json[i].value + ' ';
   }
   $j('#baz').html(html);   
  });
  
  return false;
 });
 
 $j('#bar')
 .click(function (){
  $j('#baz').html('');
 }); 
});


sample.py

JSON形式にするにはjsonモジュールかsimplejsonモジュールがいいかもしれません。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cgi
import cgitb; cgitb.enable()
import json

print "Content-type: text/javascript; charset=utf-8"
print

form = cgi.FieldStorage()

foo = form.getfirst("foo", "")
bar = form.getfirst("bar", "")
baz = form.getfirst("baz", "")

print json.dumps([{'key':'foo','value':foo},
                  {'key':'bar','value':bar},
                  {'key':'baz','value':baz}])

November 24, 2009

EclipseにAptanaプラグインを入れたのにjQueryのコード補完ができない


AptanaでjQueryのコードアシストしてくれない。はまった。

Grobal References(タブがないときはメニューバーから Window > Show View > References)でjQueryにチェックを入れたら解決。

November 21, 2009

LaTeX for BloggerをSafariと新しい編集インターフェイスのために改造する



Bloggerの新しいインターフェイスになってLaTeX for Bloggerが機能しない。(そもそもSafariだと微妙だった。)なのでちょっと書き換えた。正規表現を使ったり。チェックとかはしてない。

ダウンロード

LaTeX for Blogger w/ Undo in the Updated Editor

References

WolverineX02 - LaTeX for Blogger
http://wolverinex02.googlepages.com/emoticonsforblogger2

クリボウの Blogger Tips: Blogger に LaTeX 数式を挿入するユーザースクリプト「LaTeX for Blogger」更新
http://www.kuribo.info/2009/05/blogger-latex-latex-for-blogger.html


コード

// ==/UserScript== 以下を次のように書き換える。

function setlatex(domname) 
{
var editbar = document.getElementById(domname);
  if (editbar) {
    var latexbar = document.createElement('div');
    latexbar.setAttribute("id", "latexbar");
    latexbar.setAttribute("class", "goog-toolbar goog-toolbar-horizontal");

    var buttons = emoticonButton("Latex", "http://wolverinex02.googlepages.com/latex.gif");
    buttons += separator();
    buttons += emoticonButton2("Unlatex", "http://www.codecogs.com/gif.latex?Un%5CLaTeX");

    latexbar.innerHTML = buttons;
    editbar.appendChild(latexbar);
  }
}

function emoticonButton(name, url) {
    var button = " \
    <div class='goog-inline-block goog-toolbar-button' id='htmlbar_undefined' onmousedown=' \
    (function latex_compilator() { \
        var rich_edit = document.getElementById(\"postingComposeBox\"); \
        var rich_body = rich_edit.contentDocument.getElementsByTagName(\"body\"); \
        var contenu = rich_body[0].innerHTML; \
        contenu = contenu.replace(/\\$\\$(.+?)\\$\\$/g,\"<img src=\\\"http://www.codecogs.com/gif.latex?$1\\\" border=0 align=middle />\"); \
        rich_body[0].innerHTML = contenu; } \
    )();'> \
        <img src='" + url + "' alt='" + name + "' border='0'> \
    </div> \
    ";
 return button;
}

function emoticonButton2(name, url) {
    var button = " \
    <div class='goog-inline-block goog-toolbar-button' id='htmlbar_undefined' onmousedown=' \
    (function latex_decompilator() { \
        var rich_edit = document.getElementById(\"postingComposeBox\"); \
        var rich_body = rich_edit.contentDocument.getElementsByTagName(\"body\"); \
        var contentu = rich_body[0].innerHTML; \
        contentu = contentu.replace(/<img(.+?)gif.latex\\\?(.+?)\\\"(.*?)>/g, \"$$$$$2$$$$\"); \
        rich_body[0].innerHTML = contentu; \
    })();'> \
        <img src='" + url + "' alt='" + name + "' border='0'> \
    </div> \
    ";
 return button;
}

function separator() {
  return '<div class="goog-toolbar-separator goog-inline-block">&nbsp;</div>';
}

setlatex("postingComposeToolbar");


以下HTML編集モードに使うときのための自分用メモ

var html_edit = document.getElementById(\"postingHtmlBox\");
var contentu = html_edit.value;
...
html_edit = html_edit.value;
...
setlatex("postingHtmlToolbar");