2010年12月24日金曜日

hasattr

test.py
#!/usr/bin/python
#-*- coding:utf-8 -*-

import settings

if hasattr(settings, u'PAGES_ROOT'):
    print settings.PAGES_ROOT
else:
    print u'None'
settings.py
#-*- coding:utf-8 -*-

PAGES_ROOT = u'django.cgi'

2010年12月18日土曜日

command line で OOO

soffice -writer -headless -norestore


Usage: soffice [options] [documents...]

Options:

-minimized    keep startup bitmap minimized.
-invisible    no startup screen, no default document and no UI.
-norestore    suppress restart/restore after fatal errors.
-quickstart   starts the quickstart service (only available on windows and OS/2 platform)
-nologo       don't show startup screen.
-nolockcheck  don't check for remote instances using the installation
-nodefault    don't start with an empty document
-headless     like invisible but no userinteraction at all.
-help/-h/-?   show this message and exit.
-writer       create new text document.
-calc         create new spreadsheet document.
-draw         create new drawing.
-impress      create new presentation.
-base         create new database.
-math         create new formula.
-global       create new global document.
-web          create new HTML document.
-o            open documents regardless whether they are templates or not.
-n            always open documents as new files (use as template).

-display <display>
      Specify X-Display to use in Unix/X11 versions.
-p <documents...>
      print the specified documents on the default printer.
-pt <printer> <documents...>
      print the specified documents on the specified printer.
-view <documents...>
      open the specified documents in viewer-(readonly-)mode.
-show <presentation>
      open the specified presentation and start it immediately
-accept=<accept-string>
      Specify an UNO connect-string to create an UNO acceptor through which
      other programs can connect to access the API
-unaccept=<accept-string>
      Close an acceptor that was created with -accept=<accept-string>
      Use -unnaccept=all to close all open acceptors
Remaining arguments will be treated as filenames or URLs of documents to open.

2010年12月15日水曜日

Geanyがいい

HP:http://www.geany.org/
軽量IDE
 立ち上がりも早いし、補完もOK。Pythonの色付けもある。
欲を言えばdebuggerが統合されていればなーあ。

P.S. Texの補完も効くぞ。

2010年12月13日月曜日

django-cmsをCGIで

django-cmsをCGIでやろうとするとURLにlanguageとCGIの名前が含まれて邪魔。
menuのNavigationNodeの初期化の時取ってしまうと吉。

と思っていたが別の方向考慮中
結論:REDIRECT_URLをとっちまう。@CGI

2010年12月5日日曜日

librahack

詳細はこちらこちら

なかなかおもしろい人たちはこちら
三菱電機インフォメーションシステムズ 門脇 三雄
岡崎市立中央図書館 館長 大羽 良氏

岡崎市長 柴田紘ー氏


市長、

悪いことはいわん早くお客さん(岡崎市民だろ)に謝罪して、会社を入れ替えなさい。
宮崎県えびの市、中野区の方も考えた方がいい。 

追記:
一応の決着をみたようです。ここここ

2010年12月2日木曜日

python file名操作

すぐ忘れるのでメモ

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import os
from os.path import *

print os.getcwd()
path = u'Org/test.xls'
print path
print basename(path)
print splitext(path)
print splitext(basename(path))
print dirname(path)
print abspath(path)

2010年11月28日日曜日

さくらとcoreserver-mini

先日Django-cmsをデプロイしてみたが、さくらでは眠ってしまいそうなくらい遅かった。coreserver-miniではそこそこのレスポンス。借りているサーバーにもよるのだろうけれど…
マシンスペック
さくら
CPU T7200 @ 2.00GHz メモリ:2GB
 coreserver-mini
Xeon L3110 3.00GHz x 2    4019MB
の差でしょうか。

2010年11月25日木曜日

2010年11月11日木曜日

reportlab misc

canvasのページサイズ
canvas._pagesize

A4  
(210, 297) mm 
( 595.28, 841.89)Pixcel(@72 dpi)

2010年11月9日火曜日

django-scheduleのweekページで曜日の短縮型

日付が2桁だと水曜日に行からあふれるので
_daily_occurrences.htmlの5行め
        {{day.start|date:"l, d"}}

        {{day.start|date:"D, d"}}

2010年11月7日日曜日

djangoのformでMultipleChoiceFieldの初期値設定

forms.MultipleChoiceField(choices=( ('0', 'Foo'), ('1', 'Bar'), ('2', 'Hoge')), required=False, initial=['0', '2'])

2010年11月4日木曜日

Django-cmsでmenuのカスタマイズ

djangoのアプリで結果はpublicに表示したいけれど登録やリストその他のアプリURLはログインしたuserだけに見えるようにしたい。(Advanced SettingsのMenu visibilityをfor logged in users onlyに設定しちゃうとそのページも見えなくなる。)
たとえば、edit, list, enrollをhogeMenuとしてmenu.pyに登録して、一般に表示する部分はurl(r'$', 'showPublic'),とurls.pyの登録し
/hoge/                                 一般に表示する
/hoge/edit/                        ログインユーザーのみ
/hoge/list/                         ログインユーザーのみ
/hoge/enroll/                    ログインユーザーのみ
としたければ
from menus.base import Modifier

class skipHogeMenuWithoutLogin(Modifier):
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
        for node in nodes:
            if node.namespace == u'HogeMenu':
                if request.user.is_authenticated():
                    node.visible = True
                else:
                    node.visible = False
       
        return ret

menu_pool.register_modifier(skipHogeMenuWithoutLogin)
 をmenu.pyに追加すればよい

Django-cmsでApphook

djangoアプリをdjango-cmsのメニューに乗っけるにはApphookを使うのでけれど、Apphookを追加してpageのAdvanced Settingsでアプリを指定してもcmsのメニューには表示されない
cmsのメニューに表示するにはmenu.pyが必要。
メニューに表示されないが、ページのURLに続いて直打でそれぞれのページを打ち込めば表示はされる。
cms_app.py
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
#from menu import HogeMenu    #<-必要

class HogeApphook(CMSApp):
    name = _("Hoge")
    urls = ["hoge.urls"]
    #menus = [HogeMenu]    #<-必要

apphook_pool.register(HogeApphook)
cmsのページでアプリを指定
urls.pyが以下なら
urlpatterns += patterns('hoge.views',
    url(r'edit/$', 'edit_Hoge'),
    url(r'(?P<page>\d+)/$', 'list_Hoge', name='list_Hoge'),
)
http://hogehoge/pageURL/edit/
http://hogehoge/pageURL/1/
でアクセスできる。

2010年11月2日火曜日

bound formでwidgetを変更する

view.pyでお決まりの呪文に追加

if request.method == u'POST':
    form = FooForm(request.POST, instance=Foo)
    form.fields['fieldName'].widget=PasswordInput()
    if form.is_valid():
    .........
else:
    form = FooForm(instance=Foo)
    form.fields['fieldName'].widget=PasswordInput()

2010年10月29日金曜日

さくらでFlask(CGI)

さくらでFlaskをCGIで動かすには。
まずなにはともあれHello Flaskということで
# -*- encoding: utf-8 -*-

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Flask World!"

'''
if __name__ == "__main__":
    app.debug = True
    app.run()
'''
続けてCGI
#!/home/path2yourVirtualenv/bin/python
# -*- encoding: utf-8 -*-

from wsgiref.handlers import CGIHandler
from helloFlask import app

CGIHandler().run(app)
 .htaccessに
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /helloCGI.cgi/$1 [QSA,L]
 きもはCGIの1行目virtualenvへのpathの設定

2010年10月27日水曜日

Django-cmsでauth

たとえばadminページで
auth | group | Can add group
auth | group | Can change group
auth | group | Can delete group
と表示されているとき

userPermissions = user.get_all_permissions()
でユーザーと所属グループのpermissionsを得る。上記の例なら、
userPermissions = [u"auth.add_group", u"auth.change_group", u"auth.delete_group", ]
そこでパーミッションを例えば
u"auth.add_group" in userPermissions
で分解して個別のpermissionを得る。

追記: has_perm(perm), has_perms(perm_list)を使う。

templatetagsでのerrorはTemplateSyntaxError

templatetagsでerrorを起こすとdebug表示でTemplateSyntaxErrorが表示される。

Django-cmsでgroup

userは必ず1つのグループに所属しなければならない。
permissionを持たないグループも必要かも。

2010年10月26日火曜日

python manage.py syncdbで入力不要

python manage.py --noinput syncdb
でプロンプトがでなくなる。あとは
python manage.py createsuperuser --username=foo --email=hoge
でスーパーユーザーをつくればOK!
deployでつかえる。

追記:createsuperuserでスーパーユーザーを作るときはpost_saveシグナルが発行された後        is_staff = True, is_active = True, is_superuser = Trueが設定される。

2010年10月20日水曜日

2010年10月19日火曜日

Boost.Pythonのデバッグ

メモのみ

gdb --args python [./test.py]
C++のクラスをpythonにさらしてインタープリターからコントロールしようとすると
Segmentation fault
同じライブラリでC++のアプリから同じ手順で動かすと動く。
それもある特定のオブジェクトを使ったときだけ…不思議じゃ。
Boost PythonとBoost serializationの相性か?
boost-1.44 
Ubuntu10.04
GCC-4.4.3
python 2.6.5
 
追記10/22
どうも根が深いみたい。ここ 
gdb --args python ./test.py
だと
Program received signal SIGSEGV, Segmentation fault.
0xb5010c17 in __cxa_allocate_exception () from /usr/lib/libstdc++.so.6
LD_PRELOAD="libGL.so libstdc++.so.6" gdb --args python ./test.py
だと
Traceback (most recent call last):
  File "./test.py", line 16, in <module>
    lst.save("./test.xml")
RuntimeError: unregistered class - derived class not registered or exported

Program exited with code 01.

2010年10月16日土曜日

重複取り出し

setを使うべきでした。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

answer0 = 'a'
answer1 = 'b'
answer2 = 'c'
answer3 = 'b'
answer4 = 'd'

passPhrases = (answer0, answer1, answer2, answer3, answer4, )
sets = set('')
ret = []
size = 0
for item in passPhrases:
    sets.add(item)
    if len(sets)== size:
        ret.append(item)

    size = len(sets)

print ret
dups = {}
for dup in ret:
    duplist = []
    pos =0
    for item in passPhrases:
        if item == dup:
            duplist.append(pos)
        pos =pos + 1

    dups[dup] = duplist

print dups

2010年10月15日金曜日

PILで文字列画像化

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import Image, ImageFont, ImageDraw

# output string
emailString = u"こんにちは"
#get font metrics
font = ImageFont.truetype("/usr/share/fonts/truetype/takao/TakaoPGothic.ttf", 24, encoding='unicode')
size = font.getsize(emailString)
#create image
image = Image.new('RGBA', (size[0]+10, size[1]+10), (0, 0, 0, 0))
draw = ImageDraw.Draw(image)
# use a truetype font
draw.text((5, 5), emailString, font=font, fill='#000000')
#save the image
image.save("string.png", 'PNG')

 でけた。

2010年10月13日水曜日

django-cmsでsnippetのi18n

snippetの中に{% trans "Site Map" %}としてやってもdjango-admin makemessagesでは取り出してくれない。*.htmlだけだから?でもsnippetsはdbの中にあるし。
しかたがないのでdjango.poの末尾に
msgid "Site Map"
msgstr "サイトマップ"
と付けた。

templateに出してみることをしてみたが、今度は肝心のmenuがそのまま出力されてしまう。ちなみにコードはこう。
{% load cache cms_tags %}
{% load cms_tags menu_tags %}
{% load i18n %}
<h2>{% trans "Site Map" %}</h2>
<ul  id="siteMapTree" class="treeview">
    {% show_menu 0 100 100 100 %}
</ul>

2010年10月12日火曜日

django-cmsでdjago-scheduleの年間スケジュールの月名をi18n

オリジナルはpythonのlocaleで月名を出しているので

periods.pyのclass Month(Period)のdef name(self)を
    def name(self):
        return self.start.strftime('%B')
から
    def name(self):
        monthName=(_('January'), _('February'), _('March'), _('April'),
                _('May'), _('June'), _('July'), _('August'),
                _('September'), _('October'), _('November'), _('December'), )
        month = int(self.start.strftime('%m')) - 1
        return monthName[month]
に変更。

えらい苦労したぞ。

djangoでnew userにpassword change mailを送る

サイトにアカウントを作成したら、ユーザーにパスワードを設定してもらえるようにメールを送りたい。
 1)emailを必須に(django/contrib/auth/models.py version 1.2.3)
@@ -196,7 +196,7 @@
     username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
     first_name = models.CharField(_('first name'), max_length=30, blank=True)
     last_name = models.CharField(_('last name'), max_length=30, blank=True)
-    email = models.EmailField(_('e-mail address'), blank=True)
+    email = models.EmailField(_('e-mail address'), blank=False)
     password = models.CharField(_('password'), max_length=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."))
     is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
     is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user should be treated as active. Unselect this instead of deleting accounts."))
2)admin pageに表示(django/contrib/auth/admin.py version 1.2.3)
@@ -34,7 +34,7 @@
     add_fieldsets = (
         (None, {
             'classes': ('wide',),
-            'fields': ('username', 'password1', 'password2')}
+            'fields': ('username', 'password1', 'password2', 'email')}
         ),
     )
     form = UserChangeForm
 3)User post save signal(profile/models.py)
from django.db.models.signals import post_save
from django.contrib.sites.models import Site
from django.core.mail import send_mail
from django.contrib.auth.tokens import default_token_generator
from django.template import Context, loader
from django.utils.http import int_to_base36

def sendEmailToNewUser(sender, **kwargs):
    if kwargs['created']:
        domain_override=None
        email_template_name='registration/add_member_email.html'
        use_https=False
        token_generator=default_token_generator
        '''
        Generates a one-use only link for resetting password and sends to the user
        from django.contrib.auth.forms.PasswordResetForm.save
        '''
        if not domain_override:
            current_site = Site.objects.get_current()
            site_name = current_site.name
            domain = current_site.domain
        else:
            site_name = domain = domain_override
        user = User.objects.get(id=kwargs['instance']._get_pk_val())
        t = loader.get_template(email_template_name)
        c = {
            'email': user.email,
            'domain': domain,
            'site_name': site_name,
            'uid': int_to_base36(user.id),
            'user': user,
            'token': token_generator.make_token(user),
            'protocol': use_https and 'https' or 'http',
        }
        send_mail(_("Set your account on %s as new user") % site_name,
            t.render(Context(c)),  None,  [user.email])

post_save.connect(sendEmailToNewUser, sender=User)
初期化時にはsuperuser作成のときにcrashするので、最後の行をコメントアウト

2010年10月8日金曜日

Epydocって素敵

Epydocって素敵。api吐き出してくれる。
djangoなんかもこう。
使い方は簡単。
epydoc [--html|--pdf] -o [output dir] package_dir
django-cmsもはきだしてみるべい。 

2010年9月28日火曜日

wymeditorプラグインでremove nested pluginがない。

今日気がついた。Django-cmsでテキストプラグインにネストしたプラグインを消去するボタンが無い。
html表示させて、該当部分を削除すればいいんだかそれもなんだかなーあ。

追記
アイコンをセレクトしてDELキーで消えました。その手があったか!

2010年9月16日木曜日

djangoでどこのページにもlogin/logoutを表示させる

TEMPLATE_CONTEXT_PROCESSORSに "django.core.context_processors.request",を入れて
            <p class="login_logout">
                {% if user.is_authenticated %}
                    <a href="{% url auth_logout %}?next=/">logout</a>
                {% else %}
                    <a href="{% url auth_login %}?next={{ request.path }}">login</a>
                {% endif %}
            </p>
request.pathでログインしたページに戻る。

2010年9月8日水曜日

2010年9月7日火曜日

gitでpush

git push origin master

gitでcommit

○git commit -am "comment"
×git commit -ma "comment"
error: pathspec 'comment' did not match any file(s) known to git.

gitでローカル廃棄

git checkout ***********
git checkout -f

もしくは、ローカルのHEADに戻すときは
git checkout HEAD
git checkout -f

もしくは
git checkout --<file>

2010年9月6日月曜日

django-scheduleで

こんな感じでどうでしょう。

<html>
    <head>
        <title>
            test
        </title>
    </head>
    <body>
        <div style="clear: both;">
            <div style="border: 1px solid; float: left;">
                <div style="border-right: 1px solid; float: left; width: 50px;">
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test01               
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test02
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test03
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test04
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test05
                    </div>
                </div>
                <div style="float: left; position: relative; width: 50px; height: 100px">
                    <div style="border: 1px dotted; height: 18px; position: absolute; top:0px; left:0px; background-color: #FFFFFF">
                        test11               
                    </div>
                </div>
            </div>
            <div style="width 20px; height 100px; float: left;">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            </div>
            <div style="border: 1px solid; float: left;">
                <div style="border-right: 1px solid; float: left; width: 50px;">
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test21               
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test22
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test23
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test24
                    </div>
                    <div style="border-bottom: 1px dotted; width: 100px; height: 19px;">
                        test25
                    </div>
                </div>
                <div style="float: left; position: relative; width: 50px; height: 100px">
                    <div style="border: 1px dotted; height: 18px; position: absolute; top:13px; left:0px; background-color: #FFFFFF">
                        test31               
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

2010年9月5日日曜日

gitでmeld

ここから

git config --global diff.external meld
でmeldを指定。
#!/usr/bin/python

import sys
import os

os.system('meld "%s" "%s"' % (sys.argv[2], sys.argv[5]))
を、$HOME/bin/gitDiff.pyで保存

git config --global diff.external /home/bin/diff.py
で外部diffを指定
あとは
git diff

2010年9月3日金曜日

gitで必要な情報のみ

git status -s
-sなしだと読みやすいけれど、後処理にパイプするのが簡単ではないので

2010年8月29日日曜日

django-scheduleをinstallしても動かない

Exception Type: ImportError at /
Exception Value: No module named conf.settings
を投げたら
cp -r .../source/schedule/conf .../site-packages/django_schedule-0.5b-py2.6.egg/schedule/
ここ

Django-cmsでapphookpageをスクリプトで挿入

するには
        site = Site.objects.get_current()
        #cms_page
        pageTop = Page(site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True,
                    login_required=True, limit_visibility_in_menu=1)
        pageTop.save()
        #cms_title ja
        title_ja = Title(page=pageTop, language=settings.LANGUAGES[0][0],
                        slug='alumni', title='同窓会', application_urls='AccountsApphook')
        title_ja.save()
        #cms_title en
        title_en = Title(page=pageTop, language=settings.LANGUAGES[1][0],
                        slug='alumni-en', title='Alumni', application_urls='AccountsApphook')
        title_en.save()

Django-cmsで子pageをスクリプトで挿入

するには
        site = Site.objects.get_current()
        #cms_page
        pageTop = Page(site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        pageTop.save()
        #cms_title ja
        title_ja = Title(page=pageTop, language=settings.LANGUAGES[0][0],
                        slug='news-top-page', title='ニューストップページ')
        title_ja.save()
        #cms_title en
        title_en = Title(page=pageTop, language=settings.LANGUAGES[1][0],
                        slug='news-top-page-en', title='News Top Page')
        title_en.save()
        #0
        page = Page(parent=pageTop, site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        page.save()
        #cms_title ja
        title_ja = Title(page=page, language=settings.LANGUAGES[0][0],
                        slug='news-top-page0', title='ニュースページ0')
        title_ja.save()
        #cms_title en
        title_en = Title(page=page, language=settings.LANGUAGES[1][0],
                        slug='news-top-page0-en', title='News Page0')
        title_en.save()
        #1
        page = Page(parent=pageTop, site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        page.save()
        #cms_title ja
        title_ja = Title(page=page, language=settings.LANGUAGES[0][0],
                        slug='news-top-page1', title='ニュースページ1')
        title_ja.save()
        #cms_title en
        title_en = Title(page=page, language=settings.LANGUAGES[1][0],
                        slug='news-top-page1-en', title='News Page1')
        title_en.save()
        #2
        page = Page(parent=pageTop, site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        page.save()
        #cms_title ja
        title_ja = Title(page=page, language=settings.LANGUAGES[0][0],
                        slug='news-top-page2', title='ニュースページ2')
        title_ja.save()
        #cms_title en
        title_en = Title(page=page, language=settings.LANGUAGES[1][0],
                        slug='news-top-page2-en', title='News Page2')
        title_en.save()
        #3
        page = Page(parent=pageTop, site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        page.save()
        #cms_title ja
        title_ja = Title(page=page, language=settings.LANGUAGES[0][0],
                        slug='news-top-page3', title='ニュースページ3')
        title_ja.save()
        #cms_title en
        title_en = Title(page=page, language=settings.LANGUAGES[1][0],
                        slug='news-top-page3-en', title='News Page3')
        title_en.save()

Django-cmsでpageをスクリプトで挿入

するには
        site = Site.objects.get_current()
        #cms_page
        page = Page(site=Site.objects.get_current(), navigation_extenders='',
                    template='body1Column.html', published=True,
                    publisher_state=1, publisher_is_draft=True)
        page.save()
        #cms_title ja
        title_ja = Title(page=page, language=settings.LANGUAGES[0][0],
                        slug='top-page', title='トップページ')
        title_ja.save()
        #cms_title en
        title_en = Title(page=page, language=settings.LANGUAGES[1][0],
                        slug='top-page-en', title='Top Page')
        title_en.save()
        #placeholder
        placeholders = {}
        for placeholder in page.placeholders.all():
            placeholders[placeholder.slot] = placeholder
        #plugins
        pluginText = Text(plugin_type='TextPlugin', page=page, language=settings.LANGUAGES[0][0],
                        position=0, body='

トップページ

', placeholder=placeholders['body'],
                        publisher_state=1, publisher_is_draft=True)
        pluginText.insert_at(None, commit=True)
        pluginText = Text(plugin_type='TextPlugin', page=page, language=settings.LANGUAGES[1][0],
                        position=0, body='

Top Page

', placeholder=placeholders['body'],
                        publisher_state=1, publisher_is_draft=True)
        pluginText.insert_at(None, commit=True)
 追記:django-cms 2.2ではここを見よ

2010年8月27日金曜日

Django-cmsでdbの内容をすべて破棄

 Django-cmsでdbの内容をすべて破棄するには
#cms_page
objects = Page.objects.all()
objects.delete()
#cms_placeholder
objects = Placeholder.objects.all()
objects.delete()
#django_sessions
objects = Session.objects.all()
objects.delete()
#django_admin_log
objects = LogEntry.objects.all()
objects.delete()
でいける。たぶん…

2010年8月25日水曜日

placeholderは自動で挿入?

Django-cmsでdefault pageをprogramから挿入するとき、Page, Titleをインスタンス化して保存すればplaceholderは自動でやってくれる?
templateを適切に指定したとき?
        #cms_page ja
        p = Page()
        p.publisher_is_draft = True
        p.publisher_public_id = None
        p.publisher_state = 1
        p.created_by = 'tosh'
        p.changed_by = 'tosh'
        p.parent_id = None
        p.creation_date = datetime.datetime.now()
        p.publication_date = datetime.datetime.now()
        p.publication_end_date = None
        p.in_navigation = True
        p.soft_root = False
        p.reverse_id = None
        p.navigation_extenders = ''
        p.published = True
        p.template = 'body1Column.html'
        p.site_id = 1
        p.moderator_state = 1
        p.level = 0
        p.lft = 1
        p.rght = 2
        p.tree_id = 1
        p.login_required = False
        p.limit_visibility_in_menu = None
        p.save()

        #cms_title ja
        tj = Title()
        tj.publisher_is_draft = True
        tj.publisher_public_id = None
        tj.publisher_state = 1
        tj.language = 'ja'
        tj.title = 'トップページ'
        tj.menu_title = ''
        tj.slug = 'top-page'
        tj.path = 'top-Page'
        tj.has_url_overwrite = False
        tj.application_urls = None
        tj.redirect = None
        tj.meta_description = None
        tj.meta_keywords = None
        tj.page_title = None
        tj.page_id = 1
        tj.creation_date = datetime.datetime.now()
        tj.save()
        #cms_title en
        te = Title()
        te.publisher_is_draft = True
        te.publisher_public_id = None
        te.publisher_state = 1
        te.language = 'en'
        te.title = 'Top Page'
        te.menu_title = ''
        te.slug = 'top-page-en'
        te.path = 'top-page-en'
        te.has_url_overwrite = False
        te.application_urls = None
        te.redirect = None
        te.meta_description = None
        te.meta_keywords = None
        te.page_title = None
        te.page_id = 1
        te.creation_date = datetime.datetime.now()
        te.save()

        #plugins
        #cms_cmsplugin (text) ja
        plg = Text()
        plg.publisher_is_draft = True
        plg.publisher_public_id = None
        plg.publisher_state = 1
        plg.placeholder_id = 1
        plg.parent_id = None
        plg.position = 0
        plg.language= 'ja'
        plg.plugin_type = 'TextPlugin'
        plg.creation_date = datetime.datetime.now()
        plg.level = 0
        plg.lft = 1
        plg.rght= 2
        plg.tree_id = 1
        plg.body = '

トップページ

'
        plg.save()
        #cms_cmsplugin en
        plg = Text()
        plg.publisher_is_draft = True
        plg.publisher_public_id = None
        plg.publisher_state = 1
        plg.placeholder_id = 1
        plg.parent_id = None
        plg.position = 0
        plg.language= 'en'
        plg.plugin_type = 'TextPlugin'
        plg.creation_date = datetime.datetime.now()
        plg.level = 0
        plg.lft = 1
        plg.rght= 2
        plg.tree_id = 2
        plg.body = '

Top Page

'
        plg.save()

        p.save()

2010年8月24日火曜日

EclipseでDjango Debug

eclipse起動
workspaceを上位のディレクトリに
file->new->Other(ctrl+N)でNew dialog
PydevフォルダのPydev Project
next
[Project Name]を書き入れ[Create default 'src' folder ...]をアンチエック
[Please configure an interpreter ...]を押してPython Iterpreter dialog
[New]を押してInterpreter Name, Interpreter Executableを設定Interpreter Executableはdjangoが設定してあるものを選択
Selection Needed dialogで[OK],Preferenceで[apply][OK]
PyDev ProjectでInterpreterを選択
[debug]->[Debug Configurations]で[Pydev Django]を選択して新規作成
Nameを記入し[Main]タブのProjectを選択、Main Moduleはmanage.pyを選択。
[Arguments]タブのProgram argumentsに[runserver --noreload]
[Interpreter]タブのInterpreterで先ほど設定したInterpreterを[Apply][Debug]

sqliteのパスは忘れないように。(泣き)
'NAME': PROJECT_ROOT + '/cms.db',

2010年8月8日日曜日

pdfのfontを確認

pdffonts *.pdf

Usage: pdffonts [options]
  -f        : first page to examine
  -l        : last page to examine
  -opw   : owner password (for encrypted files)
  -upw   : user password (for encrypted files)
  -v             : print copyright and version info
  -h             : print usage information
  -help          : print usage information
  --help         : print usage information
  -?             : print usage information

2010年8月4日水曜日

Django-cmsでmoderation

CMS_MODERATOR = Trueは設定してはダメ。
ここ。placeholderが検査通っても表示されない。

2010年7月31日土曜日

Djangoのcontext_processors

よく分かってなかったけれどここの説明で理解できた。
要は、「多数回使う変数をいちいちview.pyで設定するのがイヤヤ。」 といDRY精神なんだ。

2010年7月26日月曜日

virt-managerでKVM

sudo apt-get install kvm libvirt-bin virt-manager virt-viewer virtinst

  libaio1 libdevmapper-event1.02.1 libvirt0 libxen3 lvm2 python-libvirt qemu-common
  qemu-kvm seabios vgabios watershed
提案パッケージ:
  mol-drivers-macosx openbios-sparc kvm-pxe ubuntu-vm-builder uml-utilities qemu
以下のパッケージが新たにインストールされます:
  kvm libaio1 libdevmapper-event1.02.1 libvirt-bin libvirt0 libxen3 lvm2 python-libvirt
  qemu-common qemu-kvm seabios vgabios virt-manager virt-viewer virtinst watershed


sudo restart libvirt-bin

sudo apt-get purge kvm libvirt-bin virt-manager virt-viewer virtinst
sudo apt-get purge qemu-kvm

sudo apt-get --purge autoremove

sudo rm -r /var/cache/libvirt  /var/lib/libvirt /var/run/libvirt/ $HOME/.libvirt $HOME/.virt-manager $HOME/.gconf/apps/virt-manager /root/.gconf/apps/virt-manager

2010年7月15日木曜日

2010年7月13日火曜日

クラスに動的にメンバーやメンバー関数を追加

ここのパクリです。ごめんなさい。

#!/usr/bin/env python
#-*- coding:utf-8 -*-


class Echo(object):
    def __getattr__(self, name):
        return lambda: name

    def add_function_attr(self, key, value):
        self.__dict__[key] = lambda : value

    def add_value_attr(self, key, value):
        self.__dict__[key] = value

e = Echo()
print e
print dir(e)
print e.a()
print e.b()
print e.c()

e.add_function_attr("hoge", "foobar")
print e.hoge()
print dir(e.hoge)
e.add_function_attr("abcdefg", "alphabet")
print e.abcdefg()
print dir(e.abcdefg)

e.add_value_attr("foo", "foobar")
print e.foo
print dir(e.foo)
e.add_value_attr("num", 123)
print e.num
print dir(e.num)

2010年7月8日木曜日

Boost Pythonで複数の返却値

std::pair getWidthHeight(void)なんて関数をpythonにラップするときはここに出ている。
関数を定義して
template
struct PairToTupleConverter {
  static PyObject* convert(const std::pair& pair) {
    return incref(make_tuple(pair.first, pair.second).ptr());
  }
};
登録
to_python_converter, PairToTupleConverter >(); 
std::pairをtupleで返してくれる。

2010年7月6日火曜日

boost_1_43でerror: conflicting declaration ‘mpl_assertion

BOOST_CLASS_VERSIONが ”error: conflicting declaration ‘mpl_assertion”と吐いて終了する。GCC4.4.3
ここ?boost_1_42に戻す。

2010年6月29日火曜日

djangoでadminのパスワードをリセット

urls.pyに
import django.contrib.auth.views #auth email password reset

#password reset
url(r'^password_reset/$', 'django.contrib.auth.views.password_reset'),
url(r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done'),
url(r'^reset/(?P[0-9A-Za-z]+)-(?P.+)/$', 'django.contrib.auth.views.password_reset_confirm'),
url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),
を追加。
settings.pyにメールサーバーを追加(例:Gmail)
#send mail
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'yourAccount@gmail.com'
EMAIL_HOST_PASSWORD = 'yourAccountPassword'
EMAIL_PORT = 587
リセットの仕方
http://django.site/password_reset/にアクセス。
emailアドレスを尋ねられるからadminに登録したアドレスを入力して送るとadminの中にemailアドレスが存在したときリセットurlを記載したメールが送付される。
リセットurlにアクセスするとパスワードを変更を求められ、入力するとリセット完了。

すばらしい。

2010年6月25日金曜日

2010年6月23日水曜日

rename with space, xargs with 2args

rename:
'aho kasu.txt' -> 'aho_kasu.txt'なら
rename 's/aho\ kasu/aho_kasu/' *.txt

xargs:
xargs --max-args=2

2010年6月14日月曜日

DjangoでValueError

Django-cmsでページを作成して削除。reversionで復活を試みるが選択しているtemplateにplaceholderがあるとerrorを投げる。
Cannot add "": instance is on database "None", value is on database "default"
調査中???

 http://groups.google.co.jp/group/django-users/browse_thread/thread/a81d6618fce29436
http://docs.djangoproject.com/en/dev/releases/1.2-alpha-1/#specifying-databases
http://docs.djangoproject.com/en/dev/ref/settings/#databases
http://docs.djangoproject.com/en/dev/topics/db/multi-db/#allow_relation
http://botland.oebfare.com/logger/django/2010/6/2/17/

django-reversionをモデルに

ここです。

from django.contrib import admin
from reversion.admin import VersionAdmin
from yoursite.models import YourModel
 
class YourModelAdmin(VersionAdmin):
    """Admin settings go here."""
    ...

admin.site.register(YourModel, YourModelAdmin)
をモデルの後ろに付ければOK
VersionAdminはadmin.ModelAdminのサブクラス 

2010年6月3日木曜日

Pinaxをcoreserver miniへインストール

普通にやってたらエラーで止まった。読んでみるとmarkdownと言うのが無いといっている。Pythonは2.4.3と古め。
とりあえず、souce activateで起動して、pip install markdownで解決。もう一度python script/pinax-boot.py XXX

2010年6月1日火曜日

こんなことFireFoxがよく落ちるのは朝日新聞のせい?を書いたけれども。やっぱりそうでした
最近google chromeを試しているんだけれど、朝日新聞のサイトを開いていると「次のプラグインがクラッシュしました/usr/lib/flashplugin-installer/libflashplayer.so」とwarningがでる。

あらら、すかぽんたん
ubuntuのfirefoxが問題かと思ったが、本家のプラグイン落とすようではahohiサイトのflushがダメダメってことか。
ちゃんとしたプログラマーがいないんだろうな。ちゃんとした記者もいないけど。

ubuntuでテンキーが使えない

ここで助かった。ts1さんありがとう。
システムー>設定ー>キーボードでマウスキータブを選択。
キーボードでポインタを制御できるようにするチェックを外す。
外れていたらチェックしてもう一度外す。

2010年5月28日金曜日

さくらでDjango(CGI) その2(djangoは動くかなの巻)

前回の投稿までは上手く動いた。ぢゃあDjangoはどうよ?
ここからdjango.cgiを取ってきてApacheのドキュメントルート等に置いてちょ。
で、django.cgiを変更
1: #!/usr/bin/env python ー>
#!/home/yourAccount/path/to/python/bin/python
95: sys.path.append("/home/mycode") ー>
sys.path.append("/home/yourAccount/path/to/django_src")
97: os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' ー>
os.environ['DJANGO_SETTINGS_MODULE'] = 'yourSite.settings'
あとは所望の動作をするか確認。

さくらでDjango(CGI) その1(virtualenv/pythonは動くかなの巻)

前回の投稿さくらにvirtualenv環境が出来たので遊んでみようと素人が始めたがうまくいかない。
ここここを参考にさせていただきましたありがとうございます。
上手く行かないのが何デカと切り分けて考えるために色々やったのでメモ。
1)まずは、.htaccessでpythonのCGIが動かせるか?
.htaccessは写経で、

******** .htaccess ********
order deny,allow
deny from all
allow from XXX.XXXX.jp

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.cgi/$1 [QSA,L]
********
django.cgiは1行目でpythonをローカルのvirtualenvへ向ける
******** django.cgi ********
#!/home/yourAccount/path/to/python/bin/python
# -*- coding: utf-8 -*-

import django
print "Content-Type: text/html\n"
print ""
print "Hello world!"
print "dir(django)=%s" % dir(django)
print "dir(django)=%s
" % dir(django)
print "django versin=%s" % django.get_version()
********
動いていれば
Hello world!
dir(django)=['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
django versin=1.1.1
と表示される。

P.S. PIL, pysqliteを忘れずに。

2010年5月27日木曜日

google chromeがきびきび動く

linux版も出たということで
ここからダウンロード
おお、きびきび動く。debもあるでよ。
i386版しかないのが残念。MacあらためUbuntu-PPCには乗っけられない。

さくらでPinax

調子こいてやってしまいました。
Pinaxもvirtualenvを利用しているので。
前回の投稿で作ったパッチから
cat ./virtualenv.patch | sed 's/virtualenv/pinax-boot/' > ./pinax-boot.patch
path/to/Pinax-0.7.2-bundle/scripts/に移動して、patch < path/to/pinax-boot.patchでOK
ほなな。

さくらでvirtualenv

さくらインターネットでvirtualenvを作ってもsource $HOME/path/to/target/bin/activateが[Badly placed ()'s.]エラーで止まる。
これは、shellがtschもしくはschだから。bashに変えてもいいんだけれどここはtschもしくはschでやってみる。
googleで嗅ぎ回ると、あった、パッチがあった。
ここから パッチを取ってきて、virtualenvを展開したところにvirtualenv.patchとでもして保存。あとは、patch < virtualenv.patchとすればvirtualenv.pyにパッチが当たる。
後は普通にpython ./virtualenv.py $HOME/path/to/targetで完成!
source $HOME/path/to/target/bin/activate.cshで起動
これでpythonの環境をスイッチしながら遊べるぞ!

追記:サーバーからCGIで動かすときは不要です。(たぶん)

2010年5月21日金曜日

Django url.py読み込むタイミング

Django url.py読み込むタイミングは、起動後最初のリクエストがあったときです。
知らなかったのは僕だけ?

2010年5月20日木曜日

google bookmarksのラベル管理

GMarks使っていると階層表示して欲しい。
そこで、google bookmarksにアクセスし、左側ペインから「ラベルの管理」を選択
ブックマークのラベルの管理 でラベルを変更すると1発で移動できる。
たとえば「book」と「library」があって「library」を「book」の下に階層表示したければ。
「book>library」とラベルを変更すればよい。

2010年5月19日水曜日

GIMPで中抜き透明化

GIMPで背景を透明化する時、円柱のように中も透明化したいことがある。
つまり透明部分を追加する、そのやりかた。
背景を透明化するのは、ほかを当たってくれ。
いったん透明化したものを、中の透明化したい部分を「投げ縄ツール」で選択して「Delete」これですむ。
知らなかったのは僕だけ?

2010年5月18日火曜日

2010年5月17日月曜日

Djangoアプリでi18n

project内で
mkdir locale
$django-admin.py makemessages --all --locale ja
javascriptは
$django-admin.py makemessages -d djangojs -l ja
Poedit等で翻訳
$django-admin.py compilemessages --locale ja
でコンパイル。

Poeditで翻訳メモリ

バージョンは1.4.2
編集->Preferencesで設定ダイアログを出す。
翻訳メモリタブを選択する。
追加ボタンで使用する言語を選択。ja(japanese)を選択
データベースの作成を押して 、ローケルファイルを格納する場所を選択($HOMEでいいでしょう)
Nextボタンを押すとそこら辺から*.poを探し出してきてくれる。でFinishボタンで作成。

翻訳メモリを利用するには、
カタログ->翻訳メモリを利用して自動翻訳する。
すばらしい。

meldでmercurial

ここによると、~/.hgrcに
********************ここから
[extensions]
hgext.extdiff =

[extdiff]
# add new command called meld, runs meld (no need to name twice)cmd.meld =

********************ここまで
をつけるといいらしい。
command lineで
$hg meld
おおすばらしい。

2010年5月11日火曜日

C++Builder マルチプラットフォームサポート

山本隆さんのブログで知りました。
って、最近C++Builder全然フォローしていない。

 >さらに今回は、マルチプラットフォームサポートを重要なフォーカスとしているため、複数バージョンの Windowsプラットフォームのほかに、Mac OS X、Linuxの主要なディストリビューションをテスト環境として利用できる方を募集します。


だそうです。
cmakeを起点にしてクロスプラットホームな環境が欲しいので 、netBeans, codeLiteやcodeBlocksを試食していたんだけれどしばらく待とうかな。 
最新boostとwxWidgetsは外せないんだけれどどうなんざんしょ。

あわててRoad Map見たら
>Cross-platform Native Windows and Mac OSX
て、linuxないし。Nativeを歌うのならwxWidgetsなんでしょうかね。
調査が必要だ。

ここここよるとQTベース?
>The new cross-platform framework will be a sequel to CLX (based on QT framework)
>The new cross-platform framework will be a sequel to CLX (based on QT framework) which was available back in Delphi 6, and Delphi 7. The main differences are:

2010年5月10日月曜日

vtk-5.6.0出ています。

ここから 。

相変わらず、VTK/Utilities/vtktiff/tif_fax3sm.cでエラーするので、ここ
今度は、osmesa.hが無いと怒られたので、
apt-get install libosmesa-dev

2010年5月9日日曜日

gnome-do

gnome-doは便利なんだけれど、terminalを起動するときに引数を与えられないから希望の位置と大きさで開けないのが難点。
と思って探していたらありました。ここ、TrinityTさんありがとう。
 gnome-doってやっぱり、/usr/binの中で探しているだけなのね。
どっか、~/.gconf/apps/gnome-do/preferences/linksでも作って、その下をまず探してくれ、無ければ、/usr/binを探す方がよいと思う。そうすれば、個人の設定は~/.gnome-doの下に/usr/binのリンクを作り引数を与えられる。

2010年5月8日土曜日

python 文字列判定 chardet編

apt-get install python-chardet
 
import chardet
print chardet.detect("文字列")
{'confidence': 1, 'encoding': 'SHIFT_JIS'}

2010年5月6日木曜日

iBook G4でUbuntu 10.04

ここから Alternate install CDのisoをとってくる。
(今のところShould soon be atとなっているがhttp://cdimage.ubuntu.com/ports/releases/lucid/をクリック、release/をクリックすると出てくる。)
CDに焼いて、iBookにツッコミ、起動する。
後は指示どうりにインストールするだけ。ただし、アホほど時間がかかる。
Desktop CDを取ってきてやると「もおっとアホほど時間がかかる」ので途中で止めた。
感想は後ほど。

Transifexの使い方

まずアカウントを作成。メールが送られてくるのでリンクをクリックしてメールアドレスの確認を済ます。
サインインして、翻訳したいプロジェクトに移動。languageのoptionsを選択してクリック。
移ったプロジェクト言語でもう一度optionsの中の鉛筆マーク(edit)を押すとweb上に元のフレーズとエディットボックスが現れるので適切に翻訳文を入れてsubmit translationボタンを押すとアップロードされる。

2010年4月29日木曜日

ubuntuでP5KPL-CMマザーからsoundを

ここによるとターミナルからalsamixerを起動して、<-、->キーでMasterFとForntを選んで上下キーで一番上にすると音がでる。

でた!

2010年4月25日日曜日

django-cms exampleへの道 2

現時点でのexampleへの道。
1)Django==1.1.1、django-cms==2.0.2、django-reversion==1.2.1で動く。
pip install django-cmsでdjango-cmsを入れると2.1.0.beta.zipが入るのでだめここから2.0.2.zipをとってきてインストール
2)southはINSTALLED_APPSから外しておく。ここ。とりあえず動く。sqlite3でもOK。

2010年4月23日金曜日

Sphinxでpdf

インストールしたsphinxでは直接PDFが生成出来ないのでいぢる。
参考はここ。ありがとうございます。
Makefileに
pdf:
    $(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) build/pdf
    @echo
    @echo "Build finished. The PDF files are in ${BUILDDIR}/pdf."
を追加
conf.pyの extensions'rst2pdf.pdfbuilder' を追加
extensions = ['sphinx.ext.autodoc', 'rst2pdf.pdfbuilder']
また、conf.pyに下記を追加
pdf_stylesheets = ['sphinx','kerning','a4','ja'] 
pdf_documents = [
    ('index', u'MyProject', u'My Project', u'Author Name'), 
]
('index', u'MyProject', u'My Project', u'Author Name'),はその他の設定を丸コピー 
これで sphinx pdf で直接pdfが生成できる。
すばらしい。

2010年4月21日水曜日

Sphinxでdocs

sphinxのinstallは
pip install sphinx
でOK。ターゲットのdocsディレクトリで
make html
あるいは
make latex
cd ./_build/latex
make all-pdf
でドキュメントが出来る。すばらしい。

2010年4月20日火曜日

cupsでNECのPR-L5750Cから印刷

Ubuntu forumにも投げておいたけれど

Fuji Xerox DocuPrint C2110ではないのですが、OEMのNEC PR-L5750Cでの印刷についてまねてやってみました。
http://packages.ubuntu.com/ja/intrepid- … 2/download
2)ドライバを下記から取得。
http://www.nec.co.jp/products/laser/sup … 5750c.html
3) マニュアル
2)と同じところからダウンロード。
4) /etc/apparmor.d/usr.sbin.cupsd の
「 # third-party printer drivers; no known structure here」
のあとあたりに、
/usr/lib/cups/filter/NEC_MultiWriter_5750C/NCM_PF Ux,
を追加その後、
sudo /etc/init.d/apparmor reloadで apparmor
で再起動。
5)プリンターは、システム->システム管理->印刷で追加
で印刷出来ました。ありがとうございます。

2010年4月15日木曜日

2010年4月12日月曜日

upTexでcheck_for_png error

upTexでcheck_for_png errorがでたら、sudo apt-get install libpng12-dev

ところで upTexはtexliveに対応しないのかな?
tetex3の開発も止まっているみたいだし、なにしろ、getlineとptetex定義のgetlineの衝突で最近の Ubuntu9.10では手を入れなければならないし。

田中さん忙しいだろうな。

asus P5KPL-CMでubuntu8.04のネットワーク

ここからドライバーを取ってきて、ここに従ってインストール。
本岡 毅さんありがとう。

2010年3月25日木曜日

2010年3月17日水曜日

boost unitsがおもしろい2

でradianとdegreeの変換

   boost::units::quantity theta=3.14159*boost::units::si::radians;
    boost::units::quantity deg=180.0*boost::units::degree::degrees;

    std::cout << "radian = " << theta << std::endl;
    std::cout << "degree = " << deg << std::endl;

    std::cout << std::endl;

    std::cout << "conversion " << std::endl;
    std::cout << "3.14159 radian = " << boost::units::quantity(theta)<< std::endl;
    std::cout << "180 degree = " << boost::units::quantity(deg) << std::endl;


出力は
radian = 3.14159 rad
degree = 180 deg

conversion
3.14159 radian = 180 deg
180 degree = 3.14159 rad

しかしコンパイルに時間かかるな。

boost unitsがおもしろい

こちらを見て 角度のradian, degreeの変換を調べようとしたらひっかかてしまった。

F  = 2 N
dx = 2 m
E  = 4 J

V   = (12.5,0) V
I   = (3,4) A
Z   = (1.5,-2) Ohm
I*Z = (12.5,0) V
I*Z == V? true

ソースはこちら

boostでπ(M_PI)

math.hぢゃあなくてやりたいとすると。
Math Toolkitを使えば、
ライブラリリストからMath->Statistical Distributions->Internal Details and Tools (Experimental)->Numeric Constants

#include <boost/math/constants/constants.hpp>
pi=boost::math::constants::pi<double>()

1)まあ Experimentalと書いてあるがいいとしよう。
2)タイトル(Math Toolkit)がなかなかMathライブラリの中に見つからなかったぞ。統一してほしいぞ。

2010年3月10日水曜日

BOOST_CHECK_CLOSEのtolerance_srcは%!

  v=1.0;
  BOOST_CHECK_CLOSE( v, 1.3, 20.0);
  BOOST_CHECK_CLOSE( v, 1.3, 30.0);
  BOOST_CHECK_CLOSE( v, 1.3, 40.0);

test.cpp(64): error in "interpolate": difference{23.0769%} between v{1} and 1.3{1.3} exceeds 20%
test.cpp(65): error in "interpolate": difference{30%} between v{1} and 1.3{1.3} exceeds 30%

2010年3月2日火曜日

cmakeでGUI @WIN32

cmake2.8でCUIからcmake GUIを起動するには、
たとえばVC++のprojects,solutionを1つしたのbuildに入れるとすると、buildでcmake-gui.exe ..とするとよい。
参照

2010年3月1日月曜日

Debian lennyをiBook G4へインストール

まずは使えんポインティングデバイスから。
/etc/sysctl.confに
# 3-button mouse emulation
# 3 ボタンマウスエミュレーション
# turn on emulation
# エミュレーション開始
/dev/mac_hid/mouse_button_emulation = 1
# Send middle mouse button signal with the F11 key
# F11 キーでマウスの中ボタン信号を送る
/dev/mac_hid/mouse_button2_keycode = 87
# Send right mouse button signal with the F12 key
# F12 キーでマウスの右ボタン信号を送る
/dev/mac_hid/mouse_button3_keycode = 88
# For different keys, use showkey to tell you what the code is.
# ほかのキーを使う場合は showkey で必要なコードがわかる
で右クリックが可能になる。

gdmでのキーボードを/etc/X11/xorg.confで変更
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp"
EndSection
で軽い用途には充分。

2010年2月23日火曜日

vtkAnimationSceneの実行順

vtkAnimationSceneに複数のvtkAnimationCueを食わせたとき。StartCue,Tickの実行順は
cue1->StartCue
cue1->Tick
cue2->StartCue
cue2->Tick
cue3->StartCue
cue3->Tick
...........
であった。

2010年2月22日月曜日

upTexインストール

内部もUnicodeで動くというpTex。
インストールは、tetex3から。 ここにしたがってファイルを取ってきて、ptetexを解凍しておく。
続いてここから uptex-0.29.tar.gz,uptex_font-0.22.tar.gzを取ってきてtetex3を置いたところに置き、uptex-0.29.tar.gzを解凍する。解凍した中のpatchフォルダの内容をptetexのフォルダの中にコピーする。あとは、
./0uptex.sh
make fonty

make test

make install

make distclean

田中さんありがとう。

ところで、00readme_jis.txtと00uptex_doc_jis.txtは本当にjisエンコードだった。ubuntuで直接読めない。 nkfで変換しました。

2010年2月19日金曜日

grub再インストール

起動ディスクをさして、起動画面でF6
オプションを変更”boot=casper"の部分を”root=/dev/sda1"(sda1は起動したいディスク)に変える。
起動してきたら、grubの呪文を唱える。
Goroさんありがとう。

2010年2月18日木曜日

acroread9でGB,CNフォントの利用

ここからacroread8用のFontPack81_chs_i486-linux.tar.gzとFontPack81_cht_i486-linuxを取ってくる。
それぞれ解凍すると、中にINSTALLというスクリプトあり。
エディタで開いて
if [ ! -d "$dir/Adobe/Reader8/Reader" -o ! -d "$dir/Adobe/Reader8/Resource" ]

if [ ! -d "$dir/Adobe/Reader9/Reader" -o ! -d "$dir/Adobe/Reader9/Resource" ]
に変更して
sudo ./INSTALL
入れ終えたら、
sudo mv -rv /opt/Adobe/Reader8/* /opt/Adobe/Reader9/
で終了。

2010年2月17日水曜日

ubuntuで環境整備

#Desktop
gconftool-2 --type bool --set /apps/nautilus/desktop/trash_icon_visible true
gconftool-2 --type bool --set /apps/nautilus/desktop/computer_icon_visible true
gconftool-2 --type bool --set /apps/nautilus/desktop/home_icon_visible true
#gconftool-2 --type bool --set /apps/nautilus/desktop/network_icon_visible true

#portland
LANG=C xdg-user-dirs-gtk-update

#Desktop GUI
sudo apt-get install ubuntu-desktop
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/karmic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt-get update
sudo apt-get install ubuntu-desktop-ja

#gedit
gnome-terminal --geometry=100x60-0-280

#update
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoreclean

grubの呪文

sudo grub-install /dev/sda
sudo update-grub2

ubuntu仮想化

ここここ
ゲストとホストの移動alt+ctrl+1,alt+ctrl+2
 sudo apt-get install ubuntu-vm-builder
コアラを作るなら
sudo ubuntu-vm-builder kvm karmic --mirror=http://jp.archive.ubuntu.com/ubuntu
sudo ubuntu-vm-builder kvm lucid --mirror=http://jp.archive.ubuntu.com/ubuntu
あとは
sudo tasksel install ubuntu-desktop 

2010年2月4日木曜日

boost 1.42.0をMSVC2005

.\bjam.exe --build-type=completeを忘れない。
FindBoost.cmakeのversionも忘れずに。

2010年2月3日水曜日

ubuntuでpythonをutf-8

sitecustomize.pyはvirtualenvではsite-package内ではなく併置

#-*- coding:utf-8 -*-

import sys
sys.setdefaultencoding('utf-8')

subversionでタグ表示

svnlook tree /path/to/repos/ tags -N
-Nでサブディレクトリは表示しない。

2010年1月25日月曜日

Djangoでi18nize

$cd .../Projects/mysite
$mkdir locale
$django-admin.py makemessages -l ja
$gedit ./locale/ja/LC_MESSAGES/django.po
$django-admin.py compilemessages

1)model.py
from django.db import models
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _

# Create your models here.
class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __unicode__(self):
            return self.question
    def was_published_today(self):
        return self.pub_date.date() == datetime.date.today()
    class Meta:
        verbose_name = _('Poll')
        verbose_name_plural = _('Polls')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice
    class Meta:
        verbose_name = _('Choice')
        verbose_name_plural = _('Choices')

admin.site.register(Poll)
admin.site.register(Choice)

2)setting.py
LANGUAGE_CODE = 'ja-jp'
gettext = lambda s: s
LANGUAGES = (
    ('ja', gettext('Japan')),
    ('en', gettext('English')),
)

3)django.po
#: polls/models.py:14
msgid "Poll"
msgstr "投票"

#: polls/models.py:15
msgid "Polls"
msgstr "投票"

#: polls/models.py:24
msgid "Choice"
msgstr "選択"

#: polls/models.py:25
msgid "Choices"
msgstr "選択"

P.S. msgfmt --statistics -o django.mo django.po

2010年1月22日金曜日

django-cms exampleへの道

virtualenv,mysqlはインストールされていることを前提に
virtualenvで
pip install django
pip install django-cms
pip install django-reversion
pip install south
mysqlで
mysql>create user cms@localhost;
mysql>select user, host, password from mysql.user;
mysql>create database cms default character set utf8;
mysql>show databases;
mysql>grant create,drop,alter,select,insert,update,delete,index on cms.* to cms@localhost identified by 'cms';
mysql>flush privileges;
virtualenvで
python ./manage.py syncdb
python ./manage.py migrate
python ./manage.py runserver
http://localhost:8000/

2010年1月19日火曜日

ubuntuでゴシックPDF

ubuntuで普通にacroreadを入れるとGothicBBB-MeidumがKozMinPr6N-Regular.otfで表示されゴシック体では無い。そこでKozGoProVi-Medium.otfで表示したい。
 ここからAdobe Reader7、日本語、linuxでFontPack708_jpn_i386-linux.tar.gzを取得。
解凍して、さらに中のLANGJPNを展開すると、目的の./JPNKIT/Adobe/Reader8/Resource/CIDFont/KozGoProVI-Medium.otfを得る。これをどこでもいいからコピー。わたしは、$HOME/.adobe/Acrobat/9.0/にCIDFontを掘っていれた。
/opt/Adobe/Reader9/Resource/CIDFont/のなかへリンクを作って再起動。
めでたくゴシック表示されましたとさ。

2010年1月14日木曜日

Open Office Calcで編集モードへの切り替え

編集モードへの切り替えはF2
嫌なら、[ツール]->[カスタマイズ]->[キーボード]で変更しよう。

テキトーなキーバインドをショートカットキーで選んで
範囲[内部]、機能[編集モードへの切り替え] を選択
変更ボタンをクリックするとキーに追加される。

2010年1月12日火曜日

ptexliveをインストールなしにローカルに作成

ftp://ring.riken.jp/pub/text/CTAN/systems/texlive/Images/からtexlive2008-20080822.iso.lzma
texlive2008-20080822.iso.lzma.md5
texlive2008-20080822.iso.lzma.sha256
をとってきて"md5sum -c ", "sha256sum -c "で確認後、
"unlzm texlive2008-20080822.iso.lzma"で展開。
texlive2008-20080822.isoができたら適当なところへマウント
mount -t iso9660 -o loop $HOME/hoge/texlive2008-20080822.iso /mnt/iso
土村さんのサイトから ptexlive-20091009.tar.gzをとってきて解凍
cp $HOME/hoge/ptexlive-20091009/ptexlive.sample ../ptexlive.cfg
ptexlive.cfgをエディタで編集
********** ptexlive.cfg ここから **********
### (必須) mount した TeX Live 2008 DVD のディレクトリを指定
ISO_DIR=/mnt/iso
#ISO_DIR=/Volumes/TeXLive2008
#ISO_DIR=/mnt/cdrom

### (任意) install した TeX Live 2008 のディレクトリを指定
TEXLIVE_DIR=$ISO_DIR

### (任意) install する ptexlive のディレクトリを指定
PREFIX=$HOME/usr/local

### (任意) make font でフォント検索するディレクトリを追加指定
EXTRA_CMAP="/usr/local/cmap;/usr/share/fonts/cmap"
EXTRA_TRUETYPE="/usr/local/ttf;/usr/share/fonts/truetype/"
EXTRA_OPENTYPE="/usr/local/otf;/usr/share/fonts/opentype/"
********** ptexlive.cfg ここまで **********
他の設定は適当に設定したらHOME/hoge/ptexlive-20091009に移って
make all0
make otf
make font
make install
でインストール
$HOME/usr/local/ptexlive/bin/i686-pc-linux-gnuにpathを通す。
i686-pc-linux-gnuは自分のアーキテクチャに適宜読み替えて

metafont

mode_setup;
を忘れずに。

mftrace error

def zip_to_pairs (as):で止まったら。ここ
使い方はここ 


2010年1月11日月曜日

grubでUbuntuデュアルブート

実験用に2個目のubuntuを入れるとgrubが新しい方でインストールされる。
そこで、元々使ってた奴で起動
sudo grub-install /dev/sda
sudo update-grub2
で復帰sdaは適当に読み替えてくだされ。

2010年1月5日火曜日

lzma 圧縮の解凍

lzmaの解凍をコマンドラインで
lzcat ./hoge.lzma > ./hoge
もしくは
unlzma ./hoge.lzma
もしくは

lzma -d ./hoge.lzma
圧縮は
lzma -z ./hoge ./hoge.lzma