Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

2020/08/31

デザイナが自動生成する InitializeComponent にカスタムコントロール独自追加プロパティ初期化コードを生成させたくないとき


まじかこれ、知らなかったわー。HogeFugaPiyoプロパティの初期化コードをInitializeComponent 内に自動生成して欲しくないときは下記のメソッドをコントロール側に追加する。

public bool ShouldSerializeHogeFugaPiyo ()

public void ResetHogeFugaPiyo ()

まじかこれ。

2013/06/11

cygwinからC#のプロジェクトをbuild

会社のPCはWindowsなのでcygwinを入れている。gitもcygwinから使っている。1年以上TortoiseGitを使っていたけど、バージョンアップのたびにバグや不安定さに悩まされたのでアンインストールした。
git pullした後にrebuildすることが多いんだけど、そのためにわざわざVSを起動するのが面倒。ということでコマンドでrebuildできたら楽なのでshell scriptを書いた。
でもgistをよく見たら微妙に似たようなのあった。


2012/04/10

.NET2.0でもラムダ式やvarが使える

コンパイラのバージョン次第で。ってのを今日会社で後輩(?)に教えてもらいました!スーパープログラマ後輩なのでいろいろ教えてもらってます(・∀・)あとmap欲しいなー(つまりlinqのselectのことですが)って思ってたら、ArrayにConvertAllやForEachやその他もろもろがあることも教えてもらいました。.NET2.0もなかなかやるじゃないですか。



2012/03/07

C#でREPL(Windows)

string.Formatのフォーマット指定子全部覚えてます?Enumerable.Range(0, 10)の結果が0から10までなのか0から9までなのか覚えてます?僕は覚えてないのでググるか、試しに書いてみます。consoleプロジェクト作って試したり、今書いてるソースに応急的に書き足して試したりするのって面倒じゃないですか?みんなどうやってんの?ConsoleApplication58.csとか作ってやってんの?REPL欲しくないですか? なのでvpsにmono入れてsshでcsharpを使って試してました。が、monoのwindows向けのバイナリ入れればいい話でした。アホ過ぎた。csharp.bat叩けばcmdでreplが立ち上がるのでお手軽。

Effective C# 4.0

2012/02/07

C#でExcel2007からPDFに変換する

Excel 2007ってPDFとして保存する機能があるんですって。すげー!という気もするけど今更かよという気も。で、C#からもPDFに変換できる。 全てのシートを印刷するってのをやってみたけど、デカいExcelをPDFに変換するときに「発行中」ってプログレスが出るのはどうにかならんのか。
それとExcelファイルによってはわけのわからない状態になることが・・・。というのは、まだ調べてるとこだけど削除済みのシートまでPDFに変換されているような・・・。

取りあえず以上。関連はこのへん。
調べたけど、ExcelViewerじゃーPDFに変換はできないっぽい。そもそも保存ができない。(Excel 2007は保存時にPDFで保存するかどうか選べる)

追記

それとExcelファイルによってはわけのわからない状態になることが・・・。というのは、まだ調べてるとこだけど削除済みのシートまでPDFに変換されているような・・・。
非表示になってるシートもPDFとして化されてたからだった。



C#でBullZipを使ってPDFを結合する

これの続きみたいなもん。 BullZip PDF PrinterのPdfUtilのMergeメソッドで結合できる。ただし、 が必要。pdftk.exeとlibiconv2.dllをpathの通ったとこに置く。もちろんpdftkは単体でも動く。



2012/02/03

C#というか.NETでExcelやWordをプログラマブルにPDF化する(BullZip)



こいつを使います。
インストールして以下のパスにあるdllを参照する。
"C:\Program Files\Common Files\Bullzip\PDF Printer\API\Microsoft.NET\v4.0"
"C:\Program Files\Bullzip"でないことに注意。

あとは下記サンプルのように簡単にPDF化できます。
PdfSetttings.SetValueがなかなかわけわかめなので、下記参照。
指定したExcelとWordを一括でPDFにするサンプル書いてみたけど、思った以上にキレイに出力されてビックリ。これは使える気がする。しかも無料で商用可能らしい(要出典)。

PDFにするときにExcelやWordがチラっと起動するのはどうにかならんもんか。。仮想プリンタだしそうはいかんのだろうねー。

検索してみると.NETに限らずAccess VBAやVBScriptからBullZip使って同じことしてる例がある。

あれあれ、改めて調べるとoffce 2007からは標準でPDF出力がサポートされてんのか?





2011/09/15

日記(bookmark, mifare, window制御DSL, KPF)

最近とんと日記を書いておりませなんだ。

bookmark

しばらく前から、その日bookmarkしたリンクをブログに投稿するようにしてる。手動の更新頻度に比べてbookmarkの自動投稿頻度が高くてちょっとうざいかな・・・。週一に変更しようかどうしようか。もうしばらく様子を見てみる。

ネタ元(というかパクりました)はこちら

bookmark自動投稿の仕組み的には
  • ユーザーIDと日付け範囲とカテゴリ(quoteとかlinkとか)指定でtumblrの記事をJSONで取ってくるコマンド(gaucheスクリプト)
  • jsonを変形するコマンド(gaucheスクリプト)
  • jsonとテンプレートからテキスト(今回はHTML)を吐くtemplate-filter(Template Engine)コマンド(@kikuchan98さん製のgaucheスクリプト)
  • bloggerに投稿するコマンド(PHP製)
  • 上記のコマンドをpipeでまとめて実行するシェルスクリプト
という具合で、あとはcronでぶんぶん。
どれも単体でコマンドとして実行できるのでいろいろと便利。

同じような仕組みで、twitterにつぶやくだけのコマンドとURLを短縮/展開するだけのコマンドをgaucheで作って、tumblrからランダムに記事を選んで呟くtwitter botや、twitterのお気に入りからランダムに選んで呟くtwitter botなどを動かしてたりします。これらも単体でコマンドとして動かせるので意外と楽しめる。ソースはお粗末ですが。

mifare, window制御DSL

仕事では引き続きC#でmifareをごにょごにょするお仕事をしています。進捗が悪くてあばばばば状態。
で、その関連(全然関係なさそうだけど)でwindowsのwindowを制御するDSLをでっち上げたりしています。まだ試作段階ですがスーパーハカーより「きめぇ!」の一言を頂きました!
> handle "hoge piyo fuga"
> move 100 200
> repeat 4 click
> move 42 42
> click
> repeat 10 key down_arrow
> key enter
というようなコードをインタプリタに投げると、「hoge piyo fuga」というタイトルのwindowをハンドルして、そのwindowのクライアント領域でのx=100, y=200に移動してclickを4回、42,42に移動してクリックして↓キーを10回押下してenterという操作をします。(ちなみにマウスポインタは動かしません)クリックしたり入力したりコンボボックスを選択したりできるわけです。windowはアクティブでなくても、他のwindowの裏に居ても大丈夫。他に文字や文字列を送ったりもできるのでわりと何でもできます。

言葉では解りづらいので動画を貼れば手っ取り早いのですが。要はコードを解釈してwin32APIでwindowメッセージを送っているだけです。

テキストをインタプリタに投げればwindowをその通りに操作してくれるので、プログラムからテキストを生成して投げればいろんなことができるかも。名前はまだない。公開もたぶんできない(?)けど、勉強会とかで見せることはできるかも。
簡単なlexer(字句解析器)と粗末なインタプリタで動きます。面白かったんでREPLも付けてみました。ちなみにC#製。

KPF

前回から600日以上経過することになりますが、久しぶりにKPF開催します!まだ正式な告知は行なっていませんが、2011/10/22(土)に開催予定です!
皆様ふるってご参加ください。
LT,、発表も絶賛大募集中です。
よろしくお願いします。


よし、風呂入って寝る。

2011/08/25

C#練習がてらslices

C#の拡張メソッドでgaucheのutil.listにあるslicesっぽいもの書いてみた。組み込みでこういうのあるのかも知らんけども。 出力 Achiralというのをちらっと眺めてみたけど、Schemeで見慣れたようなものもあれば何をしているのかわからないものまでいろいろ。
拡張メソッドいいれすれー。  マクロもあればいいのに。Lispの伝統的なマクロをC系シンタックスでってのは無理があるのかもしれないけど、Pure言語にあるようなマクロだったらいけるんじゃないの。

追記

職場で「これだと遅延評価が効かないんで、こうしたら良いよー。」と教えてもらったので、それを参考に書き直してみました。



2011/08/22

csharp repl

何かとREPLが欲しくなるわけです。

monoにはC#のreplがあるってんで入れてみました。どうして肝心のVSにはないんでしょうね。馬鹿なの死ぬの? mono自体はyumで入れようと思いましたが途中でコケたので、ソースから入れました。(windowsでも
$ csharp
でREPL開始。

ShowUsing();でusingされている名前空間を、ShowVars();でREPLの環境内にある変数を表示しれくれます。quit;で終了。
Mono C# Shell, type "help;" for help

Enter statements below.
csharp> ShowUsing();
using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
csharp> var a = Enumerable.Range(0, 100);
csharp> ShowVars();
System.Collections.Generic.IEnumerable a = System.Linq.Enumerable+c__Iterator24
csharp> var a = Enumerable.Range(0, 100).ToArray();
csharp> ShowVars();
int[] a = System.Int32[]
csharp> a.Select(i => Convert.ToString((byte)i, 16).ToUpper());
{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F", "60", "61", "62", "63" }
csharp>
微妙に補完も助けてくれます。 Enumerableと入れてタブを押したら
csharp> Enumerable
Enumerable EnumerableExecutor EnumerableQuery
続いて「.」を入れてタブを押したら
csharp> Enumerable.
Aggregate All Any AsEnumerable Average Cast Concat Contains Count DefaultIfEmpty Distinct ElementAt ElementAtOrDefault Empty Except First FirstOrDefault GroupBy GroupJoin Intersect Join Last LastOrDefault LongCount Max Min OfType OrderBy OrderByDescending Range Repeat Reverse Select SelectMany SequenceEqual Single SingleOrDefault Skip SkipWhile Sum Take TakeWhile ThenBy ThenByDescending ToArray ToDictionary ToList ToLookup Union Where Zip
csharp> Enumerable.
といった具合です。

 テスト用のプロジェクトを立ち上げてもいいし、コードの余白に確認用のコードを書いてイミディエイトウィンドウで確認してもいいんですけどね。


ところで

最近mifareをC#でごにょごにょする仕事をしてます。
C#もVisual Studioもすごく久しぶりでプログラミング以前のところで四苦八苦したり。
プログラミングの方もだいぶ四苦八苦してますが。

C#(というか.NET)はすごいし、まじで素晴らしいです。でもC系のシンタックスって人に優しくなくないですか?優しくないです。

VSのEmacsキーバインドがどうにも微妙でViEmu入れてみたり。
このままだとViEmu買ってしまいそうで怖い。その点2010は無料でいい感じの拡張があっていいですねー(棒読み

 

追記





2010/03/26

MCTSのカード


先日、財布と一緒に掲題のカード無くしたんだけど、再発行できるのかな。
そうそう、こういうカード↓。





2010/03/15

プログラマはプログラミング言語のユーザー

雑感。タイトルと内容はあまり関係ない、かも。

Schemeの多値のことを考えていたら、C#のTryParseのことを思い出した。
はっきりと憶えていないけど、こんな感じだったと思う。

string one = "1";
int result;
bool successed = int.TryParse(one, out result);

どう見てもダサい。これを使っていた頃、多値を知らないなりに「複数の戻り値を返せれば良いのに。」と思った覚えがあるようなないような。

string one = "1";
bool successed, int result = int.TryParse(one);

こんなイメージ。むしろこれができないというのがおかしいような気がする。おかしいというか「プログラミング言語のユーザーとしてのプログラマ」から見れば不親切だなーと。もしかして知らないだけでできるのかも。確か、C#4.0でtupleがどうのこうのと言われていたような気がするので、似たようなことができるのかもしれない(tupleと多値は、たぶんいろんな意味で別物だけど)。シンタックスシュガーでなんたらかんたら、みたいな。


仕事でC#1.1を使っていた頃は、このTryParseすら無くてとても面倒な思いをしていた。なのでC#2.0のTryParseを見た時は「超便利!」と思った。事前のチェックも例外処理もなくParseしまくってた社内のアグレッシブなコーディング文化に原因があったにせよ。
まー、今は無職ですが。

TryParseがないので、Parseを使うことになる。これがまた失敗すると例外が投げられる。当時は「なんで例外投げるんだよ・・・。初期値(変数を初期化してない時の)とか何か返せば良いんじゃね?」などと思っていた頃が私にもありました。「失敗した時に0が返ってきてしまったら、失敗して0なのか成功して0なのかわからないじゃまいか。かといって他に返せそうなものも見当たらない。例外が適切なのかも。」と思うようになったのは随分後のこと。

例えばNull許容型があるんだから、int?型が返るようなのがあっても良いんじゃね?などと今思った。失敗したらnullが返る、とか。・・・。失敗したからnullが返るというのも、それはそれでおかしいような気も。


ところで、touch nullでdieなのもどうなんだろ。いちいちnullかどうか判定しないといけないのもどうなんだろう(もうC#関係ないな)。Common Lispのnilってやっぱ素敵。Rubyもそうなんだっけ。

こうやって思い出してみたり、勉強会の時にたまにC#のコードを見たりすると「やっぱC#は難しいなー。」などと思う。気を配らないといけないことや覚えないといけないことが多いなーという意味で。
文法(?)、型、ジェネリクス、匿名メソッド、ラムダ式、LINQ、属性、オブジェクト指向周りのいろいろ(継承とかポリとかinterfaceとか)、もうその他いろいろたくさん・・・。こうやって見るとプログラミング初心者にC#は酷な気がする。VS(もしくはそれ相当のもの)がないと書けない言語だよなー。

「Schemeは覚えることが少ない」とか言われてるのが、なんとなくわかる気もする。わからない気もする。括弧も少ないし。

C#もSchemeもあんまりよくわかってないので、滅多なことは言えませんが。という防衛線。という防衛線。

防衛線、命綱、アンビリカルケーブル。
アンビリカルケーブルは臍の緒。

2009/10/17

[メモ]Nemerle, Scheme, Continuation, Factor

[Nemerle]

マクロに興味沸いた。仕事で C# だし IronScheme の方が気になるし .NET 系言語はこれ以上さわる気になれないけど気になる。

[Factor]

Factor に乗り換えるプログラマーは、Factor のより高位なプログラミング力を手に入れるために、ローカル変数を放棄しなくてはなりません。
PostScript にはまっているので気になります。

[Scheme]


  CPS - continuation passing style - 継続渡しスタイル

継続もマクロもまともに書けません。これじゃダメですね。勉強しよー。

プログラミングGauche

2009/10/09

C# - 例外

ただのメモ

 

catch句

catch (ArgumentOutOfRangeException aex)

ではなく

catch (ArgumentOutOfRangeException)

とも書ける

 

だからどうというわけではなく、へぇーと思ったもんで。

2009/10/08

TFS - チームプロジェクトを削除する

TFS : Team Foundation Server

開発の超力強い味方。

 

使い始めた頃に安易にチームプロジェクトを作りまくって削除方法がわからず困ったのでメモ。

  1. Microsoft Visual Studio 9.0\Common7\IDE\TFSDeleteProject.exe を叩く。以上。

 

GUIでの削除はできない。Batを作っておくと便利。

@Rem -------------------------------------------------------------
@Rem --- TeamProject delete bat
@Rem --- 2009/07/02 Defined By hoge
@Rem -------------------------------------------------------------

@CD C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
@Set /p s="server name : "
@Set /p p="project name : "
@TFSDeleteProject.exe /server:%s% %p%

@Pause >nul

@Set s=""
@Set p=""





C# - TraceListener

WS000025

画像はTrace Viewer。最近TraceListenerを扱うことが多いのでメモ。

 

TraceListenerとは

この「TraceListener」の存在をもっと早く知っていたら、ログ実装処理に手間かけなくて済んだのに・・・

「TraceListener」を知らないでログ出力処理なんか書くと、コード量は増えるし、後で知った時のショックが大きいです。

私もこれを知ったときはショックでした。C#を始めたころから読んでいるC#プログラミングレッスンで知りました。

 

TraceListenerの種類

画像のTrace Viewerで開いているのはXmlWriterTraceListenerでとったWCFサンプルのログ(.svclogファイル)

 

参考になる資料

C#プログラミングレッスン

個人的には下手にC#の本買うよりこのメルマガを通読する方が2兆倍勉強になると思っています。

 

 

ところでこの↓の本、読み始めた頃は「結構いいかも」と感じたけど微妙な空気になってきた・・・。出版前にコードのチェックしてあるんだろうか。ステップバイステップの各ステップのチェックはしてあるんだろうか。怪しい。あまりにも、その、間違いが・・・。もう少しちゃんとチェックしないと読者も著者も出版社もみんな不幸になるのでは・・・。

これからはじめるWCFプログラミング

これからはじめるWCFプログラミング

posted with amazlet at 09.10.07

鄭 立 小森谷 良明 加藤 誠司 飯田 洋介
秀和システム
売り上げランキング: 225303

おすすめ度の平均: 3.0

5 これぞWCFの教科書!!
1 DCOMとの対比での説明は正しいやり方とは思えない

Amazon.co.jp で詳細を見る





2009/10/07

WCFメモ、疑問

[メモ1]

ASP.NET であれば以下のURLにある方法でポートを固定できるけど、WCFの場合はどこ?

 

[メモ2]

これからはじめるWCFプログラミング」Chapter4:メッセージ交換パターン のサンプルをやっててエラー。

System.InvalidOperationException: コントラクトには Duplex が必要ですが、バインド 'WSHttpBinding' はこれをサポートしていないか、サポートするように正しく構成されていません。

わからなかったので調べると

Contract requires Duplex, but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.

wsHttpBinding -> wsDualHttpBinding とすれば良いのかな?とApp.configで該当のところを書き換えてみるとうまくいった。理由までは調べなかった。しかも読み進めると次のページに書いてあった。くどいくらいくどいステップバイステップもあればこういうのもあるわな。

 

これからはじめるWCFプログラミング
鄭 立 小森谷 良明 加藤 誠司 飯田 洋介
秀和システム
売り上げランキング: 225303
おすすめ度の平均: 3.0
5 これぞWCFの教科書!!
1 DCOMとの対比での説明は正しいやり方とは思えない

複数プロジェクトのデバッグ時に複数のプロジェクトをいっせいにスタートさせる

別に書くまでのことはないんだろうけどもメモ。

 

ソリューションを右クリックしてプロパティ

 WS000023

 

デバッグ時にいっせいに実行したいプロジェクトを指定

WS000024





2009/10/02

流行っているか怪しいようなので - 1から10の総和をC#

 

using System;
using System.Linq;

 

namespace Sample.Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Enumerable.Range(1, 10).Sum());
        }
    }
}

 

家のVisual StudioがExpressのためEmacsキーバインドが使えない。たったこれだけのコード書くのに四苦八苦した。

 

 

追記:

名前空間いらないか。

using System;
using System.Linq;

 

class Sum
{
    static void Main(string[] args)
    {
        Console.WriteLine(Enumerable.Range(1, 10).Sum());
    }
}

今度は見た目が微妙・・・。クラスに属す必要はないのにどうしてもこう書かなければならない(よね?)。これじゃdelegateやラムダ式があってもなんだかなーと。