Skip to content

Instantly share code, notes, and snippets.

@hitode909
hitode909 / desktop.1h.rb
Created January 19, 2024 15:44
Automatic Desktop Image Generator via OpenAI
#! /usr/bin/ruby
require 'net/http'
require 'json'
require 'uri'
require 'fileutils'
# Replace with your actual API key
API_KEY = ENV['OPENAPI_KEY']
def generate_theme
@hitode909
hitode909 / screen-capture.1m.rb
Created November 30, 2023 01:12
Continuous Screen Capture Script for xbar
#! /usr/bin/ruby
require 'logger'
require 'json'
LOGGER = Logger.new(STDOUT)
if ENV['DEBUG']
LOGGER.level = Logger::Severity::DEBUG
else
LOGGER.level = Logger::Severity::WARN
<p><button id="masawada-cast-button" style="display: none">masawada castを開始する</button>
<div id="masawada-cast-button-not-supported" style="display: none">お使いのブラウザは<a href="https://developer.mozilla.org/en-US/docs/Web/API/Presentation_API" target="_blank">Presentation API</a>に対応していないようです</div>
</p>
<script>
(function () {
const button = document.querySelector('#masawada-cast-button');
const error = document.querySelector('#masawada-cast-button-not-supported');
const show = function () {
button.style.display = 'block';
};
(() => {
const speak = (body, isRetry) => {
window.speechSynthesis.cancel()
if (!body) return;
console.log('speak ' + body);
const synth = window.speechSynthesis;
const allVoices = synth.getVoices();
const jaVoices = allVoices.filter(v => v.lang === 'ja-JP');
const voice = jaVoices[0];
if (!voice && !isRetry) {
@hitode909
hitode909 / crawl.js
Created December 23, 2018 20:40
つくりおきメトリクス
function crawl() {
var content = UrlFetchApp.fetch("https://tsukurioki.hatenablog.com/about").getContentText();
var entries = content.match(/(\d+) 記事/)[1];
var subscribers = content.match(/(\d+)/)[1];
Logger.log(subscribers);
var sheet = SpreadsheetApp.openById("*************************").getSheetByName('data');
var newRow = [new Date(), +entries, +subscribers];
sheet.appendRow(newRow);
}
#!/bin/sh
#
# Create a animation of of a rotating image.
# Some alpha composition is used to crop the result to the original size.
#
command="convert -delay 10 $1 -resize 50% -trim +repage -bordercolor white"
command="$command \\( +clone -border 1x1 -fill lightsteelblue"
command="$command -colorize 100% \\) -gravity center"
for i in `seq 100 -2 20 ;`; do
import * as ts from "typescript";
import * as Lint from "tslint";
export class Rule extends Lint.Rules.AbstractRule {
/* tslint:disable:object-literal-sort-keys */
public static metadata: Lint.IRuleMetadata = {
ruleName: "no-jquery-argument",
description: "Disallows receiving jQuery object in arguments.",
rationale: Lint.Utils.dedent`
Do not receive jQuery Object. You must receive HTMLElement or Array<HTMLElement>.
# replace HERE interactive, execute command.
# for example: ruby interactive.rb expr HERE + HERE + HERE
require 'readline'
require 'shellwords'
HERE = /HERE/
def read_input
Readline.readline("> ", true)
# git ls-files | ruby theseus.rb | sort | uniq -c
require 'time'
ARGF.each_line.each_with_index {|file, index|
blame = `git blame -c #{file}`.encode('utf-8', invalid: :replace, undef: :replace, replace: '').split(/\n/)
blame.each{|line|
puts Time.parse(line.split(/\t/)[2]).year
}
}
(defun prt-introduce-variables ()
(interactive)
(if mark-active
(let (
(resultbuf (get-buffer-create "*introduce-variables*"))
)
(with-current-buffer resultbuf
(setq buffer-read-only nil)
(erase-buffer)
)