[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
次男が保育園デビューした。
まだ慣れないのか自宅程活発ではないにしろ初日からよく遊んでいるしいい感じになじめそうだ。ただ、二日目以降道中は「やだー」とは言う。それでも泣いていやがるほどではない。
保育園は登園時のオペレーションが大変だ。登園したら着替えを指定の棚にぶち込み (履いてきた靴下、食事用エプロン、上着 (二種類!)、その他はそれぞれ別の棚である)、さらにコップ、歯ブラシ、タオル (3種類の口拭きタオルと手拭きタオル1枚) を指定の棚に入れ、汚れた服やタオルを入れるための袋を指定の場所にセットする。連絡帳を提出し、配布物を回収し、バッヂを装着し……ああ、まずった、打刻を忘れていた……という具合である。なお、帰りは全部回収するわけではない。必要なものをぱっぱっと回収して打刻して撤退である。覚えられるかっ!
去年まで預けていた社内の託児施設はその辺がほぼほぼお任せだったので大変に楽だった。ここから慣らしていかないといけない。次男もだが親も頑張らないといけないのだ……
HTML の table の行・列を固定化し、スクロールしてもどのセルがどの行・列のもののかを見易いようにしたい、という話が挙がり試してみた。
そのために色々と試行錯誤した結果「列も行も」は HTML/CSS だけでは難しそうだと考えた。実のところ「列だけ」はやれそうだし、やっている方もいらっしゃった ( two fixed columns, horizontal scroll - JSFiddle とか)。行だけはもう少し難度が下がる。しかし、行も列もとなると少なくとも私にはできなかったのである。
ただ、ちょっと js を書いたらできた。 https://shunshun94.github.io/shared/jquery/io/github/shunshun94/table/tableSample.html こんな感じである。
jQuery と JS のライブラリを1つ読み込めばできるようにしてみた。以下のようにして使う。
<table id="columnFixedTable" border="1">
<thead><!-- 略 --></thead>
<tbody><!-- 略 --></tbody>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://shunshun94.github.io/shared/jquery/io/github/shunshun94/table/fixedTable.js"></script>
<script>
new io.github.shunshun94.table.FixedTable({}, $('#columnFixedTable'));
</script>
動作サンプルは https://shunshun94.github.io/shared/jquery/io/github/shunshun94/table/tableSample2.html にある
第一引数に色々入れることで挙動を変えられる。
new io.github.shunshun94.table.FixedTable({
colColumns:3, // 列をいくつ固定するのかを指定する。指定しなければ1
width: 500, // 表の表示領域の横幅。指定しなければその table が可能な範囲で最大の横幅となる
bodyHeight: 200 // 表の固定されない領域の縦幅。指定しなければ tbody の高さとなる
}, $('#columnFixedTable'));
この場合の挙動は https://shunshun94.github.io/shared/jquery/io/github/shunshun94/table/tableSample2.html?colColumns=3&width=500&bodyHeight=200 のようになる。
この記事は Creative Commons by-by 3.0 で公開されている記事を翻訳したものです。その為、この記事も同じライセンスとなります。
元記事は Method code too large in Groovy & Grails? - Stack Overflow です。
Method code too large in Groovy & Grails? - Stack Overflow の翻訳です。ある日のこと、会社の後輩が「なんじゃそりゃあああ」ってしてたので「どうしたの?」したら「ひよちゃん、java.lang.RuntimeException: Method code too large って何」と問われたので調べてみたところ見つけたところです (まぁ、これだけでは後輩の問題は解決しないんだけど……)。
2014-06-17 11:22:18,622 [Thread-11] ERROR compiler.GrailsProjectWatcher - Compilation Error: startup failed: General error during class generation: Method code too large!
これ、どうしたらいいかな? 4,5 行ほどコードをコメントアウトしてもう一度試したら問題なく動きます BootStrap ファイルのサイズは 149KB しかないのですが……
JVM (Java Virtual Machine) の制限で1メソッドの長さは 65536 bytes までと決まっています。これについてはこの記事が詳しく説明しています。この問題を解決する最善策は大きなメソッドをいくつかの小さなメソッドに分割することであり、ベストプラクティスです。
また、JVM の JIT compiler は 8192 bytes より長いコードをコンパイルしません。この挙動は -XX:-DontCompileHugeMethods で変更できます。
日時 2014年6月17日 06:15
返答者 dror-bereznitsky
後輩が直面したのは Groovy on Jenkins でのことであった。以上の情報でこれを後輩に解決してこい、というのはちょっと無茶である。この問題は結構前から知られているようであり ([JENKINS-37984] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during class generation: Method code too large! error in pipeline Script - Jenkins JIRA) また、解決も難しいだろう。大変ありがたいことに [JENKINS-56500] Declerative pipeline restricted in code size - Jenkins JIRA 曰く以下の通りらしい。
When working with a declarative pipeline script, we run into an error "Method Code too large".
This seems to happen when the code between 'pipeline{}' is more than a specific size.
つまり パイプラインを記述したスクリプトを動かそうとしたが、 "Method Code too large" と言われて止まった。
どうも
とのことだ。これをそのまま信じるとすれば、パイプラインを分けるしかないんだろうなぁ……pipeline{} が一定以上長いと発生するらしい。
少し前にdiscord-bcdice を常時動かしたいという話をしていたが、結局 Google Cloud Platform (以下 GCP) で実現させた。
GCP には Always Free なるものがある。詳しくは GCP のドキュメントを読んでいただきたいが、米国リージョンに f1-micro インスタンスを立てたときに限りインスタンス代金が無料となる。これでインスタンスを立て、 Java を入れてやり、 Discord-BCDicebot を動かしてやれば無料で常動にできるだろう、という話である。
ただ、インスタンス性能が限られているので一般に公開はちょっと無理。ただ、手順は簡単なのでやりたければ各々が GCP なりどこなりでやってみてはいいのではないだろうか。
他のクラウドサービスも検討はしたが、AWS EC2 はお仕事でちょこちょこ使うので今回はパスした。IBMCloud も見て試してみたがどうにもインスタンスが上手くたってくれない。「インスタンスが異常終了しました」が延々と出てしまい、作業を開始できなかったので今回はあきらめた。ただ、IBMCloud がクレカ登録なしで始められるのは結構好印象である。Azure とかも見てみた方が良かったかな。
https://shunshun94.github.io/shared/other/io/github/shunshun94/util/timeutil.jsこんなのを書いた。
// 2019年の2月が何日あるのかを計算している
console.log(1, io.github.shunshun94.util.Time.getMonthDays('2019/2') );
console.log(2, io.github.shunshun94.util.Time.getMonthDays('2019/02') );
console.log(3, io.github.shunshun94.util.Time.getMonthDays('2019-2') );
console.log(4, io.github.shunshun94.util.Time.getMonthDays('2019-02') );
console.log(5, io.github.shunshun94.util.Time.getMonthDays(2019, 2) );
console.log(6, io.github.shunshun94.util.Time.getMonthDays('2019', '2') );
console.log(7, io.github.shunshun94.util.Time.getMonthDays('2019', '02') );
console.log(8, io.github.shunshun94.util.Time.getMonthDays(new Date('2019/02/14')) );
console.log(9, io.github.shunshun94.util.Time.getMonthDays(2), '(これだけ「今年の2月」を対象としている)');
// 第一引数から第二引数の期間にある週末をリストアップ
const weekends = io.github.shunshun94.util.Time.getWeekendsInTerm(
new Date('2019/1/1'),
new Date('2020/1/1')
);
// => ※1 結果は追記部分記載
// 第一引数から第二引数の期間にある 10:00~14:00 の区間をリストアップ
const dayTimes = io.github.shunshun94.util.Time.getDaytimeTermInTerm(
new Date('2019/1/1'),
new Date('2020/1/1'),
'10:00',
'14:00'
);
// 第一引数から第二引数の期間にある 10:00~14:00 の区間をリストアップ (月~金除)
io.github.shunshun94.util.Time.getDaytimeTermInTerm(
new Date('2019/1/1'),
new Date('2020/1/1'),
'10:00',
'14:00',
[1,2,3,4,5]
);
// 上述の weekends と dayTimes の重複する区間だけリストアップ
io.github.shunshun94.util.Time.getConflictedTerms(weekends, dayTimes);
スケジュールの重複などを扱わなければならない状況で便利かも。
質問日時 2014年6月17日 05:28
質問者 wright