2008年4月9日水曜日

初心者がつまづくPython 三日目

前回に追記
隣り合った文字列はそのまま連結→隣り合ってるのがリテラルの場合のみ

word = 'hello'
print word 'hello' #これはダメ

print 'hello''hello' #これはいける
hellohello

三日目からはスクリプトファイルを作って実行する
対話モードはちょっとした事を調べるのに便利ってこと
スクリプトファイルの実行
→python test.ph

TeraPadの設定
実行ファイル:cmd
コマンドパラメータ:/K CD %d && python %n


文字列の抜き出し
文字列変数[最初のインデクス:最後のインデクス]
インデクスはもちろん0から


word = 'hello'
print word[1:3] #2文字目から3文字目まで
el


インデックスのデフォルト値
何も入れないとそれまで、それ以降


word = 'hello'
print word[:4] #4文字目まで
hell
print word[2:] #3文字目から最後まで
llo


その他の数値
無理そうな数を入れてもエラーにならない!!


word = 'hello'
print word[100:] #何も出力されないがエラーも出ない
print word[-2:] #マイナスを入れると・・・
lo #最後の2文字が
print word[-2:4] #lohelloを期待したけど・・・何も出力されない


C言語のように文字列の変更はできないが要素同士の組み合わせは便利


word = 'hello'
word[0] = 'x' #エラーとなる

word = 'x' + word #これなら代入なのでいける
print word
xhello

print word[1:] + 'world'
helloworld


スライス文字の不変式


word = 'hello'
print word[2:] + word[:2]
hello


前述したが無理のあるインデクスでもうまくいく
大きすぎるインデクスは文字列のサイズに置き換えられる
負の数字は右から数えるが"-0"は0と一緒で右からじゃなく1文字目
ただし、インデクス指定ではエラーがでる。


組み込み関数len(文字列)は文字列の長さを返す


word = 'hello'
len(word)
5


Unicode文字列はシーケンス型

三日目まとめ
チュートリアル中に出てくる関数を調べる方法がわからない><
Javaだとクラスを元に探せるけど、Pythonはオブジェクト指向といっても
クラスベースじゃないってことかな?
なんにせよドキュメントの見かたって新しい言語を覚えるのに大切な事だと思います。

2008年4月5日土曜日

Python初心者の二日目

新しいPCの環境も整ってきてPythonも入れて少し勉強した。
とりあえずチュートリアルを一通りやろうとpdfをダウンロード。

Python チュートリアル (PDF)
http://www.python.jp/doc/pdf/nightly/tut.pdf

が、開けない。アドビリーダーがインストールできないっ・・・!!
vistaやってくれる、そこにしびれる憧れない。
インストーラーを実行してもうんともすんとも言わない。
検索すると以下のような記事が。



 1)AdobeのDownLoad Manegaerが起動

 2)ダウンロードが完了すると下記フォルダにファイルが展開される

   C:\Users\hogehoge\AppData\LocalLow\NOS\Adobe_Downloads



   展開されたファイルは

    Setup.exe、setuo.ini、Data1.cab、AcroReader.msi、abcpy.ini



となりましたので



 3)上記フォルダ内のファイルを全て別フォルダに退避。

 4)セットアップを中断し、PCを再起動。

 5)退避させたsetup.exeのプロパティ→互換性→「視覚テーマを無効にする」にチェック

 6)setup.exeを起動しインストール



Adobe Reader8.1 のインストール ネットワーク管理者というお仕事 から2008年4月6日に引用

とりあえず視覚テーマを無効にすればできました。AdobeはVistaに対応したと書いてるけどしてないという罠。いや、仕様ですか・・・><
これでチュートリアル読めるようになったので本題に入ります。

今日のPython(今日のわんこ的な意味で)


まだまだ初歩的です。間違った理解してる箇所があるかもしれませんのでご了承ください><

起動->python
終了->import sys;sys.exit()かControl-Z
sysはシステムクラス?importはJavaといっしょ

python -c [command]でコマンド実行
python -c print "Hello world"→×
-c オプションのあとはすべて""で囲む。エスケープは\
正解は→python -c "print \"Hellow Woerld\""

コメントは#で始まる

>>> = 一次プロンプト
... = 二次プロンプト

対話モードでは代入した変数が保持されてる


>>> width = 10 #エンター押しても表示されないが代入はされてる
>>> width #変数を入力すると値が表示
10
>>> print width #も同じ結果
10


浮動小数点は完全にサポート

>>> 7/2 #整数の演算は切り捨てだが
3
>>> 7.0/2 #7を7.0にして割ると
3.5
>>> 7.0/3 #無理数も
2.3333333333333335


複素数もサポート(複素数=2乗すると-1になる数字)
よくわからん


対話モードでは最後に印字された式が変数が"_"に代入される
文字列は×この変数は読み込み専用として使うべき
→print を使わずに直接""で囲んで表示させると文字列も_変数に入る

>>> 3+3
6
>>> _
6
>>> print "10" #文字の10を印字
10
>>> _ #式のみなので最後の6が表示される
6
>>> "Hello" #直接印字
'Hello'
>>> _ #'Hello'が入っている
'Hello'


文字列は''で囲う
文字の末尾をバックスラッシュにすると改行してかける
(理論的にはつながっている)
出力はprintを使わないとそのまま表示される

>>> hello = "こんにちは\
... はじめまして"
>>> print hello
こんにちははじめまして
>>> hello
'unicode...'


文字リテラルに"raw"(未加工)

>>> r"test\n\
... tetest!!"
'test\\n\\\ntetest!!"
>>> print r"test\n\
... tetest!!"
test\n\
tetest!!


"""もしくは'''を使うと行末エスケープが不要になる

>>> t = """test
... te
... testtttt"""
>>> print t
test
te
testtttt


文字列の演算

>>> t = "test"
>>> e = "exam"
>>> te = t + e #+は結合
>>> print te
testexam
>>> print te*10 #*で繰り返し
testexamtestexamtestexamtestexamtestexamtestexamtestexamtestexamtestexamtestexam

隣り合った文字列はそのまま連結する


今日は以上です。
Pythonの徹底的にシンプルに書ける文法にはまりつつあります。
モチベーションのために何か簡単なサービスを考えて目標としたいところ。

2008年4月3日木曜日

DELLのタブレットPC「Latitude XT」がやってきた!

半年前くらいからノートPCを買おうと決めていろいろと検討した結果、DELLのタブレットPC「Latitude XT」をついに購入した。
この時期PCは安くなるっぽくて確かに合計で8万引きだった。
検討中にMac Airが出たり、新型のMac Bookが出たりしてマカーの仲間入りも考えたけどマウス使うのがだるくなってきたのと、絵も描けるタブレットPCに決めた。
MacもそのうちiTouchPCを出すだろうけど、我慢できませんでした><
以下、写真レポート。

箱、DELLの梱包は無駄にでかい・・・。


箱の中に箱!1


箱の下には・・・


靄がかかっているだっとっ!!


にょろ~ん


全体像


横から


初オープン!!液晶が綺麗(新品的な意味で)


くるんと画面が回転して折りたためます。


電源オン!


指紋センサー


ThinkPadみたい・・・青いけど


ショートカットボタン。画面の向きも変えれる。


DVDドライブは外付け。


付属品


電源アダプタ


ネット繋げたのでとりあえずニコニコ。ペンタブサーフィン快適すぐる。


何やら袋が・・・・


何と・・・なかにLatitudeが入ってました!!



以上です。

2008年3月23日日曜日

Python初心者が最初につまづくあれこれ

最近ようやくプログラミングと言うもののおもしろさが分かってきたので、Pythonを始める事にした。何故Pythonなのかよくわかんないけど、とりあえず蛇でかっこいいのと(実際はモンティ・パイソンが元ネタ)、レア言語ってかっこいいじゃん?みたいな感覚です。括弧がいらないってのもおもしろいところ。Lispの反対で天邪鬼っぽいとこがいいでしょ?

  • 導入編
FrontPage - Pythonのお勉強
http://python.rdy.jp/
インストールはここの最新のダウンロードの項からお好きなOSの物を

Python Japan User's Group
http://www.python.jp/Zope/

Instant Hacking
http://www.python.jp/Zope/intro/instant_hacking_jp
とりあえずインストール終わったら、チュートリアルこなそう。演習をちょいちょいっとね。

Python 2.4 ドキュメント - June 27, 2006
http://www.python.jp/doc/nightly/
あとはリファレンス見てお好きなように。

  • 初起動編
最新バージョンをインストールしたらPython Command Lineを立ち上げていじくってみる。

Hellow world!!


print "Hello world!!"


  • とりあえず詰んだ編
いきなりループ制御で詰んだ。for文は"for var in range(1,100)"みたいな感じなので"Hellow world"を10回表示させようとすると・・・


for num in range(1,10) :
print "Hello world!!", num;

IndentationError: expected anaindented block


IndentationErrorなるものが出て詰んだ。Indentation??インデンテイション・・・インデント!!そうです、for文内の命令ということを表すために、インデントを入れないとだめ。インデントで怒られるとかなんか新鮮です。以下のように治して実行。


for num in range(1,10) :
print "Hellow world!!", num;

実行結果:
Hello world!! 1
Hello world!! 2
Hello world!! 3
Hello world!! 4
Hello world!! 5
Hello world!! 6
Hello world!! 7
Hello world!! 8
Hello world!! 9


ちなみにインデントはタブでもスペースでもいいみたい。
とりあえず飽きなければ自分がつまづいた部分を晒していこうと思います。つづく・・・?

2008年3月20日木曜日

EclipseプラグインのBIRTのまとめ

BIRT=Business Intelligence and Reporting Tools
BIRTはEclipse上で各種データベースを元に様々なレポートを出力する事ができるプラグインです。XMLを元にレポートを出せるみたいで、WebAPIなんかを使って得た情報も様々な形で加工して表示させる事ができるみたいです。(未確認)というか、そういう事をやってみたいのでちょっとまとめてみます。
最終的にはTwitterの発言や、はてブのブックマークをまとめて様々な角度から検証するレポートを出す事が目標です。

  • とりあえずリンク集
Eclipse.org home
http://www.eclipse.org/

Eclipse BIRT Home
http://www.eclipse.org/birt/phoenix/

BIRT Tutorials
http://www.eclipse.org/birt/phoenix/tutorial/

[ThinkIT] 第1回:インストールからはじめるEclipse BIRT (1/3)
http://www.thinkit.co.jp/free/tech/28/1/



BIRT Tutorial←今ここ
http://www.eclipse.org/birt/phoenix/tutorial/basic/basic05.php

2008年3月18日火曜日

OCL:defでコレクション型属性を定義する方法

OCLで新たに属性を追加するにはdefを使って定義するが、コレクションの属性を定義する場合はコレクションの型と要素の型も指定する。

def : Collection(OCLType //コレクション内部の型) = expression //コレクションを返す式


EclipseのOCLプラグインだとこうなる

OCL ocl = OCL.newInstance(ECoreEnviromnmentFactory.INSTANCE);
OCLHelper helper = ocl.createOCLHelper();
helper.defineAttribute("collection : Collection(Integer) = OrderedSet{1,2,3}"); //OrderedSet型で要素が1,2,3が作られCollection(Integer)型のcollectionという変数が定義される
//helper#define*で定義された属性や操作はこのhelperから作られたQueryでしか有効にならないので注意


属性だけじゃなく操作も定義できるのですっごい複雑なOCLを毎回書くのが面倒な場合でかつ、モデルに直接持たせるほどでもない属性であった場合、エイリアスとして定義して使うことができる。

でも、渡されたオブジェクトがCollection型であるか調べる方法がわからなず。

// 上の続きでcollectionはInteger型が入ったコレクション
collection.oclIsTypeOf(OrderedSet(Integer)) // これはダメだった

Collectionとして見るよりは、要素の集合として見てて、要素の属性もそのまま使えるから、Collectionの型を意識する必要は無いのかな?

ところで、この辺りを触ってて、OCLHelper#defineOperation()で二つ以上パラメータを持った操作を定義しても、すべてのパラメータの値が必ず最初のパラメータになるバグに遭遇して困っている。
Bugzillaで検索しても出てこず、最新版でも直ってなかったので気付いてないのかなぁ?
どなたかBugzillaで発見したら教えてください。

2008年3月17日月曜日

著作権問題をクリアしてニコニコする方法



①同サービス内における既存の著作権侵害放送番組動画はすべて削除する
こと、②新規投稿動画の監視を行い著作権侵害放送番組動画については直ちに削除する旨
の申入書を提出しましたことをお知らせいたします。



080311.pdf (application/pdf オブジェクト) から2008年3月17日に引用

先日、ニコニコ動画を運営するニワンゴの親会社であるドワンゴが放送局に対して、テレビ放送されている番組の動画すべてについて、厳格に削除対象とする申入書が出されました。

一部権利者はネット上への違法アップロードに対して譲歩とも言える発言をしているようですが、


「好意を持っていてわざわざ宣伝してくれる。そんなファンをないがしろにして著作違反だとやっていたら、ファンなんかいなくなります」



J-CASTニュース : 「らき☆すた」売れまくったのは 違法投稿が「宣伝」してくれたから から2008年3月17日に引用

著作権に関しては以前からいろんな場所で議論が行われていると思いますが、結局は「違法動画も利益に繋がる派VS著作物は権利者のものだゴラァー派」の二方による水掛け論となってしまって平行線を辿ってることと思います。
今の法律の上では著作権者の方が利用者よりも有利であり、利用の仕方が限られているのは確かなので、これ以上著作権に関する議論を繰り返してもはっきり言って無駄な気もします。
僕としては水掛け論を繰り返すよりは、新しいビジネスモデルを考えだしてそれを権利者やコンテンツオーナーに売り込んだ方がいいと思うしね。
それか、自分自身がコンテンツオーナーになって誰かの考えたビジネスモデルを取り入れて、沢山利益を上げる前例を作っちゃう。そうすれば失敗や現在の既得権益を失う事を恐れて動こうとしない大手コンテンツオーナーを動かす事もできるかもしれない。
例えばこちらのエントリーではかなり詳細に新しいビジネスモデルを提案していて、とても期待できそうです。が、実際導入しようと思うと複雑過ぎてコストがかかり過ぎるんじゃないかなとも個人的には思います。あとはカードネタを作ったユーザーが何かしら権利を主張した場合はどうなるんでしょうか?この辺りはのま猫問題のようになかなか難しいところもあるかもしれません。



「ニコ☆スタ」とはオンラインカードゲームで、アニメの有料視聴、ニコニコ動画内のクリエイターへの寄付、そしてニコニコ動画の文化の持続を全て可能にする案です。簡単に言うと、色々な商品にアニメの有料視聴するための料金を予め上乗せしよう、という案です。



ニコニコ動画公式カードゲームでアニメ有料視聴を無料に - 論理的なアイディアはまだかい? から2008年3月17日に引用

しかし、ここまで詳細に書かれているので著者のid:ronriさんはかなり本気なんだと御見受けします。他のエントリーもすごいアイデアの宝庫だし量が半端ないっ!
僕はただのしがないニコ厨でそんなに頭もよくないのでかなり単純な方法で今すぐにでも実現でき、著作権問題をクリアし、かつニコニコ動画の楽しさを損なわずにみんなでニコニコする方法を提案してみようと思います。

コメント専用動画 : ニコニコプラン


ニコニコ動画で観る動画がただのローカル上で再生する動画より面白い理由はいくつかあると思いますが、やっぱり一番の理由はコメントが付いている事だと思います。そしてそのコメントが動画と同期しており、まったく違う時間に観た人と同時に見ているかのような擬似的感覚を味わえたり、独りで観た場合見逃してしまうような細かい点についてもコメント(突っ込み)によって気付かされる事も多々あります。(何回動画を繰り返し観ても中毒じゃないという上級ニコ厨のみなさんにはわかりきった事ですね><)

そこでコメント専用動画を作って、そこにみんなでコメントをするというのはどうでしょう?

動画の内容はもちろん著作者の権利を害さないもので、対象となる映画やアニメ、ドラマなどの動画の長さだけ合わせてあります。その動画に対してコメント及び突っ込みを入れる、もちろん弾幕も。そして本編の動画は各自がテレビ放送を録画するなり、DVDを買うなりレンタルするなりして合法的な手段を使って入手したものを再生しつつ、コメント専用動画を流す。
これなら、権利者の権利は害してないし、DVDの利益分も権利者に行くだろうし、視聴者としても新たな動画の楽しみを満喫でき、なおかつ製作者も視聴者のダイレクトな反応が見る事ができてこれからの動画製作に活かせて、一石三鳥だと思います。
問題としては、
  • 動画とコメントの同期を上手く取れ無い場合がある。
  • ニコニコ動画のように動画上にコメントを表示できない。
などが挙げられると思いますが、一つ目はコメント用動画にここからオープニング、ここからAパート、ここでアイキャッチなど著作権に触れない範囲で同期させるための動画の情報を用意する事で、手動だけどある程度容易に動画を同期できるようになると思います。
二つ目は、コメントの情報を読み取って表示するようなプレイヤーを誰かが開発するのを待つんです!(他力本願w)もちろんわざわざ動画上に表示させなくてもいい人もいるでしょうし、ニコニコがそういったクライアントソフトを提供してくれるといいのですが・・・。
理想としてはEPG(Electronic Program Guide:電子番組ガイド)から番組情報を取得して自動的に番組用コメント専用動画が用意されるようになればいいなぁ。2ちゃんねるの実況板がニコニコ動画の起源だけど、実況板で番組用スレッドを立てる感覚でコメント専用動画が用意する事ができれば理想だなぁと感じます。
実際にテレビ番組欄@2chではEPGを利用しているようですし。

テレビ番組欄@2ch - PukiWiki

正直に言えば、僕はニコニコでコメント付きのアニメを観るようになるまでは、アニメなんてほとんどみなかったのに、今ではどっぷりはまってDVD買ったりするまでになりました。これも、多彩なコメントで僕を洗脳してくれる上級ニコ厨のみなさんのおかげなのですが、逆に言うとコメントが付いてないアニメには魅力を感じてなくて、ニコニコ動画が無ければ毎週欠かさず観るようなことにはならなかっただろうと思います。それがこういった例もあるのですから(たった一例だけどw)コンテンツオーナー側も既得権益の死守にばかり力を入れるのではなく、みんながニコニコできる新しいビジネスモデルに少しでも注目していただいて、権利者、視聴者、製作者それぞれの観点から利益を得られる環境ができればいいなぁと思う。
(念のため書いておきますが、僕は違法動画のアップロードを擁護してるわけではありません。現在の法律上は違法なのですから、運営者はしかるべき態度を取るべきだと思っています。まぁ、それによって僕がコンテンツを買う機会はなくなると思いますが・・・)

深読みすると最初に書いたドワンゴの強気な姿勢は、コンテンツオーナーから歩み寄らせるためのカードなのかなぁとも思うですが実際はどうなんでしょうか?
まだまだ、ニコニコ動画からは目が離せませんね!

3月18日追記:
ちょっと検索したらまったく同じような事を先立って書いてるエントリーを見つけた。
ほとんど同じような事が書かれていてびびった。う~ん・・・、自分は意識しないうちに読んでたのかなぁ。
版権動画でニコニコする方法を考えてみる ver.2 - ブログ執筆中