Skip to content

Instantly share code, notes, and snippets.

@y16ra
y16ra / import_slack_exportdata.py
Created December 1, 2015 10:37
slackからexportしたデータをMongoDBに取り込む
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import json
import sys, os, datetime
import pymongo
# sysモジュールをリロードする
reload(sys)
# デフォルトの文字コードを変更する.
sys.setdefaultencoding('utf_8')
@y16ra
y16ra / url-monitoring.gs
Last active January 19, 2016 04:52
URL Monitoring using Google AppsScript
/**
* スプレッドシートに記載したURLの外形監視を実行する。
* 指定されたURLに接続してステータスコードが200以外の場合メールで通知する。
* また、前回の実行時に200以外のステータスコードだった場合で、
* ステータスが200になった場合は復旧メールを送信する。
* スプレッドシートの項目は、サービス名, 監視対象URL, ステータス, emails(10個まで) とする。
*/
function monitoring() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
@y16ra
y16ra / most_expensive_query.sql
Created January 26, 2016 05:07
過去7日間で最も費用がかかったクエリを抽出する
SELECT
protoPayload.authenticationInfo.principalEmail AS email,
ROUND(SUM(protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes) /1000000000, 3) AS total_GBytes,
protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.billingTier AS billing_tier,
COUNT(protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query) AS query_count,
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query AS query_string,
FROM
TABLE_DATE_RANGE(AuditLogs.cloudaudit_googleapis_com_data_access_, DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), CURRENT_TIMESTAMP())
WHERE
protoPayload.serviceData.jobCompletedEvent.eventName = 'query_job_completed'
@y16ra
y16ra / slack-file-upload.js
Created June 14, 2016 08:51
slack apiで画像ファイルをアップロードする
var request = require('request');
var fs = require('fs');
const SLACK_BOT_TOKEN = 'hogehoge';
const api_url = 'https://slack.com/api/';
var fileName = 'hogefuga.png';
var channel = 'general';
options = {
token: SLACK_BOT_TOKEN,
filename: fileName,
@y16ra
y16ra / digits.py
Created September 28, 2016 09:14
数値の桁数を求める
import math
n = 100
digits = int(math.log10(n) + 1) # 3
import json
import requests
import urllib
import sys
from xml.etree import ElementTree
doItAgain = "yes" #Control While loop
@y16ra
y16ra / deleteOldMail.gs
Created January 30, 2017 08:21
ラベルと保管日数をスプレッドシートで指定して保管日数を超えているメールを削除するGAS
function deleteOldMail() {
var sheet = SpreadsheetApp.getActive().getSheetByName('label');
for(var row=2; row<=sheet.getLastRow(); row++){
var labelName = sheet.getRange(row, 1).getValue();
var days = sheet.getRange(row, 2).getValue();
var deleteThreads = GmailApp.search('older_than:'+days+'d -is:starred label:'+ labelName);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
@y16ra
y16ra / context.py
Created March 29, 2017 01:45
pythonでファイル位置から1つ上のディレクトリをsys.pathに追加する
import sys
sys.path.append(path.normpath(path.join(path.dirname(path.abspath( __file__ )), '..')))
@y16ra
y16ra / AwsLambdaClient.kt
Created July 6, 2018 03:46
Call AWS Lambda Function by Kotlin
class AwsLambdaClient {
val aws_access_key_id = "<YOUR_ACCESS_KEY_PASTE_HERE>"
val aws_secret_access_key = "<YOUR_SECRET_KEY_PASTE_HERE>"
val region = "ap-northeast-1"
val function_name = "test_func"
fun invoke() {
val payload = """
{
"token": "TOKEN",
@y16ra
y16ra / two-sum-brute-force.py
Created December 23, 2019 03:18
Awful python code for Two Sum problem
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i1, num1 in enumerate(nums):
for i2, num2 in enumerate(nums[i1+1:]):
if target == (num1 + num2):
return [i1, i2 + i1 + 1]