カテゴリー: Developments

  • ざわ・・・メーカー

    /**
     * ざわ・・・メーカー
     * @param {obj} cs: canvas object
     * @param {number} zawaNum: 生成する「ざわ・・・」の数
     * @param {boolean} isBordering: 縁取りするかどうか
     *     黒文字の場合は白フチに、白文字の場合は黒フチに
     * @param {boolean} isColorBlack: 黒文字にするかどうか(falseで白文字)
     * @param {boolean} isRightFlow: 右から流れるようにするか
     */
    var zawaMaker = function(cs, zawaNum, isBordering, isColorBlack, isRightFlow ) {
        var ctx      = cs.getContext('2d');
        var csWidth  = cs.width;
        var csHeight = cs.height;
        var zawas    = [];
    
        /**
         * ランダムな整数を返す
         * @param max 最大値
         * @param min 最小値
         * @return min ~ max
         */
        var getRandomInt = function(max, min) {
            return Math.floor(Math.random() * (max - min)) + min;
        };
    
        /**
         * @constructor
         */
        var ZawaZawa = function() {
            this.initialize();
        };
    
        ZawaZawa.prototype = {
            initialize: function() {
                this.scale     = getRandomInt(10, 5) / 10; // 1 ~ 0.5の倍率
                this.width     = this.scale * 160;  // 元サイズを大体150pxくらいと規定
                this.height    = this.scale * 60;   // 元サイズを大体60pxくらいと規定
                this.moveX     = getRandomInt(csWidth  - this.width, 0);
                this.moveY     = getRandomInt(csHeight - this.height, 0);
                this.addMoveX  = this.scale * 5;  // 奥行きを出すために、小さい要素は移動量を少なくする
                this.alpha     = 1;
            },
            setStatus: function() {
                /* 変換マトリクスを初期化 */
                ctx.setTransform(1, 0, 0, 1, 0, 0);
    
                ctx.scale(this.scale, this.scale);
                ctx.translate(this.moveX, this.moveY);
                ctx.globalAlpha = this.alpha;
            },
            update: function() {
                /* scaleで座標軸がズレているので、scaleした分を割った値をCanvasサイズとする */
                var _csWidth = csWidth / this.scale;
    
                /* 流れる向きの条件分岐 */
                if (isRightFlow) {
                    if (this.moveX + this.width + 50 < 0 ) {
                        this.alpha = 0;
                        this.moveX = _csWidth + this.width;
    
                        /* scaleを変えるため再設定 */
                        this.scale    = getRandomInt(10, 5) / 10;
                        this.width    = this.scale * 160;
                        this.height   = this.scale * 60;
                        this.moveY    = getRandomInt(csHeight - this.height, 0);
                        this.addMoveX = this.scale * 5;
                    } else {
                        this.moveX -= this.addMoveX;
                        this.alpha += 0.01;
                    }
                } else {
                    if (this.moveX >_csWidth) {
                        this.alpha = 0;
                        this.moveX = - this.width;
    
                        /* scaleを変えるため再設定 */
                        this.scale    = getRandomInt(10, 5) / 10;
                        this.width    = this.scale * 160;
                        this.height   = this.scale * 60;
                        this.moveY    = getRandomInt(csHeight - this.height, 0);
                        this.addMoveX = this.scale * 5;
                    } else {
                        this.moveX += this.addMoveX;
                        this.alpha += 0.01;
                    }
                }
    
                /* 透明度が1以上の場合は透明度の増加を止める */
                if (this.alpha > 1) {
                    this.alpha = 1;
                }
            },
            draw: function() {
                /**
                 * @param {number} width: 線の太さ
                 * @param {string} color: 線の色
                 */
                function createZawaPath(width, color) {
                    ctx.lineWidth = width;
                    ctx.strokeStyle = color;
                    ctx.beginPath();
                    ctx.lineCap = "round";
                    ctx.lineJoin = "round";
    
                    // ざ
                    ctx.moveTo(10, 45);
                    ctx.lineTo(50, 45);
    
                    ctx.moveTo(25, 35);
                    ctx.lineTo(50, 60);
                    ctx.lineTo(20, 60);
                    ctx.bezierCurveTo(5, 60, 5, 75, 20, 75);
                    ctx.lineTo(50, 75);
    
                    ctx.moveTo(38, 30);
                    ctx.lineTo(38, 36);
    
                    ctx.moveTo(46, 30);
                    ctx.lineTo(46, 36);
    
                    // わ
                    ctx.moveTo(70, 35);
                    ctx.lineTo(70, 75);
    
                    ctx.moveTo(60, 45);
                    ctx.lineTo(80, 45);
                    ctx.lineTo(60, 75);
                    ctx.bezierCurveTo(80, 25, 120, 70, 85, 75);
    
                    // ・・・
                    ctx.moveTo(110, 60);
                    ctx.lineTo(115, 60);
    
                    ctx.moveTo(125, 60);
                    ctx.lineTo(130, 60);
    
                    ctx.moveTo(140, 60);
                    ctx.lineTo(145, 60);
    
                    ctx.closePath();
                    ctx.stroke();
                }
    
                /* 縁取と黒・白文字の条件分岐 */
                if (isBordering && isColorBlack) {
                    createZawaPath(15, 'white');
                    createZawaPath(6, 'black');
                }
                if (isBordering && !isColorBlack) {
                    createZawaPath(15, 'black');
                    createZawaPath(6, 'white');
                }
                if (!isBordering && isColorBlack) {
                    createZawaPath(6, 'black');
                }
                if (!isBordering && !isColorBlack) {
                    createZawaPath(6, 'white');
                }
    
            },
            render: function() {
                this.setStatus();
                this.draw();
                this.update();
            }
        };
    
    
        /**
         * ざわインスタンスの作成
         * @return zawas[instance, instance...];
         */
        function createZawas(num) {
            var i = 0;
            for (; i < num; i++) {
                zawas[zawas.length] = new ZawaZawa();
            }
        }
    
       /**
         * 描画
         */
        function render() {
            var i = 0;
            var l = zawas.length;
            ctx.setTransform(1,0,0,1,0,0);
            ctx.clearRect(0, 0, csWidth, csHeight);
            for (; i < l; i++) {
                zawas[i].render();
            }
            requestAnimationFrame(render);
        }
    
        /* 実行 */
        createZawas(zawaNum);
        render();
    };
    
    var cs = document.getElementById('myCanvas1');
    
    /* args: canvasオブジェクト, ざわの数, 縁取りか, 黒文字か, 右から流すか */
    zawaMaker(cs, 10, false, true, false);
    

    https://qiita.com/nekoneko-wanwan/items/4b196365183580831758

    👍

  • ざわ…ざわ…ざわ…

  • キーのリマッピング

    自分用に修正したので貼っておこー

    バグ修正

    • Firefox対応
      Firefoxのウインドウを移動した場合、ディスプレイの右側/下側で画面のサイズを変更ができなかったのでウインドウ枠を固定「7px」から可変値に修正した。

    機能変更

    • タスクビューのソースからタスクトレイアイコン周りのソースだけ切り出してマージした。仮想デスクトップ間でのウインドウ移動は意図しない動作が多発してしまうので使用中止。。「VirtualDesktopAccessor.dll」を「KeyRemap.ahk」と同じフォルダに格納するとタスクトレイのアイコンが「R」から「数字」になる。(任意)
    • ホットキーのモディファイア「*」を削除した。
    • 画面サイズの定義をスクリプトの最後に移動した。

    その他

    作ったもの

    keyremap_20240922.zip

  • VPN経由で映画やドラマを視聴する

    注意:広告つきプランをご利用の場合、VPN経由でNetflixを視聴することはできません。NetflixのライブイベントはVPN経由で視聴することはできません。

    https://help.netflix.com/ja/node/114701

    VPN 無料 – VPN Chrome Zenmate

    プライバシーへの取り組み

    https://chromewebstore.google.com/detail/fdcgdnkidjaadafnichfpabhfomcebme/privacy

    拡張機能をインストールして「火垂るの墓」を観たけど個人情報は抜かれてそう。ご利用は自己責任でお願い致します… 🙄

    ブラウザーのストレージ制限と削除基準

    https://developer.mozilla.org/ja/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria

    Chromeのゴミ掃除

    1. 「設定」画面で「プライバシーとセキュリティ」メニューを選択する。
    2. 「サイトの設定」を選択する。
    3. 「すべてのサイトに保存されている権限とデータを表示」を選択する。

    または、以下のページを開く。

    chrome://settings/content/all

    1. 表示した画面で「サイトの合計ストレージ使用状況」を確認する。
    2. 「並べ替え」で「保存データ」を選択する。
    3. 各サイトのゴミ箱アイコンから不要なデータを削除する。

    「すべてのデータを削除」ボタンで一括削除するとすべてのサイトのログイン情報が削除されてIDやパスワードの再入力が必要となります。IDやパスワードを適切に管理していない場合には、Webサイト/サービスにログインできなくなりますので、ご利用は自己責任でお願い致します… 🙄

    Windowsのゴミ掃除

    DiskInfo
    https://forest.watch.impress.co.jp/library/software/diskinfo

    フリーソフトを使ってごみファイルを探し、手動で削除しています。

    たまにゴミ掃除したくなるけど数十ギガバイトのゴミファイルを削除しても体感できるようなパフォーマンス改善が見込めるわけではないので悪しからずご了承くださいませ…

  • Mozilla Firefoxノススメ

    デスクトップ、モバイル、エンタープライズ用 Firefox をダウンロード – Mozilla
    https://www.mozilla.org/ja/firefox

    Google Trends

    2004-現在

    昔はすごかった?

    現在のブラウザのシェアを見るとChrome一択だけど、最近複数画面/複数タブでピクチャーインピクチャー機能を使用するためにFirefoxをインストールした。

    Chromeでも拡張機能をインストールすればピクチャーインピクチャー機能を使用できるけれどマルチウインドウには対応していない。

    Picture-in-Picture Extension (by Google)

    https://chromewebstore.google.com/detail/picture-in-picture-extens/hkgfoiooedgoejojocmhlaklaeopbecg

    Support multiple window picture-in-picture #19

    https://github.com/GoogleChromeLabs/picture-in-picture-chrome-extension/issues/19

    マルチウインドウに対応するには大きな改修が必要らしい。データフォルダを用意して起動時に指定してやれば複数画面で使用できるみたいなことが書かれている?

    Firefox のピクチャーインピクチャーについて

    Firefox ならマルチウインドウで使用できる。

    https://support.mozilla.org/ja/kb/about-picture-picture-firefox

    動画にレイヤーが重ねられていてアクセサリーなどが配置されている場合は、ピクチャーインピクチャーのボタンが押せないので、Ctrl + Shift + ] キーのキーボードショートカットを使用している。

    追記:アドレスバーにもアイコンが用意されている。

    Firefox のダメなところについて

    アドレスバーでのサイト内検索機能が使いづらい。ブックマークでタグを設定してURLに「%s」を埋め込んでやれば検索できそうではあるけどChromeのアドレスバー/オムニバーの方がいい感じ。

    Firefoxでも過去の機能を復活させればショートカット+tab/spaceでサイト内検索できる模様。

    How do I add a custom search engine to Firefox desktop?

    https://stackoverflow.com/questions/77219507/how-do-i-add-a-custom-search-engine-to-firefox-desktop

    Re-enable a feature from the past

    1. Type in about:config in the address bar. Accept all the scary warnings.
    2. Search for browser.urlbar.update2.engineAliasRefresh.
    3. Press the + (on the right hand side).
    4. Now when you go to Settings > Search, there should be an Add button under the box which lists the various search engines available.
    5. Don’t let this post get popular, otherwise this method will also be deprecated to make Firefox better than ever!
    検索エンジン名別名URL
    Amazon Prime Videopvhttps://www.amazon.co.jp/s?k=%s&i=instant-video
    Netflixnfhttps://www.netflix.com/search?q=%s
    YouTubeythttps://www.youtube.com/results?search_query=%s
    Wikipediawphttps://ja.wikipedia.org/w/index.php?search=%s

    とりあえず4つ登録した。

    あとは、Firefoxは標準機能でフォントの指定を強制できるのはいいけどレンダリング結果が汚い。フォントがにじむの何とかならないのか調査中…

    Firefox Color

    Chromeの画面なのかFirefoxの画面なのかぱっと見で区別できないので、ブラウザの「テーマ」を初めて設定してみた。

    https://color.firefox.com/

    しばらくオレンジ色で使ってみる。

    フォクすけ

    https://ja.wikipedia.org/wiki/フォクすけ

    フォクすけ、ぐぐっても古い情報しかヒットしないですね… 終わったんですね。

    ブラウザ戦争

    https://ja.wikipedia.org/wiki/ブラウザ戦争

    ブラウザ戦争は死語ですか?そうですかー

  • How to unregister all installed service workers in Chrome

    https://www.stefanjudis.com/snippets/how-to-unregister-all-installed-service-workers-in-chrome

    サービスワーカー API

    サービスワーカーは、基本的にウェブアプリケーション、ブラウザー、そして(もし繋がっていれば)ネットワークの間に介在するプロキシサーバーのように振る舞います。これは、よりよいオフラインの操作性を可能にするように意図されており、ネットワークのリクエストに介在してネットワークの使用可否の状況に基づいて適切な対応を取ったり、サーバー上にある資産を更新したりします。また、プッシュ通知やバックグラウンド同期の API 群へのアクセスもできるようになります。

    https://developer.mozilla.org/ja/docs/Web/API/Service_Worker_API

    よりよいオフラインの操作性?そんなのはいらん。

    やったこと

    1. Chromeで以下のページを開く
      chrome://serviceworker-internals/
      →登録されているサービスワーカーが表示される
    2. 「F12」キーを押下してディベロッパーツールを開く
    3. ディベロッパーツールのコンソールで以下を実行する
      $$('.unregister').forEach(b => b.click())
      →サービスワーカーが削除される

    補足

    他のタブで開いているサイトや使っている拡張機能のサービスワーカーは削除されない。

    たまにゴミ掃除したくなるけどサービスワーカーを削除しても体感できるようなパフォーマンス改善が見込めるわけではないので悪しからずご了承くださいませ…

  • ダークモード

    素人で悪いか。

    タスクビュー

    機能追加

    • ダークモードの判定を追加
    • ダークモード用のタスクトレイアイコンを追加

    作ったもの

    taskview_ext_20240721.zip

    キーのリマッピング

    機能追加

    • ダークモードの判定を追加
    • タスクトレイアイコンを変更

    仕様変更

    • Windows 11以外は動作確認していないため、OSの判定処理は削除。
    • Alt + 数字キー押下後、初回のAlt + 矢印キーで画面サイズが変更されなかったので修正。
      • Alt + 1押下後、Alt + Leftキー
      • Alt + 2押下後、Alt + Up/Downキー
      • Alt + 3押下後、Alt + Rightキー

    Alt + 矢印キー押下後のAlt + 数字キーも同様。

    機能追加

    • Alt + q,a,w,sキーの押下後にAlt + 矢印キーで画面移動を追加(実用的な機能ではない)

    作ったもの

    keyremap_20240721.zip

    余談

    AutoHotkeyのデフォルトのアイコンが「H」アイコンなので、KeyRemapのアイコンを「R」にしました。

    以下をコメントアウトすると表示されます。

    ; 仮想デスクトップ移動
    #Include "*i C:\tool\taskview\taskview_ext.ahk"

    「R」シールに似ていますが、私は蓮舫さんの支持者ではありません。負けたら黙ろうなー どあほうが・・・w

    https://www.google.com/search?q=蓮舫%20R&tbm=isch

  • キーのリマッピング

    少し修正したので貼っておこー 

    仕様変更

    • 「ROTATION_LENGTH」のユーザー定義を削除して各配列長でローテーションするように変更
    • 初期値の変更

    機能追加

    • 画面移動のホットキー再押下時にShiftキーで戻る
    • Alt + 矢印キーでの画面移動を追加(Alt + 1,2,3と同様)

    作ったもの

    keyremap_20240630.zip

  • Maker’s Mark

    https://kozawa.tokyo/?p=1353

    タスクビュー、バグってるやん。新規に起動したときにデフォルトアイコンが表示される。スクリプトをリロードして動作確認した場合は問題なかったのに、新規で起動された場合はデフォルトのアイコンが…w これは酷い。だめだこりゃー

    バグ修正したので貼っておく。

    taskview_ext_20240623.zip

    キーのリマッピングの方は、「Alt」+「1」キーと「Alt}+「3」キーの2回目の押下で動作が違う。画面が大きくなる動作で統一した方がいいのか悪いのか、この辺りは好みの問題かもしれないけど、自分で作成すると細かいところまで自由に直せるのはいいよねえ。作りながら直しながら使えるものができるといいなぁとは思う。明日直せるかな。

    画面の移動まわりの処理を修正したので貼っておく。

    keyremap_20240623.zip

    機能追加

    ; Home/End
    !Left:: Send "{Home}"
    !Right:: Send "{End}"
    !+Left:: Send "+{Home}"
    !+Right:: Send "+{End}"
    
    ; 画面移動(上/下)
    !e:: setWindowPosition("e")
    !d:: setWindowPosition("d")
    • 上記のホットキーを追加
    • すべての画面移動についてホットキーの再押下で画面サイズを変更
    • 画面サイズの変更でユーザー定義を可能にした↓

    ユーザー定義

    初期値ではホットキーを3回押下すると元のサイズに戻ります。

    ; 画面移動ホットキーの再押下(1サイクル)
    ; 1以上の整数を指定する
    ROTATION_LENGTH := 3
    
    ; 以下の配列の先頭から「ROTATION_LENGTH」個まで使用している
    ; 再押下ごとの画面サイズを百分率で指定する
    ; Alt + [1]
    LEFT_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [2]
    CENTER_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [3]
    RIGHT_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [qwe]
    UPPER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [asd]
    LOWER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

    スクリプトを編集した場合は、スクリプトの再起動が必要です。

    例1:

    ホットキーの再押下で画面サイズを変更したくない場合

    ROTATION_LENGTH := 1

    1を指定すると配列の1つ目の値だけが使用されます。0.5 = 50% の大きさで画面の幅や高さが設定されます。

    例2:

    少しずつ画面サイズを大きくする場合

    ROTATION_LENGTH := 6

    ホットキーを6回押下すると元のサイズに戻ります。

    例3:

    少しずつ画面サイズを大きくする場合2

    ; ----------------------------------------
    ; User define
    ; ----------------------------------------
    
    ;
    ; ・・・ もともとのやつ ・・・
    ;
    
    ROTATION_LENGTH := 12
    LEFT_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    CENTER_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    RIGHT_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    UPPER_HEIGHT := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    LOWER_HEIGHT := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    
    ; ----------------------------------------
    ; define
    ; ----------------------------------------

    配列の要素数や要素の値は可変です。ROTATION_LENGTHで指定した要素数だけ値を定義してください。

    変数は再代入して上書きできますので上記のようにもとものコードの下に変更した内容を追記できます。もともとのコードはコピペ時のテンプレとして使用してください。