diff --git a/batch-service/cloudbuild-trend-article-crawler.yaml b/batch-service/cloudbuild-trend-article-crawler.yaml new file mode 100644 index 00000000..a8687adc --- /dev/null +++ b/batch-service/cloudbuild-trend-article-crawler.yaml @@ -0,0 +1,26 @@ +substitutions: + _IMAGE: 'asia-northeast1-docker.pkg.dev/geek-picks-staging/trend-article-crawler/latest' + _JOB_NAME: 'trend-article-crawler' + _REGION: 'asia-northeast1' +steps: +# Build the container image +- name: 'gcr.io/cloud-builders/docker' + args: ['build', '-t', 'gcr.io/$PROJECT_ID/$_IMAGE',' -f ', 'Dockerfile.trend-article-crawler', '.'] +# Push the container image to Container Registry +- name: 'gcr.io/cloud-builders/docker' + args: ['push', 'gcr.io/$PROJECT_ID/$_IMAGE'] +# Deploy container image to Cloud Run +- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' + entrypoint: gcloud + args: + - 'run' + - 'jobs' + - 'deploy' + - '$_JOB_NAME' + - '--image' + - 'gcr.io/$PROJECT_ID/$_IMAGE' + - '--region' + - '$_REGION' + - '--execute-now' +images: +- gcr.io/$PROJECT_ID/$_IMAGE \ No newline at end of file diff --git a/sample/package-lock.json b/sample/package-lock.json deleted file mode 100644 index 0795dae1..00000000 --- a/sample/package-lock.json +++ /dev/null @@ -1,1245 +0,0 @@ -{ - "name": "sample", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "sample", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "axios": "^1.6.8", - "cheerio": "^1.0.0-rc.12", - "jsdom": "^24.0.0", - "rss-parser": "^3.13.0" - }, - "devDependencies": { - "@types/jsdom": "^21.1.6", - "@types/node": "^20.11.30", - "nodemon": "^3.1.0", - "ts-node": "^10.9.2", - "typescript": "^5.4.3" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/jsdom": { - "version": "21.1.6", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz", - "integrity": "sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", - "dependencies": { - "rrweb-cssom": "^0.6.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", - "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", - "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" - }, - "node_modules/rss-parser": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz", - "integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==", - "dependencies": { - "entities": "^2.0.3", - "xml2js": "^0.5.0" - } - }, - "node_modules/rss-parser/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - } -} diff --git a/sample/package.json b/sample/package.json deleted file mode 100644 index 4963a2db..00000000 --- a/sample/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "sample", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "start": "npm run build:live", - "build": "tsc -p .", - "build:live": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@types/jsdom": "^21.1.6", - "@types/node": "^20.11.30", - "nodemon": "^3.1.0", - "ts-node": "^10.9.2", - "typescript": "^5.4.3" - }, - "dependencies": { - "axios": "^1.6.8", - "cheerio": "^1.0.0-rc.12", - "jsdom": "^24.0.0", - "rss-parser": "^3.13.0" - } -} diff --git a/sample/src/apis/devto.ts b/sample/src/apis/devto.ts deleted file mode 100644 index d4509e2e..00000000 --- a/sample/src/apis/devto.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { convertRssToJson } from "./rss"; - -export const fetchDevTo = async () => { - const data = await convertRssToJson("https://dev.to/feed"); - console.log("🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥"); - console.log(data); - return data; -}; diff --git a/sample/src/apis/hatena.ts b/sample/src/apis/hatena.ts deleted file mode 100644 index f8b51beb..00000000 --- a/sample/src/apis/hatena.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { convertRssToJson } from "./rss"; - -export const fetchHatena = async () => { - const data = await convertRssToJson("https://b.hatena.ne.jp/hotentry/it.rss"); - // console.log("🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥"); - return data; -}; diff --git a/sample/src/apis/qiita.ts b/sample/src/apis/qiita.ts deleted file mode 100644 index 5b6df040..00000000 --- a/sample/src/apis/qiita.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { convertRssToJson } from "./rss"; - -export const fetchQiita = async () => { - const data = await convertRssToJson( - "https://qiita.com/popular-items/feed.atom" - ); - console.log("🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥"); - console.log(data); - return data; -}; diff --git a/sample/src/apis/rss.ts b/sample/src/apis/rss.ts deleted file mode 100644 index 2e38c617..00000000 --- a/sample/src/apis/rss.ts +++ /dev/null @@ -1,58 +0,0 @@ -import Parser from "rss-parser"; -import { Rss } from "../types/rss"; -import axios from "axios"; -import { JSDOM } from "jsdom"; - -const parser = new Parser(); - -export const convertRssToJson = async (url: string) => { - const feed = await parser.parseURL(url); - const rssList: Rss[] = []; - for await (const item of feed.items) { - if (!item?.link) return; - const image = !!item.link ? await getOgpImage(item.link) : ""; - const newRss: Rss = { - date: item?.date || "", - title: item?.title || "", - link: item?.link || "", - contentEncoded: item?.["content:encoded"] || "", - contentEncodedSnippet: item?.["content:encodedSnippet"] || "", - dcDate: item?.["dc:date"] || "", - content: item?.content || "", - contentSnippet: item?.contentSnippet || "", - rdfAbout: item?.["rdf:about"] || "", - isoDate: item?.isoDate || "", - image: image, - }; - rssList.push(newRss); - } - - return rssList; -}; - -export const getOgpImage = async (url: string) => { - let image = ""; - try { - const encodedUri = encodeURI(url); - const headers = { "User-Agent": "bot" }; - const res = await axios.get(encodedUri, { headers: headers }); - const html = res.data; - const dom = new JSDOM(html); - const meta = dom.window.document.head.querySelectorAll("meta"); - - const ogp = [...meta] - .filter((element: Element) => element.hasAttribute("property")) - .reduce((previous: any, current: Element) => { - const property = current.getAttribute("property")?.trim(); - if (!property) return; - const content = current.getAttribute("content"); - previous[property] = content; - return previous; - }, {}); - image = ogp["og:image"] as string; - } catch (e) { - console.log(e); - } - - return image; -}; diff --git a/sample/src/apis/zenn.ts b/sample/src/apis/zenn.ts deleted file mode 100644 index 070f7000..00000000 --- a/sample/src/apis/zenn.ts +++ /dev/null @@ -1,67 +0,0 @@ -import axios from "axios"; -import { load } from "cheerio"; - -import { ZennArticle } from "../types/zenn"; -import { convertRssToJson } from "./rss"; - -export const fetchZennV2 = async () => { - const data = await convertRssToJson("https://zenn.dev/feed"); - console.log("🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥"); - console.log(data); - return data; -}; - -export const fetchZenn = async () => { - const url = "https://zenn.dev/"; - - const { data } = await axios.get(url); - - const $ = load(data); - const raw = $("script[id=__NEXT_DATA__]").html() ?? ""; - if (raw === undefined) return {}; - const rawData = JSON.parse(raw).props.pageProps.dailyTechArticles; - - const articles: ZennArticle = rawData.map((article: any) => { - const newArticle: ZennArticle = { - id: article.id, - postType: article.postType, - title: article.title, - slug: article.slug, - commentsCount: article.commentsCount, - likedCount: article.likedCount, - bodyLettersCount: article.bodyLettersCount, - articleType: article.articleType, - emoji: article.emoji, - isSuspendingPrivate: article.isSuspendingPrivate, - publishedAt: article.publishedAt, - bodyUpdatedAt: article.bodyUpdatedAt, - sourceRepoUpdatedAt: article.sourceRepoUpdatedAt, - pinned: article.pinned, - path: article.path, - }; - - if (article.user) { - newArticle.user = { - id: article.user.id, - username: article.user.username, - name: article.user.name, - avatarSmallUrl: article.user.avatarSmallUrl, - }; - } - - if (article.publication) { - newArticle.publication = { - id: article.publication.id, - name: article.publication.name, - displayName: article.publication.displayName, - avatarSmallUrl: article.publication.avatarSmallUrl, - pro: article.publication.pro, - avatarRegistered: article.publication.avatarRegistered, - }; - } - - return newArticle; - }); - - return articles; -}; diff --git a/sample/src/index.ts b/sample/src/index.ts deleted file mode 100644 index 7f0c0e8d..00000000 --- a/sample/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { fetchZenn, fetchZennV2 } from "./apis/zenn"; -// import { fetchHatena } from "./apis/hatena"; -import { fetchQiita } from "./apis/qiita"; -import { fetchDevTo } from "./apis/devto"; - -// fetchZenn(); -// fetchHatena(); -// fetchZennV2(); -// fetchDevTo(); diff --git a/sample/src/rss/data.json b/sample/src/rss/data.json deleted file mode 100644 index b14a77be..00000000 --- a/sample/src/rss/data.json +++ /dev/null @@ -1,390 +0,0 @@ -[ - { - "date": "2024-03-19T03:53:51Z", - "title": "個人サイトの再来なるか、趣味の記録に特化したメモブログサービスをMozillaがリリース【やじうまWatch】", - "link": "https://internet.watch.impress.co.jp/docs/yajiuma/1577361.html", - "contentEncoded": "
個人サイトの再来なるか、趣味の記録に特化したメモブログサービスをMozillaがリリース【やじうまWatch】", - "contentEncodedSnippet": "個人サイトの再来なるか、趣味の記録に特化したメモブログサービスをMozillaがリリース【やじうまWatch】", - "dcDate": "2024-03-19T03:53:51Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://internet.watch.impress.co.jp/docs/yajiuma/1577361.html", - "isoDate": "2024-03-19T03:53:51.000Z", - "image": "https://internet.watch.impress.co.jp/img/iw/list/1577/361/yajiuma-watch_1.png" - }, - { - "date": "2024-03-19T01:38:42Z", - "title": "AIボイチェンソフト「Voidol 1」が無償化", - "link": "https://pc.watch.impress.co.jp/docs/news/1577403.html", - "contentEncoded": "
AIボイチェンソフト「Voidol 1」が無償化", - "contentEncodedSnippet": "AIボイチェンソフト「Voidol 1」が無償化", - "dcDate": "2024-03-19T01:38:42Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://pc.watch.impress.co.jp/docs/news/1577403.html", - "isoDate": "2024-03-19T01:38:42.000Z", - "image": "https://pc.watch.impress.co.jp/img/pcw/list/1577/403/01.jpg" - }, - { - "date": "2024-03-19T02:03:42Z", - "title": "『言いたいことはわかるが、その言い方で味方になってくれる人は少ないと思う』みたいな話はインターネットには大変多い", - "link": "https://togetter.com/li/2334491", - "contentEncoded": "
『言いたいことはわかるが、その言い方で味方になってくれる人は少ないと思う』みたいな話はインターネットには大変多い", - "contentEncodedSnippet": "『言いたいことはわかるが、その言い方で味方になってくれる人は少ないと思う』みたいな話はインターネットには大変多い\n\n九条水音 @mizune 魔界戦線チャンネルで配信しているプリ☆チャンアイドルです。noteを中心にキラッと配信してます。アイドルアニメ、大好き!アイドルネーム:九条ミズネ note→note.com/mizune note.mu/mizune", - "dcDate": "2024-03-19T02:03:42Z", - "content": "九条水音 @mizune 魔界戦線チャンネルで配信しているプリ☆チャンアイドルです。noteを中心にキラッと配信してます。アイドルアニメ、大好き!アイドルネーム:九条ミズネ note→note.com/mizune note.mu/mizune", - "contentSnippet": "九条水音 @mizune 魔界戦線チャンネルで配信しているプリ☆チャンアイドルです。noteを中心にキラッと配信してます。アイドルアニメ、大好き!アイドルネーム:九条ミズネ note→note.com/mizune note.mu/mizune", - "rdfAbout": "https://togetter.com/li/2334491", - "isoDate": "2024-03-19T02:03:42.000Z", - "image": "https://s.togetter.com/ogp2/48b91d2e88026b819b811a9c78a64a7b-1200x630.png" - }, - { - "date": "2024-03-19T02:00:17Z", - "title": "なぜオフショア開発でベトナムがひとり勝ちしているのか?", - "link": "https://offshore.icd.co.jp/blog/offshore-vietnam", - "contentEncoded": "九条水音 @mizune 魔界戦線チャンネルで配信しているプリ☆チャンアイドルです。noteを中心にキラッと配信してます。アイドルアニメ、大好き!アイドルネーム:九条ミズネ note→note.com/mizune note.mu/mizune
なぜオフショア開発でベトナムがひとり勝ちしているのか?", - "contentEncodedSnippet": "なぜオフショア開発でベトナムがひとり勝ちしているのか?\n\nあなたは今、オフショアを検討しているが、様々な国の選択肢がある中で、なぜ「ベトナム」というワードをよく聞くのか気になっているところではないでしょうか。まず大前提として「ベトナム」を第一候補として取り上げるのは間違いないでしょう。 それではなぜ、ベトナムを第一候補として取り上げて良いのか?まさに、ベ...", - "dcDate": "2024-03-19T02:00:17Z", - "content": "あなたは今、オフショアを検討しているが、様々な国の選択肢がある中で、なぜ「ベトナム」というワードをよく聞くのか気になっているところではないでしょうか。まず大前提として「ベトナム」を第一候補として取り上げるのは間違いないでしょう。 それではなぜ、ベトナムを第一候補として取り上げて良いのか?まさに、ベ...", - "contentSnippet": "あなたは今、オフショアを検討しているが、様々な国の選択肢がある中で、なぜ「ベトナム」というワードをよく聞くのか気になっているところではないでしょうか。まず大前提として「ベトナム」を第一候補として取り上げるのは間違いないでしょう。 それではなぜ、ベトナムを第一候補として取り上げて良いのか?まさに、ベ...", - "rdfAbout": "https://offshore.icd.co.jp/blog/offshore-vietnam", - "isoDate": "2024-03-19T02:00:17.000Z", - "image": "https://offshore.icd.co.jp/blog/wp-content/uploads/2024/03/オフショア_ベトナム_05.jpg" - }, - { - "date": "2024-03-19T04:11:53Z", - "title": "RAGの実装戦略まとめ - Qiita", - "link": "https://qiita.com/jw-automation/items/045917be7b558509fdf2", - "contentEncoded": "あなたは今、オフショアを検討しているが、様々な国の選択肢がある中で、なぜ「ベトナム」というワードをよく聞くのか気になっているところではないでしょうか。まず大前提として「ベトナム」を第一候補として取り上げるのは間違いないでしょう。 それではなぜ、ベトナムを第一候補として取り上げて良いのか?まさに、ベ...
RAGの実装戦略まとめ - Qiita", - "contentEncodedSnippet": "RAGの実装戦略まとめ - Qiita\n\nそれでは以下、簡単なデモを含めながら個別に説明していきます。 1. ハイブリッドサーチ こちらは、性質の異なる複数の検索方式(例えばベクトル検索とキーワード検索)を組み合わせて検索精度を向上させる手法になります。 各検索方式単体の場合に比べ、性質の異なる検索方式を組み合わせ、ある種いいとこ取りをする事...", - "dcDate": "2024-03-19T04:11:53Z", - "content": "それでは以下、簡単なデモを含めながら個別に説明していきます。 1. ハイブリッドサーチ こちらは、性質の異なる複数の検索方式(例えばベクトル検索とキーワード検索)を組み合わせて検索精度を向上させる手法になります。 各検索方式単体の場合に比べ、性質の異なる検索方式を組み合わせ、ある種いいとこ取りをする事...", - "contentSnippet": "それでは以下、簡単なデモを含めながら個別に説明していきます。 1. ハイブリッドサーチ こちらは、性質の異なる複数の検索方式(例えばベクトル検索とキーワード検索)を組み合わせて検索精度を向上させる手法になります。 各検索方式単体の場合に比べ、性質の異なる検索方式を組み合わせ、ある種いいとこ取りをする事...", - "rdfAbout": "https://qiita.com/jw-automation/items/045917be7b558509fdf2", - "isoDate": "2024-03-19T04:11:53.000Z", - "image": "https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9UkFHJUUzJTgxJUFFJUU1JUFFJTlGJUU4JUEzJTg1JUU2JTg4JUE2JUU3JTk1JUE1JUUzJTgxJUJFJUUzJTgxJUE4JUUzJTgyJTgxJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00OGM3ZDViYTVhZDYzNDljN2RmZDM2YWViN2UzMTJhNw&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwanctYXV0b21hdGlvbiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTMyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZDhhOTZhMTFhNDA4NzMyZjc0ZmM3N2YwOWNiMjhmMjM&blend-x=142&blend-y=491&blend-mode=normal&s=bdd91c628d57624685318560a6532fb2" - }, - { - "date": "2024-03-18T17:40:34Z", - "title": "WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport | RxDB - JavaScript Database", - "link": "https://rxdb.info/articles/websockets-sse-polling-webrtc-webtransport.html", - "contentEncoded": "それでは以下、簡単なデモを含めながら個別に説明していきます。 1. ハイブリッドサーチ こちらは、性質の異なる複数の検索方式(例えばベクトル検索とキーワード検索)を組み合わせて検索精度を向上させる手法になります。 各検索方式単体の場合に比べ、性質の異なる検索方式を組み合わせ、ある種いいとこ取りをする事...
WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport | RxDB - JavaScript Database", - "contentEncodedSnippet": "WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport | RxDB - JavaScript Database\n\nFor modern real-time web applications, the ability to send events from the server to the client is indispensable. This necessity has led to the development of several methods over the years, each with its own set of advantages and drawbacks. Initially, long-polling was the only option available. ...", - "dcDate": "2024-03-18T17:40:34Z", - "content": "For modern real-time web applications, the ability to send events from the server to the client is indispensable. This necessity has led to the development of several methods over the years, each with its own set of advantages and drawbacks. Initially, long-polling was the only option available. ...", - "contentSnippet": "For modern real-time web applications, the ability to send events from the server to the client is indispensable. This necessity has led to the development of several methods over the years, each with its own set of advantages and drawbacks. Initially, long-polling was the only option available. ...", - "rdfAbout": "https://rxdb.info/articles/websockets-sse-polling-webrtc-webtransport.html", - "isoDate": "2024-03-18T17:40:34.000Z", - "image": "https://rxdb.info/img/rxdb_social_card.png" - }, - { - "date": "2021-07-22T23:28:58Z", - "title": "はじめに | ちいさな Web ブラウザを作ってみよう", - "link": "https://browserbook.shift-js.info/intro/", - "contentEncoded": "For modern real-time web applications, the ability to send events from the server to the client is indispensable. This necessity has led to the development of several methods over the years, each with its own set of advantages and drawbacks. Initially, long-polling was the only option available. ...
はじめに | ちいさな Web ブラウザを作ってみよう", - "contentEncodedSnippet": "はじめに | ちいさな Web ブラウザを作ってみよう", - "dcDate": "2021-07-22T23:28:58Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://browserbook.shift-js.info/intro/", - "isoDate": "2021-07-22T23:28:58.000Z", - "image": "https://browserbook.shift-js.info/banner.png" - }, - { - "date": "2024-03-19T00:47:47Z", - "title": "日頃の作業を自動化して得られたもの - Pepabo Tech Portal", - "link": "https://tech.pepabo.com/2024/03/19/merit-of-automation/", - "contentEncoded": "
日頃の作業を自動化して得られたもの - Pepabo Tech Portal", - "contentEncodedSnippet": "日頃の作業を自動化して得られたもの - Pepabo Tech Portal\n\nminne事業部のnissyiです。私は最近、運用・開発業務の時間を確保するために、便利なツールを導入したり、ちょっとしたプログラムを書いて自動化したりしています。今回は、日頃の業務の自動化を進めたことで得られたものについて書きます。 自動化を進めたことで得られたもの 身近なところで自動化は可能 自動化の損益...", - "dcDate": "2024-03-19T00:47:47Z", - "content": "minne事業部のnissyiです。私は最近、運用・開発業務の時間を確保するために、便利なツールを導入したり、ちょっとしたプログラムを書いて自動化したりしています。今回は、日頃の業務の自動化を進めたことで得られたものについて書きます。 自動化を進めたことで得られたもの 身近なところで自動化は可能 自動化の損益...", - "contentSnippet": "minne事業部のnissyiです。私は最近、運用・開発業務の時間を確保するために、便利なツールを導入したり、ちょっとしたプログラムを書いて自動化したりしています。今回は、日頃の業務の自動化を進めたことで得られたものについて書きます。 自動化を進めたことで得られたもの 身近なところで自動化は可能 自動化の損益...", - "rdfAbout": "https://tech.pepabo.com/2024/03/19/merit-of-automation/", - "isoDate": "2024-03-19T00:47:47.000Z", - "image": "https://tech.pepabo.com/blog/2024/03/19/merit-of-automation/eye_catch.jpg" - }, - { - "date": "2024-03-19T01:08:48Z", - "title": "会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~ - CADDi Tech Blog", - "link": "https://caddi.tech/2024/03/19/095020", - "contentEncoded": "minne事業部のnissyiです。私は最近、運用・開発業務の時間を確保するために、便利なツールを導入したり、ちょっとしたプログラムを書いて自動化したりしています。今回は、日頃の業務の自動化を進めたことで得られたものについて書きます。 自動化を進めたことで得られたもの 身近なところで自動化は可能 自動化の損益...
会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~ - CADDi Tech Blog", - "contentEncodedSnippet": "会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~ - CADDi Tech Blog\n\nはじめに こんにちは。 バックエンドエンジニアの松本です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer」で、もう1つは加工品製造サービス「CADDi Manufacturing」で...", - "dcDate": "2024-03-19T01:08:48Z", - "content": "はじめに こんにちは。 バックエンドエンジニアの松本です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer」で、もう1つは加工品製造サービス「CADDi Manufacturing」で...", - "contentSnippet": "はじめに こんにちは。 バックエンドエンジニアの松本です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer」で、もう1つは加工品製造サービス「CADDi Manufacturing」で...", - "rdfAbout": "https://caddi.tech/2024/03/19/095020", - "isoDate": "2024-03-19T01:08:48.000Z", - "image": "https://cdn.user.blog.st-hatena.com/default_entry_og_image/159376513/1709270017315899" - }, - { - "date": "2024-03-19T03:42:28Z", - "title": "情シス子会社が「オンプレ全部無くします」と強引にクラウド化を推進し、エグい転送量に「遅い」「仕事にならないよ」「マジで遅いだけ」「遅い」と口々に怒られた", - "link": "https://togetter.com/li/2334540", - "contentEncoded": "はじめに こんにちは。 バックエンドエンジニアの松本です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer」で、もう1つは加工品製造サービス「CADDi Manufacturing」で...
情シス子会社が「オンプレ全部無くします」と強引にクラウド化を推進し、エグい転送量に「遅い」「仕事にならないよ」「マジで遅いだけ」「遅い」と口々に怒られた", - "contentEncodedSnippet": "情シス子会社が「オンプレ全部無くします」と強引にクラウド化を推進し、エグい転送量に「遅い」「仕事にならないよ」「マジで遅いだけ」「遅い」と口々に怒られた\n\nvorotamoroz aka きみのぶ @vorotamoroz ルートビアが好きな、医療とかやってたけど結局機械メーカーにいる人。情報処理安全確保支援士。コンテンツとかアプリとかなんやかんや作ってます。Obsidianは良いぞ。Self-hosted LiveSyncやTagFolderの作者です。 fancy-syncing.vrtmrz.net vorotamoroz aka きみのぶ @vorotamo...", - "dcDate": "2024-03-19T03:42:28Z", - "content": "vorotamoroz aka きみのぶ @vorotamoroz ルートビアが好きな、医療とかやってたけど結局機械メーカーにいる人。情報処理安全確保支援士。コンテンツとかアプリとかなんやかんや作ってます。Obsidianは良いぞ。Self-hosted LiveSyncやTagFolderの作者です。 fancy-syncing.vrtmrz.net vorotamoroz aka きみのぶ @vorotamo...", - "contentSnippet": "vorotamoroz aka きみのぶ @vorotamoroz ルートビアが好きな、医療とかやってたけど結局機械メーカーにいる人。情報処理安全確保支援士。コンテンツとかアプリとかなんやかんや作ってます。Obsidianは良いぞ。Self-hosted LiveSyncやTagFolderの作者です。 fancy-syncing.vrtmrz.net vorotamoroz aka きみのぶ @vorotamo...", - "rdfAbout": "https://togetter.com/li/2334540", - "isoDate": "2024-03-19T03:42:28.000Z", - "image": "https://s.togetter.com/ogp2/475d99cc4148b36611aaab60e61c0085-1200x630.png" - }, - { - "date": "2024-03-19T08:44:40Z", - "title": "OS標準の強力ファイル複製コマンド「robocopy」を活用したGUI定期バックアップソフト/指定した日・曜日・時刻に自動実行、メール通知にも対応【レビュー】", - "link": "https://forest.watch.impress.co.jp/docs/review/1575012.html", - "contentEncoded": "vorotamoroz aka きみのぶ @vorotamoroz ルートビアが好きな、医療とかやってたけど結局機械メーカーにいる人。情報処理安全確保支援士。コンテンツとかアプリとかなんやかんや作ってます。Obsidianは良いぞ。Self-hosted LiveSyncやTagFolderの作者です。 fancy-syncing.vrtmrz.net vorotamoroz aka きみのぶ @vorotamo...
OS標準の強力ファイル複製コマンド「robocopy」を活用したGUI定期バックアップソフト/指定した日・曜日・時刻に自動実行、メール通知にも対応【レビュー】", - "contentEncodedSnippet": "OS標準の強力ファイル複製コマンド「robocopy」を活用したGUI定期バックアップソフト/指定した日・曜日・時刻に自動実行、メール通知にも対応【レビュー】", - "dcDate": "2024-03-19T08:44:40Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://forest.watch.impress.co.jp/docs/review/1575012.html", - "isoDate": "2024-03-19T08:44:40.000Z", - "image": "https://forest.watch.impress.co.jp/img/wf/list/1575/012/image_top.png" - }, - { - "date": "2024-03-18T11:54:35Z", - "title": "たった2つのステップを意識するだけで書けない単体テストがほぼなくなる - Qiita", - "link": "https://qiita.com/_mi/items/ce66aa922ee46b00ab2d", - "contentEncoded": "
たった2つのステップを意識するだけで書けない単体テストがほぼなくなる - Qiita", - "contentEncodedSnippet": "たった2つのステップを意識するだけで書けない単体テストがほぼなくなる - Qiita\n\nはじめに この記事は レガシーコード改善ガイド: 保守開発のためのリファクタリング を参考に手を動かしてみて、ある程度自分の中で体系的にまとまった知識のアウトプットです。 この記事で扱う内容 この記事で扱うのは主にレガシーコードで単体テストを書く際のハードルになりがちな 依存関係の排除 に関する手法を紹介...", - "dcDate": "2024-03-18T11:54:35Z", - "content": "はじめに この記事は レガシーコード改善ガイド: 保守開発のためのリファクタリング を参考に手を動かしてみて、ある程度自分の中で体系的にまとまった知識のアウトプットです。 この記事で扱う内容 この記事で扱うのは主にレガシーコードで単体テストを書く際のハードルになりがちな 依存関係の排除 に関する手法を紹介...", - "contentSnippet": "はじめに この記事は レガシーコード改善ガイド: 保守開発のためのリファクタリング を参考に手を動かしてみて、ある程度自分の中で体系的にまとまった知識のアウトプットです。 この記事で扱う内容 この記事で扱うのは主にレガシーコードで単体テストを書く際のハードルになりがちな 依存関係の排除 に関する手法を紹介...", - "rdfAbout": "https://qiita.com/_mi/items/ce66aa922ee46b00ab2d", - "isoDate": "2024-03-18T11:54:35.000Z", - "image": "https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgxJTlGJUUzJTgxJUEzJUUzJTgxJTlGJUVGJUJDJTkyJUUzJTgxJUE0JUUzJTgxJUFFJUUzJTgyJUI5JUUzJTgzJTg2JUUzJTgzJTgzJUUzJTgzJTk3JUUzJTgyJTkyJUU2JTg0JThGJUU4JUFEJTk4JUUzJTgxJTk5JUUzJTgyJThCJUUzJTgxJUEwJUUzJTgxJTkxJUUzJTgxJUE3JUU2JTlCJUI4JUUzJTgxJTkxJUUzJTgxJUFBJUUzJTgxJTg0JUU1JThEJTk4JUU0JUJEJTkzJUUzJTgzJTg2JUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgxJThDJUUzJTgxJUJCJUUzJTgxJUJDJUUzJTgxJUFBJUUzJTgxJThGJUUzJTgxJUFBJUUzJTgyJThCJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iMDQ4ZDZkYWRiNzk1NDFjYjg0MDI3MDI2ZGQ2NGQzNQ&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwX21pJTIwaW4lMjAlRTYlQTAlQUElRTUlQkMlOEYlRTQlQkMlOUElRTclQTQlQkVXb3JrcyUyMEh1bWFuJTIwSW50ZWxsaWdlbmNlJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzImdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0yM2ExOTBmYWQ2NjlhMjNkZTM3Zjk1YWVkYjI2MTNiYg&blend-x=142&blend-y=491&blend-mode=normal&s=baf2bd09551ee5b05d70ae759f4344c3" - }, - { - "date": "2024-03-18T22:18:23Z", - "title": "NVIDIA、1パッケージに2ダイの新型GPU「Blackwell」。AI性能は学習4倍、推論30倍に", - "link": "https://pc.watch.impress.co.jp/docs/news/1577301.html", - "contentEncoded": "はじめに この記事は レガシーコード改善ガイド: 保守開発のためのリファクタリング を参考に手を動かしてみて、ある程度自分の中で体系的にまとまった知識のアウトプットです。 この記事で扱う内容 この記事で扱うのは主にレガシーコードで単体テストを書く際のハードルになりがちな 依存関係の排除 に関する手法を紹介...
NVIDIA、1パッケージに2ダイの新型GPU「Blackwell」。AI性能は学習4倍、推論30倍に", - "contentEncodedSnippet": "NVIDIA、1パッケージに2ダイの新型GPU「Blackwell」。AI性能は学習4倍、推論30倍に", - "dcDate": "2024-03-18T22:18:23Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://pc.watch.impress.co.jp/docs/news/1577301.html", - "isoDate": "2024-03-18T22:18:23.000Z", - "image": "https://pc.watch.impress.co.jp/img/pcw/list/1577/301/001.jpg" - }, - { - "date": "2024-03-18T23:28:36Z", - "title": "大学院入学の年齢について – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】", - "link": "https://shimizuhideyuki-lab.org/age-limitation/", - "contentEncoded": "
大学院入学の年齢について – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】", - "contentEncodedSnippet": "大学院入学の年齢について – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】\n\n【PIを目指すための修行開始時期について】 私達の大学院受け入れ条件の1は「将来的に博士号取得を経て学術/産業/医療界でのPrincipal Investigator (アカデミアの教授・企業の研究本部長等)を本気で目指している方」です。本気でPIを目指すためにはearly careerのうちから覚悟を決めて&情熱を持って修業しなければなり...", - "dcDate": "2024-03-18T23:28:36Z", - "content": "【PIを目指すための修行開始時期について】 私達の大学院受け入れ条件の1は「将来的に博士号取得を経て学術/産業/医療界でのPrincipal Investigator (アカデミアの教授・企業の研究本部長等)を本気で目指している方」です。本気でPIを目指すためにはearly careerのうちから覚悟を決めて&情熱を持って修業しなければなり...", - "contentSnippet": "【PIを目指すための修行開始時期について】 私達の大学院受け入れ条件の1は「将来的に博士号取得を経て学術/産業/医療界でのPrincipal Investigator (アカデミアの教授・企業の研究本部長等)を本気で目指している方」です。本気でPIを目指すためにはearly careerのうちから覚悟を決めて&情熱を持って修業しなければなり...", - "rdfAbout": "https://shimizuhideyuki-lab.org/age-limitation/", - "isoDate": "2024-03-18T23:28:36.000Z" - }, - { - "date": "2024-03-19T08:07:22Z", - "title": "生成AIが画像1枚から高品質3Dモデルの映像を作成する「Stable Video 3D」が公開/Stability AIが「Stable Video Diffusion」の技術を応用した生成モデルを開発", - "link": "https://forest.watch.impress.co.jp/docs/news/1577638.html", - "contentEncoded": "【PIを目指すための修行開始時期について】 私達の大学院受け入れ条件の1は「将来的に博士号取得を経て学術/産業/医療界でのPrincipal Investigator (アカデミアの教授・企業の研究本部長等)を本気で目指している方」です。本気でPIを目指すためにはearly careerのうちから覚悟を決めて&情熱を持って修業しなければなり...
生成AIが画像1枚から高品質3Dモデルの映像を作成する「Stable Video 3D」が公開/Stability AIが「Stable Video Diffusion」の技術を応用した生成モデルを開発", - "contentEncodedSnippet": "生成AIが画像1枚から高品質3Dモデルの映像を作成する「Stable Video 3D」が公開/Stability AIが「Stable Video Diffusion」の技術を応用した生成モデルを開発", - "dcDate": "2024-03-19T08:07:22Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://forest.watch.impress.co.jp/docs/news/1577638.html", - "isoDate": "2024-03-19T08:07:22.000Z", - "image": "https://forest.watch.impress.co.jp/img/wf/list/1577/638/image-top2.png" - }, - { - "date": "2024-03-19T09:39:54Z", - "title": "文字起こしAI「オートメモ」に要約機能 議事録作成時間を8割削減", - "link": "https://www.watch.impress.co.jp/docs/news/1577672.html", - "contentEncoded": "
文字起こしAI「オートメモ」に要約機能 議事録作成時間を8割削減", - "contentEncodedSnippet": "文字起こしAI「オートメモ」に要約機能 議事録作成時間を8割削減", - "dcDate": "2024-03-19T09:39:54Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://www.watch.impress.co.jp/docs/news/1577672.html", - "isoDate": "2024-03-19T09:39:54.000Z", - "image": "https://www.watch.impress.co.jp/img/ipw/list/1577/672/automemo_01.jpg" - }, - { - "date": "2024-03-19T00:29:36Z", - "title": "技術戦略策定のための Fact 収集術 - スタディサプリ Product Team Blog", - "link": "https://blog.studysapuri.jp/entry/2024/03/19/fact-gathering-for-tech-strategy", - "contentEncoded": "
技術戦略策定のための Fact 収集術 - スタディサプリ Product Team Blog", - "contentEncodedSnippet": "技術戦略策定のための Fact 収集術 - スタディサプリ Product Team Blog\n\nこんにちは。@chaspy です。プロダクト開発部の技術戦略グループのマネージャをしています。 技術戦略グループでは、日頃開発する上での課題の投げ込みや議論、解決するための計画をボトムアップで行っています。技術戦略グループの活動については過去のアウトプットもご覧ください。 blog.studysapuri.jp また、本稿の...", - "dcDate": "2024-03-19T00:29:36Z", - "content": "こんにちは。@chaspy です。プロダクト開発部の技術戦略グループのマネージャをしています。 技術戦略グループでは、日頃開発する上での課題の投げ込みや議論、解決するための計画をボトムアップで行っています。技術戦略グループの活動については過去のアウトプットもご覧ください。 blog.studysapuri.jp また、本稿の...", - "contentSnippet": "こんにちは。@chaspy です。プロダクト開発部の技術戦略グループのマネージャをしています。 技術戦略グループでは、日頃開発する上での課題の投げ込みや議論、解決するための計画をボトムアップで行っています。技術戦略グループの活動については過去のアウトプットもご覧ください。 blog.studysapuri.jp また、本稿の...", - "rdfAbout": "https://blog.studysapuri.jp/entry/2024/03/19/fact-gathering-for-tech-strategy", - "isoDate": "2024-03-19T00:29:36.000Z", - "image": "https://cdn-ak.f.st-hatena.com/images/fotolife/q/quipper-ja/20240316/20240316120607.png" - }, - { - "date": "2024-03-19T05:15:00Z", - "title": "Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 | gihyo.jp", - "link": "https://gihyo.jp/article/2024/03/garnet", - "contentEncoded": "こんにちは。@chaspy です。プロダクト開発部の技術戦略グループのマネージャをしています。 技術戦略グループでは、日頃開発する上での課題の投げ込みや議論、解決するための計画をボトムアップで行っています。技術戦略グループの活動については過去のアウトプットもご覧ください。 blog.studysapuri.jp また、本稿の...
Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 | gihyo.jp", - "contentEncodedSnippet": "Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 | gihyo.jp\n\nMicrosoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 Microsoftは2024年3月18日、同社の研究所が開発を進めてきた次世代の高速キャッシュシステム「Garnet」をGitHub上でオープンソースとして公開した。 Introducing Garnet – an open-source, next-generation, faster cache-store f...", - "dcDate": "2024-03-19T05:15:00Z", - "content": "Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 Microsoftは2024年3月18日、同社の研究所が開発を進めてきた次世代の高速キャッシュシステム「Garnet」をGitHub上でオープンソースとして公開した。 Introducing Garnet – an open-source, next-generation, faster cache-store f...", - "contentSnippet": "Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 Microsoftは2024年3月18日、同社の研究所が開発を進めてきた次世代の高速キャッシュシステム「Garnet」をGitHub上でオープンソースとして公開した。 Introducing Garnet – an open-source, next-generation, faster cache-store f...", - "rdfAbout": "https://gihyo.jp/article/2024/03/garnet", - "isoDate": "2024-03-19T05:15:00.000Z", - "image": "https://gihyo.jp/assets/images/ICON/2024/2232_garnet.png" - }, - { - "date": "2024-03-19T09:19:25Z", - "title": "人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー", - "link": "https://logmi.jp/business/articles/330280", - "contentEncoded": "Microsoft、次世代高速キャッシュストアシステム「Garnet」をオープンソースとして公開 Microsoftは2024年3月18日、同社の研究所が開発を進めてきた次世代の高速キャッシュシステム「Garnet」をGitHub上でオープンソースとして公開した。 Introducing Garnet – an open-source, next-generation, faster cache-store f...
人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー", - "contentEncodedSnippet": "人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー\n\nThe Singularity Is Nearer 人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー 世界的なイノベーション&クリエイティブの祭典として知られる「SXSW(サウス・バイ・サウスウエスト)」。2024年も各界のクリエイターやリーダー、専門家らが多数登壇し、最先端の...", - "dcDate": "2024-03-19T09:19:25Z", - "content": "The Singularity Is Nearer 人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー 世界的なイノベーション&クリエイティブの祭典として知られる「SXSW(サウス・バイ・サウスウエスト)」。2024年も各界のクリエイターやリーダー、専門家らが多数登壇し、最先端の...", - "contentSnippet": "The Singularity Is Nearer 人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー 世界的なイノベーション&クリエイティブの祭典として知られる「SXSW(サウス・バイ・サウスウエスト)」。2024年も各界のクリエイターやリーダー、専門家らが多数登壇し、最先端の...", - "rdfAbout": "https://logmi.jp/business/articles/330280", - "isoDate": "2024-03-19T09:19:25.000Z", - "image": "https://img.logmi.jp/article_images/VDH3PG17V6bxzxdTqMWugW.jpg" - }, - { - "date": "2024-03-19T00:17:09Z", - "title": "高速道路の出口案内のようなQAエンジニアでありたい ─自動テストより前にやるべきことがあると気づいた話 - Findy Engineer Lab", - "link": "https://findy-code.io/engineer-lab/nihonbuson", - "contentEncoded": "The Singularity Is Nearer 人類が500歳まで生きることも可能に レイ・カーツワイル氏が予測する、2029年までに起こりうるブレイクスルー 世界的なイノベーション&クリエイティブの祭典として知られる「SXSW(サウス・バイ・サウスウエスト)」。2024年も各界のクリエイターやリーダー、専門家らが多数登壇し、最先端の...
高速道路の出口案内のようなQAエンジニアでありたい ─自動テストより前にやるべきことがあると気づいた話 - Findy Engineer Lab", - "contentEncodedSnippet": "高速道路の出口案内のようなQAエンジニアでありたい ─自動テストより前にやるべきことがあると気づいた話 - Findy Engineer Lab\n\n皆様こんにちは。QAエンジニアのブロッコリーこと風間裕也(@nihonbuson)と申します。私は本業で株式会社10XのQAエンジニアとして勤務する一方、副業としてB-Testingを開業し、さまざまな会社でQAに関する相談に乗ったり、登壇や執筆活動を行っています。 また社外活動として、ソフトウェアテスト技術振興協会(ASTER)...", - "dcDate": "2024-03-19T00:17:09Z", - "content": "皆様こんにちは。QAエンジニアのブロッコリーこと風間裕也(@nihonbuson)と申します。私は本業で株式会社10XのQAエンジニアとして勤務する一方、副業としてB-Testingを開業し、さまざまな会社でQAに関する相談に乗ったり、登壇や執筆活動を行っています。 また社外活動として、ソフトウェアテスト技術振興協会(ASTER)...", - "contentSnippet": "皆様こんにちは。QAエンジニアのブロッコリーこと風間裕也(@nihonbuson)と申します。私は本業で株式会社10XのQAエンジニアとして勤務する一方、副業としてB-Testingを開業し、さまざまな会社でQAに関する相談に乗ったり、登壇や執筆活動を行っています。 また社外活動として、ソフトウェアテスト技術振興協会(ASTER)...", - "rdfAbout": "https://findy-code.io/engineer-lab/nihonbuson", - "isoDate": "2024-03-19T00:17:09.000Z", - "image": "https://cdn-ak.f.st-hatena.com/images/fotolife/b/blog-media/20240318/20240318181638.jpg" - }, - { - "date": "2024-03-19T02:46:34Z", - "title": "ZOZOTOWNのネットワークをDirect Connect 10Gから100Gに移行した話 - ZOZO TECH BLOG", - "link": "https://techblog.zozo.com/entry/zozo-dx100g", - "contentEncoded": "皆様こんにちは。QAエンジニアのブロッコリーこと風間裕也(@nihonbuson)と申します。私は本業で株式会社10XのQAエンジニアとして勤務する一方、副業としてB-Testingを開業し、さまざまな会社でQAに関する相談に乗ったり、登壇や執筆活動を行っています。 また社外活動として、ソフトウェアテスト技術振興協会(ASTER)...
ZOZOTOWNのネットワークをDirect Connect 10Gから100Gに移行した話 - ZOZO TECH BLOG", - "contentEncodedSnippet": "ZOZOTOWNのネットワークをDirect Connect 10Gから100Gに移行した話 - ZOZO TECH BLOG\n\nはじめに こんにちは、技術本部SRE部フロントSREブロックの柳田です。オンプレミスとクラウドの構築・運用に携わっています。 ZOZOTOWNでは、既存システムのリプレイスプロジェクトを進行中です。リプレイス過渡期の現在、オンプレミスのネットワークとAWSのデータセンターを直接専用線で接続し、安定した高速通信を実現...", - "dcDate": "2024-03-19T02:46:34Z", - "content": "はじめに こんにちは、技術本部SRE部フロントSREブロックの柳田です。オンプレミスとクラウドの構築・運用に携わっています。 ZOZOTOWNでは、既存システムのリプレイスプロジェクトを進行中です。リプレイス過渡期の現在、オンプレミスのネットワークとAWSのデータセンターを直接専用線で接続し、安定した高速通信を実現...", - "contentSnippet": "はじめに こんにちは、技術本部SRE部フロントSREブロックの柳田です。オンプレミスとクラウドの構築・運用に携わっています。 ZOZOTOWNでは、既存システムのリプレイスプロジェクトを進行中です。リプレイス過渡期の現在、オンプレミスのネットワークとAWSのデータセンターを直接専用線で接続し、安定した高速通信を実現...", - "rdfAbout": "https://techblog.zozo.com/entry/zozo-dx100g", - "isoDate": "2024-03-19T02:46:34.000Z", - "image": "https://cdn-ak.f.st-hatena.com/images/fotolife/v/vasilyjp/20240315/20240315094819.jpg" - }, - { - "date": "2024-03-19T08:27:44Z", - "title": "ZOZOTOWNにおけるマーケティングメール配信基盤の構築 - ZOZO TECH BLOG", - "link": "https://techblog.zozo.com/entry/mass-mail-delivery", - "contentEncoded": "はじめに こんにちは、技術本部SRE部フロントSREブロックの柳田です。オンプレミスとクラウドの構築・運用に携わっています。 ZOZOTOWNでは、既存システムのリプレイスプロジェクトを進行中です。リプレイス過渡期の現在、オンプレミスのネットワークとAWSのデータセンターを直接専用線で接続し、安定した高速通信を実現...
ZOZOTOWNにおけるマーケティングメール配信基盤の構築 - ZOZO TECH BLOG", - "contentEncodedSnippet": "ZOZOTOWNにおけるマーケティングメール配信基盤の構築 - ZOZO TECH BLOG\n\nはじめに こんにちは、MA部の松岡(@pine0619)です。MA部ではマーケティングオートメーションシステムの開発・運用に従事しています。 ZOZOTOWNでは、マーケティングオートメーションシステム(以下、MAシステム)を使い、メールやLINE、アプリプッシュ通知といったチャネルへのキャンペーンを配信しています。 MA部で...", - "dcDate": "2024-03-19T08:27:44Z", - "content": "はじめに こんにちは、MA部の松岡(@pine0619)です。MA部ではマーケティングオートメーションシステムの開発・運用に従事しています。 ZOZOTOWNでは、マーケティングオートメーションシステム(以下、MAシステム)を使い、メールやLINE、アプリプッシュ通知といったチャネルへのキャンペーンを配信しています。 MA部で...", - "contentSnippet": "はじめに こんにちは、MA部の松岡(@pine0619)です。MA部ではマーケティングオートメーションシステムの開発・運用に従事しています。 ZOZOTOWNでは、マーケティングオートメーションシステム(以下、MAシステム)を使い、メールやLINE、アプリプッシュ通知といったチャネルへのキャンペーンを配信しています。 MA部で...", - "rdfAbout": "https://techblog.zozo.com/entry/mass-mail-delivery", - "isoDate": "2024-03-19T08:27:44.000Z", - "image": "https://cdn-ak.f.st-hatena.com/images/fotolife/v/vasilyjp/20240306/20240306152055.jpg" - }, - { - "date": "2024-03-19T04:49:18Z", - "title": "私が退学を決めた理由 – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】", - "link": "https://shimizuhideyuki-lab.org/why-i-quit-university/", - "contentEncoded": "はじめに こんにちは、MA部の松岡(@pine0619)です。MA部ではマーケティングオートメーションシステムの開発・運用に従事しています。 ZOZOTOWNでは、マーケティングオートメーションシステム(以下、MAシステム)を使い、メールやLINE、アプリプッシュ通知といったチャネルへのキャンペーンを配信しています。 MA部で...
私が退学を決めた理由 – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】", - "contentEncodedSnippet": "私が退学を決めた理由 – AIシステム医科学@国立 東京医科歯科大学 【Shimizu Lab】\n\nここにはご本人に「私が大学院をやめた理由」を書いてもらっています。多様な価値観・考え方に触れて、みなさん自身のキャリアを考える機会としてください。 退学を決めた理由 博士課程在籍期間: 2023.4.3-5 (3日間)、以後 休学の後に退学 大きな理由としては自分の価値観が変わったことです。 学問の追求と社会貢献はと...", - "dcDate": "2024-03-19T04:49:18Z", - "content": "ここにはご本人に「私が大学院をやめた理由」を書いてもらっています。多様な価値観・考え方に触れて、みなさん自身のキャリアを考える機会としてください。 退学を決めた理由 博士課程在籍期間: 2023.4.3-5 (3日間)、以後 休学の後に退学 大きな理由としては自分の価値観が変わったことです。 学問の追求と社会貢献はと...", - "contentSnippet": "ここにはご本人に「私が大学院をやめた理由」を書いてもらっています。多様な価値観・考え方に触れて、みなさん自身のキャリアを考える機会としてください。 退学を決めた理由 博士課程在籍期間: 2023.4.3-5 (3日間)、以後 休学の後に退学 大きな理由としては自分の価値観が変わったことです。 学問の追求と社会貢献はと...", - "rdfAbout": "https://shimizuhideyuki-lab.org/why-i-quit-university/", - "isoDate": "2024-03-19T04:49:18.000Z" - }, - { - "date": "2024-03-18T15:15:26Z", - "title": "macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで", - "link": "https://www.publickey1.jp/blog/24/macos_sonoma_144javaapplemac.html", - "contentEncoded": "ここにはご本人に「私が大学院をやめた理由」を書いてもらっています。多様な価値観・考え方に触れて、みなさん自身のキャリアを考える機会としてください。 退学を決めた理由 博士課程在籍期間: 2023.4.3-5 (3日間)、以後 休学の後に退学 大きな理由としては自分の価値観が変わったことです。 学問の追求と社会貢献はと...
macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで", - "contentEncodedSnippet": "macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで\n\nmacOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで オラクルは、Appleシリコン搭載のMacでmacOS Sonoma 14.4にアップデートを行うと、Java 8以降のすべてのバージョンでJavaが予期せず終了する現象が発生するとして、Macユーザーに注意喚起を行っています。 今の...", - "dcDate": "2024-03-18T15:15:26Z", - "content": "macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで オラクルは、Appleシリコン搭載のMacでmacOS Sonoma 14.4にアップデートを行うと、Java 8以降のすべてのバージョンでJavaが予期せず終了する現象が発生するとして、Macユーザーに注意喚起を行っています。 今の...", - "contentSnippet": "macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで オラクルは、Appleシリコン搭載のMacでmacOS Sonoma 14.4にアップデートを行うと、Java 8以降のすべてのバージョンでJavaが予期せず終了する現象が発生するとして、Macユーザーに注意喚起を行っています。 今の...", - "rdfAbout": "https://www.publickey1.jp/blog/24/macos_sonoma_144javaapplemac.html", - "isoDate": "2024-03-18T15:15:26.000Z", - "image": "https://www.publickey1.jp/2024/sonoma144_java01.png" - }, - { - "date": "2024-03-19T02:06:54Z", - "title": "Conventional CommitsとCHANGELOGの自動生成でリリースのユーザ影響をわかりやすくした話 - ドワンゴ教育サービス開発者ブログ", - "link": "https://blog.nnn.dev/entry/2024/03/19/110000", - "contentEncoded": "macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで オラクルは、Appleシリコン搭載のMacでmacOS Sonoma 14.4にアップデートを行うと、Java 8以降のすべてのバージョンでJavaが予期せず終了する現象が発生するとして、Macユーザーに注意喚起を行っています。 今の...
Conventional CommitsとCHANGELOGの自動生成でリリースのユーザ影響をわかりやすくした話 - ドワンゴ教育サービス開発者ブログ", - "contentEncodedSnippet": "Conventional CommitsとCHANGELOGの自動生成でリリースのユーザ影響をわかりやすくした話 - ドワンゴ教育サービス開発者ブログ\n\nドワンゴ教育事業 バックエンドエンジニアのtakuminishです。 現在、私は教材入稿ツールの開発チームに所属しています。 教材入稿ツールは昨年の2023年06月に社内向けに正式リリースされた比較的新しいツールであり、リリース当初はリリースノートに関する運用について検討が進んでいませんでした。 リリースノートは開...", - "dcDate": "2024-03-19T02:06:54Z", - "content": "ドワンゴ教育事業 バックエンドエンジニアのtakuminishです。 現在、私は教材入稿ツールの開発チームに所属しています。 教材入稿ツールは昨年の2023年06月に社内向けに正式リリースされた比較的新しいツールであり、リリース当初はリリースノートに関する運用について検討が進んでいませんでした。 リリースノートは開...", - "contentSnippet": "ドワンゴ教育事業 バックエンドエンジニアのtakuminishです。 現在、私は教材入稿ツールの開発チームに所属しています。 教材入稿ツールは昨年の2023年06月に社内向けに正式リリースされた比較的新しいツールであり、リリース当初はリリースノートに関する運用について検討が進んでいませんでした。 リリースノートは開...", - "rdfAbout": "https://blog.nnn.dev/entry/2024/03/19/110000", - "isoDate": "2024-03-19T02:06:54.000Z", - "image": "https://cdn-ak.f.st-hatena.com/images/fotolife/d/dw_takuminish/20240311/20240311095757.png" - }, - { - "date": "2024-03-19T02:31:01Z", - "title": "仕事なんて6万円ちょっとのIntel N100ノートPCで十分だった ~パソコン工房「STYLE-15FH111-N-UCEX」[Sponsored]", - "link": "https://pc.watch.impress.co.jp/docs/topic/pckoubou_review/1576979.html", - "contentEncoded": "ドワンゴ教育事業 バックエンドエンジニアのtakuminishです。 現在、私は教材入稿ツールの開発チームに所属しています。 教材入稿ツールは昨年の2023年06月に社内向けに正式リリースされた比較的新しいツールであり、リリース当初はリリースノートに関する運用について検討が進んでいませんでした。 リリースノートは開...
仕事なんて6万円ちょっとのIntel N100ノートPCで十分だった ~パソコン工房「STYLE-15FH111-N-UCEX」[Sponsored]", - "contentEncodedSnippet": "仕事なんて6万円ちょっとのIntel N100ノートPCで十分だった ~パソコン工房「STYLE-15FH111-N-UCEX」[Sponsored]", - "dcDate": "2024-03-19T02:31:01Z", - "content": "", - "contentSnippet": "", - "rdfAbout": "https://pc.watch.impress.co.jp/docs/topic/pckoubou_review/1576979.html", - "isoDate": "2024-03-19T02:31:01.000Z", - "image": "https://pc.watch.impress.co.jp/img/pcw/list/1576/979/1.jpg" - }, - { - "date": "2024-03-19T00:56:33Z", - "title": "CSSでスタイルクエリ(@container style())を使えるようになると、実装がいろいろ便利になる", - "link": "https://coliss.com/articles/build-websites/operation/css/superpowered-container-style-queries.html", - "contentEncoded": "
CSSでスタイルクエリ(@container style())を使えるようになると、実装がいろいろ便利になる", - "contentEncodedSnippet": "CSSでスタイルクエリ(@container style())を使えるようになると、実装がいろいろ便利になる\n\nコンテナクエリがすべてのモダンブラウザの安定版でサポートされ、メディアクエリに代わり、コンテナクエリを使用する機会も増えてきたと思います。 コンテナクエリは親コンテナに基づいてスタイルを定義できるものですが、親のサイズによるクエリだけではありません。親のスタイル値によるクエリ(スタイルクエリ)も可...", - "dcDate": "2024-03-19T00:56:33Z", - "content": "コンテナクエリがすべてのモダンブラウザの安定版でサポートされ、メディアクエリに代わり、コンテナクエリを使用する機会も増えてきたと思います。 コンテナクエリは親コンテナに基づいてスタイルを定義できるものですが、親のサイズによるクエリだけではありません。親のスタイル値によるクエリ(スタイルクエリ)も可...", - "contentSnippet": "コンテナクエリがすべてのモダンブラウザの安定版でサポートされ、メディアクエリに代わり、コンテナクエリを使用する機会も増えてきたと思います。 コンテナクエリは親コンテナに基づいてスタイルを定義できるものですが、親のサイズによるクエリだけではありません。親のスタイル値によるクエリ(スタイルクエリ)も可...", - "rdfAbout": "https://coliss.com/articles/build-websites/operation/css/superpowered-container-style-queries.html", - "isoDate": "2024-03-19T00:56:33.000Z", - "image": "https://coliss.com/wp-content/uploads-202401/2024031601@2x.png" - }, - { - "date": "2024-03-19T02:00:18Z", - "title": "オフショア開発を成功させるための実践的な進め方【5ステップ】", - "link": "https://offshore.icd.co.jp/blog/offshore-flow", - "contentEncoded": "コンテナクエリがすべてのモダンブラウザの安定版でサポートされ、メディアクエリに代わり、コンテナクエリを使用する機会も増えてきたと思います。 コンテナクエリは親コンテナに基づいてスタイルを定義できるものですが、親のサイズによるクエリだけではありません。親のスタイル値によるクエリ(スタイルクエリ)も可...
オフショア開発を成功させるための実践的な進め方【5ステップ】", - "contentEncodedSnippet": "オフショア開発を成功させるための実践的な進め方【5ステップ】\n\n自社の売上をぐんっと増加させるため、より効果的な開発の進め方を知りたいと思いませんか。 せっかく開発の仕事が取れても開発できるエンジニアがいない。そして売上の機会損失。 このような悪循環に陥ってないだろうか。 これだけサービスがありふれた時代にそんなもったいないことはもうやめましょう。 それでは何が...", - "dcDate": "2024-03-19T02:00:18Z", - "content": "自社の売上をぐんっと増加させるため、より効果的な開発の進め方を知りたいと思いませんか。 せっかく開発の仕事が取れても開発できるエンジニアがいない。そして売上の機会損失。 このような悪循環に陥ってないだろうか。 これだけサービスがありふれた時代にそんなもったいないことはもうやめましょう。 それでは何が...", - "contentSnippet": "自社の売上をぐんっと増加させるため、より効果的な開発の進め方を知りたいと思いませんか。 せっかく開発の仕事が取れても開発できるエンジニアがいない。そして売上の機会損失。 このような悪循環に陥ってないだろうか。 これだけサービスがありふれた時代にそんなもったいないことはもうやめましょう。 それでは何が...", - "rdfAbout": "https://offshore.icd.co.jp/blog/offshore-flow", - "isoDate": "2024-03-19T02:00:18.000Z", - "image": "https://offshore.icd.co.jp/blog/wp-content/uploads/2024/02/アイキャッチ_進め方_06.jpg" - }, - { - "date": "2024-03-19T06:02:28Z", - "title": "Google Research、1枚の人物画像からその人物が話す動画を生成するAI「VLOGGER」発表", - "link": "https://www.itmedia.co.jp/news/articles/2403/19/news138.html", - "contentEncoded": "自社の売上をぐんっと増加させるため、より効果的な開発の進め方を知りたいと思いませんか。 せっかく開発の仕事が取れても開発できるエンジニアがいない。そして売上の機会損失。 このような悪循環に陥ってないだろうか。 これだけサービスがありふれた時代にそんなもったいないことはもうやめましょう。 それでは何が...
Google Research、1枚の人物画像からその人物が話す動画を生成するAI「VLOGGER」発表", - "contentEncodedSnippet": "Google Research、1枚の人物画像からその人物が話す動画を生成するAI「VLOGGER」発表\n\n人物画像ごとにトレーニングする必要はなく、口元だけでなく、瞬きなどの顔全体の表情の変化や、上半身画像の場合、手のジェスチャーも表現できる。 80万個のアイデンティティの以前のデータセットより「1桁大きいく、動的なジェスチャーを備えた」新しいデータセット「MENTOR」に基づいてトレーニングした。 研究者らは...", - "dcDate": "2024-03-19T06:02:28Z", - "content": "人物画像ごとにトレーニングする必要はなく、口元だけでなく、瞬きなどの顔全体の表情の変化や、上半身画像の場合、手のジェスチャーも表現できる。 80万個のアイデンティティの以前のデータセットより「1桁大きいく、動的なジェスチャーを備えた」新しいデータセット「MENTOR」に基づいてトレーニングした。 研究者らは...", - "contentSnippet": "人物画像ごとにトレーニングする必要はなく、口元だけでなく、瞬きなどの顔全体の表情の変化や、上半身画像の場合、手のジェスチャーも表現できる。 80万個のアイデンティティの以前のデータセットより「1桁大きいく、動的なジェスチャーを備えた」新しいデータセット「MENTOR」に基づいてトレーニングした。 研究者らは...", - "rdfAbout": "https://www.itmedia.co.jp/news/articles/2403/19/news138.html", - "isoDate": "2024-03-19T06:02:28.000Z", - "image": "https://image.itmedia.co.jp/news/articles/2403/19/cover_news138.jpg" - }, - { - "date": "2024-03-08T08:02:27Z", - "title": "claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件|池田 亮平", - "link": "https://note.com/profound/n/na3cbeafa7ec9", - "contentEncoded": "人物画像ごとにトレーニングする必要はなく、口元だけでなく、瞬きなどの顔全体の表情の変化や、上半身画像の場合、手のジェスチャーも表現できる。 80万個のアイデンティティの以前のデータセットより「1桁大きいく、動的なジェスチャーを備えた」新しいデータセット「MENTOR」に基づいてトレーニングした。 研究者らは...
claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件|池田 亮平", - "contentEncodedSnippet": "claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件|池田 亮平\n\nclaude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件 ひと言で結論を言うと、昨日はclaude3に衝撃を受けて、興奮して眠れませんでした…。 四の五の言わずにアウトプットを見せちゃいたいんですが、 ●打合せをZoom録画 ↓ ●録音データをCLOVA noteに放り込んでテキスト...", - "dcDate": "2024-03-08T08:02:27Z", - "content": "claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件 ひと言で結論を言うと、昨日はclaude3に衝撃を受けて、興奮して眠れませんでした…。 四の五の言わずにアウトプットを見せちゃいたいんですが、 ●打合せをZoom録画 ↓ ●録音データをCLOVA noteに放り込んでテキスト...", - "contentSnippet": "claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件 ひと言で結論を言うと、昨日はclaude3に衝撃を受けて、興奮して眠れませんでした…。 四の五の言わずにアウトプットを見せちゃいたいんですが、 ●打合せをZoom録画 ↓ ●録音データをCLOVA noteに放り込んでテキスト...", - "rdfAbout": "https://note.com/profound/n/na3cbeafa7ec9", - "isoDate": "2024-03-08T08:02:27.000Z", - "image": "https://assets.st-note.com/production/uploads/images/133265739/rectangle_large_type_2_c410ab55acf2d835cb80dff1554d0cf6.png?fit=bounds&quality=85&width=1280" - } -] diff --git a/sample/src/types/rss.ts b/sample/src/types/rss.ts deleted file mode 100644 index 6b2f6ae3..00000000 --- a/sample/src/types/rss.ts +++ /dev/null @@ -1,28 +0,0 @@ -export type Rss = { - date: string; - title: string; - link: string; - contentEncoded: string; - contentEncodedSnippet: string; - dcDate: string; - content: string; - contentSnippet: string; - rdfAbout: string; - isoDate: string; - image: string; -}; - -// export type Ogp = { -// date: string; -// fbAppId: string; -// ogType: string; -// ogLocale: string; -// "og:site_name": "PC Watch"; -// "og:url": "https://pc.watch.impress.co.jp/docs/news/1577403.html"; -// "og:title": "AIボイチェンソフト「Voidol 1」が無償化 "; -// "og:description": " クリムゾンテクノロジー株式会社は、AIボイスチェンジャーソフト「Voidol 1」およびVoldol 1を音楽制作ソフト上で動作させる「Voidol Plugin Package」を3月より無償化した。"; -// "og:image": "https://pc.watch.impress.co.jp/img/pcw/list/1577/403/01.jpg"; -// "article:published_time": "2024-03-19T10:22:31+09:00"; -// "article:modified_time": "2024-03-19T11:28:29+09:00"; -// "article:tag": "ソフトウェア/アプリ,他ソフト/アプリ,その他"; -// }; diff --git a/sample/src/types/zenn.ts b/sample/src/types/zenn.ts deleted file mode 100644 index f0a3dfc8..00000000 --- a/sample/src/types/zenn.ts +++ /dev/null @@ -1,35 +0,0 @@ -export type ZennArticle = { - id: number; - postType: string; - title: string; - slug: string; - commentsCount: number; - likedCount: number; - bodyLettersCount: number; - articleType: string; - emoji: string; - isSuspendingPrivate: boolean; - publishedAt: string; - bodyUpdatedAt: string; - sourceRepoUpdatedAt: string; - pinned: boolean; - path: string; - user?: ZennUser; - publication?: ZennPublication; -}; - -type ZennUser = { - id: number; - username: string; - name: string; - avatarSmallUrl: string; -}; - -type ZennPublication = { - id: number; - name: string; - displayName: string; - avatarSmallUrl: string; - pro: boolean; - avatarRegistered: boolean; -}; diff --git a/sample/tsconfig.json b/sample/tsconfig.json deleted file mode 100644 index 9cebad6b..00000000 --- a/sample/tsconfig.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "lib": [ - "es6", - "dom" - ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - "rootDir": "src" /* Specify the root folder within your source files. */, - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - "resolveJsonModule": true /* Enable importing .json files. */, - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or 'claude3を使ってみたら、ライティングの仕事が無くなるかもしれない瞬間を目の当たりして、衝撃を受けた件 ひと言で結論を言うと、昨日はclaude3に衝撃を受けて、興奮して眠れませんでした…。 四の五の言わずにアウトプットを見せちゃいたいんですが、 ●打合せをZoom録画 ↓ ●録音データをCLOVA noteに放り込んでテキスト...