- 1. Pop UP Window
- 1.0.1. バッククォート(`)で文字列を囲った際のJavaScriptの挙動について
- 1.0.2. JQuery の ready の実装
- 1.0.3. Quine を書いてみた
- 1.0.4. 【2024年版】フロントエンドに求められるミドルレベルのエンジニアと達成する為にすべきこととは
- 1.0.5. JavaScriptでかの有名な水の移し替えパズルを解く【反復深化深さ優先探索】
- 1.0.6. 【JavaScript】Canvasのバグを疑ってしまう興味深い現象
- 1.0.7. JavaScriptでインデックスソート
- 1.0.8. CookieClickerのチートプログラム
- 1.0.9. Rails: JavaScript からコントローラの POST メソッドに対して非同期でリクエストを送信する
- 1.0.10. p5.js でのループアニメーションで「frameCount」と「剰余演算 or 三角関数」を使う :2D・3D のそれぞれで x方向に往復する動きを例に +α
- 1.0.11. async/await 比較(C#, JavaScript, Python)
- 1.0.12. Promiseを繰り返し呼び出して制御する
- 1.0.13. Date型のmonthはmonthIndexなので注意
- 1.0.14. 【React】ChatGPTを使っておみくじサイトを作ってみた
JavaScript の Segments の使い所を考える
JavaScript の Segments という機能を知りました。
JavaScript って標準 API でこんなこともできるのかhttps://t.co/ckHTlqcium pic.twitter.com/hrwfgvtF4J
— naporitan (@naporin24690) December 25, 2023
【小ネタ】GitHub.comの経過時間表記をJSTに変換するブックマークレットを作ってみた
リポジトリに書かれているものがそのままなのですが、GitHubの公式サイトの`2 days ago`のような表記を日本時間の`2023/12/31 16:43:01`という表記に変換するブックマークレットを作って公開したのでQiitaでもお知らせです。
https://github.com/Priarts/github_time_JST_bookmarklet
動作確認はMacのChromeだけでやっています。もし他のブラウザで動かなかったらごめんなさい。
あとChrome拡張で、ページに来たらいきなり変換するのを作ろうかと思ったのですが、`2 days ago`は別に良いけど`5 years ago`だと、いつやねん!って思って変換したくなるとかもありそうだったと思ったので、ブックマークレットで作っています。
n番煎じかもしれませんが、良かったら使ってみてください🙏🏻
Youtube Musicでまとめてdislike(低評価)をするスクリプト
### 動機
Youtube Musicを使っていると、聞きたくない曲(特定アーティストの曲)がそれなりに自動で再生されてしまうので何とかしたい フィードバックとしてdislikeボタンがあるが、それを何度も押してもそのアーティストの曲は普通に流れてきたりする。特に顕著なのが協調フィルタリングでおすすめされそうなファンベースが近いアーティストで、全曲dislikeでもしないと普通に自動再生に入ってきてしまう 1個1個手でやってもいいが、途中でめんどくさくなった
### コード 1回やるだけなら、対象のアルバムやアーティストの曲リストのページでChromeの開発者コンソールからこのコードを貼り付けるだけで良い。1.5秒毎に1曲dislikeを付けていく。
``` document.querySelectorAll('yt-button-shape#button-shape-dislike button[aria-pressed="false"]').forEach((button, index) => { setTimeout(() => { button.
ゼロ除算のショートハンド
## 何をしたか
よくありそうな除算の結果を少数切り捨てして、0除算の場合は任意の値(例えばゼロとかエラー文字列)を返す式を短く書く方法を研究した結果こうなりました。
``` js function divide(a, b) { return a / b | 0; } ```
論理和(`||`)じゃなくてビット論理和( `|`)です
## 何故こうなるのか
JavaScriptにおいて数値は内部的に64ビットの浮動小数点数(IEEE 754形式)として扱われるが、ビット演算は32ビット整数で行われるため、この過程で浮動小数点数から整数への変換が行われます。 またJavaScriptでは、`a / b`のbが0の場合、結果は`Infinity`または`-Infinity`になります。これらは浮動小数点数の表現であり、次のビットパターンで表されます。
### `Infinity`の64ビット二進数表現の変換過程
``` 0111111111110000000000000000000000000000000000000000000000000000 ```
上位32ビ
p5.js での往復する動きのループアニメーションを frameCount と色の透明度の設定で作る
## この記事の内容 p5.js で往復する動きを使ったループアニメーションを作るのに、「frameCount と剰余演算を使う方法」と「frameCount と三角関数を使う方法」のそれぞれを試し、その話を以下の記事に書きました。
●p5.js でのループアニメーションで「frameCount」と「剰余演算 or 三角関数」を使う :2D・3D のそれぞれで x方向に往復する動きを例に +α #JavaScript - Qiita https://qiita.com/youtoy/items/47cf23bb16af9f22ced3
今回の記事で扱うのは、それら 2つとは別の方法を試してみた話です。
## 実装した内容 描画する内容は、キャンバスの真ん中の高さのところを円が左右に往復するというものです。 まずは実装した内容全体を示します。
```javascript const c = [190, 160, 250]; let a = 255;
function setup() { createCanvas(450, 350);
noStroke(); }
f
htmlでポップアップwindowを出してみる。
機能説明などで、一時的に見られるウインドーがあると便利ですよね。 そこで、html内にスタイルシート(css)を使ったポップアップウインドーを見つけました。 それに手を加えジャバスクリプト(javascript)で表示位置を変えたのを、紹介します。 特徴としてはちょっとしたテキストを確認したり、コピペして使える。要らない時は消して置いたり邪魔になったら場所を変える。
htmlファイル ```html
Pop UP Window
Pop UP Window
「アドバイザー・にゃんこ」
バッククォート(`)で文字列を囲った際のJavaScriptの挙動について
TypeScriptのソースコードを読んでいると、文字列を囲う際に、シングルクォート `'` やダブルクォート `"` ではなく、バッククォート `` ` `` を使うことがあります。
[JavaScript Primer](https://jsprimer.net/basic/data-type/#string) によると
バッククォート`` ` ``で囲んだ範囲を文字列とするリテラルのことを **テンプレートリテラル** と呼ぶそうです。
ES2015から導入されたリテラルで、TypeScriptを書くなら頻繁に目にしてもおかしくないリテラルですね。## (本題)テンプレートリテラルの主な特徴
1. 複数行の文字列をそのまま書くことができる
2. 文字列内で `${変数名}` と書くと、変数の値を埋め込むことができる### 1.複数行の文字列をそのまま書くことができる
```JavaScript: sample01.js
`複数行の
文字列を
入れたい`; // => "複数行の\n文字列を\n入れたい"
```### 2.文字列内で `${変数名}` と書くと、
JQuery の ready の実装
# JQuery の ready の実装
DIV でもなんでも ready が実行できて追加要素の描画完了時に実行してくれるのでどういう実装してるのかと思ってソース読んだら setTimeout してた
[JQuery 3.7.1 のソース](https://code.jquery.com/jquery-3.7.1.js)
## 一部抜粋
``` javascript
if ( document.readyState === "complete" ||
( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {// Handle it asynchronously to allow scripts the opportunity to delay ready
window.setTimeout( jQuery.ready );}
```## 動作を推測
* setTimeout を呼び出す
* 描画含む他のタスクに処理が一旦切り替わる
* 描画処理が終わったら処
Quine を書いてみた
年賀状でよくみる Quine を自分自身でも作ってみたかったので、作ってみました。
```js
f=()=>{eval(`p='ThisIsAQuine!';o='';t='f='+f+';f();';r='\\u0020';s='\`';t=t.replace(/[\\n]|[
\\s]/g,'').split('\`');u=t[4];t=t[0]+s+t[1]+s+t[2]+s+t[3];c=0;a=[[0,92],[0,92],[0,92],[0,92]
,[0,92],[0,92],[0,8,16,48,51,92],[0,6,18,48,51,92],[0,5,10,15,19,48,51,92],[0,4,8,16,20,92],
[0,3,7,18,21,92],[0,2,6,18,22,92],[0,2,5,19,22,92],[0,2,5,19,23,28,31,39,42,48,51,57,60,63,6
8,81,87,92],[0,1,5,20,23,28,31,39,42,48,51,57,60,61,70,79,89,92],[0,1,4,20,23,2
【2024年版】フロントエンドに求められるミドルレベルのエンジニアと達成する為にすべきこととは
# はじめに
経験年数を数年積んでくると、大体の実装はできるようになったけど、この先何を目指すべきなんだろう?と迷子になってしまうことがないでしょうか。
今回は私と同じような迷える子羊に「ジュニアレベルを卒業してミドルレベルのエンジニア」を目指す際に意識すべきことや、具体的に何をやっていけばいいのかをまとめてみました。これは自分のための記事であると同時に、同じようにミドル層、ひいてはシニアレベルのエンジニアを目指す方にも刺さる内容になっているかと思います。
今、**自分がどのようにキャリアアップしていくべきなのか**、どのような道筋でスキルを磨いていけばいいのか。そんなふうに悩んでいる方は是非読んでみてください。今同じくキャリアに悩むフロントエンドエンジニアの方の道標になれば幸いです。
※内容はフロントエンジニアが対象になりますが、バックエンドの方もなにか通じるものがある…かもしれません。
ジュニアレベルのエンジニアについては下記記事で詳しくは解説していますので、気になる方は是非読んで見て下さい!
https://qiita.com/mamimami0709/items
JavaScriptでかの有名な水の移し替えパズルを解く【反復深化深さ優先探索】
## 元ネタ
https://qiita.com/jerrywdlee/items/c7bbcbb6c68e37e7ef71
## 問題
水が5L入る容器と3L入る容器がある、この2つの容器だけを使って、
4Lの水を量るにはどうすれば良いですか?
水はいくらでも使えるものとします。## ソース
```js
class 容器クラス {
constructor(最大容量) {
this.容量 = 0;
this.最大容量 = 最大容量;
}
get 残り容量() {
return this.最大容量 - this.容量;
}
水を入れる() {
this.容量 = this.最大容量;
}
水を捨てる() {
this.容量 = 0;
}
水を移す(dst容器) {
const 移動する容量 = this.容量 >= dst容器.残り容量 ? dst容器.残り容量 : this.容量;
this.
【JavaScript】Canvasのバグを疑ってしまう興味深い現象
## 何が言いたいのか
PCとスマホでCanvasの表示が変わる現象があった。
## 何を表示したいのか
Canvasいっぱいに
```
🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓
🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓
🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓
🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓🌓
```といった感じに表示したい。
## const emoji = "🌓";
### PC
### スマホ
## const emoji = "🌗";
### PC
# JavaScriptでインデックスソート
インデックスソート必要になるたびに思い出しながら実装してるのでメモ
## インデックスソートとは?
``` javascript
var a = [2, 3, 1];
// ↓インデックスソートする
// > [2, 0, 1] と返ってくる
// a[2] = 1
// a[0] = 2
// a[1] = 3
// ソートした場合の参照インデックスを返してくれる
```
と返ってくるソートです## ソースコード
``` javascript
function argsort(x) {
var tmp = [];
for(var i = 0; i < x.length; i += 1) { tmp.push([i, x[i]]); } tmp.sort(function(a, b) { return a[1] - b[1]; }); var idxs = [];
CookieClickerのチートプログラム
# あらまし
完全に正月の自由研究で、CookieClickerのチートプログラムを書いた。
# 経緯
1000回転生する隠し実績をちまちま進めていたのだけど飽きがきたし、せっかくなので自動化で遊んでみることにした。元々はSeleniumに挑戦しようと思っていたのだけど、Macへの導入がなかなか大変そう・・Automatorでやろうかな?と色々考えたが
GoogleChrome拡張機能の、
[ScriptAutoRunner](https://chromewebstore.google.com/detail/scriptautorunner/gpgjofmpmjjopcogjgdldidobhmjmdbm?hl=ja)
のJavaScriptで素朴にやることにした。
コンソールのメッセージは気にしない。
# そもそも
数値操作をすれば転生実績は解除できたりしそうだけど、あくまで「ブラウザ操作の自動化」をやりたいというのが当初の目的だったので、謎に地道な操作を自動化しているかもしれない。チートのことをよくわかっていない。# コード
```javascript
//フラグ
let s
Rails: JavaScript からコントローラの POST メソッドに対して非同期でリクエストを送信する
一定の時間が経過したら強制的に投稿するフォームを作成する。
questionsコントローラのsubmitメソッドに対し、選択した`choice_id`を送信する。```html
<%= form_with(url: submit_questions_path, method: :post) do |form| %><%= form.radio_button :choice_id, 1 %>
<%= form.radio_button :choice_id, 2 %>
<%= form.radio_button :choice_id, 3 %><%= form.submit '投稿' %>
```もちろん、上記のフォームで選択をして投稿ボタンを押せば投稿ができる。
しかし今回は、一定の時間が経ったらjavascriptで強制的に投稿させる。
それをしてくれるjavascriptは以下。
viewにベタ打ちなどして記述する。```javascript
var postAfterSeconds = 5;
setTimeout(function()
p5.js でのループアニメーションで「frameCount」と「剰余演算 or 三角関数」を使う :2D・3D のそれぞれで x方向に往復する動きを例に +α
## 今回の内容
p5.js でループするアニメーションを作る際に、frameCount と剰余演算を組み合わせたものをよく使います。それに関連する話では以下の記事を書いていました。●frameCount・剰余演算を使った p5.js でのループアニメーション:アニメーションの最初と最後に空白の時間を作る - Qiita
https://qiita.com/youtoy/items/68f9dc64cb6cbe912bc4そして今回は、「値の増加 ⇒ 値の減少 ⇒ 値の増加 ⇒ ...」という内容のループアニメーションを作る時の話です。それについて、「frameCount と 剰余演算」を組み合わせた方法について書きつつ、「frameCount と 三角関数」を組み合わせた方法も合わせて書いてみます。
## 2D
まずは 2D の描画で、横方向の位置座標を変化させる場合の例を書いてみます。### 実装内容
最初に、例として実装した 3つの内容を掲載します。
他の実装方法もあると思いますが、試してみた内容のうち 3つをピックアップしてみました。```javascrip
async/await 比較(C#, JavaScript, Python)
## メッセージループ
### C#
Dispatcher.Run()
```C#
using System.Windows.Threading;Dispatcher.CurrentDispatcher.InvokeAsync(() =>
{
// いろいろな処理...// メッセージループを終了させる
Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
});Dispatcher.Run();
```WPF とか WinForms とかでは、フレームワークがすでにメッセージループを回しているので、自分で Dispatcher.Run() する必要はない。
### JavaScript
自分で書く必要なし。
### Python
asyncio.run(最初に実行するasync関数)
```python
import asyncioasync def main():
# いろいろな処理...
passasynci
Promiseを繰り返し呼び出して制御する
# Promiseを繰り返し呼び出して制御する
Promise を繰り返し呼び出しなんらかのフラグにより呼び出しを中止します
``` javascript
var loopCounter = 5;
function LoopPromise() {
console.log("LoopPromise: ", loopCounter);
if(loopCounter > 0) {
new Promise(function(resolve) {
setTimeout(function() {
loopCounter -= 1;
LoopPromise();
resolve(true);
}, 1000);
});
} else {
// NOP
}
}
```## 想定される使い道
下記のような使い方を想定しています
* APIのポーリング … レスポンスが0の間は
Date型のmonthはmonthIndexなので注意
# このページは?
javascriptの`new Date(2024, 1)`と`new Date('2024-1')`の違いについて説明することができますか?
あまり直感的な仕様じゃなく、混乱したのでまとめます。開発者ツールのconsoleで気軽に確かめられることなので、是非自分でも動かしながら読んでください。
# 内容
## monthにはmonthIndexが格納されている
前提として、Date型のmonth要素には月(1月-12月)ではなく、 monthIndex(0-11)が格納されています。
つまり、単純に`getMonth()`するとずれた値が返ってくる。
```javascript
// date: 2024年1月
date.getMonth()
// 結果: 0
```
なので、現実世界の月として扱う際は+1する必要がある。
```javascript
console.log(`${date.getFullYear()}年${date.getMonth()+1}月`)
// 結果: 2024年1月
```
## new Date()するときの注意
ここからが本題です
【React】ChatGPTを使っておみくじサイトを作ってみた
# はじめに
あけましておめでとうございます。KDDIアジャイル開発センター所属のtakateinです。
大晦日の日に「今年はAIが本当に流行ったけど、chatGPT使って開発してないなぁ」と、ふと思い作ることにしました。# なぜ、chatGPTを使うのか
"おみくじを引くだけ" のアプリだと面白くなくて、一言メッセージを添えるとユーザーも楽しそう。
この一言メッセージを人間が考えてDBとかに保存してランダムで使用するよりかは対話型AIに考えてもらった方が面白そうだから。# 完成品
こちら
http://agorophius.com/game/2024_AgoMikuji/index.html個人でバンド活動をしており、SNSを観てくれる方が年始から気軽に楽しめるコンテンツが提供出来たらいいなー と思い作りました。
chatGPTには、「ユーザー名を読み込み、ランダムにおみくじの結果を返す。その結果からバンド名にあった面白い曲名」を考えてもらうようにしました。↓↓↓こんな感じで返ってきます↓↓↓
_________
「ふん、たかてぃ~んさんへのおみくじね。せーのっ!中