FROM ME TO YOU

oh my bizarre life !!

リモートワークというか裁量労働制的なお話

発端

リモートワーク Advent Calendar 2015」の記事を見て「リモートワークやりてぇなー」とフォロワーの@lucca0showと話してたらいつのまにやらブログを書くハメになっていた件。

最近Twitterとかブログとかで「リモートワーク便利だよ!」とか「こんなに良いことがあるよ!」という記事はよく見かけるけど、「会社にリモートワークを導入させた」という情報があまりないよねって所がスタートだった気がします。

まとめ

先に結論というかまとめ(和尚の構成に全力で乗っかる)

  • すでに自宅で仕事できる環境はある
  • リモートワークがしたいんじゃなく、裁量労働制に移行したい。

超絶重要課題!!!

www.kizumonogatari-movie.com

来年1/8から傷物語が上映ですよ!! 羽川さん羽川さん羽川さん羽川さん!

f:id:fmty_keita:20151210175656j:plain

前提

まずうちの会社の状態を説明しないとどうしていくつかの条件をクリア出来ないのか理解されないと思うので説明します。

  • 地方の零細SIer(いわゆるExcelSIer)
  • 社員数10人以下
  • 社員はiPhoneとノートPCを支給されてて、あとは好きに売ってこい的なスタイル
  • 直行直帰有給遅刻早退なんでもOK
  • VPNあるからWi-Fiさえあればどこでも仕事できる

そもそも

僕は別にリモートワークがしたいわけではなく、月に1回か2回でいいので家で仕事ができる日が欲しいってだけなんですよね。 今は当然ながら出社しないといけませんし、家で仕事がしたい日は有休をとるしかない。 一応労働時間による給与計算もあるので、早く帰って夜に仕事をするスタイルだと給料が減っちゃう。

実のところリモートワークにはあんまり興味がなくって、裁量労働制に移行したいって方が大きかったりするw

  • 有休とったり早く帰ったりするとタダ働きしてる感じがあって嫌。
  • 勤務形態は完全に裁量労働制なのに労働時間による給与計算もミスマッチ感あるので、年俸制とかに移行したい。
  • 子供が小さいので、早めに退社して子供の世話をしたい。寝かしつけたあとに仕事をするスタイルにしたい。

問題点

リモートワークでも「この時間に仕事してたよ」ということが確証できれば別に裁量労働制に移行しなくてもいい気もする。

今後どうするの

  • 裁量労働制についての理解を深め、会社に提案していく(提案してOKと言われているので)
  • 現在の給与額を維持できるよう方法を模索←コレ重要
  • 裁量労働制銀の弾丸のように考えてる節があるので改善していく

2016年の目標にしたいなぁ…

ボトルアップ

誤字だよチクショウ!

StringBuilderとStopwatch機能を使ってみた

StringBuilderはえー。 ミリ秒表示を調べるのに手こずった。 桁数揃えるのは切り捨て処理とか必要なのかな。ちょっと面倒。

    class Program
    {
        static void Main(string[] args)
        {

            string Str = "";
            DateTime StartDt = DateTime.Now;
            for(int i = 0; i< 30000; i++)
            {
                Str = Str + "ABCDEFG";
            }
            DateTime EndDt = DateTime.Now;
            Console.WriteLine("String連結3万回:{0}秒",(EndDt - StartDt).TotalSeconds);

            StringBuilder stb = new StringBuilder();
            Stopwatch Sw = new Stopwatch();
            Sw.Start();
            for (int i = 0; i < 300000; i++)
            {
                stb.Append("ABCDEFG");
            }
            Sw.Stop();
            double Sec = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("StringBulider30万回:{0}秒", Sec);

            // 実行結果
            // String連結3万回:1.4610836秒
            // StringBulider30万回:0.00474824136650194秒
        }
    }

記事を公開したらタイマ計測方法は揃えた方がよいよとご指摘頂いた。あざます。きさとさん。

ということで書き直してみた。回数も揃えた。

        static void Main(string[] args)
        {
            string Str = "";
            Stopwatch Sw = new Stopwatch();
            Sw.Start();
            for (int i = 0; i < 30000; i++)
            {
                Str = Str + "ABCDEFG";
            }
            Sw.Stop();
            double Sec1 = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("String連結3万回   :{0}秒", Sec1);


            StringBuilder stb = new StringBuilder();
            Sw.Reset();
            Sw.Start();
            for (int i = 0; i < 30000; i++)
            {
                stb.Append("ABCDEFG");
            }
            Sw.Stop();
            double Sec2 = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("StringBulider3万回:{0}秒", Sec2);

            // 実行結果
            // String連結3万回   :1.57325590253888秒
            // StringBulider3万回:0.000421969408994146秒

        }

DBの型を変更したらforeachでエラーがでるようになった

テーブルのとあるフィールドの型をintからfloatに変更したらforeachでエラーがでるようになった

            using (DataContext db = new DBDataContext())
            {
                // ストアドプロシージャ実行して値を取得
                var n = db.GetData("2015-09-15");

                foreach (var j in n)
                {
                    Debug.WriteLine(j.id);
                }

            }

foreachの値変換で型が違うと怒られる。

色々アドバイスを頂きながら調べてみたところ、どうやらストアドプロシージャ名+Resultという型(今回だとGetDataResult)という型が自動実装されているらしく、そこの型が変わっていなかった模様。

手動でintからdoubleに変更したら問題なく動いた。

LINQ TO SQLクラス、DB側を変更した場合にどうやって同期させたらいいかがよくわかってない。これも要調査。

イテレータ

クラス内において反復処理の機能を実装するためのforeachステートメントは、とかくプログラムコードが複雑に、かつ冗長になってしまうことがあります。 このような場合はイテレーターを利用することで反復処理のコードをシンプルにすることができます

参考書の説明を読んでも???だったけど、実際にコード書いてみたらなんとなくわかったような気がする。

下のコードの例のように、反復中に条件を挟みたい場合なんかはメインプログラム側で制御が必要になってくるけど、イテレータを使えば反復処理を外に出すことができるからメインプログラムをシンプルにできるってことかな。 うまく言語化できてないけど、こんな感じかな。

    class Program
    {
        public static IEnumerable MethodShow(int days)
        {
            DateTime dt = DateTime.Today;
            for (int i = 1; i <= days; )
            {
                if (dt.DayOfWeek != DayOfWeek.Monday && dt.DayOfWeek != DayOfWeek.Thursday)
                {
                    yield return dt;
                    i++;
                }
                dt = dt.AddDays(1);
            }
        }


        static void Main(string[] args)
        {
            foreach(DateTime dt in MethodShow(5))
            {
                Console.WriteLine(dt.ToString("yyyy年MM月dd日(ddd)"));
            }
        }
    }
続きを読む

型パラメータを持つクラスを実装してみる

ジェネリッククラスやディクショナリークラスの型パラメータは独自に実装したクラスにも適用できる。

今回の例だと普通にジェネリック使えばよさそうだけど、インデクサ(setやget)が実装できるので、この辺りに処理が挟めむケースとかなら便利かもしれない。

    class Program
    {
        public class ListTest<T>
        {
            T[] list = new T[100];
            int add;

            public void AddItem(T item)
            {
                list[add++] = item;
            }

            public T this[int Index]
            {
                get
                {
                    return list[Index];
                }
                set
                {
                    list[Index] = value;
                }
            }
        }

        static void Main(string[] args)
        {
            // string型の配列を作成
            ListTest<string> list = new ListTest<string>();

            list.AddItem("hogehoge");
            list.AddItem("fugafuga");

            Console.WriteLine(list[0]);
            Console.WriteLine(list[1]);

            // DataTime型の配列を作成
            ListTest<DateTime> list2 = new ListTest<DateTime>();
            list2.AddItem(DateTime.Today);

            Console.WriteLine(list2[0]);

            // 普通にジェネリッククラスで作ってみる
            List<DateTime> list3 = new List<DateTime>();
            list3.Add(DateTime.Today);

            Console.WriteLine(list3[0]);
        }
    }
続きを読む