スマートフォン勉強会@関西

スマートフォンっていう携帯電話のすごい版みたいなのがありますが,
西九条でその活用方法などについての勉強会が開かれます。
http://smartphone.techtalk.jp/
5/16(Sat)開催ですので,お時間のある方はぜひお越し下さいませ。
僕もまだよくわかっていないので,一緒に勉強しましょう。

.NETの印刷機能

正直言って意味不明でした。特に複数ページの印刷。
いろいろ情報を探してみても,どこも同じこと言っているのね。
「常にページ番号を把握しないといけません」

というのも,
「印刷メソッドのなかでHasMorePagesをtrueにすればもう一度メソッドが呼び出される」
という仕様だから。

僕はC#なんて超初心者だし,そもそもプログラミング自体がご無沙汰だったから,
頭ではわかってても実装するのが無理そうだった。
っていうか普通に考えれば,ページごとにオブジェクトを用意して,そこに書き込んでくのが自然。
たとえば,ページを追加するのに printDocument1.AddPage(); するとか。あるいは new するとか。
でも,残念ながらそういう仕様にはなってないんだよね。
だからページ番号で印刷内容を分岐しないといけないみたい。

で,いろいろいじってて思いついた。
せっかくオブジェクト指向で余計なことを考えなくて良いようになってる(はず)なのに,これじゃかえって考えることが増える。

じゃあどうすればいいかというと,印刷内容をリストに放り込んでしまう
何でも入るArrayListとかを使えば,事実上ページのすべてのデータをArrayListの要素にできてしまう。
んで,印刷メソッド(イベントハンドラ扱いしていいのかな?)で,ArrayListからとってくればいい。
キューっていうのかスタックっていうのかは知らんが,要はデータを取り出したらそれを消せばいい。
ArrayListの要素がなくなればHasMorePagesをfalseにする。

たとえばこんな感じ。

        private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //ArrayList printListDataはフィールド
            string[] targetdata = (string[])printListData[0];
            printListData.RemoveAt(0);
            if (printListData.Count == 0)
            {
                e.HasMorePages = false;
            }
            else
            {
                e.HasMorePages = true;
            }
            
            Graphics g = e.Graphics;
            
            //この辺でtargetdataからデータを取り出して描画

        }

今はとりあえずstring[]にしてるけど,これを好きなもの,たとえばList<>なりclassなり適当にすればおk。
こうすれば印刷データ(printListData)のことだけを考えれば良くなる。
printListDataのルールさえ決めてしまえば印刷メソッドは放置。気持ち良い。

というのが今回C#を触った収穫。

ネオキューブ

http://www.neocube.jp/

なんか楽しそうやなー

とは言えまだ日本では売ってないので海外の本家サイト(http://theneocube.com/)で注文することになるんだけど、そうすると届くまで1ヶ月くらいかかる。
ちなみに35ドル。

でも「要するに普通のネオジム磁石玉やん」ってことで、磁石屋さんでネオジム磁石買ってきました。
本物は5mm球×216個なんだけど、小さいと難しいかなって思って1mm大きめの6mm球300個にしました。
あと、普通のと金メッキのと値段が同じだったので、どうせなら金で。


んで1時間くらいかけて作ったのが↓




2つあわせてちょうど300個です。

なんか簡単そうに見えるんだけど、やってみると意外に難しい。
ちょっと失敗すると、磁石だから適当にくっついて塊になってやり直しだし。

ちなみに本家が何で216個かというと、
6×6×6の立方体が元になってるから。
立方体も作ってみました。


院試でつかいます

うちの研究科は院試の英語はなく,TOEICTOEFLを受けないといけません。
と言うことでそろそろTOEICを受けようかと。
前回受けたときは680しかなかったので,まじめに勉強して800くらいとらないと。