2008-08-01から1ヶ月間の記事一覧

Xmlの操作 書き込み編

require 'rexml/document' doc = REXML::Document.new() doc << REXML::XMLDecl.new('1.0', 'UTF-8') root = doc.add_element("社員名簿") node = root.add_element("課", {"課名称" => "営業"}) name_node = REXML::Element.new("名前") name_node.attribut…

Xmlの操作 読み込み編

item.xml:これを下記コードで読み込みする。 <inventory title="OmniCorp Store #45x10^3"> <section name="health"> <item upc="123456789" stock="12"> <name>Invisibility Cream</name> <price>14.50</price> <description>Makes you invisible</description> </item> </section></inventory>

DataGridViewのVirtualModeサンプル

C#

using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace DataGridViewVirtualModeSample { public…

関係のあるデータを複数箇所で管理する場合

上記のようなことになった場合、まずはデータを 1,ベースとなるデータ 2,ベースを加工して使用するデータ(利用側) に分けて考える。その上で、 利用側データに対応するベースデータへの参照を持たせる(リンクを張る) ベースとなるデータは並び変えや削除…

ManualResetEvent

スレッド間のやりとりを実現する。 下記の例では、スレッドBはスレッドAの処理が終わるまで待機する。 MSDNにManualResetEventの配列を使ったサンプルがある。また、WaiteOne()後のリセットを自動で行ってくれる。AutoResetEventクラスも存在する。 考え方・…

readonlyとconstの違い

C#

readonlyは宣言時とコンストラクタ内のどちらかで初期化ができる。 constは宣言時のみ初期化ができる。 readonlyはインスタンス毎に別の定数を作ることができる。

volatile(ボラタイル)

private volatile int count_val = 0; 複数のスレッドから参照される可能性のあるメンバにつける。 これをつけると、コンパイラの最適化の対象にならない。メンバのRead/Writeを行う際に 必ずメンバ変数の実体にアクセスするようになる。 コンパイラの最適化…

スレッドのロック

ロックオブジェクトには同期をとるスレッドから参照した時に一意となるオブジェクトを指定する。 値型を指定した場合にはボックス化が行われて、各スレッドが別オブジェクトを参照することになる。 その為、ロックは行われない。thisオブジェクトを指定した…

スレッドの終了確認

Thread.Join()を使用する。 呼び出しもとスレッドを対象スレッドが終了するまでブロックする。 GUIプログラムでこれを呼び出すと、固まってしまうので注意すること。 そこで下記の用にして対応した。 while(thread.IsAlived()) { Application.DoEvents; }

スレッドの優先順位

ThreadクラスのPriorityプロパティにて設定。 startメソッド前に設定すること。 実際にサンプルを動かしてみたが 優先順位を上げたからといって、そんなに変わるものでは無かった。

WorkerThreadから情報を送信する

デリゲート、イベントを使用してスレッド処理中の状態の変化を送信する。 class Worker { public delegate void ThreadProcessUnitCompleteEventHandler(int state); public event ThreadProcessUnitCompleteEventHandler eventHandler; private bool finish…

デリゲートとイベント

C#

★違い eventをつけて宣言すると、外部ではイベントの追加削除のみだけ アクセスできるようになる。 ★命名規則 種類 命名例 event ○○○EventHandler delegate ○○○CallBack public partial class Form1 : Form { public delegate void processEndCallBack(int s…

理論的に考える

例) 欠陥数を取得したい。 //欠陥情報 class DetectInfo { public int 欠陥No public int 欠陥名称 public Color 分類色 } class Working() { DetectInfo[] d_infos; public void Working() { d_infos = 欠陥情報取得(); //発生欠陥をカウントアップクラスの…

データの生成、受け渡しタイミング

必要な時に必要な物だけを生成・受け渡しする。 これは強くすること!!! -> 無駄なデータの保持やたらい回しが無くなる。

データの管理者とデータの表示者の関連

データに表示先の参照を持たせておく。

クラス作成その前に

「○○な処理をするのには、□□と△△が必要になる。 現状ではクラスAは●●を持っていて、クラスBは▲▲を持っている。」現状とやりたい処理・それに必要なデータから、どういった流れでコーディングを行うか決める。 そこでクラスが必要ならば作成すれば良いし、別…

ファイル・フォルダ操作

#ファイルが存在しなかったり、権限が無い場合は例外が発生する。 File#rename("変更前", "変更後") #ファイル名変更 #FileUtilsライブラリ #ファイルコピー、ファイル移動、ファイル削除はこのモジュールを読み込んで行う。 require "fileutils" FileUtils.…

IOクラス

#モード "r" 読み込み専用。デフォルト値 "r+" 読み込み/書き込み用 "w" 書き込み用。ファイルが存在しない場合は作成する。既存ファイルを指定した場合は上書きする。 "w+" 読み込み/書き込み用 "a" 追加書き込み。ファイルが存在しない場合は作成する。 "a…

独自ハッシュとデータ型判定サンプル

#独自ハッシュとデータ型判定サンプル class MyHash def initialize @inner_hash = Hash.new() end def []=(key,value) if key.is_a?(Integer) == true #データ型判定 @inner_hash[key] = value end end def [](key) return @inner_hash[key] end end obj = …

文字列操作

#ダブルコーテーションで括った文字列 ・特殊文字を表すことができる。 ・式展開を行うことができる。 str = '太郎' msg = "こんにちは、#{str}" #こんにちは、太郎 #文字列の長さを得る str = "こんにちは、Tarou" p str.size #17 p str.split(//s).size #1…

配列操作

配列だけでなく、HashやStringにも一部同様の操作がある。 Array#unshift(val): 先頭にvalを追加する。 Array#shift(): 先頭の値を取り出す。破壊的メソッド Array#first(): 先頭の値を参照する。 Array#push(val): 語尾にvalを追加する。 Array#pop(): 語尾…

モジュール

module HelloWorld Version = "1.0.0" #定数定義 def hello(name) return 'hello,' + name end module_function :hello #モジュール関数として外部に公開する end puts HelloWorld.hello('高砂')

ダック・タイピング

ダック・タイピング: 「アヒルのように歩きアヒルのように鳴くものはアヒルに違いない」という格言からきた言葉。 →インターフェースが同じなら、表すものが異なっていても同じものとして考える。

2008年度夏旅行まとめ

2008年度夏旅行まとめ 一日目:京都(清水寺、三十三間堂)、奈良(夜の灯籠) 二日目:奈良(若草山、奈良公演、ホテルで休憩、夜の灯籠) 三日目:奈良(鹿シャツ購入、奈良町)、京都駅(お土産)・宿泊に当たって自分の歯ブラシ、洗顔、ドライヤー、部屋…

Proxyパターン

Proxy パターン - Wikipedia インスタンスの遅延生成 必要になってから生成を始めたり、Proxyクラスの生成したら作り始めたり。 Proxyクラスと遅延生成クラスの操作は別に共通でなくてもいいと思う。 //何かのデバイス操作Interface public interface IDevic…

Flyweightパターン

Flyweight パターン - Wikipedia重いクラスインスタンスは共有しましょうという考え。 共有すると、一カ所の変更がすべてに影響を及ぼすので注意が必要。 public class FlyweightFactory { private Hashtable make_objs = new Hashtable(); public Flyweight…

例外処理

#例外サンプル # 実行時引数にとったファイル名から、行数・単語数・文字数 を出力するプログラム ltotal = 0 #行数 wtotal = 0 #単語数 ctotal = 0 #文字数 begin if ARGV.size > 3 raise 'ファイル数が多すぎます。' #例外の発生 end ARGV.each{|file| inp…

クラス定義

#class sample class MessageMaker #アクセサ定義 # attr_reader :変数名 読み取り用 # attr_writer :変数名 書き込み用 # attr_accessor :変数名 読み書き両方 attr_reader :name, :jikoku #コンストラクタ def initialize(name, jikoku) @name = name #イ…

メソッド

def getAisatuMessage(namae, now_hour) if now_hour <= 3 return "深夜です、", namae, "さん" elsif now_hour <= 6 return "早朝です、", namae, "さん" elsif now_hour <= 12 return "午前中です、", namae, "さん" elsif now_hour <= 18 return "午後で…

制御構文

#if sample if x < 10 && x > 5 puts "xは10より小さく、5より大きい" elsif x % 2 == 0 puts "xは偶数" else puts "xはその他の数" end #each sample #eachメソッドにブロック({〜}部分)を渡して、その中に繰り返したい内容を記述する。 names = ["太郎", "…