Hello World / plɹoM ollǝH

Programmers Live in Vain

Chromeのコンソール画面で遊ぶ(SVG編)


Check console log in Google Chrome!
えぇっ!?IEを使っているだって?君は正気か?

three.js Chromeローカルファイル読み込みで怒られたよ

three.jsのサンプルローカルで実行してたら怒られたのでメモ

Failed to load **** Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

ローカルサーバー建てるのは面倒くさいので
起動オプション付きのショートカットを用意する

「ショートカット」タブの「リンク先」に下記オプションを追加して

--allow-file-access-from-files

「ショートカット」タブの「詳細設定」⇒「管理者として実行」にチェックを
「互換性」タブにも「管理者としてこのプログラムを実行する」が存在するが
こちらをチェックするとexe自体の起動設定が管理者権限になってしまうので注意

Chromeのプロセスを全部終了してから↑のショートカットで起動させる
これでエラー回避できるんやで

pythonのreversedはイテレータを返す

反転したリストを複数回使うときにハマった

a = reversed([1, 2, 3])  # イテレータを返す
for x in a:
    print(x)
for x in a:
    print(x)  # ここは呼ばれない

reverseなどでリスト自体を反転させておくか

a = [1, 2, 3]
a.reverse()

for文ごとにreversedを呼べばOK

a = [1, 2, 3]
for x in reversed(a):
    print(x)
for x in reversed(a):
    print(x)

ちなみにsortedはリストを返す模様

プログラマのためのMaya攻略法

Mayaの内部構造をgoogle先生をウロウロしながら理解するのは効率が悪いので次の方法がおすすめ

  1. Complete Maya Programmingを読む
  2. devkitのサンプルを覗く
  3. MELコマンドの仕様はリファレンスを読む

Complete Maya Programmingは分厚く読むのは疲れるが、ツールを自作するときにも役立つ情報満載なので一度は読んでおいたほうが良いだろう。骨デジタルさんから日本語版も発売されている。Kindle版が欲しいから英語版を買ったけど日本語版買うべきだったな。一社に一冊欲しい。

devkitには今流行のAlembicのサンプルなんかもあったりします。そういえばCOLLADAってどうなったんですかね?

PySide1と2でQScrollArea::wheelEventの動作が若干違う

違うんじゃあああああああああああああああああぁぁぁぁあああばばばっばばばば

# from PySide2.QtWidgets import *
from PySide.QtGui import *
import sys

app = QApplication(sys.argv)

class MyWidget(QWidget):
    def wheelEvent(self, event):
        print('hoge')

class MyScrollArea(QScrollArea):
    def wheelEvent(self, event):
        print('fuga')  # PySide1のときは呼ばれてないっぽい

scrollArea = MyScrollArea()
w = MyWidget()
w.setFixedSize(640, 480)
scrollArea.setWidget(w)
scrollArea.show()
sys.exit(app.exec_())

QTimer.singleShotをサブスレッドで使うには

呼び出しスレッド側でexec関数をよんでイベントループを開始せよ

QTimer Class | Qt 4.8

In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec(). Qt uses the timer's thread affinity to determine which thread will emit the timeout() signal. Because of this, you must start and stop the timer in its thread; it is not possible to start a timer from another thread.

イベントループにはいるとexitを呼ぶまで帰ってこないので注意

from PySide import QtCore, QtGui
import sys, time

class SingleShotThread(QtCore.QThread):
    def run(self):
        QtCore.QTimer.singleShot(1000, lambda: print('hoge'))
        self.exec_()  # イベントループ開始

app = QtGui.QApplication(sys.argv)
th = SingleShotThread()
th.finished.connect(lambda: print('finished'))
th.start()
time.sleep(3)
th.exit()  # exitを呼んで終了させる
sys.exit(app.exec_())