2012年1月24日火曜日

django管理画面の一覧をCSV出力する。

ここの記事を見て自分もこれ導入しようと思いさっそくインストールしてみた。

コマンドライン上で
easy_install.exe https://bitbucket.org/tokibito/django-csvutils/get/6c2ddaf1e92f.zip

これを打つだけ。いたって簡単。

CSV出力を設定したいAdmin.pyを編集すればComboxに削除しかなかった欄に「export to CSV」が追加される。
この名称はローカライズ対応になっているんだけど、Localeファイルをどこに入れればいいんだろうなあ。

2012年1月23日月曜日

djangoの翻訳テキストをカスタマイズする。

Windows上で翻訳テキストをコンパイルするには、
gettext ver0.15以上が必要のようです。

1.まずは必要なライブラリをダウンロードする。

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/
上記サイトから
gettextのver0.17をダウンロード。
ダウンロードしてきた
 gettext-runtime-0.17-1.zip
 gettext-tools-0.17.zip

を展開してbinフォルダ内の中身を全てpython.exeと同じフォルダに入れた。


2.翻訳テキストを編集する。
拡張子.poファイルが編集する翻訳テキストになっていて、
拡張子.moファイルがコンパイルされた翻訳テキストという構成になっている。

まず変更したいアプリ内にある翻訳ファイル.poを編集する。


3.編集した翻訳テキストをコンパイルする。

コマンドライン上でアプリフォルダまで移動してから
python manage.py compilemessages -l ja

と打ち込むとdjango.moを作ってくれる。

例:
.\django\contrib\admin\locale\ja\LC_MESSAGES\django.po を編集した時は

コマンドライン上で
.\django\contrib\admin

まで移動してからコマンドを打ち込めばOK。

2012年1月5日木曜日

中華タブレット tPad P76 Ti

あけましておめでとうございます。
相変わらず更新が遅いですが、ネタが尽きたわけじゃないです。
そういうわけで久しぶりの更新、タイトルの通り、中華Pad買いました。
中華パッドも何世代かグレードも上がり、ハードもソフトも一通りこなれて来た頃だろうと
思いきって1万円を切る中華タブレット「tPad P76 Ti」を買ってみた。
OSはAndroid 2.3.4がプリインストール済み。
この端末の凄いところは、Youtubeがサクサク再生できて1万円切る値段。
しいて言えば、ボタンの押しやすさやBluetoothやGPSは無いけど、マーケットアプリも使えるし悪くない。

もう少し使いこなしたらフォーム更新や、USBを使って色々遊んでみようと思う。

2011年12月5日月曜日

Pythonでバーコード作成

昔から使われてる線が一杯並んでる一次元バーコードや、最近流行りの二次元バーコードを
印刷したかったり、しなかったりする時どうしたら良いか。

解決策はPythonでhubarcodeを使うこと。

いつもeasy_installやpipで楽にインストールしていると、
Readmeやexampleを見ずに環境が整ってしまうわけなんだけど
「一体どんな機能があるの?」という部分で盲目になってしまいがちであるこの頃。

hubarcodeって1次元でしかもEAN13(13桁)だけじゃないの?って自分一人で思っていたら
実はCode128もQRコードも使えてしまうわけです。

ココ参照。
https://github.com/hudora/huBarcode

使い方はいつもの手順で。

Step.1
easy_install -U hubarcode

Step.2 コードを書く。
from hubarcode.ean13 import EAN13Encoder
from hubarcode.qrcode import QRCodeEncoder
from hubarcode.code128 import Code128Encoder

#バーコード画像作成
_barcode1 = EAN13Encoder(bcode)
_barcode1.save(fname)

_barcode1 = Code128Encoder(bcode)
_barcode1.save(fname)

_barcode1 = QRCodeEncoder(bcode)
_barcode1.save(fname)

これで怖いものなし。

2011年9月24日土曜日

PDCruseをコンパイルしてみた

Windows/Linuxともに使えるTUI(Text user interface)が使いたくて探してみたら
PDCursesというものを見つけた。

http://pdcurses.sourceforge.net/
VC++2010でコンパイルする方法は
まず、スタートメニューからVC2010のDOSプロンプトを起動する。

次に、上記サイトからダウンロード・フォルダ展開した場所へ移動して
set PDCURSES_SRCDIR=C:\pdcurs34
nmake -f vcwin32.mak

を実行するだけ。
生成されるのはスタティックライブラリで
pdcurses.lib
panel.lib

の2つで
curses.h
panel.h

をあわせた4ファイルをどこかにまとめておけばおk。

使っているうちにボールドやブリンク機能、256Colorに対応とかカスタマイズしたくなってくると思う。
そんな機能を追加した人がいて
http://www.projectpluto.com/win32a.htm

ここのパッチを使うとより見栄えの良いTUIが使える。

余談だけど、PDCrusesで下記サイトのような事が出来たらいいなって思ってる(願望)
http://code.google.com/p/bashsimplecurses/


<コンパイル編>
VC++2010環境でサンプルプログラムをコンパイルできるかチェックしてみた。

VC++で新規作成:コンソールアプリケーション
インクルード・ライブラリパスと
使用するライブラリ:pdcurses.lib、panel.lib
を設定する。

firework.cからコピペしてコンパイル。
#include "stdafx.h"
#include "curses.h"
#include 
#include 

#define DELAYSIZE 200

void myrefresh(void);
void get_color(void);
void explode(int, int);

short color_table[] =
{
    COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_CYAN,
    COLOR_RED, COLOR_MAGENTA, COLOR_YELLOW, COLOR_WHITE
};

int _tmain(int argc, _TCHAR* argv[])
{
    int i, start, end, row, diff, flag, direction, seed;

#ifdef XCURSES
    Xinitscr(argc, argv);
#else
    initscr();
#endif
    nodelay(stdscr, TRUE);
    noecho();

    if (has_colors())
        start_color();

    for (i = 0; i < 8; i++)
        init_pair(i, color_table[i], COLOR_BLACK);

    seed = (int)time((time_t *)0);
    srand(seed);
    flag = 0;
       
    while (getch() == ERR)      /* loop until a key is hit */
    {
        do {
            start = rand() % (COLS - 3);
            end = rand() % (COLS - 3);
            start = (start < 2) ? 2 : start;
            end = (end < 2) ? 2 : end;
            direction = (start > end) ? -1 : 1;
            diff = abs(start - end);

        } while (diff < 2 || diff >= LINES - 2);

        attrset(A_NORMAL);

        for (row = 0; row < diff; row++)
        {
            mvaddstr(LINES - row, row * direction + start,
                (direction < 0) ? "\\" : "/");

            if (flag++)
            {
                myrefresh();
                erase();
                flag = 0;
            }
        }

        if (flag++)
        {
            myrefresh();
            flag = 0;
        }

        explode(LINES - row, diff * direction + start);
        erase();
        myrefresh();
    }

    endwin();

    return 0;
}

void explode(int row, int col)
{
    erase();
    mvaddstr(row, col, "-");
    myrefresh();

    --col;

    get_color();
    mvaddstr(row - 1, col, " - ");
    mvaddstr(row,     col, "-+-");
    mvaddstr(row + 1, col, " - ");
    myrefresh();

    --col;

    get_color();
    mvaddstr(row - 2, col, " --- ");
    mvaddstr(row - 1, col, "-+++-");
    mvaddstr(row,     col, "-+#+-");
    mvaddstr(row + 1, col, "-+++-");
    mvaddstr(row + 2, col, " --- ");
    myrefresh();

    get_color();
    mvaddstr(row - 2, col, " +++ ");
    mvaddstr(row - 1, col, "++#++");
    mvaddstr(row,     col, "+# #+");
    mvaddstr(row + 1, col, "++#++");
    mvaddstr(row + 2, col, " +++ ");
    myrefresh();

    get_color();
    mvaddstr(row - 2, col, "  #  ");
    mvaddstr(row - 1, col, "## ##");
    mvaddstr(row,     col, "#   #");
    mvaddstr(row + 1, col, "## ##");
    mvaddstr(row + 2, col, "  #  ");
    myrefresh();

    get_color();
    mvaddstr(row - 2, col, " # # ");
    mvaddstr(row - 1, col, "#   #");
    mvaddstr(row,     col, "     ");
    mvaddstr(row + 1, col, "#   #");
    mvaddstr(row + 2, col, " # # ");
    myrefresh();
}

void myrefresh(void)
{
    napms(DELAYSIZE);
    move(LINES - 1, COLS - 1);
    refresh();
}

void get_color(void)
{
    chtype bold = (rand() % 2) ? A_BOLD : A_NORMAL;
    attrset(COLOR_PAIR(rand() % 8) | bold);
}

マルチバイト対応する場合は、下記定義を入れておくこと。
#include 
setlocale( LC_CTYPE, "jpn" );

2011年8月20日土曜日

squeezeアップデートしたら起動しなくなった。

udevd[803]: unable to receive ctrl connection: Function not implemented

こんなエラーが出た場合、Kernelの設定不足らしい(詳しくは見ていない)
とりあえず動くように戻したいのでダウングレードの手法を取ってみた。

やり方は、udevのバージョンを戻してあげれば元通り動くようになります。

例:
 dpkg --install libudev0_164-3_armel.deb udev_164-3_armel.deb

2011年8月13日土曜日

PythonでUnicodeEncodeError: 'ascii' codec can't encode characters.. が出た場合


表題のエラーは全角文字をu'あいうえお'と指定しても出てしまう問題。
原因は、UTF-8をUnicodeに変換する過程でデフォルト設定AsciiでUTF-8を読み込んでエラーになっている。

Python3では仕様が変わって最初からUTF-8らしいけど、
Python2.X使ってるユーザは対処せねばならない。


Python\Lib\site-packages\sitecustomize.py
---
import sys
sys.setdefaultencoding('utf-8')
---
これを保存すれば解決。

参照URL
http://d.hatena.ne.jp/omiyan/20110105/p1

2011年7月28日木曜日

Djangoが使えるようになってきた

デバッグ環境が乏しくてコンパイルする言語と比べて開発に時間かかるし、
そんなにコード量かけないなって思っていたけど、書き方・作法が分かってくると
急に心強くなってくるWEBフレームワークだなあってのが最近の印象。

2011年6月15日水曜日

easy_installでビルドする時。

easy_installを使うとき、ソースコンパイルするモジュールがあったりする。
その時VisualStudio2010 C++入ってるから大丈夫って思うとvcbatcall.bat?が
無いと起こられてしまう。
パス通したりしてがんばっても先に進まないので、こうなったら迷わず

「VisualStudio2008 C++」をインストールする。

これに尽きる。

2011年6月13日月曜日

Django デバッグ環境を整える

今回は3つデバッグ環境について触れてみた。
 ・Logging
 ・django-debug-toolbar(IE9だと表示崩れる)
 ・pylint


○Logging
Django v1.3になって、setting.pyにロギングするコードが追加されたようだ。

使い方は簡単で、
https://docs.djangoproject.com/en/1.3/topics/logging/
ここを見ながら設定してみると、

setting.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
  'app': {
   'handlers': ['console'],
   'level': 'DEBUG',
   'propagate': True,
  },
    }
}

views.py
import logging
...

logger = logging.getLogger('app')
...
このような感じに設定しておく。

○django-debug-toolbar
さらにデバッグしやすくしようと思って調べてみたら、
「django-debug-toolbar」というものを発見。
ここからいつもどおりの手順で導入していく。

1.インストール
sudo easy_install-2.5 django-debug-toolbar

2.設定
.\python\Lib\site-packages\django_debug_toolbar-0.8.5-py2.6.egg\example
サンプルを見ながら設定していく。

settings.py
INSTALLED_APPS = (
    ...
    'debug_toolbar',
)
MIDDLEWARE_CLASSES = (
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)

DEBUG_TOOLBAR_PANELS = (
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.template.TemplateDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.signals.SignalDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)

def custom_show_toolbar(request):
    return True # Always show toolbar, for example purposes only.

DEBUG_TOOLBAR_CONFIG = {
    'INTERCEPT_REDIRECTS': False,
    'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
    #'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
    'HIDE_DJANGO_SQL': False,
}

3.確認
サーバ立ち上げて、管理画面を表示してみる。
右側に黒いメニューバーが表示されていれば成功。

(Firefoxはうまく表示されたが、IEだと表示バグがあった。。)

○pylint
コーディング中に構文エラーを発見したい人向け。
自分が使っているエディタはVIMを使っているので、
VIM環境で楽に使えるように設定まで行ってみた。

1.インストール
 easy_install pylint

2.VIM環境設定
 http://www.vim.org/scripts/script.php?script_id=891
 pylint.vimの最新版をダウンロードして、
 Vimフォルダのruntime/plugin/
 にコピーする。

参考ページ
http://www.hexacosa.net/blog/detail/54/

2011年6月1日水曜日

pythonでタグジャンプを使う

VIMでPythonをいじってるとき、タグジャンプできたらいいなと思い、検索してみたら
ctagでPython用のタグ生成できる事を知った。

やりかたはいたって簡単

 :!ctags *.py

これだけで生成できる。しかし、これだけだと同一フォルダ内のソースしかジャンプできない。

サブフォルダにもジャンプしたいよって事で、

 :!crags -R ..

こうすることで一階層下からサブフォルダにアクセスできるようになるが、
プログラム中の「from ~import」命令分にもタグが貼られてうまくジャンプできないケースがあって
思ってるようないい結果にはならない。。

ということでpython\tools\Scripts\ptags.pyを少しいじって
再帰検索に対応したタグジャンプ作成モジュールを使うことにした。

使い方:
 python ptags.py [カレントディレクトリ]

例:
 python ptags.py ../


コメント部分がオリジナルでコメント下に書いた文が追加箇所。
def main():
 #args = sys.argv[1:]
 #for filename in args:
 #    treat_file(filename)
 #>>> 追加:再帰表現に対応 >>>
 xdir = os.walk(sys.argv[1])
 for xpath, dirs, files in xdir:
  for xfile in files:
   fname, ext = os.path.splitext(xfile)
   if '.py' == ext:
    filename = os.path.join(xpath, xfile)
    treat_file(filename)
 #<<< 追加:ここまで <<<

 if tags:
  fp = open('tags', 'w')
  tags.sort()
  for s in tags: fp.write(s)
 
 
これでC言語のタグジャンプと同じ動きになる。

オマケ
 vimrcの設定でCTRL+Eキーでタグファイル生成するマクロ。 ptagsのディレクトリ位置や、カレントディレクトリの設定は環境に合わせる必要あり。

  nnoremap :!python d:\TracLight\python\Tools\Scripts\ptags.py ../

参考URL :

 http://d.hatena.ne.jp/t2y-1979/20080904/1220458000

2011年5月27日金曜日

PythonでExcel編集

便利モジュールを発見
その名も「pyexcelerator」

http://sourceforge.net/projects/pyexcelerator/

いつもどおりの手順
1.インストール
easy_install -U pyexcelerator

2.確認
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyExcelerator

# 読込みテスト
sheets = pyExcelerator.parse_xls('d:/test.xls')

for sheet_name, values in sheets:
    print 'sheet =', sheet_name
    print '------------'
    for row_idx, col_idx in sorted(values.keys()):
        v=values[row_idx,col_idx]
        print row_idx,col_idx,v

# 書込みテスト
book = pyExcelerator.Workbook()
sheet = book.add_sheet('sheet_name1')
sheet.write(0, 0, 'test')
book.save('test.xls')


pyExceleratorのサンプルプログラムに
罫線や画像イメージの挿入などするものがある。

参考URL
---
http://d.hatena.ne.jp/tenkoma/20060903/1157300072

debian ftpサーバ構築

SCPでファイル転送でも良いけど、
もっと楽にデータのやり取りできるようにFTPサーバ構築してみた。

いつもどおりの手順。


1.インストール
apt-get install vsftpd

2.設定
vim /etc/vsftpd.conf
---
anonymous_enable=NO
local_enable=YES
write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
force_local_logins_ssl=NO
force_local_data_ssl=NO

ログイン可能アカウントを設定
/etc/vsftpd.chroot_list
---


3.確認
FFFTP、FileZillaなど使ってみる。


参考URL
---
http://www.geocities.jp/yukke_no_kobeya/kurobako/de_100.html

Androider