Don't wanna be here? Send us removal request.
Text
長さの計算って面倒くさい! ということで、単位変換系のクラス
> var len = new Length(); > len.inch = 1; > len.cm 2.54 > > len.cm = 2; > len.inch 0.7874015748031496062992125984
LengthType.cs
public enum LengthType { km, m, cm, mm, /// <summary> /// 1inch = 2.54cm /// </summary> inch, /// <summary> /// 1inch539 = 2.539cm /// </summary> inch539, px, px539, pt, pt539, /// <summary> /// 1em == 16px /// </summary> em }
Length.cs
using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Fairies { public class Length : IComparable<Length>, IEquatable<Length> { // ========================================================================================================= xxx [DllImport("user32.dll")] internal extern static bool SetProcessDPIAware(); [DllImport("user32.dll")] internal extern static IntPtr GetWindowDC(IntPtr hwnd); [DllImport("gdi32.dll")] internal extern static int GetDeviceCaps(IntPtr hdc, int index); [DllImport("user32.dll")] internal extern static int ReleaseDC(IntPtr hwnd, IntPtr hdc); // ========================================================================================================= xxx private decimal raw; // ========================================================================================================= xxx public decimal DPI => GetDPI(); // ========================================================================================================= xxx public static Length From(LengthType type, decimal value) { return new Length(type, value); } public static Length From(Length length) { return new Length(LengthType.mm, length.mm); } public static decimal Convert(decimal value, LengthType from, LengthType to) { return new Length(from, value).Get(to); } // ========================================================================================================= xxx public Length() { raw = 0M; } public Length(LengthType type, decimal initial) { Set(type, initial); } public Length(LengthType type, decimal initial, decimal digitWeight) { Set(type, initial, digitWeight); } private void CommonInitialize() { customUnits = new Dictionary<string, (Func<Length, decimal> Getter, Action<Length, decimal> Setter)>(); } // ========================================================================================================= xxx private Dictionary<string, (Func<Length, decimal> Getter, Action<Length, decimal> Setter)> customUnits; public Length RegistUnit(string unitID, Func<Length, decimal> getter, Action<Length, decimal> setter) { if (IsUnitRegisted(unitID)) { customUnits[unitID] = (getter, setter); } else { customUnits.Add(unitID, (getter, setter)); } return this; } public Length DeleteUnit(string unitID) { customUnits.Remove(unitID); return this; } public bool IsUnitRegisted(string unitID) { return customUnits.ContainsKey(unitID); } public (Func<Length, decimal> Getter, Action<Length, decimal> Setter) GetUnit(string unitID) { return customUnits[unitID]; } // ========================================================================================================= xxx public decimal km { get => Get(LengthType.km); set => Set(LengthType.km, value); } public decimal m { get => Get(LengthType.m); set => Set(LengthType.m, value); } public decimal cm { get => Get(LengthType.cm); set => Set(LengthType.cm, value); } public decimal mm { get => Get(LengthType.mm); set => Set(LengthType.mm, value); } // ========================================================================================================= xxx public decimal inch { get => Get(LengthType.inch); set => Set(LengthType.inch, value); } public decimal inch539 { get => Get(LengthType.inch539); set => Set(LengthType.inch539, value); } // ========================================================================================================= xxx public decimal px { get => Get(LengthType.px); set => Set(LengthType.px, value); } public decimal px539 { get => Get(LengthType.px539); set => Set(LengthType.px539, value); } public decimal pt { get => Get(LengthType.pt); set => Set(LengthType.pt, value); } public decimal pt539 { get => Get(LengthType.pt539); set => Set(LengthType.pt539, value); } // ========================================================================================================= xxx public decimal em { get => Get(LengthType.em); set => Set(LengthType.em, value); } // ========================================================================================================= xxx public decimal Get(string unitID, decimal digitWeight = 1) { return customUnits[unitID].Getter(this) * digitWeight; } public decimal Get(LengthType type, decimal digitWeight = 1) { switch (type) { case LengthType.km: return (m / 1000M) * digitWeight; case LengthType.m: return (cm / 100M) * digitWeight; case LengthType.cm: return (mm / 10M) * digitWeight; case LengthType.mm: return raw * digitWeight; case LengthType.inch: return (cm / 2.54M) * digitWeight; case LengthType.inch539: return (cm / 2.539M) * digitWeight; case LengthType.px: return (inch * DPI); case LengthType.px539: return (inch539 * DPI) * digitWeight; case LengthType.pt: return (mm / (25.4M / 72M)) * digitWeight; case LengthType.pt539: return (mm / (25.39M / 72M)) * digitWeight; case LengthType.em: return (px / 16M) * digitWeight; default: throw new NotSupportedException(); } } public Length Set(string unitID, decimal value, decimal digitWeight = 1) { customUnits[unitID].Setter(this, value); return this; } public void Set(LengthType type, decimal value, decimal digitWeight = 1) { var v = value * digitWeight; switch (type) { case LengthType.km: m = (v * 1000M); break; case LengthType.m: cm = (v * 100M); break; case LengthType.cm: mm = (v * 10M); break; case LengthType.mm: raw = v; break; case LengthType.inch: cm = (v * 2.54M); break; case LengthType.inch539: cm = (v * 2.539M); break; case LengthType.px: inch = (v / DPI); break; case LengthType.px539: inch539 = (v / DPI); break; case LengthType.pt: mm = v * (25.4M / 72M); break; case LengthType.pt539: mm = v * (25.39M / 72M); break; case LengthType.em: px = (v * 16M); break; default: throw new NotSupportedException(); } } // ========================================================================================================= xxx private static decimal GetDPI() { SetProcessDPIAware(); var dc = GetWindowDC(IntPtr.Zero); var x = GetDeviceCaps(dc, 88);//x var y = GetDeviceCaps(dc, 90);//y ReleaseDC(IntPtr.Zero, dc); return x;// どっちも同じ想定で } // ========================================================================================================= xxx public bool Equals(Length other) { return raw.Equals(other.raw); } public int CompareTo(Length other) { return raw.CompareTo(other.raw); } // ========================================================================================================= operator public static Length operator +(Length a, Length b) => new Length(LengthType.mm, a.raw + b.raw); public static Length operator -(Length a, Length b) => new Length(LengthType.mm, a.raw - b.raw); public static Length operator *(Length a, Length b) => new Length(LengthType.mm, a.raw * b.raw); public static Length operator /(Length a, Length b) => new Length(LengthType.mm, a.raw / b.raw); public static Length operator %(Length a, Length b) => new Length(LengthType.mm, a.raw % b.raw); } }
1 note
·
View note
Text
C#7.3からenum制約が可能になったのでテスト
public static E[] GetItems<E>(Predicate<E> where = null) where E : Enum { var all = Enum .GetNames(typeof(E)) .Select(_ => Enum.Parse(typeof(E), _)) .Select(_ => (E)_) .ToArray(); return where == null ? all : all.Where(_ => where(_)).ToArray(); } enum Test { A=0,B,C,D=10,E,F,G } foreach(var t in GetItems<Test>()) { Console.WriteLine($"{t} = {(int)t}"); } /* A = 0 B = 1 C = 2 D = 10 E = 11 F = 12 G = 13 */
0 notes
Link
知らんかった 単一のアプリのみ動作状態を作れるって。 グループポリシーいじるだけだし 楽にできるね
8 notes
·
View notes
Photo

もちこいプロジェクト 始動、、、! マイコンとかほとんどやったことないし 回路もほとんど組んだことないけど がんばるぞーー
0 notes
Photo
簡単にMySqlを扱いたいけど あんまり自分に最適なものがなかったので、、
このようにテーブルを作っておいて、
public class Point { public int X, Y; public Point(int x, int y) { X = x; Y = y; } } [TableName("D_USER")] public class SampleTable_User :Table { [PrimaryKey, DbManagement , FieldName("id")] public int ID; [FieldName("user_auth_id")] public int AuthID; [FieldName("user_name")] public string Name; [FieldName("user_age")] public int Age; [FieldName("user_start")] public Point Start; } [TableName("D_TABLE_AUTH")] public class SampleTable_Auth : Table { [PrimaryKey, DbManagement, FieldName("id")] public int ID; [FieldName("auth_level")] public int AuthLevel; [FieldName("disp_name")] public string Name; }
このようにデータベースクラスを作っておくと
[DatabaseName("Sample_DB")] public class SampleDB : Database { public IEnumerable<sampletable_user> d_TableA { get; private set; } public IEnumerable<sampletable_auth> d_TableB { get; private set; } public IEnumerable<sampletable_user> GetAdminUsers() { var auth = Select<sampletable_auth>().Result; var adminAuthId = auth.First(_ => _.Name == "admin").ID; var users = Select<sampletable_user>().Result; return users.Where(_ => _.AuthID == adminAuthId).ToArray(); } public void AddUser(params SampleTable_User[] userTables) { foreach (var user in userTables) Insert(user); } public void AddAuth(SampleTable_Auth data) { Insert(data); } }
こんな感じに使えるよ!
public void Main() { // type db converter TypeConvertProvider.AddConverter<point>( _ => $"({_.X},{_.Y})", _ => { var items = _ .TrimStart('(') .TrimEnd(')') .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); return new Point( int.Parse(items.ElementAt(0)), int.Parse(items.ElementAt(1)) ); } ); // connect and instancing var db = new SampleDB(); db.Connect("127.0.0.1", 3306, "user", "passwd"); // database logic var admins = db.GetAdminUsers(); foreach (var admin in admins) Console.WriteLine($"[{admin.ID}] {admin.Name}({admin.Age})"); // database logic with transaction var err = db.Transaction(() => { db.AddAuth(new SampleTable_Auth() { AuthLevel = 99, Name = "TestAuthor" }); db.AddUser( new SampleTable_User() { AuthID = 99, Name = "userA", Age = 15, Start = new Point(10, 10) }, new SampleTable_User() { AuthID = 1, Name = "userB", Age = 16, Start = new Point(20, 20) }, new SampleTable_User() { AuthID = 1, Name = "userC", Age = 17, Start = new Point(30, 30) }, new SampleTable_User() { AuthID = 1, Name = "userD", Age = 18, Start = new Point(40, 40) } ); }); // commit or rollback if(err != null) { // rollbacked } else { // committed } // release db.Dispose(); db = null; } }
0 notes
Photo


初めてのレザークラフト。 形はちょっと大着した感あるけど それもデザインということで、、 なかなか使い心地いい!
0 notes
Text
XmlSerializerより JsonParserよりも
簡単に直感的に使える
最低限機能のコンフィグファイルおよびコンフィグクラスを考え中
0 notes
Photo





北千住マルイにて晩御飯。 博多炉端焼き やまや もつ鍋と 肉盛と 八海山梅酒。 もつ鍋のうまいことうまいこと。 だしがいいね あごだし醤油。 もつの油がはんぱないけど その甘みと あごだしが合う合う。 締めのちゃんぽん麺は 沸騰して泡だらけに
0 notes
Photo

北千住 ルミネ チョコミントショートケーキ チョコミントって おいしいやつと、 歯磨き粉みたいなんと あるよね 食べるまでわからんから 歯磨き粉レベルみたいな指標あればいいのに、、 ちなみにこれはうまいやつだった。 うまいなかにも 歯磨き粉。 歯磨き粉レベルは1だな
0 notes
Text
PPTのアドイン入れたいなーリスト
MSストア漁ってて見つけたやつ。 ない分は自分で作ればいいか・・・
ToDo List Pro https://appsource.microsoft.com/en-us/product/office/WA104379804?tab=Overview
Handy Calculator https://appsource.microsoft.com/en-us/product/office/WA104379673?tab=Overview
Code Presenter Pro https://appsource.microsoft.com/en-us/product/office/WA104379263?tab=Overview これってコードのシンタックスハイライターってことなんかな。。。
Office Apps Fiddle for PowerPoint https://appsource.microsoft.com/ja-jp/product/office/WA104373175?src=office&corrid=d2522346-dfb1-47eb-8ce2-baa2fdbf66b4&omexanonuid=f4eb7491-ee14-4ff2-953a-e5633b405d1e CSSとJSで表を触れるんだって Excelでスタイリングするより楽そう
Pixton Comic Characters https://appsource.microsoft.com/en-us/product/office/WA104380907?tab=Overview キャラクターを挿入できるらしい デザインは海外向けだけど けっこうありがたい
Paletti https://appsource.microsoft.com/ja-jp/product/office/WA104147646?src=office&corrid=9128d1c3-5298-4876-94ef-6d5e4df2c958&omexanonuid=dd4de3ba-5b60-4cd3-b730-8218b6afb2eb カラーテーマの保存ができるらしい?
PickMe https://appsource.microsoft.com/en-us/product/office/WA104380510?tab=Overview こちらも画像挿入系。
0 notes
Photo

(第2回 名前付け重要。または,良いコードは良い名前から生まれるんです。―その4 良いクラス名:良いコ-ドへの道―普通のプログラマのためのステップアップガイド|gihyo.jp … 技術評論社から)
これはわかりやすい! よくわからないけどProviderとかつけちゃうのって プログラマ初期の頃のあるある
0 notes
Text
“数学科の留学生が日本人のことを「How are you? をいれると Fine thank you, and you? を返す関数」って言っててワロタ”
— Twitter / xxxxxnk (via yasunao)
2K notes
·
View notes
Text
“これはおじさんたちが若い頃に経験したことのカタチを変えての再生産でして、要するにVOWやラジオのハガキ職人みたいなものなのです。思い出の中にあった古き良き時代の文化が形を変えて甦り続いていく一瞬の幻です。 しかしtumblrにはとんでもない新規性がありました。 ボツがない。 だからおじさんたちは安心して、今日もせっせとリブログに励めるのです。”
—
[N] tumblrの見る夢はフリーダムフリーダム
ハガキ職人だったのか!
「ボツがない」 これは、お見事でした。 (via yagi, tnoma)
(via gkojay)
(via usaginobike)
(via gkojax)
1K notes
·
View notes