Skip to content

Instantly share code, notes, and snippets.

View petamoriken's full-sized avatar
🌐
Proceeding with the Web Standards

Kenta Moriuchi petamoriken

🌐
Proceeding with the Web Standards
View GitHub Profile
@petamoriken
petamoriken / Retmise.js
Last active September 3, 2015 14:06
自分ならこんな感じに書く Retmise.js
// http://qiita.com/mpyw/items/b7192d3aadf90d55ad49
(function (root) {
"use strict";
// 単純に constructor を外に出してみた。こっちの方が好み。
function Retmise(options) {
if (this.constructor !== Retmise) {
return new Retmise(options);
}
@petamoriken
petamoriken / getCiNiiBibs.js
Created October 28, 2015 13:58
PhantomJS では page.evaluate では非同期的なことができないけど XMLHttpRequest($.ajax) を同期的に使うことでなんとかなった()
var phantom = require('node-phantom-async');
var co = require('co');
var buildQuery = function (object) {
return Object.keys(object).map(function (key) {
return encodeURIComponent(key) + '=' + encodeURIComponent(object[key]);
}).join('&');
}
var scrapeFromCiNii = function (keywords) {
@petamoriken
petamoriken / decodeText.js
Last active February 8, 2018 12:03
これで文字コードのテーブルを用意しなくてすむよ!
/**
* ArrayBuffer から文字列にデコードする
* @param {ArrayBuffer} buffer
* @param {string} charset
* @returns {Promise<string>}
*/
async function decodeText(buffer, charset="utf-8") {
// Encoding API
if (window.TextDecoder) {
const decoder = new TextDecoder(charset);
@petamoriken
petamoriken / InlineWorkerClass.js
Created November 23, 2015 03:11
InlineWorker の生成(function によるラッパー vs Worker クラスの継承)
class InlineWorker extends Worker {
constructor(func) {
if(typeof func !== "function")
throw new TypeError("Please set function");
let str = `(${func.toString()})()`;
//let str = func.toString().match(/\s*{([\w\W]*?)}$/)[1];
let blob = new Blob([str], {type:"text/javascript"});
super(URL.createObjectURL(blob));
}
@petamoriken
petamoriken / slicedBuffer.js
Last active November 28, 2015 02:26
TypedArray の対応する ArrayBuffer の切り出し機能が欲しい。
for(let TypedArray of [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]) {
Object.defineProperty(TypedArray.prototype, "slicedBuffer", {
get: function() {
let byteOffset = this.byteOffset, byteLength = this.byteLength;
return this.buffer.slice(byteOffset, byteOffset + byteLength);
}
});
}
@petamoriken
petamoriken / sleepSort.js
Created December 1, 2015 03:14
また新たなクソを生み出してしまったな。
"use strict";
function sleepSort(array, callback) {
array = array || [];
callback = callback || noop;
const promises = [], ret = [];
let retPromise;
for(let val of array) {
@petamoriken
petamoriken / MyEventTarget.js
Last active March 7, 2020 13:59
EventTarget constructor が使えないときに無理矢理 EventTarget クラスを作るコード。
class MyEventTarget extends DocumentFragment {
constructor() {
super();
Object.setPrototypeOf(this, EventTarget.prototype);
}
static [Symbol.hasInstance](instance) {
return instance instanceof EventTarget;
}
}
@petamoriken
petamoriken / typecheck.js
Created January 2, 2016 20:06
JavaScript (ES6) の型チェックメモ。
// プリミティブ値
// undefined
hoge === undefined; // strict mode のみ
hoge === void 0;
typeof hoge === "undefined";
Object.prototype.toString.call(hoge) === "[object Undefined]"; // 他に Symbol.toStringTag が "Undefined" なオブジェクトがないときのみ
// null
hoge === null;
@petamoriken
petamoriken / main.js
Created May 25, 2016 10:54
WebGL で三角形の描画
function createShader(gl, id) {
const element = document.getElementById(id);
const [type, text] = [element.type, element.text];
let shader;
switch(type) {
case "x-shader/x-vertex":
shader = gl.createShader(gl.VERTEX_SHADER);
break;
@petamoriken
petamoriken / webgl-test.html
Created June 25, 2016 11:21
WebGL で描画テスト
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Obj View</title>
<!-- JavaScript -->
<script src="js/gl-matrix.js"></script>
<script>
(() => {