ActiveObjectsエラー
migrateで自動で生成してくれるのは非常に助かるけど勝手にテーブルをドロップするのがいかんせん慣れない。
今日も8つテーブルつくろうとしてマイグレーションしたら3つしかテーブルが生成されなかった。
テーブル構成がダメなのか実装がダメなのか...
ActiveObjects利用するときって自分でテーブル作った方がいいのかな?
UserProperty.java
public interface UserProperty extends Entity{ public User getUser(); public void setUser(User user); public String getHoge(); public void setHoge(String hoge); }
User.java
public interface User extends Entity{ public String getName(); public void setName(String name); @ManyToMany(Friend.class) public User[] getFriends(); @OneToMany public UserProperty[] getUserProperties(); }
Friend.java
public interface Friend extends Entity{ public User getFriend(); public void setFriend(User friend); public User getUser(); public void setUser(User user); }
entityManager.migrate(User.class); entityManager.migrate(UserProperty.class); entityManager.migrate(Friend.class);
と実行すると
DROP TABLE userProperty
Oh...どういうことだ...
- 追記
entityManager.gigrate(User.class,UserProperty.class,Friend.class);
で直った
初めてのActiveObjects
公式ドキュメントのソースの写経です。
利用したライブラリ
- activeobjects-0.8.2.jar
- mysql-connector-java-5.1.13-bin.jar
Person.java
package sample; import java.sql.Types; import net.java.ao.Entity; import net.java.ao.ManyToMany; import net.java.ao.schema.SQLType; public interface Person extends Entity{ public String getName(); public void setName(String name); public int getAge(); public void setAge(int age); public String getEmail(); public void setEmail(String email); @SQLType(Types.CLOB) public String getComment(); @SQLType(Types.CLOB) public void setComment(String comment); public Family getFamily(); public void setFamily(Family family); @ManyToMany(PersonToPerson.class) public Person[] getPeople(); }
Family.java
package sample; import net.java.ao.Entity; import net.java.ao.OneToMany; public interface Family extends Entity{ public String getName(); public void setName(String name); @OneToMany public Person[] getPeople(); }
PersonToPerson.java
package sample; import net.java.ao.Entity; public interface PersonToPerson extends Entity { public Person getPersonA(); public void setPersonA(Person person); public Person getPersonB(); public void setPersonB(Person person); }
Main.java
package sample; import java.sql.SQLException; import net.java.ao.EntityManager; public class Main { public static void main(String[] args) throws SQLException { EntityManager manager = new EntityManager("jdbc:mysql://localhost/sample", "root", "root"); manager.migrate(Person.class); manager.migrate(Family.class); manager.migrate(PersonToPerson.class); Family family = manager.create(Family.class); family.setName("Spiewak"); family.save(); Person me = manager.create(Person.class); me.setName("Daniel Spiewak"); me.setAge(27); me.setComment("I love databasing"); me.setFamily(family); me.save(); Person you = manager.create(Person.class); you.setName("Joe Blow"); you.setAge(23); you.setComment("Guess who?"); you.setFamily(family); you.save(); PersonToPerson relation = manager.create(PersonToPerson.class); relation.setPersonA(me); relation.setPersonB(you); relation.save(); family.getPeople(); // ...returns new Person[] {you, me} you.getPeople(); // ...returns new Person[] {me} /* * SQLを使用する最初の例 */ Family[] families = manager.findWithSQL(Family.class, "familyID", "SELECT DISTINCT familyID FROM person"); // ageが18以上のすべてのpersonを返す。 Person[] overAge = manager.find(Person.class, "age >= ?", 18); /* * 可変長パラメータと、ID値を意識しない、エンティティインスタンスの直接的な使用 */ Person[] inFamilyOver21 = manager.find(Person.class, "age >= ? AND familyID = ?", 21, family); } }
myBatis、Hibernateと違ってxml書かないのはとても楽。SQLも書けるみたいだし。これでいこう。
でもテーブル追加しようとして
Sample.java
package sample; import net.java.ao.Entity; public interface Sample extends Entity{ public String getHoge(); public void setHoge(String hoge); }
これ追加して
Main.javaを
public static void main(String[] args) throws SQLException { EntityManager manager = new EntityManager("jdbc:mysql://localhost/sample", "root", "root"); manager.migrate(Sample.class); Family[] families = manager.findWithSQL(Family.class, "familyID", "SELECT DISTINCT familyID FROM person"); Person[] overAge = manager.find(Person.class, "age >= ?", 18); Person[] inFamilyOver21 = manager.find(Person.class, "age >= ?", 21); for(Person person : inFamilyOver21){ System.out.println(person.getName()); } }
で書き換えて実行したらPerson,Family,PersonToPersonのテーブルが全部消えた。なんでだろう
前からブログ始めてます
こんにちは。
TaRO改め@w1mvyです。
夏季休暇を終えて、新しくWebアプリを作っています。丁度良い区切りですので、今日から学習内容はこちらの方でまとめてようと思います。
しばらくはテーマをちょこちょこ変更する可能性が高いです…。
よろしくお願いします。
GAEでInvalidURLError
pythongaeflask
TwitterBotでマルコフ連鎖でもやるかーと思って作った。ローカル環境は正しく動くのにGAEに上げてURL叩いてもエラー吐く。原因もわからない。なんでだろ。
exception InvalidURLError()
要求の URL が有効な URL ではないか、サポートされていないメソッドを使用しています。サポートされているのは http と https URL のみです。
へぇ。
GAE上のエラー
E 10-08 12:39AM 08.344
Traceback (most recent call last):
E 10-08 12:39AM 08.344
File "/base/python_runtime/python_dist/lib/python2.5/wsgiref/handlers.py", line 92, in run
E 10-08 12:39AM 08.345
self.result = application(self.environ, self.start_response)
E 10-08 12:39AM 08.345
File "/base/data/home/apps/funya/2.345348482295564051/flask.py", line 644, in __call__
E 10-08 12:39AM 08.345
return self.wsgi_app(environ, start_response)
E 10-08 12:39AM 08.346
File "/base/data/home/apps/funya/2.345348482295564051/werkzeug/wsgi.py", line 406, in __call__
E 10-08 12:39AM 08.346
return self.app(environ, start_response)
E 10-08 12:39AM 08.347
File "/base/data/home/apps/funya/2.345348482295564051/flask.py", line 610, in wsgi_app
E 10-08 12:39AM 08.347
rv = self.dispatch_request()
E 10-08 12:39AM 08.348
File "/base/data/home/apps/funya/2.345348482295564051/flask.py", line 529, in dispatch_request
E 10-08 12:39AM 08.348
return self.view_functions[endpoint](**values)
E 10-08 12:39AM 08.348
File "/base/data/home/apps/funya/2.345348482295564051/application.py", line 88, in twi_markov
E 10-08 12:39AM 08.348
context = markov(morph(sentence = context))
E 10-08 12:39AM 08.350
File "/base/data/home/apps/funya/2.345348482295564051/markov.py", line 15, in morph
E 10-08 12:39AM 08.351
c = urlfetch.fetch(urllib.unquote(query),deadline=10)
E 10-08 12:39AM 08.351
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 241, in fetch
E 10-08 12:39AM 08.352
return rpc.get_result()
E 10-08 12:39AM 08.352
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 501, in get_result
E 10-08 12:39AM 08.352
return self.__get_result_hook(self)
E 10-08 12:39AM 08.352
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 319, in _get_fetch_result
E 10-08 12:39AM 08.353
raise InvalidURLError(str(err))
E 10-08 12:39AM 08.353
InvalidURLError: ApplicationError: 1
markov.py
# coding:utf-8 import urllib,urllib2 from BeautifulSoup import BeautifulSoup import random from google.appengine.api import urlfetch appid = "登録したID" pageurl = "http://jlp.yahooapis.jp/MAService/V1/parse" def morph(sentence = None, appid=appid, results="ma", app_filter="1|2|3|4|5|6|7|8|9|10|11|12|13"): ret = {} sentence = urllib.quote_plus(sentence.encode('utf-8')) query = "%s?appid=%s&results=%s&filter=%s&sentence=%s" % (pageurl, appid, results, app_filter, sentence) #c = urllib2.urlopen(query) c = urlfetch.fetch(urllib.unquote(query),deadline=10) soup = BeautifulSoup(c.read()) surfaces = [] for w in soup.ma_result.word_list: surfaces.append(w.surface.string) return surfaces def markov(word_list=None): MAXGEN = 15 nonword = "\n" w1 = w2 = nonword markov = {} content = "" for word in word_list: if not markov.has_key((w1,w2)): markov[(w1,w2)] = [] markov[(w1,w2)].append(word) w1,w2 = w2,word if not markov.has_key((w1,w2)): markov[(w1,w2)] = [] markov[(w1,w2)].append(nonword) w1 = w2 = nonword for i in range(MAXGEN): suf = markov[(w1,w2)] r = random.randint(0,len(suf) - 1) t = suf[r] if t == nonword: break content = content + t w1,w2 = w2,t return content if __name__=='__main__': sentence = u'日本語入力テスト' surfaces = morph(sentence,appid=appid) for word in surfaces: print word
application.py
#coding: utf-8 from flask import Flask app = Flask(__name__) app.debug = True from google.appengine.ext import db from google.appengine.api import urlfetch from flask import redirect, url_for, request, render_template, abort, flash, get_flashed_messages import tweepy import random from markov import markov , morph CONSUMER_KEY = '登録したの' CONSUMER_SECRET = '登録したの' TOKEN_KEY = '登録したの' TOKEN_SECRET = '登録したの' class Contexts(db.Model): context = db.StringProperty() @app.route('/') def index(): return 'Hello' @app.route('/post_form/') def post_form(context=None): return render_template('form.html') @app.route('/post_update/',methods=['GET','POST']) def post_update(): if request.method == 'POST': context = request.form['context'] update(context) return redirect(url_for('post_form')) return 'Sample' @app.route('/rnd_update/') def rnd_update(): query = Contexts.all() results = query.fetch(1000) result = results[random.randint(0,len(results)-1)] update(result.context) return result.context @app.route('/insert_form/',methods=['GET','POST']) def insert_form(context = None): if request.method == 'POST': context_str = request.form['context'] cont = Contexts(context=context_str) db.put(cont) else: pass return render_template('insert_form.html') @app.route('/update/') def update(context = None,consumer_key = CONSUMER_KEY, \ consumer_secret = CONSUMER_SECRET,token_key = TOKEN_KEY, token_secret = TOKEN_SECRET): if context != None: context = context.encode('utf-8') auth = tweepy.OAuthHandler(consumer_key,consumer_secret) auth.set_access_token(token_key,token_secret) api = tweepy.API(auth) api.update_status(context) return True return False def get_API(consumer_key = CONSUMER_KEY,consumer_secret=CONSUMER_SECRET,\ token_key = TOKEN_KEY,token_secret = TOKEN_SECRET): api = None auth = tweepy.OAuthHandler(consumer_key,consumer_secret) auth.set_access_token(token_key,token_secret) api = tweepy.API(auth) return api @app.route('/markov/') def twi_markov(context = None): api = get_API() timeline = api.friends_timeline(count=5) context = timeline[random.randint(0,len(timeline) -1 )].text for tweet in timeline: context = context + tweet.text context = markov(morph(sentence = context)) context.replace('@',' ') #update(context = context) return context # set the secret key. keep this really secret: app.secret_key = 'キー' if __name__ == '__main__': app.run()
- 追記
よくわかんないけど今もう一回上げなおしたら動いた。とりあえずcronまわしてしばらく様子見。application.pyの
#update..
の部分のコメントアウト外しただけなんだけどなー
FlaskでGAEやってたときに出たエラー
久しぶりにPython触ってほったらかしてたbotを動かしたら下記のエラーがでてきた。
コマンドは
sudo /usr/local/google_appengine/dev_appserver.py ./アプリケーションのパス
Traceback (most recent call last):
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 3206, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 3149, in _Dispatch
base_env_dict=env_dict)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 525, in Dispatch
base_env_dict=base_env_dict)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 2402, in Dispatch
self._module_dict)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 2312, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 2208, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File "/home/w1mvy/workspace/nya_n_/application.py", line 64, in
app.run()
File "/home/w1mvy/workspace/nya_n_/flask.py", line 316, in run
return run_simple(host, port, self, **options)
File "/home/w1mvy/workspace/nya_n_/werkzeug/serving.py", line 507, in run_simple
from werkzeug.debug import DebuggedApplication
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/home/w1mvy/workspace/nya_n_/werkzeug/debug/__init__.py", line 14, in
from werkzeug.debug.repr import debug_repr
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/home/w1mvy/workspace/nya_n_/werkzeug/debug/repr.py", line 24, in
from werkzeug.debug.utils import render_template
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/home/w1mvy/workspace/nya_n_/werkzeug/debug/utils.py", line 12, in
from werkzeug.templates import Template
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/home/w1mvy/workspace/nya_n_/werkzeug/templates.py", line 14, in
from compiler import ast, parse
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/usr/lib/python2.6/compiler/__init__.py", line 27, in
from compiler.transformer import parse, parseFile
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/usr/local/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/usr/lib/python2.6/compiler/transformer.py", line 29, in
import parser
ImportError: No module named parser
どういうことや...
CakePHPでバリデーション
CakePHPのAuthコンポーネント利用してパスワードをハッシュ化して保存する。
CakePHP:パスワード登録時のバリデーション: 机上の楼閣
ここにのっているように一度ただのテキストフォームに入力させてそれにバリデートかけてAuth->password()を通してハッシュ化して保存する。なるほど!
TwitterをGoogleにしてみた
[Firefox][Greasemonkey][Stylish]
FirefoxのアドオンであるGreasemonkey – 🦊 Firefox (ja) 向け拡張機能を入手を使ってTwitterのホームをGoogleの検索ページに似せてみた。これで後ろから誰かに見られても平気だよ!授業中、仕事中...先生や上司に見られてもGoogleで検索してるようにしか見えないよ!!保証できないけど!
こんな表示になります。検索バーがツイートするテキストフィールドで「Google検索」ボタンがツイートボタンです。I'm Feelingは特になにもないです。適当にリンクを張ってください。右上の「検索設定」からログアウトできます。
Greasemonkey側
twitter.user.js
// ==UserScript== // @name twitter++ // @namespace hoge // @description twitterplus // @include http://twitter.com/* // ==/UserScript== (function(d, func) { var check = function() { if (typeof unsafeWindow.jQuery == 'undefined') return false; func(unsafeWindow.jQuery); return true; } if (check()) return; var s = d.createElement('script'); s.type = 'text/javascript'; s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'; d.getElementsByTagName('head')[0].appendChild(s); (function() { if (check()) return; setTimeout(arguments.callee, 100); })(); })(document, function($) { // ここにメインの処理を書く var url = 'http://www.google.com/intl/en_com/images/srpr/logo1w.png'; $('div#status_update_box').prepend( '<div id="google_wrapper" style="padding-top : 30px; padding-bottom : 10px">' +'<div id="google_logo">' +'<div style="color: rgb(119, 119, 119); font-size: 16px; font-weight: bold; left: 214px; position: relative; top: 70px;" nowrap="">日本</div>' +'</div>' +'</div>'); $('textarea#status').attr({'rows':'1','cols':'1','font-size':'23px'}); $('a#tweeting_button').children('span:first').text('Google検索'); $('div#status_update_box').after( '<div id="google_footer" style="padding-top:20px">' +'<span>' +'<center style="opacity: 1;">' +'<div style="font-size : 10pt;">' + '<div id="fil" style="margin: 19px auto; text-align:center;">' +'<a href="http://twitter.com/" class="google_link" style="margin: 0px 10px 0px 10px">広告掲載</a><a href="http://www.google.co.jp/" style="margin: 0px 10px 0px 10px">Google について</a>' +'<b><a href="http://www.google.com/ncr" class="google_link" style="margin: 0px 10px 0px 10px">Google.com in English</a></b>' + '</div>' +'</div>' +'<div style="text-align: center;">' +'<p style="color: rgb(118, 118, 118); font-size: 8pt;">' +'© 2010 -' +'<a href="http://twitter.com/" class="google_link">プライバシー</a>' +'</p>' +'</div>' +'</center>' +'</span>' +'</div>' ); $('body').prepend( '<div style="border-bottom : 1px #C9D7F1 solid; height : 23px;" height="23px">' +'<div style="padding : 3px 8px 0px 8px">' +'<div id="gbar" style="text-align : left; float:left; font-size: 13px">' +'<nobr>' +'<b>ウェブ</b>' +'<a class="google_link" href="http://www.google.com/imghp?hl=ja&tab=wi">画像</a>' +'<a class="google_link" href="http://video.google.com/?hl=ja&tab=wv">動画</a>' +'<a class="google_link" href="http://maps.google.com/maps?hl=ja&tab=wl">地図</a>' +'<a class="google_link" href="http://books.google.com/bkshp?hl=ja&tab=wp">ニュース</a>' +'<a class="google_link" href="http://books.google.com/bkshp?hl=ja&tab=wp">書籍</a>' +'<a class="google_link" href="http://mail.google.com/mail/?hl=ja&tab=wm">Gmail</a>' +'<a class="google_link" href="http://www.google.com/intl/ja/options"><u>その他</u><small>▼</small></a>' +'</nobr>' +'</div>' +'<div id="guser" width="100%" style="text-align : right; font-size : 13px;">' +'<nobr>' +'<span></span><span></span>' +'<a class="google_link" href="http://www.google.com/ig?hl=ja&source=iglk">iGoogle</a>' +'|' +'<span>' +'<a class="google_link" href="http://twitter.com/logout">検索設定</a>' +'|' +'<a class="google_link" href="http://twitter.com/login">ログイン</a>' +'</nobr>' +'</div>' +'</div>' +'</div>' ); $('body').append( '<div id="google_footer2" style="height: 20px; position: relative; margin: 0.8px; padding: 0px 5px 10px 0px;">' +'<font size="-1">' +'<div id="" class="" style="opacity: 1; text-align : left;">' +'<a href="#">背景画像を変更する</a>' +'</div>' +'</font>' +'</div>'); $('#tweeting_controls').css('float','none'); $('a#tweeting_button').css({ 'width':'99px', 'height':'20px', 'display':'inline-block' }); $('a#tweeting_button').removeClass('btn-disabled').css('-moz-border-radius','0px'); $('div#tweeting_controls').append( '<a id="hoge" class="a-btn a-btn-m" tabindex="2" herf="#" style="width : 118px; height: 20px; -moz-border-radius : 0px 0px 0px 0px; border-color : #CCCCCC #999999 #999999 #CCCCCC; border-style: solid; display : inline-block;">' +'<span>I\'m Feeling Lucky</span>' +'</a>'); $('body').css('background','#FFFFFF'); $('div#recommended_users').css('display','none'); $('#timeline_heading').css('display','none'); $('#timeline').css('display','none'); $('#footer').css('display','none'); $('div.bar').css('display','none'); $('#header').css('display','none'); $('#latest_status').css('display','none'); $('.section').css('display','none'); $('#side_base').css('display','none'); $('div#google_logo').css({ 'background': 'url(http://www.google.com/intl/en_com/images/srpr/logo1w.png) no-repeat scroll 0 0 transparent', 'width':'276px', 'height':'110px', 'margin-left':'auto', 'margin-right':'auto', 'text-align':'left' }); $('textarea#status').css({ 'width':'496px', 'height':'25px', '-moz-border-radius':'0px' }); $('div.info').css('text-align','center'); $('body#home.timeline > div').css('padding','1px'); $('body#home.timeline > div > div#gbar > nobr > a').css({ 'margin': '5px', 'padding': '3px' }); $('a.google_link').css({ 'color':'#0000cc', 'padding':'5px' }); $('body').css('height','100%'); $('div#container').css({ 'min-height':'100%', 'height':'auto', 'margin':'0 auto -80px', 'height':'100%' }); $('#google_footer2').css({ 'position':'absolute', 'bottom':'0px' }); $('a#tweeting_button').css('width','85px'); });
windowsだとグリモンのデフォルトの文字エンコードがs-jisになっていて、UTF-8に文字コードを変更しないと日本語が文字化けするので注意。
色々と本物と違いますが誤差の範囲としました。チラッて見られたぐらいじゃわからない...はず。