CSharpCodeProvider [プログラミング]
http://labs.yaneu.com/20101017/
Windows上のスクリプト言語といったら何があるかは調べようとも思わないが、わざわざインストールを促すような類のものしかないので、常々C#だけでスクリプト言語は無いかと思っていた。
まあ、IronXXXX というCLR実装のスクリプトもあるのだが、いかんせん完成度が低いというか、かゆいところに手が届かない。
C#自体もセキュリティ名目のために、自分にとっては制限がきつすぎて、制限回避のためにDLLだのなんだのつくるとせっかくの生産性がだいなしだったりもする。
で、顧客が優柔不断だったりして、「速度は要求されてないし、コードは多少不便でもいいからスクリプトにならないかなー」という場合に使えるのではないだろうか。
いちいち俺設定ファイル用意したりする手間を省くのにも使えそう。
が、自分はC#はWindowsのアプリの仕事はメインではしていないので備忘録にとどめておく。
Windows上のスクリプト言語といったら何があるかは調べようとも思わないが、わざわざインストールを促すような類のものしかないので、常々C#だけでスクリプト言語は無いかと思っていた。
まあ、IronXXXX というCLR実装のスクリプトもあるのだが、いかんせん完成度が低いというか、かゆいところに手が届かない。
C#自体もセキュリティ名目のために、自分にとっては制限がきつすぎて、制限回避のためにDLLだのなんだのつくるとせっかくの生産性がだいなしだったりもする。
で、顧客が優柔不断だったりして、「速度は要求されてないし、コードは多少不便でもいいからスクリプトにならないかなー」という場合に使えるのではないだろうか。
いちいち俺設定ファイル用意したりする手間を省くのにも使えそう。
が、自分はC#はWindowsのアプリの仕事はメインではしていないので備忘録にとどめておく。
ATA/ATAPIの仕様書 [プログラミング]
BDや消えてしまったHD DVDはMMC6 それ以前の+RやーRはMMC5に書かれている。
正式名称は
Multi-Media Commands - 6 (MMC-6)
http://www.t10.org/ftp/t10/drafts/mmc6/
参考URL
https://ata.wiki.kernel.org/index.php/Main_Page
http://www.gentoo.gr.jp/transdocs/garziks-sata/devel.html
自分が持っているのはこれ かなり古い。自炊した。
検索かけたら2個も出てきた。何か中身が違うんだろうか。
ちなみにこの手の本は概要しかわからないので本当に細かいところは仕様書を見ないとダメ。
しかし仕様書は簡単に手に入らないというオチ。
正式名称は
Multi-Media Commands - 6 (MMC-6)
http://www.t10.org/ftp/t10/drafts/mmc6/
参考URL
https://ata.wiki.kernel.org/index.php/Main_Page
http://www.gentoo.gr.jp/transdocs/garziks-sata/devel.html
自分が持っているのはこれ かなり古い。自炊した。
Interface ( インターフェース ) 増刊 改定版ATA( IDE ) /ATAPIの徹底研究 2010年 03月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/01/25
- メディア: 雑誌
ATA(IDE)/ATAPIの徹底研究―組み込み機器でも重要になった外部記憶装置とのインターフェース規格 (TECH Iシリーズ)
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/08
- メディア: 単行本
検索かけたら2個も出てきた。何か中身が違うんだろうか。
ちなみにこの手の本は概要しかわからないので本当に細かいところは仕様書を見ないとダメ。
しかし仕様書は簡単に手に入らないというオチ。
[Mercurial] MQによるパッチ作成からコミットまでの流れ [プログラミング]
ちょー久々にプログラミングネタ
複数人で作業していたりするときに、コミットではなくパッチ管理をしているが、他の人のパッチが自分のパッチに混入してくるとえらい手間になる。
で、Mercurialにはパッチ管理としてMQというものがあって、昔は拡張機能だったが今は標準搭載でしかも使いかってが最高なのでまとめ。
hg qnew [-f] [patch name]
qnewで今の作業予定をいれる。ここで、もし先に作業をしてしまった場合は-fを付けて強制的に新しいパッチを作成できる。個人的には-fはいらんかなと思う。
hg qrefresh
変更をパッチに反映させる。
hg qseriesでパッチの存在を確認する。
hg logでパッチがコミットのように見える。
hg qpush [-a]
hg qpop [-a]
パッチを1個(-aで全部)適用する/解除する
hg pull後にコンフリクトが発生する場合、これで1つずつ確認しながらやれるので該当パッチだけ修正すればよい。
というか、pullする前にqpop -aはデフォ。忘れるとめんどくさい。
ここで修正パッチを修正すれば適用されるようになるらしいのだが、いまいちどうやっていいかわからない。今は.hg/patches/[patch name] のファイルを直接編集しちゃってる。正しいやりかた誰かおせーて。
hg pullして誰も変更していないようだったら(余計なブランチも発生しないので)ローカルにコミットする。
hg qrefresh -e
hg qpush/qpopでパッチを移動しながらqrefresh -eでコミットメッセージを編集する。ちょっと前はこれの存在を知らなかったのでメッセージが勝手に変えられていまいちと思っていたが、これのおかげで最高のツールになった。
hg qfinish [-a]
キューを(全部)コミットに変更する。パッチで一時的にコミット化しておいて、コミットしていいタイミングでコミットしてプッシュする。複数人で作業する上で非常に助かるMercurial。プログラム以外でもテキスト管理するうえで非常に便利なので万人におすすめしたい。
※注意点
Mercurialの古いバージョンではMQがリモートにプッシュされてしまうバグがあったが、今はパッチがあたった状態でプッシュしようとするとやめてくれる。拡張機能を使うときはバージョンは豆にチェック。
複数人で作業していたりするときに、コミットではなくパッチ管理をしているが、他の人のパッチが自分のパッチに混入してくるとえらい手間になる。
で、Mercurialにはパッチ管理としてMQというものがあって、昔は拡張機能だったが今は標準搭載でしかも使いかってが最高なのでまとめ。
hg qnew [-f] [patch name]
qnewで今の作業予定をいれる。ここで、もし先に作業をしてしまった場合は-fを付けて強制的に新しいパッチを作成できる。個人的には-fはいらんかなと思う。
hg qrefresh
変更をパッチに反映させる。
hg qseriesでパッチの存在を確認する。
hg logでパッチがコミットのように見える。
hg qpush [-a]
hg qpop [-a]
パッチを1個(-aで全部)適用する/解除する
hg pull後にコンフリクトが発生する場合、これで1つずつ確認しながらやれるので該当パッチだけ修正すればよい。
というか、pullする前にqpop -aはデフォ。忘れるとめんどくさい。
ここで修正パッチを修正すれば適用されるようになるらしいのだが、いまいちどうやっていいかわからない。今は.hg/patches/[patch name] のファイルを直接編集しちゃってる。正しいやりかた誰かおせーて。
hg pullして誰も変更していないようだったら(余計なブランチも発生しないので)ローカルにコミットする。
hg qrefresh -e
hg qpush/qpopでパッチを移動しながらqrefresh -eでコミットメッセージを編集する。ちょっと前はこれの存在を知らなかったのでメッセージが勝手に変えられていまいちと思っていたが、これのおかげで最高のツールになった。
hg qfinish [-a]
キューを(全部)コミットに変更する。パッチで一時的にコミット化しておいて、コミットしていいタイミングでコミットしてプッシュする。複数人で作業する上で非常に助かるMercurial。プログラム以外でもテキスト管理するうえで非常に便利なので万人におすすめしたい。
※注意点
Mercurialの古いバージョンではMQがリモートにプッシュされてしまうバグがあったが、今はパッチがあたった状態でプッシュしようとするとやめてくれる。拡張機能を使うときはバージョンは豆にチェック。
機械学習 [プログラミング]
どうもこの本の読書会があったようなので、上巻だけ買ってみた。
6000円以上もする割りに薄いとおもったが、最初の端書からしてかなり濃い。
統計学的な一般論から10年ぐらい前に流行った(?)ニューラルネットワークまで、一通りの解説がなされている。買ってよかったと思ったが、自分が学生のときにほしかった。発売年度を見たら割と最近なので、まあしょうがないかなーという感じ。
自分の場合直感的に割りとうまくいくパターンを理解してしまっていたために、あまり基礎的なことをまともに勉強していなかった気がするので、基礎を固めたいと思う。
フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで
- 作者: 荒木 雅弘
- 出版社/メーカー: 森北出版
- 発売日: 2007/10/17
- メディア: 単行本(ソフトカバー)
で、つらつらみてたらこんなのまで発見した。
さらに情報処理試験の募集も開始。
エンベデッドシステムなるものがあるのでそれを受けてみようと思うのだが、本も読みたい、試験勉強もある、プラモも完成させたい とやることが多すぎる。
どう考えても最後のやつは後回しだろという気もするのだが、時間をうまく使ってどうにかしたい。
結果は3ヵ月後。
糞ゲーはだいたいこういう流れでプロジェクトが進む。 とも限らない。 [プログラミング]
糞ゲーはだいたいこういう流れでプロジェクトが進む。 とも限らない。
http://dochikushow.blog3.fc2.com/blog-entry-1180.html
いやいや。世の中そんなに甘くない。
そんなに悪条件が重ならなくても、クソゲーは簡単に出来上がる。
「世界はクソゲー力(ちから)に満ち溢れていて、
普通にゲームを作れば必ずクソゲーになる」
至言
誰かが自分の発想やクオリティを投入しないといい方向へは行かない。
誰もやらない?じゃあ俺がやる、という発想なら一人前。
何やっていいかわからないのは半人前。
で、仕様書決めてその通り作りましょうというのは、悪いプロジェクトの見本だと思う。
だから、アジャイルなんて話も出てくる。
アジャイルはやってることはたいしたことないが、名前付けて、レッテル張りすることで、
何も知らない経営陣や上司を説得できることが重要なんだと思う。
http://dochikushow.blog3.fc2.com/blog-entry-1180.html
いやいや。世の中そんなに甘くない。
そんなに悪条件が重ならなくても、クソゲーは簡単に出来上がる。
「世界はクソゲー力(ちから)に満ち溢れていて、
普通にゲームを作れば必ずクソゲーになる」
至言
誰かが自分の発想やクオリティを投入しないといい方向へは行かない。
誰もやらない?じゃあ俺がやる、という発想なら一人前。
何やっていいかわからないのは半人前。
で、仕様書決めてその通り作りましょうというのは、悪いプロジェクトの見本だと思う。
だから、アジャイルなんて話も出てくる。
アジャイルはやってることはたいしたことないが、名前付けて、レッテル張りすることで、
何も知らない経営陣や上司を説得できることが重要なんだと思う。
python いろいろ [プログラミング]
最近Pythonが気に入っている。
といってもたいしたことはしていないが、いくつかはまった点でTips
C、C++がわかっている自分から見てはまった点をいくつか
■import
オブジェクトを使うときはまずはimport
datetime.Datetimeを使いたいときは、先頭のdatetimeをインポート
import datetime
しかし毎回datetime.Datetimeと打つのは面倒な場合は
import Datetime from datetime
とすることで、Datetimeはdatetimeから使われるものとされる。便利。
■文字コード
一般的にutf-8で処理しとけというページが多いが、Windowsで日本語処理をしようとするとutf-8でもちゃんと動いてくれないし、utf-8なエディタを普段から使っていないといけない。気が向いたときにちょっと編集して動かすというスクリプト的なことをやるためにも、これは現時点では微妙だった。
いろいろ試してみると、以下のようにすることで落ち着いた
ファイルの先頭にmbcsとする(cp935とかはだめだった)
# -*- coding: mbcs -*-
正規表現(re.search)などいくつかのオブジェクトでユニコードが必要な場合は
unicode(ig,"mbcs")
などとして変換する
■文字列の扱いとprint
Cと同じ””で囲んだ場合、エスケープ処理されるが、''とシングルクォーテーションで囲った場合には処理されないので、意識して使い分けている。
また、printfのようには%記号を使って以下のようにする
>>> print "%02.2f " % 1 + "%08d" % 2
1.00 00000002
Cのprintfのようにまとめてかけたほうが見た目はいいなぁ
str.formatというのもあるらしいがリファレンスのどこを見てもわからん・・・
再び検索したらこんなのがでてきた
http://newworld.ddo.jp/doc/python-iaq-ja/index.html
def printf(format, *args):
"""最初の引数をフォーマット文字列として引数を整形、出力する。
formatが文字列でない場合は、strによって変換される。
You must use printf('%s', x) instead of printf(x) if x might
xが%やバックスラッシュを含む時はprint(x)の代わりに
print('%s',x)を使う必要がある。"""
print str(format) % args,
■浮動小数点
演算が結構てきとうらしいので、変な結果なときはdecimal.Decimalを使うといいらしい。また出力は初期設定された数字に依存するらしいので、有効数字二桁で処理したい場合は
decimal.Decimal("0.00")
とすると変な誤差が出ない。
■ハッシュ計算
多くのページでは
f = open(filename,"rb") < Cと同じでバイナリで読み込む
b = f.read()
f.close()
hashlib.sha1(b).hexdigest()
のようなことをしているが、ファイルが2Gとかあるとメモリが足りないよエラーがでてしまう。
でかいファイルで動かすためには以下のようにする
h = hashlib.sha1()
while True:
d = f.read(64*1024) #64KB
if( d ):
h.update(d)
else:
break
f.close()
h.hexdigit()で出力が得られる。
■ファイル操作
理由は良くわからんが、moveコマンドを使うとなぜかコピー操作を開始してしまう。moveの動作を期待したい場合はos.renameコマンドを使う
といってもたいしたことはしていないが、いくつかはまった点でTips
C、C++がわかっている自分から見てはまった点をいくつか
■import
オブジェクトを使うときはまずはimport
datetime.Datetimeを使いたいときは、先頭のdatetimeをインポート
import datetime
しかし毎回datetime.Datetimeと打つのは面倒な場合は
import Datetime from datetime
とすることで、Datetimeはdatetimeから使われるものとされる。便利。
■文字コード
一般的にutf-8で処理しとけというページが多いが、Windowsで日本語処理をしようとするとutf-8でもちゃんと動いてくれないし、utf-8なエディタを普段から使っていないといけない。気が向いたときにちょっと編集して動かすというスクリプト的なことをやるためにも、これは現時点では微妙だった。
いろいろ試してみると、以下のようにすることで落ち着いた
ファイルの先頭にmbcsとする(cp935とかはだめだった)
# -*- coding: mbcs -*-
正規表現(re.search)などいくつかのオブジェクトでユニコードが必要な場合は
unicode(ig,"mbcs")
などとして変換する
■文字列の扱いとprint
Cと同じ””で囲んだ場合、エスケープ処理されるが、''とシングルクォーテーションで囲った場合には処理されないので、意識して使い分けている。
また、printfのようには%記号を使って以下のようにする
>>> print "%02.2f " % 1 + "%08d" % 2
1.00 00000002
Cのprintfのようにまとめてかけたほうが見た目はいいなぁ
str.formatというのもあるらしいがリファレンスのどこを見てもわからん・・・
再び検索したらこんなのがでてきた
http://newworld.ddo.jp/doc/python-iaq-ja/index.html
def printf(format, *args):
"""最初の引数をフォーマット文字列として引数を整形、出力する。
formatが文字列でない場合は、strによって変換される。
You must use printf('%s', x) instead of printf(x) if x might
xが%やバックスラッシュを含む時はprint(x)の代わりに
print('%s',x)を使う必要がある。"""
print str(format) % args,
■浮動小数点
演算が結構てきとうらしいので、変な結果なときはdecimal.Decimalを使うといいらしい。また出力は初期設定された数字に依存するらしいので、有効数字二桁で処理したい場合は
decimal.Decimal("0.00")
とすると変な誤差が出ない。
■ハッシュ計算
多くのページでは
f = open(filename,"rb") < Cと同じでバイナリで読み込む
b = f.read()
f.close()
hashlib.sha1(b).hexdigest()
のようなことをしているが、ファイルが2Gとかあるとメモリが足りないよエラーがでてしまう。
でかいファイルで動かすためには以下のようにする
h = hashlib.sha1()
while True:
d = f.read(64*1024) #64KB
if( d ):
h.update(d)
else:
break
f.close()
h.hexdigit()で出力が得られる。
■ファイル操作
理由は良くわからんが、moveコマンドを使うとなぜかコピー操作を開始してしまう。moveの動作を期待したい場合はos.renameコマンドを使う