Skip to content

Instantly share code, notes, and snippets.

// トリガー設定で1時間毎ぐらいに起動する
function myFunction() {
threads = GmailApp.search('label:kin is:unread') // ラベルはフィルタ設定でつける
if (threads.length == 0) {
return
}
message = threads[0].getMessages()[0] // どの一通でも通知されれば見にいくので
text = "メールだよ\n" + message.getFrom() + "\n「" + message.getSubject() + "」"
@pen
pen / import_csv.gs
Last active February 7, 2018 22:01
Gドライブに置いたCSVファイルをシートに読み込む
function main() {
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var file = DriveApp.getFilesByName("test_1.csv").next();
import_csv(sheet, file);
}
function import_csv(sheet, file, r, c, enc) {
var table = Utilities.parseCsv(file.getBlob().getDataAsString(enc || "SHIFT_JIS");
sheet.getRange(r || 1, c || 1, table.length, table[0].length).setValues(table);
}
@pen
pen / rm-invalid-pid.sh
Last active October 31, 2017 01:51
中身が間違ってるPIDファイルを消す
for pid_file in /var/run/*.pid; do
t=${pid_file##*/}
cmd=${t%.*}
pid=`cat $pid_file`
comm=/proc/$pid/comm
if [ -e $comm ]; then
if [ `cat $comm` == $cmd ]; then
continue
fi
fi
@pen
pen / n-root.rb
Created July 9, 2017 08:20
巨大な整数のN乗根を求める。 某CTFで使った
#!/usr/bin/env ruby
# vim:fileencoding=utf-8
# xのn乗根
def root(x, n)
r = 0
a = 1 << (Math.log(x) / n / Math.log(2))
while a > 0
ra = r | a
d = x - ra ** n
@pen
pen / build-ricty.sh
Last active October 18, 2020 16:06
Rictyフォントを作る。要 curl unzip fontforge
#!/bin/sh
missing=''
for cmd in curl unzip fontforge; do
if ! type $cmd &>/dev/null; then
missing="$missing$sep$cmd"
sep=', '
fi
done
if [ -n "$missing" ]; then
@pen
pen / show-colortable.pl
Created May 23, 2017 03:14
xterm-256colorsの色を表示
#!/usr/bin/perl
use strict;
use warnings;
# ESC [ 38 ; 5 ; %3d m ForeGround
# ESC [ 48 ; 5 ; %3d m BackGround
my @formats = ( "\e[48;5;%dm \e[m ", "%3d " );
print "System colors:\n";
@pen
pen / long_live.gs
Last active April 18, 2017 09:24
Google App Scriptで、時間がかかりすぎて打ち切られそうな処理を少しずつ処理してトリガーで再開するテンプレ
var LIMIT = 4; // 自主的に中断する時間(分)
var INTERVAL = 1; // 再開まで(分)
var CHUNK = 20; // 一気に処理するアイテム数。この数ごとに時間を気にする
var PROPERTY_NAME = "storage"; // データのセーブ用プロパティ名
function myFunction() {
// タイムリミットの時刻を計算
var time_limit = new Date() -0 + LIMIT * 60 * 1000;
var sheet = SpreadsheetApp.getActiveSheet();
@pen
pen / supernet.pl
Created March 18, 2017 00:34
combine subnets
#!/usr/bin/env perl -w
use strict;
package CIDRs {
sub new { bless +{}, shift }
sub add {
my ($self, $cidr) = @_;
my ($ipv4, $w) = split '/', $cidr;
my $b = (hex join '', map { sprintf '%02X', $_ } split /\./, $ipv4) >> 32 - $w;
#!/usr/bin/env perl
use strict;
use warnings;
sub thconv
{
my $n = shift;
my ($offset, $divider, $digits) = (1, 0, 0);
do {
$offset *= 0x100;
sub get_data
{
my ($self, $key) = @_;
$data = $self->get($key);
$flag = $self->get("$key\::flag");
unless ($flag && $data) {
$self->set("$key\::flag", 1, $self->expire - $self->delta);
...; # do task