2021-01-01から1年間の記事一覧
小ネタです。 スマホを使いながら電車などで移動していると通信がプツプツ切れます。家でPCを使う場合と違って通信状況が安定しません。そんな時に活躍するのがブラウザがオンラインかどうかがわかる navigator.onLine です。 このプロパティを参照するだけ…
WebサーバにSSL対応した約40件のサブドメインを追加する必要に迫られたのですが、さすがに1個ずつSSL証明書を発行するのは地獄なのでワイルドカード証明書を導入した際のメモになります。 無料のSSL証明書としておなじみのLet's Encryptでは2018年からワイル…
【追記 2021年04月30日】 無事に何人かの方からご協力をいただけました。ご協力いただいたみなさま、誠にありがとうございます!これを持って締め切りとさせていただきたいと思います。また改めて募集する可能性がありますのでその際はなにとぞ。 お仕事で簡…
小ネタです。 多くのスクリプト言語やシェルなどで実装されているsleep機能がNode.jsには存在しないため、使いたくなったら自分で用意する必要があります。いくつか方法がありますがお手軽なのはPromiseとsetTimeoutを利用した物です。 あっちこっちで使う場…
nlコマンドを利用すると、出力結果の各行の先頭に連番を付けることができます。 $ nl -w 1 -n ln file.txt 1 Apple 2 Orange 3 Banana 要は行番号ですね。デフォルトでは連番の後ろにはタブが挿入されます。
Linuxでシステム運用をしていると、数時間〜数日間に及ぶバッチ処理を実行することがあります。手動でプログラムを起動する場合にディスプレイの前にずっと付きっきりでは過労死まっしぐらです。またうっかりTerminalを閉じてしまうと大惨事になってしまうた…
小ネタです。 特定のコマンドを一定間隔で自動的に実行したい場合は watch コマンドを使用します。 例えば以下のコマンドでwc -l foo.txtが10秒置きに実行されます。 $ watch -n 10 wc -l foo.txt 画面がwatchコマンド専用モードに切り替わります。終了した…
小ネタです。 forEachは配列用のため、連想配列(ハッシュ)には通常使うことができません。そんなときにはObject.keys()を介すことで利用が可能になります。 const hash = { apple: 100, banana: 130, orange: 98 } const result = [ ] Object.keys(hash) .fo…
every()とsome()は配列内の要素をテストし、条件を満たしていれば最終的にtrue、満たしていなければfalseを返します。 /** * 偶数チェック */ const list = [1, 2, 3, 4, 5] const check = value => ((value % 2) === 0) // テストを行う const check1 = lis…
map()を利用すると、元になった配列の要素を順番に処理していき新しい配列を生み出すことができます。mapは元になった配列を変更しません。 /** * 2乗する */ const list = [1, 2, 3, 4, 5] const newlist = list.map( value => value * value) // [1, 4, 9,…
reduce()は配列内の値を順番に処理していき、最終的に1つの値を生成することができます。 /** * 配列の値をすべて足す */ const list = [1, 2, 3, 4, 5] const sum = list.reduce( (prev, current) => prev + current ) // 15 console.log(sum) returnした値…
filter()は配列の要素を順番にテストしていきtrueが返された要素だけの新しい配列を返却します。 /** * 配列から偶数だけを取り出す */ const list = [1, 2, 3, 4, 5] const newlist = list.filter( value => ((value % 2) === 0) ) // [2, 4] console.log(n…
Eletronでアプリを開発していると、ユーザーをWebブラウザに飛ばしたなるときがあります。 これ実装は非常にかんたんなのですが、最近はセキュリティの関係で描画以外の処理はメインプロセスで行う流れになってきていることもあり、今回はメインプロセスでイ…
Node.jsで組み込み型データベースと言えばNeDBなわけですよ。100% JavaScriptで書かれておりMongoDBと同じ手軽なAPIで操作できる上になんと言っても超高速。先日は仕事で80万件ほどつっこんでみましたが普通に動いてビビリましたw 今回はそんなNeDBをElectr…
Electron v12で破壊的な変更がいくつか行われました。FLASH関係の廃止、レンダープロセスでremoteが非推奨になるあたりが話題になりますが、IPC通信時に一工夫する必要が生じたのが地味に面倒ですw これまではレンダラープロセスからメインプロセスを呼び出…
前回試したAmazon Rekognitionには、画像に不適切な内容が含まれるかチェックする機能が搭載されています。 今回もNode.jsからRekognitionを利用するコードを書いてみます。SDKを利用してRekognitionへ画像を送ると0〜100の間でどの程度けしからんか判定して…
Amazon Rekognitionを使うと画像や動画をAIで解析し、そこにどういった物体が存在しているか「ラベル」を付けてくれます。例えばジャイアントパンダが写っていれば「Giant Panda」というテキストと、画像内のどこに存在しているか座標情報が送られて来ます。…
Electron製のアプリは非常に簡単に内部のソースコードが閲覧出来てしまいます。これを認識していないと簡単にコピーアプリを作られたり脆弱性を調べられます。 今回はどれくらい手軽に行えるか実際にやってみます。ハリーポッターで言う「闇の魔術に対する防…
Electronで作成したWindows用アプリをインターネット経由で配布した場合に、悪い人に改ざんされておらず安全であることを証明するためにコード署名を付加します。 ここではelectron-builderを使った例になります。macOS用アプリの場合と比べれば、環境変数を…
インターネット経由で配布するWindows用アプリが改ざんされていないか検証することのできる「コード署名」を付けます。 Windows上でコード署名を行うにはいくつか方法はありますが、今回はsigntool.exeを利用した方法を試してみます。
Windowsでコード署名を利用したくて証明書を購入しようとしたのですが、国内の事業者はどこも個人だとためらう価格設定でげんなりしていたのですが、これが海外サイトを利用すると半額以下でゲットできてるという情報を目にしたため、恐る恐る挑戦してみまし…
Windowsで証明書関係の作業をしたくなったので、PowerShellから利用できるOpenSSLをインストールします。基本的にはインストーラーの言う通りに入れて環境変数を設定するだけです。
SPA(Single Page Application)でWebページを開発している場合、ページの情報をJavaScriptで直接書き換えるたブラウザのアドレスバーに表示されているURLは常に同じです。これだとブラウザのバックボタン(戻るボタン)が利用できなかったり、ブックマークや外…
小ネタです。 titleタグの内容を指定した文字列に変更する場合は2つの方法があります。 まずはdocument.titleプロパティに直接値を代入する方法。基本的にはこちらを利用します。 document.title = 'foo' 次にtitle以外の要素を変更するときと同様にquerySel…
小ネタです。 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へ巨大なファイルをアップロードする際、より高速に転送するには「マルチパートアップロード」を利用することが推奨されています。また一定サイズ以上のファイルはSDKやREST APIからはそもそもPUTすることができません。 マルチパートアップロードとい…
指定したHTMLの要素を徐々に表示する「フェードイン」と、徐々に非表示にする「フェードアウト」をJavaScriptで実装します。 www.youtube.com ここでは大きく2種類の方法を取り上げます。 HTML5から登場したWeb Animation APIを利用したものと、はるか以前か…
海外の販売サイトから「コード署名証明書」を購入するのに「D-U-N-S Number」が必要になったので取得することにしました。 日本では東京商工リサーチさんが窓口になっており申請自体は大して難しくないのですが、先方の事務処理がグダグダだったので、これか…
WindowsもmacOSも世界中で利用されていますし、日本国内にも外国語が母国語な方も大勢いらっしゃいます。そこで今回はElectronをユーザーの言語環境に合わせる国際化(i18n)を行ってみます。 Electron自体にはそのための専用の機能は用意されていないようなの…
アプリの本体のウィンドウが起動する前に、会社やアプリのロゴが表示される画面を見たことがある方も多いと思います。いわゆる「スプラッシュ」と呼ばれる画面です。今回はこちらの実装を行ってみます。 スプラッシュはブランディングなどが目的の場合もあり…