トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2020-09-05 (Sat) [長年日記]

_ RubyKaigi Takeout 2020

新型コロナの影響でオンライン開催になったRubyKaigi Takeout 2020で、Magic is organizing chaosという発表をした。

TwitterのDMで催促を受けて発表可否の確認のメールに気づいたのが8/7で、動画の提出期限が8/13だったので、慌ててpull requestの残作業をやっつけて動画を作成したが、何とか間に合った。

オンラインということでどれだけRubyKaigi感が出るんだろうと思っていたけど、想像していたのよりRubyKaigiっぽさがあった。

と書いたけど、コミック版から読んだ人にもいくらか雰囲気が伝わっていて、いつか小説版を読んでもらえるといいですね。

スタッフ、発表者、視聴者のみなさん、ありがとうございました。

P.S. Proc#using導入は感想戦でRubyVM::ASTなりを使ったマクロっぽいものでいいじゃんと言われたりして苦戦中。それだとcaller bindingが欲しいし、毎回マクロ展開&評価をやるのは遅いと思うんだけど。

Tags: Ruby

2020-09-16 (Wed) [長年日記]

_ Google Apps Scriptで出勤日カレンダーを作った

新型コロナ感染症対策のため、NaCl松江本社の開発メンバーは2グループに分かれて営業日は交互に在宅勤務し、感染拡大の状況によっては全メンバーが在宅勤務に移行する運用をしている(というのは原則で、メンバーの都合でフル出勤したり、ほとんど在宅勤務の人もいる)。

連休明けなどで出勤日がわからなくなる人が続出したため、Googleカレンダーに以下のようなISUCONで負けそうなGoogle Apps Scriptで出勤日の予定を自動登録してみた。

var OFFICE_DAY_CALENDAR_IDS = ["xxxxx", "xxxxx", ...];

function createOfficeDayEvents() {
  var holidayCalendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');

  var officeDayCalendars = OFFICE_DAY_CALENDAR_IDS.map(function (id) {
    return CalendarApp.getCalendarById(id);
  });
  var current = 0;
  var date = new Date("2020/09/01");
  var endDate = new Date("2020/12/25");
  while (date <= endDate) {
    var day = date.getDay();
    if (day != 0 && day != 6 && holidayCalendar.getEventsForDay(date).length == 0) {
      officeDayCalendars.forEach(function (calendar) {
        calendar.getEventsForDay(date).forEach(function (event) {
          event.deleteEvent();
        });
      });
      officeDayCalendars[current].createAllDayEvent("出勤日", date);
      current++;
      if (current >= officeDayCalendars.length) {
        current = 0;
      }
    }
    date.setDate(date.getDate() + 1);
  }  
}