使い物にならないアレゲな記録
GNU screenが便利なんだが、最近使い始めたばかりで使い方を忘れやすいのでメモ。
ちなみにGNU screenってのはとっても語弊のある説明をするとシェルをタブ化+便利機能満載にするプログラムだと考えてくれ。
(詳しくはググってね)
自分のscreenの設定ファイル『.screenrc』はこんな感じ↓
escape ^J^J
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
defhstatus "^En:^Et"
startup_message off
autodetach on
defscrollback 3000
デフォルトではCtrl+aがエスケープ(?)になっているんだけど、エディタやシェルのショートカットキーを衝突するのでCtrl+jに変更。
hardstatus欄の内容は画面下段に今表示しているscreenの状態を表示してくれる。
そのほかの細かい設定の説明は省略
※キーを初期設定のままにしている方はCtrl + j を Ctrl + a に読み替えて下さい><
今把握していてよく利用する機能はこんな感じ。
ロギングも出来るらしいがやったことない。また後で試して追記する予定。
UbuntuでIPアドレスを固定する方法について。
※Ubuntu 8.10で試しました
これまでRH系しか使ったことが無かったので、/etc/sysconfigディレクトリが無くて心底焦りました><
ググると下記のやり方で行けるとのこと
/etc/network/interfacesを開き、eth0を編集
※編集前(DHCPを使用する設定)
auto eth0
iface eth0 inet dhcp
※編集後(IPを固定。アドレスなどは適宜ご自身の環境に置き換えて下さい)
auto eth0
iface eth0 inet static
address 192.168.11.18
netmask 255.255.0.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.1
RHELやCentOSだと/etc/sysconfig/network-scripts/ifcfg-eth0 にeth0を設定するんだけど、
Ubuntuだと/etc/network/interfaces にすべてのネットワークアダプタの設定をするのね。
ファイルが違うし若干記述方法違うけど大体内容は一緒なのであんまり問題ではなさげ。
FirefoxにVimperator入れて「vi風に操作できるSUGEEEEEEEEEE!!」とかほざいて小躍りしてたんです。
ふと画面上部を見上げたらメニューバーが無い><
あたふたしながらググると以下の解決策が。
:set guioptions=mT
:mkvimperatorrc
ひとまず表示はおk
んでこのエントリ書くためにコピペしようとCtrl-Vしたら貼り付け出来ないorz
「p打ったら貼り付けられるんじゃね?」とかおもったらページ遷移しやがったOTL
結論:Shift-Insertって便利だよね^^
じゃなくて「説明書はよく読みましょう」ってとこか…
ぶっちゃげvi使っている身分にゃこのプラグインは便利なんで、しばらく四の五の言いながら頑張って使っていきます><
このブログ、ずいぶん放ったらかしにしてたなぁ・・・(ーー;
いつの間にか海外からコメントスパム喰らってたり無駄記事が散乱してたんで、
再度メモ書きブログとして復帰させるようメンテ中です。
キター><
compiz3 on Flickr - Photo Sharing!
compiz on Flickr - Photo Sharing!
最近雑多な事で時間なくなり過ぎ。
コードを弄る暇も無くなってるよorz
そんなワケで整理の為にメモ
・姉貴が一眼レフのデジカメ(10万円)を買う気。
パソコンで操作するのは俺の仕事ってのは既に決定事項。 保存だけなら出来るが補正なんて無理っすY(>_<、)Y
というか撮影もその内させられるなコレは…。
撮影に関するウマーな本って誰か知らない?
・初めてのPythonが読み進まないなぁ。
「速く読む」事を意識して進めるか。
・「ショーシャンクの空に」を借りてきた。今週中に見る。
・彼女ともっとコミュニケーションを取りたい。
問題はそれ以外にやりたい事とどう兼ね合いを取るか。
・はてなブクマとRSSリーダーの眺め方を考え直す必要あり。
ぶっちゃけ眺めるのは1日5分でよくね?
・XPが重い。後で消す。
・八割の作業はUbuntuでいい。残り二割が異常に煩わしい。
・その二割が姉貴関係。一度姉貴関係の作業を始めるとこっちの時間が取れなくなる。
平行作業するにはLinuxで姉貴作業を行うしかない。
・「ヒント:仮想化」そんなワードが頭をよぎった件。
・Ubuntu最新はしばらく様子見。固まったら手を出す。
・たまった作業を効率よく片付けるには見える化して順位付けを行う。
明日の電車内はその作業を行う。
・エヴァのレンタルは来月からだったorz
数少ないPythonの書籍の中で、「これだけはガチ!」とよく言われているオライリーの『初めてのPython』を15日にゲットしましたよ★
ええ、先月と同じく衝動買い自分へのご褒美です><
いやーしかし相変わらずオライリーの書籍は値段が高いっ>_<
先月の時点で『初めてのPython』を買いたかったんですけど、税込み5000円越えの素敵価格に圧倒され、前回はなくなくvim本だけ手に持って帰宅(´・ω・`)
しかしDjango弄っててPythonの文法自体を知らないことがしばしばネックになっていたので、「4月はPythonの本何か買うかなー」って計画していました。
アマゾンで安くてウマーな本が無いか見てたんだけど、「これは!」と思える本が無い。
というかPythonは書籍の総数自体が少ない(´・ω・`)
お金をかけない方法として、ネット上の公式翻訳ドキュメントを読むという手もあるんですが、電車の中で読めないのは個人的に痛い…orz
そんなわけで今月は奮発しちゃいました\(^o^)/
まだ読み始めたばかりなので書評は出せないけど、今のところおいしく頂けております^^
こいつでDjangoを使ったコード作成がもっとシャキサクになる予感(`・ω・´)
JavaScript使ったXSSを防ぐために、ModelForm使ってURLFieldをValidateしてみたよ\(^o^)/
newformsでのバリデーションのやり方は以下の公式ドキュメントを参照
フォームやフィールドのバリデーションコードを自作する
まとめると以下のようになります。
今回は「元々URLFieldが持っているバリデートをかけつつ、別途JavaScriptを使用したXSSを防ぐための自作のバリデートをかけたい」と考え、2番目を実施することにしました。
でも公式ドキュメントを読んでもclean_<fieldname>()の使い方サッパリわかりませんorz
『このメソッドはパラメタ無しで呼び出されます。』って書いてあるから「引数なしのメソッド」のことかと思ってテキトーにコード書いたら『引数が一個必要だぞブルアァァァ』って言われました(´・ω・`)
さて、今日もググるか…λ
ググってたら早速コード見つけたお^^
↓の30-31行目あたりです。
ユーザ登録時の使用可能文字制限 | Diffビューア | Review Board
Review Boardキタ!! しかもmonologistaさんの所のじゃん!!><
# 何気にReview BoardはSEO効果があるような気が><
monologistaを参考にしつつテケトーに書いてみる。
class Url(models.Model):
url_id = models.AutoField(primary_key=True, editable=False)
url = models.URLField(max_length=1024, verify_exists=False)
page_title = models.CharField(max_length=512, blank=True)
description = models.TextField(blank=True)
added_date = models.DateTimeField(default=datetime.now)
tags = models.ManyToManyField(Tag, blank=True, null=True)
class Admin:
pass
def __unicode__(self):
return self.page_title
class UrlForm(ModelForm):
class Meta:
model = Url
def clean_url(self):
"""
URLとして使用可能な文字かどうか調べる。
参考:http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html
return ” if($url =~ m|[^;/?:@&=+\$,A-Za-z0-9\-_.!~*’()%]|);
“”"
url = self.cleaned_data[’url’]
regexp = re.compile(’[^;/?:@&=+\$,A-Za-z0-9\-_.!~*\’()%]’)
result = regexp.search(url)
if result != None:
raise ValidationError, gettext(”Error URL.”)
「clean_url()でreturnしてねぇwww」とかツッコミどころ満載っす><
さて、これを動かしてXSS起こすURLを入れてどうなるかというと…
『URLを正しく入力してください。』
…ハイィ?『Error URL.』とフォームに表示されるはずなんですけど…何故日本語に(ーー;
まぁいいや。別のURLでも入れよう。とりあえず「http://gash/aogebatoutoshi.mp3」って入れるか。
『URLを正しく入力してください。』
ヤバイwww作り方ミスったかもwww
最後にうちのブログ「http://www.notgeekerror.net/」を入れてみるか\(^o^)/
…ちゃんと動いてる(´・ω・`)
この動きは…まさか…まさか!!
newformsのURLField近辺のソース(django/newforms/field.py)を見たら素敵な正規表現がwww
url_re = re.compile(
r'^https?://' # http:// or https://
r'(?:(?:[A-Z0-9-]+\.)+[A-Z]{2,6}|' #domain...
r'localhost|' #localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|/\S+)$', re.IGNORECASE)
.(ドット)を含まないローカルドメインはDjango的には『死んでください』ってことなのかーorz
っていうかnewformsだとURLFieldのバリデートが強化されてやがるーorz
でもgeniricviewのURLFieldは普通に『<』とか『>』『()』とかくぐり抜けてくれるーorz
Djangoの開発版であるDjango 0.97pre を使うために、Ubuntu 7.10に開発版Djangoをソースコードからインストールしました。以下はそのまとめ。
cd /usr/local
sudo svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
sudo ln -s /usr/local/django-trunk/django /usr/lib/python2.5/site-packages/django
sudo ln -s /usr/local/django-trunk/django/bin/django-admin.py /usr/local/bin/django-admin
試しに動かして見たところ、どうやら動いてくれているようです( ^ω^)
python manage.py shellで色々弄ってみたら、ModelFormもありました\(^o^)/
これで最新機能をイジり倒せるぞ〜><
常山さんに教えてもらったModelFormを使えば楽にvalidate出来そうな気がしたのでテケトーにコード書いて早速トライ★
…あれ?python manage.py runserverしたら「ModelForm何て知らねぇぞゴルァ」とか言われてる。
このエラーは…まさか…まさか!!(某ATの清麿風に)
# python manage.py shell
In [1]: from django.newforms import *
In [2]: Model(タブ押し)
ModelChoiceField ModelMultipleChoiceField
In [2]: form(タブ押し)
form_for_fields form_for_instance form_for_model forms
0.96に無い機能キター!!
さ、これを機に0.97preへの移行計画を立てようか。
コメント/TB