リモートワークというか裁量労働制的なお話
発端
「リモートワーク Advent Calendar 2015」の記事を見て「リモートワークやりてぇなー」とフォロワーの@lucca0showと話してたらいつのまにやらブログを書くハメになっていた件。
@lucca0show @scrapbuild いくつかの条件をブログにかこうず!
— ケイタ@羽川さんP (@fmty) 2015, 12月 9
"うひょー、このブログ書いてたら1時間くらい経ってしまった。 @fmty 氏においてはこれを踏まえたエントリを期待しているとお伝えしておきます"というわけで期待してます。 / “リモートワークとか時短勤務な話し - おうさまのみ…” https://t.co/kNKjf9Zxiu
— るっか和尚 (@lucca0show) 2015, 12月 9
最近Twitterとかブログとかで「リモートワーク便利だよ!」とか「こんなに良いことがあるよ!」という記事はよく見かけるけど、「会社にリモートワークを導入させた」という情報があまりないよねって所がスタートだった気がします。
まとめ
先に結論というかまとめ(和尚の構成に全力で乗っかる)
- すでに自宅で仕事できる環境はある
- リモートワークがしたいんじゃなく、裁量労働制に移行したい。
超絶重要課題!!!
来年1/8から傷物語が上映ですよ!! 羽川さん羽川さん羽川さん羽川さん!
前提
まずうちの会社の状態を説明しないとどうしていくつかの条件をクリア出来ないのか理解されないと思うので説明します。
- 地方の零細SIer(いわゆるExcelSIer)
- 社員数10人以下
- 社員はiPhoneとノートPCを支給されてて、あとは好きに売ってこい的なスタイル
- 直行直帰有給遅刻早退なんでもOK
- VPNあるからWi-Fiさえあればどこでも仕事できる
そもそも
僕は別にリモートワークがしたいわけではなく、月に1回か2回でいいので家で仕事ができる日が欲しいってだけなんですよね。 今は当然ながら出社しないといけませんし、家で仕事がしたい日は有休をとるしかない。 一応労働時間による給与計算もあるので、早く帰って夜に仕事をするスタイルだと給料が減っちゃう。
実のところリモートワークにはあんまり興味がなくって、裁量労働制に移行したいって方が大きかったりするw
- 有休とったり早く帰ったりするとタダ働きしてる感じがあって嫌。
- 勤務形態は完全に裁量労働制なのに労働時間による給与計算もミスマッチ感あるので、年俸制とかに移行したい。
- 子供が小さいので、早めに退社して子供の世話をしたい。寝かしつけたあとに仕事をするスタイルにしたい。
問題点
リモートワークでも「この時間に仕事してたよ」ということが確証できれば別に裁量労働制に移行しなくてもいい気もする。
今後どうするの
2016年の目標にしたいなぁ…
ボトルアップ
誤字だよチクショウ!
ボトルアップ #とは
— ひ でっぷ (@hideponm) 2015, 12月 10
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秒 } }
記事を公開したらタイマ計測方法は揃えた方がよいよとご指摘頂いた。あざます。きさとさん。
@fmty んー、時間の計り方はひとつの方法に揃えた方がいいかなと。メイン処理(string/StringBuilder)以外に実装差があると、そこでも時間差が出ているかもーと思われるので。
— きさと (@rkisato) 2015, 11月 20
ということで書き直してみた。回数も揃えた。
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側を変更した場合にどうやって同期させたらいいかがよくわかってない。これも要調査。
@fmty あ、ストアドの実行結果そのままじゃあかんはず。配列になっているのが間違いないならOfType(型)とかでその型のシーケンスに変換してやらないと。確かIDataRecordとかだったよーな
— ぽんこつロボ (@scrapbuild) 2015, 9月 15
イテレータ
クラス内において反復処理の機能を実装するための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)")); } } }続きを読む