python

OperaのスピードダイヤルをChromeのSpeed dial2に移植

Opera中国企業に身売り

朝9時ごろ記事を読んで、Operaからの決別を決意した。中国企業のモラルというものがまったく信用できないからだ。しかしながら、スピードダイヤルはすでに300を軽く超えている。これが10種類にカテゴリわけされているので、これを手動で移すのは苦痛すぎる。というわけでプログラムで何とかした。

1.ファイルの準備
まずは AppData\Roaming\Opera Software\Opera Stableからbookmarksというファイルをどこかにコピー
そこからスピードダイヤルにかかわる部分だけを切り取って、他のファイルに保存 (2のソース内で使うbookmark.txtがこれ)

又、Speed dial2からエキスポートしたファイルも用意。幾つかカテゴリを作って色々追加しておくこと。(ヘッダ部分などを使うため)

2.プログラムで切り出し


#! coding: Shift_JIS
f = open('bookmark.txt')
data1 = f.read() 
f.close()

 
lines1 = data1.split('\n') 

idparent = 0
idchild = 15

for line in lines1:
    if not "\"type\"" in line:
        if "\"name\"" in line:
            if not "フォルダ" in line:
                print('\"' + str(idparent) + '\"' + ": {")
                print('\"id\":' + str(idchild) + ",")
                s = line
                if "\"name\": \"\"" in s:
                    s = "\"name\": \"a\":"
                s = s.replace('name','title')
                print(s)
            
        elif "\"url\"" in line:
            idchild = idchild + 1
            idparent = idparent+ 1
            print(line + ",")
            print('\"thumbnail\":\"\",')
            print('\"ts_created\":' + str(idparent) + ",")
            print('\"visits\": 0,')
            print('\"visits_morning\": 0,')            
            print('\"visits_afternoon\": 0,')
            print('\"visits_evening\": 0,')            
            print('\"visits_night\": 0,')
            print('\"position\": 999,')
            print('\"idgroup\": 1' + "},")            

print("END")
自分さえわかれば良いので非常に雑なプログラムだ。Python3を入れたので、2との違いが大きく最初かなり迷った。文字列のところの書き方はこれが一番良いのかどうか知らん。何時間もかけたくないし、動いたから良い。

3.出力ファイルをくっつけて編集
Speed dial2のヘッダ・フッタ部分と2で出力したファイルをくっつける。カテゴリなどを編集する。カテゴリわけ等手動での作業も結構ある。


最後に注意点
・"expected {" とかJSONエラーが出るけど、大概どこかで"{"が変なネストになっている。どうしてそうなるか面倒なので調べていない目で追って適当に修正すべし。
・プログラム上でtitleが空文字の場合にはなにか入れるようにしてあるが、インポートされない場合はtitle空文字を疑うこと。これがわからずハマッタ。
・とりあえず二時間程度でやってみたレベルなのでまねしてうまくいかなくても、苦情をいわないことww質問には答えないでもない

自動更新された場合に何をされるかわからないのでOpera自体をアンインストールした。10年くらい使ってた気がするが二時間の作業でお別れだな。

pythonでブロック崩しを作ってみる-1

Lispは好きなのだが、惜しいことに標準の処理系というものがなく、いろいろ処理系がありすぎる。手元で軽く触れる言語で標準が存在するものが欲しいと思った。少し前にとある製造業で働いていたのだが、そこに居たMさんがpython派だったので話の種にpythonを勉強してみた。Mさんは僕同様言語オタクっぽい人でラムダ式の話し等で盛り上がることが出来たので楽しかった。vi派だったのとLispをイマイチ好まない人なのが残念だが。

とりあえずブロック崩しを書いてみた。
えらいこと'self'が多いのがうざったい。その他いろいろと不満な点もあるが、良い言語だと思う。
perlには及ばないだろうがrubyよりもライブラリが多いのも買えるところだ。

以下ソース、いちいち説明を書かないが、スペースキーでゲームスタート、矢印キーでパドル移動。
'press space to start'くらい書けばいいのだが、tkを調べるのに苦労したのとwindowsでtkがゲームするという用途では全く実用的な速度でないことに気付き、全くもってやる気がなくなってきた。最後は結構投げやりに。


import Tkinter as Tk
import time class Frame(Tk.Frame): def __init__(self): Tk.Frame.__init__(self) self.canv = Tk.Canvas(self, width=640, height = 480) self.canv.pack(fill=Tk.BOTH, expand = 1) self.focus_set() self.bind('<space>', self.startgame) self.top = self.canv.create_line(0, 0, 640, 0, fill = 'black') self.left = self.canv.create_line(0, 0, 0, 480, fill = 'black') self.right = self.canv.create_line(640, 0, 640, 480, fill = 'black') self.bottom = self.canv.create_line(0, 480, 640, 480, fill = 'black') def startgame(self, event): if len(self.canv.find_withtag('init')) != 0: self.canv.delete('init') self.unbind('<space>') self.bind('<Right>', self.paddle_right) self.bind('<Left>' , self.paddle_left) self.x_move = 5 self.y_move = 5 self.paddle = None self.ball = None self.paddle = self.canv.create_rectangle\ (320, 470, 420, 480, outline = 'black', fill = 'black', tags = 'init') self.ball = self.canv.create_oval\ (250, 210, 260, 220, outline = 'black', fill = 'black' , tags = 'init') self.blocklist = [] self.blocklist.append(self.canv.create_rectangle(0,0,160,60,outline='black',fill = 'red' ,tags = 'init')) self.blocklist.append(self.canv.create_rectangle(160,0,320,60,outline='black',fill = 'blue',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(320,0,480,60,outline='black',fill = 'yellow',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(480,0,639,60,outline='black',fill = 'black',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(0,60,160,120,outline='black',fill = 'blue',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(160,60,320,120,outline='black',fill = 'yellow',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(320,60,480,120,outline='black',fill = 'black',tags = 'init')) self.blocklist.append(self.canv.create_rectangle(480,60,639,120,outline='black',fill = 'red',tags = 'init')) self.moveball() def moveball(self): self.canv.move(self.ball, self.x_move, self.y_move) self.canv.update() test = self.canv.find_overlapping(self.canv.coords(self.ball)[0], self.canv.coords(self.ball)[1], self.canv.coords(self.ball)[2], self.canv.coords(self.ball)[3]) if self.top in test: self.y_move = -self.y_move self.canv.after(1, self.moveball) elif self.left in test: self.x_move = -self.x_move self.canv.after(1, self.moveball) elif self.right in test: self.x_move = -self.x_move self.canv.after(1, self.moveball) elif self.paddle in test: self.y_move = -self.y_move self.canv.after(1, self.moveball) elif self.bottom in test: self.gameover() else: self.judge_block(test) self.canv.after(1, self.moveball) def paddle_right(self, event): self.canv.move(self.paddle, 20, 0) def paddle_left(self, event): self.canv.move(self.paddle, -20, 0) def gameover(self): self.bind('<space>',self.startgame) self.unbind('<Right>') self.unbind('<Left>') def judge_block(self, blockids): for id in blockids: if id in self.blocklist: self.canv.delete(id) self.blocklist.remove(id) self.y_move = -self.y_move if __name__ == '__main__': f = Frame() f.pack(fill = Tk.BOTH, expand = 1) f.mainloop()



作ってみて気がついたが横からブロックにぶつかっても変な方向にバウンドするのであからさまに未完成だ。次回はこれをどう改良し完成させるかというテーマで書くとしよう。いつ書くかだが、飽きてきたので未定。pythonよりもtkを調べるのに時間がかかった。 

こんなアホみたいなプログラムの記事に需要があるのだろうか? 
最新コメント
QRコード
QRコード
  • ライブドアブログ