2021-01-01から1年間の記事一覧

[JavaScript] オンライン・オフラインを判定する

小ネタです。 スマホを使いながら電車などで移動していると通信がプツプツ切れます。家でPCを使う場合と違って通信状況が安定しません。そんな時に活躍するのがブラウザがオンラインかどうかがわかる navigator.onLine です。 このプロパティを参照するだけ…

Let's EncryptでワイルドカードなSSL証明書を入れる - Amazon Linux2編

WebサーバにSSL対応した約40件のサブドメインを追加する必要に迫られたのですが、さすがに1個ずつSSL証明書を発行するのは地獄なのでワイルドカード証明書を導入した際のメモになります。 無料のSSL証明書としておなじみのLet's Encryptでは2018年からワイル…

【募集終了】個人でゲーム開発をされている方(インタビューのお願い)

【追記 2021年04月30日】 無事に何人かの方からご協力をいただけました。ご協力いただいたみなさま、誠にありがとうございます!これを持って締め切りとさせていただきたいと思います。また改めて募集する可能性がありますのでその際はなにとぞ。 お仕事で簡…

[Node.js] 指定した時間sleepする - Promise版

小ネタです。 多くのスクリプト言語やシェルなどで実装されているsleep機能がNode.jsには存在しないため、使いたくなったら自分で用意する必要があります。いくつか方法がありますがお手軽なのはPromiseとsetTimeoutを利用した物です。 あっちこっちで使う場…

[Linux] 行番号付きで出力する - nl

nlコマンドを利用すると、出力結果の各行の先頭に連番を付けることができます。 $ nl -w 1 -n ln file.txt 1 Apple 2 Orange 3 Banana 要は行番号ですね。デフォルトでは連番の後ろにはタブが挿入されます。

[Linux] Terminalを閉じてもバックグラウンドの処理を実行し続ける - nohup

Linuxでシステム運用をしていると、数時間〜数日間に及ぶバッチ処理を実行することがあります。手動でプログラムを起動する場合にディスプレイの前にずっと付きっきりでは過労死まっしぐらです。またうっかりTerminalを閉じてしまうと大惨事になってしまうた…

[Linux] 一定間隔でコマンドを実行する - watch

小ネタです。 特定のコマンドを一定間隔で自動的に実行したい場合は watch コマンドを使用します。 例えば以下のコマンドでwc -l foo.txtが10秒置きに実行されます。 $ watch -n 10 wc -l foo.txt 画面がwatchコマンド専用モードに切り替わります。終了した…

[JavaScript] 連想配列に forEach を使用する

小ネタです。 forEachは配列用のため、連想配列(ハッシュ)には通常使うことができません。そんなときにはObject.keys()を介すことで利用が可能になります。 const hash = { apple: 100, banana: 130, orange: 98 } const result = [ ] Object.keys(hash) .fo…

[JavaScript] 配列の値が条件を満たすか検証する - some(), every()

every()とsome()は配列内の要素をテストし、条件を満たしていれば最終的にtrue、満たしていなければfalseを返します。 /** * 偶数チェック */ const list = [1, 2, 3, 4, 5] const check = value => ((value % 2) === 0) // テストを行う const check1 = lis…

[JavaScript] 配列の全要素に処理を行い新しい配列を作成する - map()

map()を利用すると、元になった配列の要素を順番に処理していき新しい配列を生み出すことができます。mapは元になった配列を変更しません。 /** * 2乗する */ const list = [1, 2, 3, 4, 5] const newlist = list.map( value => value * value) // [1, 4, 9,…

[JavaScript] 配列からひとつの値を生成する - reduce()

reduce()は配列内の値を順番に処理していき、最終的に1つの値を生成することができます。 /** * 配列の値をすべて足す */ const list = [1, 2, 3, 4, 5] const sum = list.reduce( (prev, current) => prev + current ) // 15 console.log(sum) returnした値…

[JavaScript] 配列から特定の要素だけを取り出す - filter()

filter()は配列の要素を順番にテストしていきtrueが返された要素だけの新しい配列を返却します。 /** * 配列から偶数だけを取り出す */ const list = [1, 2, 3, 4, 5] const newlist = list.filter( value => ((value % 2) === 0) ) // [2, 4] console.log(n…

[Electron] リンクをクリックすると標準Webブラウザで開く

Eletronでアプリを開発していると、ユーザーをWebブラウザに飛ばしたなるときがあります。 これ実装は非常にかんたんなのですが、最近はセキュリティの関係で描画以外の処理はメインプロセスで行う流れになってきていることもあり、今回はメインプロセスでイ…

[Electron] NeDBでデータを管理する

Node.jsで組み込み型データベースと言えばNeDBなわけですよ。100% JavaScriptで書かれておりMongoDBと同じ手軽なAPIで操作できる上になんと言っても超高速。先日は仕事で80万件ほどつっこんでみましたが普通に動いてビビリましたw 今回はそんなNeDBをElectr…

[Electron] contextBridge経由でIPC通信を行う

Electron v12で破壊的な変更がいくつか行われました。FLASH関係の廃止、レンダープロセスでremoteが非推奨になるあたりが話題になりますが、IPC通信時に一工夫する必要が生じたのが地味に面倒ですw これまではレンダラープロセスからメインプロセスを呼び出…

[AWS] Rekognitionで"けしからん"画像か判定する

前回試したAmazon Rekognitionには、画像に不適切な内容が含まれるかチェックする機能が搭載されています。 今回もNode.jsからRekognitionを利用するコードを書いてみます。SDKを利用してRekognitionへ画像を送ると0〜100の間でどの程度けしからんか判定して…

[AWS] Rekognitionで画像内に存在する物体を検出する

Amazon Rekognitionを使うと画像や動画をAIで解析し、そこにどういった物体が存在しているか「ラベル」を付けてくれます。例えばジャイアントパンダが写っていれば「Giant Panda」というテキストと、画像内のどこに存在しているか座標情報が送られて来ます。…

[Electron] 第三者が作ったアプリのソースコードをのぞき見る

Electron製のアプリは非常に簡単に内部のソースコードが閲覧出来てしまいます。これを認識していないと簡単にコピーアプリを作られたり脆弱性を調べられます。 今回はどれくらい手軽に行えるか実際にやってみます。ハリーポッターで言う「闇の魔術に対する防…

[Electron] Windows用アプリにコード署名を行う

Electronで作成したWindows用アプリをインターネット経由で配布した場合に、悪い人に改ざんされておらず安全であることを証明するためにコード署名を付加します。 ここではelectron-builderを使った例になります。macOS用アプリの場合と比べれば、環境変数を…

「コード署名」をWindows10で行う - signtool.exe編

インターネット経由で配布するWindows用アプリが改ざんされていないか検証することのできる「コード署名」を付けます。 Windows上でコード署名を行うにはいくつか方法はありますが、今回はsigntool.exeを利用した方法を試してみます。

「コード署名証明書」を海外サイトからお手軽価格で購入する

Windowsでコード署名を利用したくて証明書を購入しようとしたのですが、国内の事業者はどこも個人だとためらう価格設定でげんなりしていたのですが、これが海外サイトを利用すると半額以下でゲットできてるという情報を目にしたため、恐る恐る挑戦してみまし…

OpenSSLをWindows10にインストールする

Windowsで証明書関係の作業をしたくなったので、PowerShellから利用できるOpenSSLをインストールします。基本的にはインストーラーの言う通りに入れて環境変数を設定するだけです。

[HTML5] アドレスバーのURLを変更する - history.pushState()

SPA(Single Page Application)でWebページを開発している場合、ページの情報をJavaScriptで直接書き換えるたブラウザのアドレスバーに表示されているURLは常に同じです。これだとブラウザのバックボタン(戻るボタン)が利用できなかったり、ブックマークや外…

[HTML5] JavaScriptでtitleタグを変更する

小ネタです。 titleタグの内容を指定した文字列に変更する場合は2つの方法があります。 まずはdocument.titleプロパティに直接値を代入する方法。基本的にはこちらを利用します。 document.title = 'foo' 次にtitle以外の要素を変更するときと同様にquerySel…

[Linux] 指定した大きさのファイルを作成する - dd

小ネタです。 LinuxやmacOS上で特定サイズのファイルを作成するにはddコマンドを利用します。以下のコマンドを実行すると中身がすべてゼロの1kbyteのファイルを生成できます。 $ dd bs=1024 count=1 if=/dev/zero of=file1 $ ls -l total 8 -rw-r--r-- 1 kat…

[AWS] S3へ巨大なファイルを「マルチパートアップロード」する

AWS S3へ巨大なファイルをアップロードする際、より高速に転送するには「マルチパートアップロード」を利用することが推奨されています。また一定サイズ以上のファイルはSDKやREST APIからはそもそもPUTすることができません。 マルチパートアップロードとい…

[HTML5] 要素をフェードアウト/フェードインする

指定したHTMLの要素を徐々に表示する「フェードイン」と、徐々に非表示にする「フェードアウト」をJavaScriptで実装します。 www.youtube.com ここでは大きく2種類の方法を取り上げます。 HTML5から登場したWeb Animation APIを利用したものと、はるか以前か…

「D-U-N-S Number」を新規に取得する - 個人事業主編

海外の販売サイトから「コード署名証明書」を購入するのに「D-U-N-S Number」が必要になったので取得することにしました。 日本では東京商工リサーチさんが窓口になっており申請自体は大して難しくないのですが、先方の事務処理がグダグダだったので、これか…

[Electron] 多言語対応する - i18n

WindowsもmacOSも世界中で利用されていますし、日本国内にも外国語が母国語な方も大勢いらっしゃいます。そこで今回はElectronをユーザーの言語環境に合わせる国際化(i18n)を行ってみます。 Electron自体にはそのための専用の機能は用意されていないようなの…

[Electron] アプリ起動時にスプラッシュ画面を表示する

アプリの本体のウィンドウが起動する前に、会社やアプリのロゴが表示される画面を見たことがある方も多いと思います。いわゆる「スプラッシュ」と呼ばれる画面です。今回はこちらの実装を行ってみます。 スプラッシュはブランディングなどが目的の場合もあり…