PILのthumbnailで小一時間悩んだ。以下のソース
size = *** img.open(hoge) img.thumbnail((size, size)) img.save(fuga)
これでなぜかサムネイルがfugaに保存されるはずが、そのまま変換前の画像が保存される。
エラーも何も出ず。
いろいろ探っていたらsizeが文字列型なのが問題だった。エラーぐらい出てほしかった・・・。
PILのthumbnailで小一時間悩んだ。以下のソース
size = *** img.open(hoge) img.thumbnail((size, size)) img.save(fuga)
これでなぜかサムネイルがfugaに保存されるはずが、そのまま変換前の画像が保存される。
エラーも何も出ず。
いろいろ探っていたらsizeが文字列型なのが問題だった。エラーぐらい出てほしかった・・・。
まとまった文章とか資料とか図表を書くとき向け。当たり前だけど気をつけるべきところなど。思いついたところから。ざっくばらんにですが。。。
入門の入門部分だけざざっと。
// ここはコメント /* ここもコメント */
function 関数名( パラメータ ){ // 関数の内容; // ・・・ }
※パラメータ は省略可
// フツーの関数を呼ぶ 間数名( パラメータ ); // 返り値を変数に入れとく場合 変数 = 間数名( パラメータ ); // オブジェクトの関数 (メソッド) を呼ぶ オブジェクト.メソッド名( パラメータ ); // 具体例 Math.max: 与えたパラメータのうち大きなほうを返すメソッド var a = Math.max(5, 10); // aには 10 が代入される
※パラメータ は省略可
a = 5; // aに5を代入する a += 1; // aに1を足す b = a * 6; // bにaの五倍 (36になる) を代入する s = '文字列'; // sに「文字列」と代入された m = 'bの値は' + b + 'です'; // 連結: mに"bの値は36です" と代入される n = "シングルクォートとダブルクォートはどっちでもいい";
※「条件式」の書き方は次節
if( 条件式A ){ // 処理内容; ←ここは「条件式A」が真のとき実行される } else if( 条件式B ){ // 処理内容; ←ここは「条件式A」が偽だけど「条件式B」が真のとき実行される } else if( 条件式C ){ // 処理内容; ←ここは「条件式A,B」が偽だけど「条件式C」が真のとき実行される } else{ // 処理内容; ←ここは「条件式A,B,C」の全てが偽のとき実行される }
※ 「else if(){ ~ }」や「else{ ~ }」 は省略できます。
// 定型文 for(var 変数 = 初期値; 変数 < 終了値; 変数++){ // 繰り返し行う処理内容 } // 0~9まで「今の数字は○○です」と表示 (alert) させたい場合 for(var i = 0; i < 10; i++){ alert('今の数字は' + i + 'です'); } // ※ 「i < 9」ではなく「i < 10」なのに注意
※ 真=正しい、偽=ただしくない、みたいな感じ
// 基本形 (a == 50) // aが50の場合に真 (a == "hoge") // aが"hoge"の場合に真 (a == b) // aの内容とbの内容が等しい場合に真 (a != b) // aの内容とbの内容が違う場合に真 (a > 5) // aが5より大きい場合に真 (a < 5) // aが5より小さい場合に真 if(a >= 5) // aが5「以上」の場合に真 (a <= 5) // aが5「以下」の場合に真 // 複合条件 ( ! 条件式 ) // 「条件式」が偽の場合に真 (! (a == 4) ) // !の例: (a != 4) と同じ意味 ( 条件式A && 条件式B ) // 「AかつB」: 条件式AとB両方共真の場合に真 ( 条件式A || 条件式B ) // 「AまたはB」: 条件式AかB片方でも真の場合に真 ( (a == 4) || (a == 5) ) // aが4か5の場合に真 ( (1 <= a) && (a <= 10) ) // aが1~10の場合に真 ( 1 <= a && a <= 10 ) // 括弧は省略できる
alert('表示させたいメッセージ');
// 指定「ミリ秒」後に「関数」を呼び出す setTimeout(関数, ミリ秒); // 指定「ミリ秒」後にやりたい処理をベタ書きする setTimeout(function(){ // やりたい処理; // ・・・ }, ミリ秒);
$(function(){ // 初期化時にやりたいこと; // ・・・ });
$('セレクタ').css('CSS項目名', '変える値');
$('セレクタ').attr('CSS項目名', '変える値');
入門の入門でした。
以上。
Gentoo Linuxのネットブート関連のメモ。squashfs+aufsでブートするまで。
いろいろなwebサイト (Gentoo Linux ドキュメント – Gentooを用いたディスクレスノード, Gentoo Wiki Archives – HOWTO_Gentoo_Diskless_Install, etc.) を参考に、GentooのPXEブートにトライしていたが、どうもうまく行かず。
手始めにGentoo LiveのCDからgentoo.igz, gentoo (カーネル), image.squashfs をコピーして、そいつらを使って
APPEND initrd=gentoo-live/gentoo.igz ip=dhcp loop=gentoo-live/image.squashfs looptype=squashfs root=/dev/ram0 real_root=/dev/nfs nfsroot=172.29.4.10:/server/tftp udev nodevfs dodmraid cdroot
的な感じにしてトライ。
が、ブートできない。nfsマウントまで行かなかった。順次追っていく。
まずネットワークにつながっていないようだった。なのでまず現在動いている3.8.4のkernelとinitramfsをコピーして、LiveCDのgentoo, gentoo.igzと置き換えてみた。ネットワークドライバ (e1000e と r8169も一応) もちゃんとinitramfsに入れて。
→しかし起動せず。
仕方ないのでinitramfsのinitスクリプト色々見つつ、パラメータを追っていくとどうやらip=パラメータを指定しているとネットワークの設定 (udhcpc) が走らないようだったので、 APPENDパラメータの ip=dhcp を消した。
→とりあえずDHCPとnfsマウントまでできた。
あとはsquashfs+aufsで起動するようにする。aufsのパッチがデフォルトではカーネルに入って無いのでemerge aufs3する。後はカーネル起動時のパラメータにaufsを追加してOK。最終的にpxelinux.cfg/default の指定は下みたいな感じになった。
KERNEL boot/kernel-genkernel-x86_64-3.8.4-gentoo INITRD boot/initramfs-genkernel-x86_64-3.8.4-gentoo APPEND loop=images/gentoo-20130405.squashfs looptype=squashfs root=/dev/ram0 real_root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/server/tftp udev nodevfs dodmraid cdroot aufs
ip=dhcpがいらないということに気づくまではしばらくつまづいて時間を食った。
まぁともかく、これで晴れて自在なイメージファイルでGentooをネットブートできるようになりました。めでたしめでたし。