昼下がりグリッチ

今日もグリッチ

import Image,sys
from random import randint

file = sys.argv[1]
im = Image.open(file)

width,height = im.size
interval = 0

for h in range(height):
    if(interval == 0):
        interval = randint(0,height-1)
        rand_slide_x = randint(0,14)
        rand_slide_y = randint(0,4)
        slide_x = 0
        slide_y = 0
    else:
        interval -= 1

    slide_x += rand_slide_x
    slide_y += rand_slide_y

    for w in range(width):
        current = (w,h)
        new_h = h + slide_y
        new_w = w + slide_x
        if new_h >= height: new_h = h
        if new_w >= width: new_w = w
        src = (new_w,new_h)
        im.putpixel(current,im.getpixel(src))

im.show()
im.save("glitch091021.jpg")

1256101630

夕暮れグリッチ

そしたらベンジーあたしをグリッチで殴って

import base64,re
from random import randint

jpgfile = "/Users/kzfm/orig.jpg"
jpg_text = base64.encodestring(open(jpgfile,"rb").read())
glitched_text = ""
for c in jpg_text:
    if c == '0':
        glitched_text += str(randint(0,9))
    else:
        glitched_text += c
glitched_jpg = base64.decodestring(glitched_text)
open("glitched.jpg","wb").write(glitched_jpg)

1256026704

Jpeg においては DCT を施すために如何なる入力画像も 8x8 画素のブロックに分割されるらしいのでbase64エンコーディングしたのをいじってデコードすると8x8のブロックの単位でノイズが混じるっていう理解でいいのか。

参考

ProductName 無罪モラトリアム
椎名林檎
EMIミュージック・ジャパン / ¥ 3,059 (1999-02-24)
在庫あり。

PILでglitch

早朝グリッチ。PILのputpixelは遅いので、1.1.6からはim.loadを使えとのこと。

import Image,sys
from random import randint

file = sys.argv[1]
im = Image.open(file)

width,height = im.size
slide_x = 0
slide_y = 0
rand_slide_x = randint(0,14)
rand_slide_y = randint(0,4)

pix = im.load()
for h in range(height):
    slide_x += rand_slide_x
    slide_y += rand_slide_y

    for w in range(width):
        new_h = h + slide_y
        new_w = w + slide_x
        if new_h >= height: new_h = h
        if new_w >= width: new_w = w
        pix[w,h] = pix[new_w,new_h]

im.show()
im.save("glitch091020.jpg")

1255993806

そしてGlitch: Perfet Imperfectionsもポチッた

ProductName Glitch: Designing Imperfection

Mark Batty Publisher / 2839円 ( 2009-09-16 )


参考

macbookにPIL

MacPortsから

sudo port install py26-pil

なにやら色々入る。

perlでソースコードのハイライト

Pygmentsをperlで使いたかったので、 Inline::Pythonでやってみた。

use Inline Python => <<'END_OF_PYTHON_CODE';
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py_highlight(code):
   return highlight(code, PythonLexer(), HtmlFormatter())

def get_stylesheet():
    return HtmlFormatter().get_style_defs('.highlight')
END_OF_PYTHON_CODE


$code = <<'PYTHON_CODE';
from reportlab.pdfgen import canvas

c = canvas.Canvas('hello.pdf')
t = c.beginText()
t.setFont(t._fontname, 64)
t.setTextOrigin(0, 0)
t.textOut('Hello, World')
h = 64 / t.getX() * c._pagesize[1]
t.setFont(t._fontname, h)
c.setFontSize(h)
c.rotate(-90)
c.drawString(-c._pagesize[1], t._leading - h, 'Hello, World')
c.save()
PYTHON_CODE

printf qq|<html><head><style type="text/css">%s</style>
</head>\n<body>%s</body>\n</html>|, get_stylesheet(), py_highlight($code);

pygments

Unix/Linuxプログラミング理論と実践 2章(whoを書く)

whoを書く(macbook)

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

macだと

  • utmpではなくてutmpxを
  • 時刻がut_tv.tv_sec

あと以下の関数のcp+4は先頭の文字列4つを落としている。

void show_time(long timeval){
  char *cp;
  cp = ctime(&timeval);
  printf("%12.12s", cp+4);
}

作ったwho2は月の表記がオリジナルとちょっと違うけどまぁいいか。

$ ./who2
kzfm     console  Sep 27 17:31
kzfm     ttys000  Sep 27 17:32
kzfm     ttys001  Sep 27 18:50
kzfm     ttys002  Sep 27 18:50
$ who
kzfm     console   9 27 17:31  
kzfm     ttys000   9 27 17:32  
kzfm     ttys001   9 27 18:50  
kzfm     ttys002   9 27 18:50  

pythonからutmpx(utmp)ファイルにアクセスするにはpyutmpってのがあってCythonで書かれている。

他にもunagi.pyをみるとstructモジュールを使ってアクセスできるようだ。

Dive Into Python 3

欲しい

ProductName Dive into Python 3 (Books for Professionals by Professionals)
Mark Pilgrim
Apress / 3877円 ( 2009-09 )


僕はまだ2.6系使ってるが。

arcsinのテーラー展開でπをもとめる

ビュフォンの針でとおもったんだけど、なぜかarcsinのテーラー展開が目に留まったので。

def factorial(i):
   return 1 if i ==0 else i * factorial(i-1)

def calc_pi(i):
   pi = 0
   for n in range(i+1):
       pi += 3.0*factorial(2*n)/(2**(4*n)*((factorial(n))**2)*(2*n+1))
       print pi
   return pi


if __name__ == "__main__":
   print calc_pi(16)

ProductName 「無限と連続」の数学―微分積分学の基礎理論案内
瀬山 士郎
東京図書 / ¥ 2,625 ()
在庫あり。

Machine Learning: An Algorithmic Perspective

一ヶ月近くかかってやっと到着

ProductName Machine Learning: An Algorithmic Perspective (Chapman & Hall/Crc Machine Learning & Patrtern Recognition)
Stephen Marsland
Chapman & Hall / ¥ 6,707 ()
通常1~3か月以内に発送

機械学習をpythonで的な本だと思っていたが、パラパラめくってみると、プログラムを丁寧に解説している本ではなくて、理論の説明を助けるためにコードを載せている感じ。

  • Introduction.
  • Linear Discriminants.
  • The Multi-Layer Perceptron.
  • Radial Basis Functions and Splines.
  • Support Vector Machines.
  • Learning with Trees.
  • Decision by Committee: Ensemble Learning.
  • Probability and Learning. Unsupervised Learning.
  • Dimensionality Reduction.
  • Optimisation and Search.
  • Evolutionary Learning.
  • Reinforcement Learning.
  • Markov Chain Monte Carlo (MCMC) Methods.
  • Graphical Models.

そのうち読む。

パターンベースのフィンガープリント

化学構造の類似度を測るフィンガープリントで部分構造由来のものには2種類あって、ビットにパターンが対応しているものと、そうでないもの。

後者はハッシュ関数とかを使って動的に生成するのでビットの密度の効率が良いが、結局解釈できなくて困ることが多い。

で、前者を解釈しましょうっていうスレッドがあったので書いてみた

ProductName ケモインフォマティックス―予測と設計のための化学情報学
J.Gasteiger,T.Engel
丸善 / ¥ 18,900 ()
在庫あり。