Skip to main content

29 posts tagged with "python"

View All Tags

· 3 min read

Mac(10.11.6)でMkDocsを起動後、ファイルを保存するとエラーが発生する。

[E 170626 17:20:09 ioloop:638] Exception in callback <bound method type.poll_tasks of <class 'livereload.handlers.LiveReloadHandler'>>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/tornado/ioloop.py", line 1026, in _run
return self.callback()
File "/usr/local/lib/python2.7/site-packages/livereload/handlers.py", line 67, in poll_tasks
filepath, delay = cls.watcher.examine()
File "/usr/local/lib/python2.7/site-packages/livereload/watcher.py", line 73, in examine
func and func()
File "/usr/local/lib/python2.7/site-packages/mkdocs/commands/serve.py", line 106, in builder
build(config, live_server=live_server, dirty=dirty)
File "/usr/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 352, in build
utils.clean_directory(config['site_dir'])
File "/usr/local/lib/python2.7/site-packages/mkdocs/utils/__init__.py", line 134, in clean_directory
if entry.startswith('.'):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

確認​

asciiでデコードしようとして発生しているエラーのようなのでUTF-8を扱うように修正するが、まずはasciiを使っているか確認。

$ python
Python 2.7.13 (default, Dec 17 2016, 23:03:43)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.getdefaultencoding()
ascii

asciiを使っていることが明確になったので、UTF-8をデフォルトにするように修正する。

· One min read

MacPortsをやめ、homebrewを利用することにした。 ■ mxcl's homebrew at master - GitHub https://github.com/mxcl/homebrew/

インストール手順はここに書いてあるとおり。 ■ Installation - homebrew - GitHub https://github.com/mxcl/homebrew/wiki/installation

ruby -e "$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)"

Xcodeをインストール

あとは

brew install ...
とインストールしたいパッケージを指定すればよい。

Mercurialをインストールしようとしたら、出来なかった。 Mercurialはhomebrewを使ってインストールするわけではなく、インストール準備までだった。

brew install python brew install pip pip install mercurial

こんな感じにPythonいれて、pipを入れて、pipを利用してMercurialをインストールするという流れ。

sudo ln -s /usr/local/Cellar/python/2.7/bin/hg /usr/local/bin

最後にシンボリックリンクを張り、使いやすくしとく。

· One min read

結果から言うと、めっちゃ楽。 速いかと言うと、調べて無いのでわかんないけど、そこらの情報を見る限り速そう。

まずはインストールから。

sudo aptitude install memcached
これで完了。 psコマンドでプロセスを見ると既にいます! /etc/init.d/memcached で管理。

pythonから使う場合。 まずはライブラリをインストール。

sudo easy_install python-memcached
import memcache mc = memcache.Client(['localhost:11211']) mc.flush_all() mc.set('key', 'value') mc.get('key')こんな感じ。 注意点。
  • モジュール名に 'd' がないこと。

有効期限も決められるらしい。

· 5 min read
前回、試しに作ってみたものを修正。 前回は理解が浅いまま作っていたため、構成を再度検討。 その経過でXMPPなんてのも出てきた。 今回の動画はVirtualBox上のWindowsのみ。デュアルディスプレイを撮ると見づらいから・・・というだけ。 もう少し使えそうになったらまともな動画撮ります。

· One min read

データを受け取ることが出来た♪ 解決の糸口が、他の言語のコードを見て、似たような手法を取る・・・という、妙なことだった。

調べてるときは集中してるからそんなことは考えないんだけど、ふと我に返ると、 「あれ?言語違うけど参考にしてた?」 みたいな(笑) 今回のは仕組みがシンプルだったこともあって、特にそんなことになったんだろうけど。

· 2 min read

ファイルの監視もいい具合に出来てきた。 この監視方法、汎用化してないんだけど、今のところここでしか使わないからいっか。 汎用的にする必要が出てきたらそのとき考えよう。

ファイルを監視することによってviの動きが明確に見えてきた。 ファイルを保存するだけで.swpファイルに書き込み、それをmvし・・・みたいな、方法。 そんな、.swpファイルまで監視しなくていいって! 監視時にexcludeの設定はあったような気はするが、それをいちいち設定するのやだな。 変わった拡張子のファイルがひとつ増えただけで面倒そうだ。

監視対象の指定はディレクトリ単位でごそっと行うのではなく、一度ファイルリストを取得して、拡張子をチェックして監視対象とした方がよさそうだ。 ファイルが作成された場合はディレクトリ監視でひっかかるからその都度チェックして・・・と考えると、それなりのクラスになりそうだ。 やっぱ汎用化するか? 続きは明日考える。

今のところ、Linux依存になってるから、別のOSの場合は別実装が必要だな。 Windows版くらいは作っておいた方がよさそう。

· One min read

pyinotifyを使ってみたものの、エラー発生。 どこがおかしいのだろう??? 要調査。

· One min read

■python2.6からはepoll、kqueueが使える - def mopemope(self, *args, **kwargs):

http://d.hatena.ne.jp/mopemope/20080919/p1こんな記事があったのだが、使えない。 ipythonの補完機能でも、 from select import [tab] としてもkqueueは見当たらない。 epollはあるんだけどなぁ・・・なぜ? Ubuntuだからとか?そんなわけないよなぁ。

· One min read

py-kqueueという便利そうなものを発見。

■py-kqueue - スコトプリゴニエフスク通信

http://d.hatena.ne.jp/perezvon/20080330/1206879201ここにあるように、
sudo easy_install py-kqueue
で、インストール・・・出来ない!! sys/event.hが無いんだって。
sudo aptitude install libevent-dev
これで、event.hはインストールされたはずだが同様のエラー。 kqueuemodule.c内の"sys/event.h"を"event.h"に変えてもエラー発生。

う~ん・・・。

· 2 min read

効率のよい、ファイルの監視はどうすべきなのだろうか? 特定のディレクトリ配下を毎回全スキャンしても、平気なくらいのファイル数しかないが、それでも0.5秒に一回スキャンするのはちょっと・・・と思いつつ、ファイルをハッシュで管理しても、変更があったか確認するために変更時刻は比較してるしなぁ。 変更時刻を得る処理は重たいのか? この辺は・・・カーネル関係の本が必要?

ちょっと調べたらこんな感じ。 ■ファイル更新の監視 どう書く?org

http://ja.doukaku.org/15/nested/#comment461・・・って自分で書いたのと変わらない。 これでいいのかな?

.Net FrameworkにはFileSystemWatcherなるものがあるらしい。 ■FileSystemWatcher クラス (System.IO)

http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher(VS.80).aspx
アセンブリ: System (system.dll 内)
なんて書いてあるけど、こいつはカーネルレベルで監視!? どっちにしても.Netは関係ないんだけど🙄

· One min read

RPCで呼び出したシステムが動作してくれない。 と思ったら不具合なのか仕様なのかわからないけど、定期的に関数を呼ぶ必要があるようだ。 その関数と言うのはなんでもよくて、

def dummy(self): passなんてのでもOK。 これってひどくないか?

RPCで呼びたいときに呼んでるのに、定期的に(例えば0.5秒間隔)関数を呼ばなければならないのか? ちょっとソースを見てみたけど、どこが原因かわからず。 TCP関連のソースまで辿り着いてしまったので、この件はバージョンアップと供に解決すことを願い、後回し。

· 2 min read

Comet Daily » Blog Archive » Scalable Real-Time Web Architecture, Part 2: A Live Graph with Orbited, MorbidQ, and js.io

http://cometdaily.com/2008/10/10/scalable-real-time-web-architecture-part-2-a-live-graph-with-orbited-morbidq-and-jsio/このチュートリアルを参考していたが、なぜかエラーが・・・。 仕組みが分からずチュートリアルをやっていたこともあり、不明点だらけのため、なかなか進まず。 仕方ないので、エラー箇所を特定すべく、ひとつひとつ追って行った。 追えばデバッグの仕方も自然と身につくものだ・・・初めはあんなにわけのわからないエラーログが、読めばいい場所がわかってくる。

で、結果的に追っていくと最後のJSON通知でエラーが発生しているらしい。 早速ググってみると同じ現象の人発見! Stomp / IE6 fixes) so I'd - Orbited Discussion | Google グループ

http://groups.google.com/group/orbited-users/browse_thread/thread/03486da9596e9dd1/c561d4a26e8e7046?show_docid=c561d4a26e8e7046&pli=1

さらに記事を読んでいくとpython-cjsonパッケージを使えと書いてある。 パッケージを使えとあるが、Python環境はここで閉じておきたいのでsetuptoolsを使う。 sudo easy_install python-cjson これだけで解決した。 さらにコメントの主を見てみると・・・どこかで見覚えがあるMichael Carterさん。 チュートリアルの人だ!! 名前を覚えるつもりは無かったけど、何十回も見ていたページなだけあって、知らずと記憶に残ってたらしい。 これくらい追っていれば多少なりともなんか身に付くよね、と思った。

· One min read

携帯ってクッキーを使えない奴がいたはず。 確か、docomo。 最近の機種は使えるようになったが、不具合が出て・・・なんてことになってた気がする。 クッキーを使えないとセッションの維持が面倒そうだ。 少なくともDjangoの認証ではクッキーが必要だったはず。

· One min read

とあるサイトを見て、djangoをいじってた。

urlpatterns = patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':'/path/to/static'}),
)

document_rootには'./static'って相対パスで書いてあったんだけど、実際は絶対パスじゃないと動かない。 もしかしたら、相対パスの基準となる場所が違っていただけなのかもしれないけど、基準がわからず。

· One min read
sudo aptitude install build-essential sudo aptitude install python-dev

sudo easy_install twisted sudo easy_install orbited sudo easy_install morbid

[tutorial]How to: Django, Comet, Orbited, Stomp, MorbidQ, js.io | Thought Outflux | Anirudh Sanjeev

http://anirudhsanjeev.org/tutorialhow-to-django-comet-orbited-stomp-morbidq-jsio/

Comet Daily » Blog Archive » Scalable Real-Time Web Architecture, Part 2: A Live Graph with Orbited, MorbidQ, and js.io

http://cometdaily.com/2008/10/10/scalable-real-time-web-architecture-part-2-a-live-graph-with-orbited-morbidq-and-jsio/

ホームディレクトリにPythonの環境を整えてくれるvirtual pythonというものもあるのだが、Ubuntuの場合、site-packagesディレクトリではなく、dist-packagesという名前のせいで動作せず。 コードを書き換えるか、dist-packagesにシンボリックリンクを張れば解決出来そうだけど、ノートPC自体自分の環境なので今回はいいや。

· One min read

Orbited – Networking for the Web

http://orbited.org/この情報、国内は少ない!

cometを使いたいのだが、ちょいとイレギュラーな使い方になりそうだ・・・。

· One min read

東京に戻ってきました〜。 早速Djangoネタ。

django-evolution - Google Code

http://code.google.com/p/django-evolution/python manage.py syndb後にDBを更新しなければならないんだけど、それをやってくれるモジュール。 使い方は書いてある通りなんだけど、こんな感じに便利もジュールを増やしていくと、あとが大変そうなのでシンボリックリンクで分離してみた。

modules -- django_evolution project_dir |-- django_evolution --> ../modules/django_evolution -- other apps

modulesにはどこかで拾ってきたものを入れて、project_dir配下からシンボリックリンクで参照。

こんなのを書いておくと./syndbだけで済んじゃうけど、悪影響は無いかな? しばらく使ってみるか。

#!/bin/bash

py manage.py syncdb py manage.py evolve --hint --execute

· 2 min read

今日は"おい〜!!"ってことがあったが、書けないので、書かず、Python2.6の話でも。

Ubuntu 8.10でPython2.6を使おうとすると何かと困る。 例えば、メニュー設定がうまく動かなかったり、dpkgの依存関係で怒られたり・・・と。 そんなわけで、Ubuntuの構成上は2.5を使い、Django関係は2.6を使うという状態になってる。

CentoOSでPython2.6 & mod_pythonを使おうとするとこれまた大変らしい。 パッケージ管理を行っているOSはパッケージで済ませたいところだが、そうも行かないらしい。 と言うわけで大変だったという話を聞いた。 SRPMを使えば依存関係をそれなりに維持しつつ出来るかもしれないが、テストする環境がないので、機会があれば。

Ubuntu 9.04ではPython2.6が搭載されてるということで楽しみだったりする。 ・・・のだが、MacBookでいきなり動くとも思えないので、人柱の状況を見つつ、移行予定。

· 4 min read

Djangoでnullをセットしようとした場合、ちょっとしたコツが必要。 コツというか、考え方としては突拍子なわけでもない。 ただ、知らないとどうしていいのかわかんない。

モデルフィールドリファレンス — Django v1.0 documentation

http://djangoproject.jp/doc/ja/1.0/ref/models/fields.html#django.db.models.fields.Field.nullまずはここに書いてあること。
空の文字列値は NULL ではなく空文字列として保存されることに注意して下さい。 null=True が使えるのは、整数型やブール型、日付のような、文字列ではないフィールド型の場合だけです。 null はデータベースでの記録操作にのみかかわるパラメタなので、フォーム上で空の値を入力できるようにしたければ blank=True も指定する必要があるでしょう (blank も参照してください)。

具体的には、

  • 文字列はnullを扱えない
  • nullをセットしたかったらnull=Trueを使う
  • ForeignKeyの場合はblank=True, null=Trueと併せて使う

ということ。

勝手な解釈ではあるが、

  • 空文字はわかるけど、文字が無いってなんか変じゃない?
  • nullにしたい場合は明示的に
  • ForeignKeyみたいな場合は未入力(blank)を許しつつ、参照してるんだからnullも許可させる必要がある

ってことなんじゃないかな。 なぜ、blankとnullみたいな、似たような項目があるのか?ということについては似て非なるものだからだと思ってる。 blankについては入力時のチェックに使う、validationに関する項目。 nullについてはデータの存在意義(意義というとちょっと違うかな)についての定義。 こう考えると、文字列はblankを許可する必要はあるかもしれないけど、値が無いってのはおかしいでしょ?だから、null=Trueなんて設定できないよ〜。 ForeignKeyを設定したく無いなら、未入力(blank)を許可しなきゃね。それとは別に、参照先が無い場合(null)があるからそれは別に定義しなきゃダメだよね。 ってことなんだと思う。

今のところ自分ではすっきりしてるのでいいかな?と思ってる。

· One min read

Ubuntuのメニューを変更する"メインメニュー"が開かない。 原因はPython2.6にしたことだった。 意外とPythonがOSに関わっていることが多くてびっくり。

OSはPython2.5に戻し、Eclipseの設定だけPython2.6にしておこう。

· One min read

Pythonのコードを書くにはこんな感じがよさそう。 Pythonに限らず、プラグインの対応状況からいくとPerlやRubyでも使えそう。

sudo aptitude install vim-full

.vimrc

set nu sw=4 ts=4 sts=4 hlsearch showmatch backspace=indent,eol,start
let g:treeExplVertical=1

autocmd BufRead,BufNewFile *.py syntax on
autocmd BufRead,BufNewFile *.py set ai sw=2 ts=2 sts=2
autocmd BufRead,BufNewFile *.py imap <Nul> <C-p>
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class

autocomplpop.vim - vimグループ

http://vim.g.hatena.ne.jp/keyword/autocomplpop.vim"."(ドット)を打つと補完してくれます。

vtreeexplorer - tree based file explorer - the original : vim online

http://www.vim.org/scripts/script.php?script_id=184こっちはvimの左側にファイルをツリー表示してくれる。 .vimrc内の"let g:treeExplVertical=1"はこのオプション。

· One min read
Python3とDjango x Pythonは微妙に読みづらい。

"はじめてのPython3"はタイトル通りPython3を視野に入れた本。 "Django x Python"はPython2.5をベースに書いてる。 Django本はDjangoのところだけ読めばいいんだろうけど、ちょっと読みづらい(^^;

· One min read
Python3はじめてのPython3 流し読み完了!

こういう本を読むときは、とりあえず出来ることを把握するために読んでみる。 あとは実践でやるしかないからね〜。

· One min read
Python3はじめてのPython3 こっちは流し読み程度にしとくつもり。Django x PythonDjango x Python こっちは読みつつ、調べつつという感じかな。

あと、PLUTO 7を買ったんだった。

PLUTO 7PLUTO 7

Amazonのリンクはめんどいな・・・。 プラグインを調べたけど、どれもあまり気に入らなかったからなぁ・・・自分で書くか?

· One min read

今日は軽く飲んできました。 飲むのは久しぶり?

スクリプト言語の話題が意外と多かった気がする(笑) そして、Pythonの動作が速くやっぱり使えそうという感じ。

求人数はJava、年収はC#がトップ——ワークポートが調査 − @IT

http://www.atmarkit.co.jp/news/200902/13/wp.htmlここだとPythonランク外🙄

· 3 min read

djangoを入れてみたものの、sqlite3のモジュール部分で動作せず。 python manage.py syncdbでなぜかエラー。

Error loading sqlite3 module: No module named _sqlite3

環境はUbuntu 8.10にPython2.6をソースでインストール。 そこに、djangoをsetup.pyでインストールした。

Web上でも似たような人たちがいて、人それぞれ対応が違う。 ソースで入れ直す人、CentOSでdevelパッケージを入れたりしてる人。 結局、直接的な解決に至らなかったので、自分で対応を考えることにした。

まず、_sqliteが無いと言われているので存在を確認。 Python2.6ディレクトリ配下には存在せず😔 Python2.5は・・・あった! たぶん、python-pysqlite2というパッケージが入っているからだと思う。 というわけで、_sqliteを使うべく、Python2.6のライブラリとして使うためにシンボリックリンク作成。 そしたら、unicodeなんとかでエラー。 2.6の役割の一つに3.0への移行があるから、それに関する違いでエラーが出たっぽい。

じゃ、setup.pyで_sqliteを作ればいっか、と調べてみるとpysqlite2というライブラリがあるっぽい。 dpkgではpython-pysqlite2として配布されてるやつだな。 pysqlite – Trac

http://oss.itsystementwicklung.de/trac/pysqliteここからダウンロードしてきて、インストールを実行。 python setup.py install インストール途中でエラー発生。

sqliteのソースが無いようなことを言われたのでソースをインストール。 sudo apt-get install libsqlite3-dev yumパッケージで言う"-devel"みたいなパッケージっぽい。 再度、pysqlite2をsetup.pyでインストール。

このあと、syncdbを試したら動作しました。 無理な構成にもなってないし、この対応でよかった気がする。 setup.pyでインストールする時はそのバージョン配下のライブラリとして増えていくみたいなので、2.6が不要となったら/opt/python2.6を消せば済みそう。

· One min read

Ubuntu 8.10にPython2.6を入れてみた。 まだパッケージでの配布は行われてないので、配布時に競合しないようにこんな感じにしてみた。

cd Python2.6 ./configure --prefix=/opt/python2.6 make -j 3 make install

sudo ln -s /opt/python2.6 /usr/lib sudo cp /opt/python2.6/bin/python2.6 /usr/bin sudo cp /opt/python2.6/bin/pydoc /usr/bin sudo ln -sf /usr/bin/python2.6 /usr/bin/python

まだ動かしてない(というか文法を知らない)のでこれでいいのかは不明。 python --version とすると、2.6なことだけは確認できます。

ほんとは3.0を使いたいんだけど、他のライブラリが動かないとかって嫌だから中間的な存在の2.6にしとく。