Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Work C# Unity Private http://neue.cc/ @neuecc

Slide 3

Slide 3 text

using C

Slide 4

Slide 4 text

in 8 years

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

What? Why? How?

Slide 7

Slide 7 text

Codeplex Era

Slide 8

Slide 8 text

というものがありました。 産廃

Slide 9

Slide 9 text

#1 2009-04-04 http://linqjs.codeplex.com/

Slide 10

Slide 10 text

LINQってJavaScriptでもできそうだね やるからには勝ちたい #勝ちとは

Slide 11

Slide 11 text

LINQってJavaScriptでもできそうだね やるからには勝ちたい #勝ちとは

Slide 12

Slide 12 text

Pros Cons

Slide 13

Slide 13 text

#2 2009-10-29 http://linqcomparer.codeplex.com/ source.Distinct(x => x.Age);

Slide 14

Slide 14 text

小さくっても全然良い

Slide 15

Slide 15 text

class EqualityComparer : IEqualityComparer { readonly Func equals; readonly Func getHashCode; public EqualityComparer(Func equals, Func getHashCode) { this.equals = equals; this.getHashCode = getHashCode; } public bool Equals(T x, T y) { return equals(x, y); } public int GetHashCode(T obj) { return getHashCode(obj); }

Slide 16

Slide 16 text

#3 2010-04-07 http://dbexecutor.codeplex.com/

Slide 17

Slide 17 text

#3 2010-04-07 http://dbexecutor.codeplex.com/

Slide 18

Slide 18 text

// (object x) => (object)((T)x).name static Func CreateGetValue(Type type, string name) { var x = Expression.Parameter(typeof(object), "x"); var func = Expression.Lambda>( Expression.Convert( Expression.PropertyOrField( type.IsValueType ? Expression.Unbox(x, type) : Expression.Convert(x, type), name), typeof(object)), x); return func.Compile(); }

Slide 19

Slide 19 text

#4 2010-04-30 http://dynamicjson.codeplex.com/ // Parse (JsonString to DynamicJson) var json = DynamicJson.Parse(@“ { ""foo"":""json"", ""bar"":100, ""nest"": { ""foobar"":true } }"); // "Json" - dynamic(string) var r1 = json.foo; // 100 - dynamic(double) var r2 = json.bar; // true - dynamic(bool) var r3 = json.nest.foobar;

Slide 20

Slide 20 text

#4 2010-04-30 http://dynamicjson.codeplex.com/ // Parse (JsonString to DynamicJson) var json = DynamicJson.Parse(@“ { ""foo"":""json"", ""bar"":100, ""nest"": { ""foobar"":true } }"); // "Json" - dynamic(string) var r1 = json.foo; // 100 - dynamic(double) var r2 = json.bar; // true - dynamic(bool) var r3 = json.nest.foobar;

Slide 21

Slide 21 text

public class DynamicObject : IDynamicMetaObjectProvider { public virtual IEnumerable GetDynamicMemberNames(); public virtual DynamicMetaObject GetMetaObject(Expression parameter); public virtual bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object public virtual bool TryConvert(ConvertBinder binder, out object result); public virtual bool TryCreateInstance(CreateInstanceBinder binder, object[] args, out objec public virtual bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes); public virtual bool TryDeleteMember(DeleteMemberBinder binder); public virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) public virtual bool TryGetMember(GetMemberBinder binder, out object result); public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result); public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object re public virtual bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value); public virtual bool TrySetMember(SetMemberBinder binder, object value); public virtual bool TryUnaryOperation(UnaryOperationBinder binder, out object result); }

Slide 22

Slide 22 text

#5 2010-07-15 http://xstreamingreader.codeplex.com/

Slide 23

Slide 23 text

#6 2010-09-12 http://reactiveoauth.codeplex.com/

Slide 24

Slide 24 text

#7 2011-02-22 https://chainingassertion.codeplex.com/ https://github.com/neuecc/ChainingAssertion

Slide 25

Slide 25 text

BDD, assertThat, fluent interface... ユニットテストへの思索を深める

Slide 26

Slide 26 text

#8 2011-10-17 http://reactiveproperty.codeplex.com/ https://github.com/runceel/ReactiveProperty

Slide 27

Slide 27 text

実装は単純、思想は深遠

Slide 28

Slide 28 text

#9 2012-02-18 http://implicitquerystring.codeplex.com/ int x = Request.QueryString.ParseValue("hoge"); DateTime y = Request.QueryString.ParseValue("huga");

Slide 29

Slide 29 text

public struct ConvertableString { readonly string value; public ConvertableString(string value) { this.value = value; } public static implicit operator Boolean(ConvertableString self) { return Boolean.Parse(self.value); } public static implicit operator Int32(ConvertableString self) { return Int32.Parse(self.value); } // ... }

Slide 30

Slide 30 text

#10 2012-04-02 http://hashmapper.codeplex.com/

Slide 31

Slide 31 text

GitHub Era

Slide 32

Slide 32 text

#11 2012-12-03 https://github.com/neuecc/MemcachedTranscoder

Slide 33

Slide 33 text

「サイズ」と「速度」 圧縮とフォーマットは別 バージョニングとダンプ耐性も大事

Slide 34

Slide 34 text

#12 2013-02-27 https://github.com/neuecc/AsyncOAuth

Slide 35

Slide 35 text

ライブラリのためのasync/await

Slide 36

Slide 36 text

#13 2013-04-05 https://github.com/neuecc/CloudStructures

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

#14 2013-12-06 https://github.com/neuecc/OwinRequestScopeContext

Slide 39

Slide 39 text

CallContext #とは

Slide 40

Slide 40 text

#15 2013-12-08 https://github.com/neuecc/Owin.RedisSession

Slide 41

Slide 41 text

#16 2013-12-23 https://github.com/neuecc/LightNode public class My : LightNodeContract { public string Echo(string x) { return x; } public Task Sum(int x, int? y, int z = 1000) { return Task.Run(() => x + y.Value + z); } }

Slide 42

Slide 42 text

DLL is IDL(Interface definition language)

Slide 43

Slide 43 text

#17 2013-12-23 https://github.com/neuecc/RespClient

Slide 44

Slide 44 text

public enum RespType : byte { SimpleStrings = (byte)'+', Erorrs = (byte)'-', Integers = (byte)':', BulkStrings = (byte)'$', Arrays = (byte)'*' }

Slide 45

Slide 45 text

#18 2014-05-28 https://github.com/neuecc/UniRx

Slide 46

Slide 46 text

(.NET関連で)GitHub Starを尺度にすると サポートは丁寧に。

Slide 47

Slide 47 text

#19 2014-09-24 https://github.com/neuecc/LINQ-to-BigQuery

Slide 48

Slide 48 text

Not IQueryable

Slide 49

Slide 49 text

#20 2014-10-28 https://github.com/neuecc/LINQ-to-GameObject-for-Unity

Slide 50

Slide 50 text

List.Enumerator構造体 再帰イテレーター is Evil IEnumerable Descendants(GameObject root) { yield return root; foreach (Transform item in root.transform) { foreach (var child in Descendants(item.gameObject)) { yield return child.gameObject; } } }

Slide 51

Slide 51 text

#21 2015-01-14 https://github.com/neuecc/Open-on-GitHub

Slide 52

Slide 52 text

#22 2015-03-30 https://github.com/neuecc/NotifyPropertyChangedGenerator

Slide 53

Slide 53 text

#23 2015-11-03 https://github.com/neuecc/EtwStream

Slide 54

Slide 54 text

テキストログ #とは ログのパフォーマンス

Slide 55

Slide 55 text

#24 2016-03-18 https://github.com/neuecc/SerializableDictionary

Slide 56

Slide 56 text

#25 2012-05-23 https://github.com/neuecc/MarkdownGenerator

Slide 57

Slide 57 text

#26 2016-05-31 https://github.com/neuecc/PhotonWire

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

#27 2016-06-07 https://github.com/neuecc/ObserveEveryValueChanged public partial class MainWindow : Window { this.ObserveEveryValueChanged(x => x.Width); this.ObserveEveryValueChanged(x => x.Height); }

Slide 61

Slide 61 text

TBD

Slide 62

Slide 62 text

Reactive, ReImplemented Motion Library

Slide 63

Slide 63 text

Infinitely Fast Serializer for C# デシリアライズ速度 無限大高速な、新シリアライザ+フォーマット

Slide 64

Slide 64 text

Next Generation has come

Slide 65

Slide 65 text

Next Generation has come

Slide 66

Slide 66 text

Conclusion

Slide 67

Slide 67 text

linq.js, UniRx, LINQ to GameObject, LINQ to BigQuery LINQとは何であるかの掲示 ChainingAssertion 流れるようなインターフェイスや英語的なるものへの反逆 ReactiveProperty MVVMへの異質なアプローチ NotifyPropertyChangedGenerator Roslyn時代のコーディング手法 LightNode, PhotonWire 現代的な観点でのRPCの再評価 ライブラリは思想の塊であり、 言葉だけよりも、むしろずっと 流暢に語ってくれる 言葉に、より強い証明、よ り強力な説得力をもたらす

Slide 68

Slide 68 text

経験値を貯めよう 小さなライブラリでの経験が、大きなライブラリに繋がる 特別なものは必要ない(本当に新規のアイディアなど存在しない、 LINQですら古来の関数型言語からの援用なのだから!) 人に見せるものを意識する 自分のために作ってるんだし、ではなく意識したパッケージング コードの書き方、見せ方、ウリを作るための機能の取捨、他人に 使ってもらうことを意識するとだいぶ違ってくる 機会はそんなに多くない!(8年間で、ある意味「たった」30回) なので、一つ一つの機会を大事にして欲しい