森理 麟(moririring)のプログラマブログ

ゲームプログラマ森理 麟がのプログラムの話題を中心に書くブログです。

C#

C#でログファイルを出力する少し冴えたやり方

この内容は、C# Advent Calender 2012への参加記事です。森理はAdvent Calender初参加です。毎日他の人の記事を読んでいますが、ishisakaさんのを読み始めた時は「被ったか?」と思って焦りました。読み進めていったら大丈夫だったのでホッとしました。来年…

VisualC#2010ExpressにおけるNUnitの基本的な設定の仕方

森理はTDDBC大阪に参加して以来C#でテストにはまっています。TDDBC岡山には無謀にもTAで参加しました。フレームワークはNUnitを使用しています。MSTestを使わない理由は、単純にVisualStudio(以下VS)がExpressなので入っていないからです。 C#+NUnitでの基本…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その17 エラー処理に注意せよ

バイナリファイルにご用心 前回全てのファイルを読み込めるようにしました。これによりtxtではないファイルを読み込んでしまう可能性が出ました。つまり、バイナリファイルをロードする危険性です。StreamReaderでバイナリファイルを処理するとエラーになっ…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その16 ファイル選択ダイアログのこだわり

プログラムを書かなくてもコーディング 実は森理も前回書いた内容で徹底してドラッグを実装しているわけではありません。ユーザーとしてフォームへドラッグする方が分かりやすいかなとはずっと思っていました。ブログで問題点を纏めている時に思いつきました…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その15 ドロップする対象について

テキストボックスにドラッグが分かりやすい さて、問題も解決してドラッグ&ドロップは実装出来ました。使いやすいUIにするのに、もう1つ気を使うポイントがあります。それはドロップするコントロールをどれにするかです。今回はテキストボックスに情報を入…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その14 ドラッグ&ドロップ実装続き

サンプル通り!しかしフォルダをドラッグしてみると 前回MSのサンプルに乗っているドラッグ&ドロップの方法を書きました。しかし、この方法でも今回のケースは最適ではありません。この実装では、フォルダがドラッグされた時にドロップ可能なアイコンに変わ…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その13 ドラッグ&ドロップ実装

ドロップチェック 次にDragDropイベントを作ります。これはドロップ時に呼ばれるイベントです。先ずドロップされたものがファイルかどうかチェックします。チェックはe.Data.GetDataPresent(DataFormats.FileDrop)で出来ます。但し、このチェックでは厳密に…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その12 テキストボックスへのこだわり2

テキスト変更時の処理 それでは1行テキストボックスのメソッドの説明です。ポイントとしてはテキスト変更時にロード処理を書くだけです。ただし、書かれたファイルが存在するかでガードが必要です。もしガードがないと、テキストにファイルパス以外のものが…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その11 完成してもさらなるこだわりを

more effective! 前回までで、簡単なアプリを作って、それを見直してきました。一通り見直しも完了して、一旦アプリは完成しました。しかし、こだわりをもって見なおすポイントはまだまだあります。今回から新たなこわだりで、さらにアプリを見なおしていこ…

C#アプリの作り方入門〜「きほん」の「ほ」〜 わんくま同盟 大阪勉強会 #47のスライド公開

スライド C#アプリの作り方入門 View more presentations from 森理 麟

C#アプリの作り方入門〜「きほん」の「ほ」〜 その10 ココまでのおさらい

それでは、ここまでのおさらいをして完成品を比べてみましょう。 今回までの変更内容 コントロールへのこだわり 内容 ボタン 三点リーダー 一行テキストボックス ReadOnly=false ファイル選択ダイアログ DefalutExt=txt,Filter=txtファイルl*.txt 文字コード…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その9 レイアウトの基準に補助線を使う

Visual Studioの機能でレイアウト それではVisual Studioの機能を使って、綺麗なレイアウトにしてみましょう。森理がコントロールを配置する時によく採用するのが補助線がONになる場所です。これはまさにレイアウトを意識するまでは気づきもしなかった機能で…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その8 デザインセンスはプログラム的アプローチでカバーする

レイアウトが苦手ならルールを作れ さて、前回レイアウトが重要と言いました。しかし、プログラマはそこまでレイアウトが得意では無いと思います。デザインセンスに自信がないのであれば、ルールを作るのが無難な方法だと思います。ルールがあれば、統一感が…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その7 ジョブズがいなければ気づけなかったこと

盛り付けが綺麗なら食べてもらえる 美味しい料理を作る時に、調理以外で絶対に外せないポイントがあります。実際にどれほど美味しく出来た料理であっても盛り付けが駄目なら価値は半減です。逆に味はイマイチでも、盛りつけが綺麗であればとりあえず食べても…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その6 一通りのチェック完了。でも、まだ。

料理の時は皿までチェック 問題編に用意した材料はこれで全てです。後は盛り付けられたお皿もチェックしましょう。C#アプリに於けるお皿、それはフォームです。現状でフォームはサイズが変更出来てしまい変えられるとデザインが崩れます。 フォームのサイズ…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その5 複数行テキストボックスのこだわり

世の中にゃshift_jisの方が多い 選択したファイルはStreamReaderでロードしますが、ファイル名だけを渡すと文字コードはUTF-8です。しかし、通常のテキストファイルはshift_jisの方が多いです。殆どのテキストエディタでのデフォルトのセーブがshift_jisだか…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その4 ファイルを読み込む時のこだわり

テキストボックスへのこだわり 引き続き、コントロールへのこだわりを書きます。次のこだわりはテキストボックスです。テキストボックスもこだわりを込めるポイントが多いコントールだと思います。一行テキストボックスと複数行テキストボックスではポイント…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その3 ボタンへのこだわり点3つ

←押さずにはいられない こだわらない状態達へ 前回ファイルを選択して中身がテキストなら表示をするアプリを作りました。しかし、これはただ作っただけの状態です。なんのこだわりもありませんし、そもそもアプリとしては未完成と呼べる状態です。それでは1…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その2 シンプルアプリを作る

シンプルアプリを作る それでは最初にファイルを選択して中身がテキストなら表示をするアプリを作ってみましょう。何も考えずにただ作るだけなら5分もかからず作れてしまうと思います。しかし、たったこれだけのアプリでも実は多くのこだわりがあります。先…

C#アプリの作り方入門〜「きほん」の「ほ」〜 その1 神は細部に宿る

←C# 入門書の次に読むべき本 プログラマが入門書の次に読むべきだと思っている本はEffectiveシリーズです。森理は、C++,STL,C#を読みましたが、Effectiveシリーズに外れなしだと断言出来ます。入門書で言語仕様などを把握したら、次はその仕様の実践での使い…

久しぶりにTwitter用クライアントソフト「クッキーツイート」をバージョンアップしました。

久しぶりにTwitter用クライアントソフト「クッキーツイート」をバージョンアップしました。かなりのバグを直して、「mention、リツイート、お気に入り」などを取得可能にして、リツイート、お気に入り、返信機能もつけました。クッキーツイートのHPからダウ…

今年は関西でWindowsハッカソンを開催したい

今年は勉強会を自分で開催してみたい! 森理は2011年は、勉強会に12回出席して、話す方もLT(ライトニングトーク)を1回、50分のスピーチを1回やらせて頂きました。今年は、自ら勉強会の企画・開催をしたいと思っています。まだ、やろうと思っただけで、会場ど…

クッキーツイートの高速化 その21 わんくまスピーチのスライド #CookieToEat

わんくまでスピーチしました。スライドの内容は実際に話した時とは少し変えています。変えた理由は、話す前提じゃないと意味が分からない内容だったからです。これは、でも、スピーチの時点から資料だけで意味が分かるように作るべきだったと思います。今回…

クッキーツイートの高速化 その20 高速化は終わらない(終) #CookieToEat

←ここに行きたいさて、とりあえず今回でクッキツイートの高速化は最後です。またネタが溜まったら21回目もあるかも?元々わんくま同盟で高速化について話そうと思ったので、そのネタとして書き始めました。最初、そのスピーチはマルチスレッドとマルチコアに…

クッキーツイートの高速化 その19 ユーザーが望む高速化 #CookieToEat

←ユーザーサポートさて、高速化について色々書いてきました。しかし遅いかどうかを判断するのはプログラマではありません。ユーザーが高速化を望むのは何時でしょうか?この高速化は、速くする方ではなく遅くしない方です。 自作ツールについて他人と話して…

クッキーツイートの高速化 その18 先に入れる #CookieToEat

←個人的には後乗せサクサク派もう一つポイントとなるのはcontinueとbreakです。マルチコアの時この2つはどうなるでしょうか。実はマルチコア専用のStopメソッドとBreakメソッドがあります。しかし、森理がさわったところこれらは使わない方が良いと思いまし…

クッキーツイートの高速化 その17 インデクストラブル #CookieToEat

←気をつけろ!数字の順には進まない前回マルチコア化はループの置き換え1行と言いました。しかし、BackgroundWorkerで考えるとReportProgressの数は正しく渡りません。これはマルチコアでのループのまわり方が順番に増えていくのでは無いからです。例えばルー…

クッキーツイートの高速化 その16 一行書き換え、驚くべき速さ #CookieToEat

←驚きの白さに驚いたことない それではマルチコアの説明です。マルチコアプログラミングを組みたいのであればVisual C# 2010を使うことをお勧めします。2010であればExpress Edtionで問題ありません。2008以下でもそれほど難しいわけではないですが、2010の…

クッキーツイートの高速化 その15 マルチスレッドまとめ #CookieToEat

←一マル・チル・スレッド・みんな使うよこれでBackgroundWorkerによるマルチスレッドの使い方は説明しました。かなり簡単にマルチスレッドが実装出来たと思います。ただ簡単に実装出来ても、マルチスレッドはやはり難しい概念です。これを機にマルチスレッド…

クッキーツイートの高速化 その14 BackgroundWorkerの全盛りソース #CookieToEat

←全盛りは一般人の限界は超えてない?ではStatusStripを使ってToolStripProgressBarをつけたBackgroundWorkerのソースを書きます。ToolStripProgressBarは普段表示させないほうが自然です。使う直前に表示させましょう。初期化処理でToolStripProgressBarを…

クッキーツイートの高速化 その13 進行状況の2種類の表示 #CookieToEat

←お、おしゃれ?進行状況の表示で、森理がよく使う2つの方法があります。1つは、別フォームに処理中と描く方法。もう1つは、同じフォームにStatusStripをつけて、ToolStripProgressBarを描く方法です。それぞれ別の用途があります。 別フォームを使う場合…

クッキーツイートの高速化 その12 BackgroundWorkerの進行状況の渡し方 #CookieToEat

←渡すタイミングは、間違えると惨事になりますBackgroundWorkerのDoWorkイベントについて注意点です。DoWorkイベントは別スレッドで実行されます。別スレッドの場合、それ以外のところで作成したオブジェクトには、アクセスすることができません。もっと簡単…

クッキーツイートの高速化 その11 進行状況の表示とキャンセル #CookieToEat

←進行状況の表示とキャンセル前回話をシンプルにするために3つの関数にしました。実際これで十分なこともあります。しかし、3つの関数実装では出来ないことがあります。それが、進行状況の表示とキャンセル処理です。 BackgroundWorkerは進行状況を表示する…

クッキーツイートの高速化 その10 BackgroundWorkerの具体的な使い方 with ソース #CookieToEat

←ご一緒にソースを添えてお召し上がり下さい。 それでは具体的な使い方をソースを書きながら説明します。先ずBackgroundWorkerコンポーネントを追加します。ツールボックスの一番上にあるので、探しやすいと思います。追加したら、開始処理としてRunWorkerAs…

クッキーツイートの高速化 その9 3つの処理に分ける #CookieToEat

BackgroundWorkerはお手軽にマルチスレッドを実現出来ます。そのためには先ず処理を、3つの関数に分ける必要があります。本当はもう1つありますが、話をシンプルにするため、後で説明します。重要なこととして、今までの処理も、コメントや「#if false」など…

クッキーツイートの高速化 その8 マルチスレッドお手軽コンポーネント #CookieToEat

重い処理への対応。マルチスレッド化以外での対応も一応あります。フォーム全体を再描画する「this.Update();」という命令があります。これを使えば、強制的に画面を再描画するので、重い処理でも表示を変更できます。例えばプログレスバーを表示して、進行…

クッキーツイートの高速化 その7 二種類の高速化 #CookieToEat

高速化という単語は、2種類の意味で使うことがあると思います。1つは、処理能力を向上させる、文字通りの意味での高速化。1つは、遅い処理を通常レベルに戻す、低速化を防ぐ意味という意味での高速化。両方共、高速化と呼ぶのが一般的だと思いますが、こ…

クッキーツイートの高速化 その6 遅いよりも問題な重い処理への対応 #CookieToEat

さて、前回ボタンを押せない状態にしました。これでユーザーに「いま処理しているんだな」と気づいてもらえるでしょうか?残念ながら、これだけで気づいてもらえることは少ないと思います。極端にいえばこの対応は、処理をできなくする誤動作防止ぐらいの意…

クッキーツイートの高速化 その5 もっとも簡単な高速化 #CookieToEat

←最も簡単と言えば、ご存知ビクトル・ユーゴー。ご存知?先ずは最も簡単な高速化です。それは、「ボタンを押した後、押せない状態」にすることです。そして、処理が終わったら、また「押せる状態」に戻します。非常に簡単な処理ですが、やってあるのとないの…

クッキーツイートの高速化 その4 何時からが遅い? #CookieToEat

遅い、遅いと言っていますが、では何時からが「遅い」でしょうか。最初、森理は「1秒以上なら遅い」など具体的な数字を定義しようと思っていました。しかし、数字で定義してしまうと、「0.99秒なら遅くない」になってしまいます。結局、遅いを数字を定義する…

クッキーツイートの高速化 その3 遅い処理をボタンに集める #CookieToEat

処理が遅いので高速化をしなければなりません。それでは「遅い」とはそもそもどういうことでしょうか?それをもう少し具体的に定義しようと思います。遅いとは「アクションからリアクションまでの時間」が遅いことです。 具体的には「ボタンを押す」というア…

クッキーツイートの高速化 その2 マルチコアとマルチスレッドの使用用途の違い #CookieToEat

マルチコア化やマルチスレッド化(以下両方を指す時はマルチ化)を使う時は何時でしょうか?マルチ化を考えるのはやはり遅いと感じた時だと思います。遅いので何とかしたい。その方法がマルチ化と思う人は多いと思います。実際森理もそう思っていました。 速…

クッキーツイートの高速化 その1 マルチコアとマルチスレッド #CookieToEat

クッキーツイートを作るときに苦労したのが遅い処理をどう対処するかです。具体的な対処方法として採ったのは、マルチコア化とマルチスレッド化です。マルチコアは今回初めて知って使ってみました。VS2010C#なら非常に簡単に扱えて、しかも効果が抜群でした…

森理作Twitter用クライアントソフト「クッキーツイート」バージョンアップ

Twitter用クライアントソフト「クッキーツイート」をバージョンアップしました。セーブ機能が弱かったところの対応と高速化を色々入れました。クッキーツイートのHPからダウンロードできます。

森理作Twitter用クライアントソフト「クッキーツイート」始めました

Twitter用クライアントソフト「クッキーツイート」を作りました。まだ最低限の機能しかありませんし、自分でしかデバッグしておりませんが、使って頂ければ嬉しいです。今後このブログでこの情報を書いていくつもりです。一応このページに全ログ残すつもりで…

C#のテキストボックスを読み取り専用で使うのであればWebBrowserが一番良いかも

C#

C#の弱点の一つはTextBoxだと思います。1行テキストボックスなら問題ありません。しかし、メモとして複数行にした時はかなり使い勝手が悪いです。例えばUndoはあるけれど、Redoはありません。Alt + Aで全選択できません。細かく見ていくとかなり機能としては…

世界共通語

C#の自作クライアントアプリケーションで、oAuthTwitter.csからAccessTokenを取得してくるところに凄くつまりました。つまりまくりまくりです。原因は変数のTokenに値を入れても駄目で、OAuthTokenに入れたらOKでした。Coding the Tweet: Building a Custom …

C#の自作クライアントアプリケーションでユーザーのPINコードを自動で取得してしまう方法

OAuth認証を利用しクライアントアプリケーションから Twitterにつぶやきを投稿するなどで、認証は済んでいることが前提です。ここまで出来るようになったらユーザーにクライアントアプリケーションを登録させたくなります。ただTwitterクライアントと分かっ…