2021年 の投稿一覧

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

WebサーバにSSL対応した約40件のサブドメインを追加する必要に迫られたのですが、さすがに1個ずつSSL証明書を発行するのは地獄なのでワイルドカード証明書を導入した際のメモになります。

無料のSSL証明書としておなじみのLet’s Encryptでは2018年からワイルドカード証明書に対応しているためこちらを利用します。

今回の環境は以下の通り。

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

お仕事で簡単なインタビューにご協力いただける方を募集しています(内部資料なので一般公開はされません)。

対象
個人でゲーム開発を行い、実際に公開されている方(ブラウザゲーム、PCゲーム、スマホアプリなど)
お聞きする内容
開発動機や今後プラットフォームに期待すること
時間と場所
30分〜1時間程度、Zoomなどオンラインを予定。ビデオ通話が難しい場合はメールやチャットなどでもOKです。
その他
薄謝あり。最大で10名程度。

ゲーム会社さんからのご依頼で新サービスの開発に向けてのリサーチになります。

薄謝は3,000円程度(Amazonギフト券 or 銀行振込)を予定してます。薄くてほんますみませんw(私のマージンはゼロです)また難しいことは聞きませんので、開発を始めて間もない方や技術的に自信が無い方ももちろん問題ありません。ツクールでRPGを作られている方も大歓迎です。個人の趣味レベルでOKでして、大ヒットを飛ばしていなくても大丈夫ですw

今回ご協力いただいた方は今後も優先的にお声がけしますので未知の物に興味がある方もぜひ!(・∀・)

もしご興味がある方いらっしゃいましたら、以下のツイートにリプをいただくかDMなどでご連絡いただけると大変助かります!

またはこのブログのお問い合わせフォームからも受け付けております。

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

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

あっちこっちで使う場合は以下のように適当なモジュールを用意します。

/**
 * sleep.js
 */
const sleep = (time) => {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          resolve()
      }, time)
  })
}

module.exports = sleep

続きを読む

[Linux] 連番付きで出力する – nl

nlコマンドを利用すると、出力結果の各行の先頭に連番を付けることができます。

$ nl -w 1 -n ln file.txt
1   Apple
2   Orange
3   Banana

要は行番号ですね。デフォルトでは連番の後ろにはタブが挿入されます。
続きを読む

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

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

その際の具体的なコマンドは以下の通り。

$ nohup (コマンド) & 

コマンドの最後に&を付けるだけでバックグラウンドで実行してくれます。ただこれだけだとTerminalを閉じてしばらくすると自動的にプログラムも終了してしまいます。そこでコマンドの冒頭に nohup を付けることで強制終了を防ぐことができます。

標準出力に表示されるはずだった内容はカレントディレクトリに nohup.out というファイル名で記録されます。

またコマンドの実行が終了すると以下のような通知が来ます。

$ nohup sleep 10 & 
[1]+  終了                  sleep 10

続きを読む

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

小ネタです。
特定のコマンドを一定間隔で自動的に実行したい場合は watch コマンドを使用します。

例えば以下のコマンドでwc -l foo.txtが10秒置きに実行されます。

$ watch -n 10 wc -l foo.txt

画面がwatchコマンド専用モードに切り替わります。終了したい場合はCtrl+cなどを入力します。
続きを読む

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

小ネタです。
forEachは配列用のため、連想配列(ハッシュ)には通常使うことができません。そんなときにはObject.keys()を介すことで利用が可能になります。

const hash = {
  apple: 100,
  banana: 130,
  orange: 98
}
const result = [ ]

Object.keys(hash)
      .forEach(key => { result.push(`${key}: ${hash[key]}` )})

// [ 'apple: 100', 'banana: 130', 'orange: 98' ]
console.log(result)

参考ページ

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

every()some()は配列内の要素をテストし、条件を満たしていれば最終的にtrue、満たしていなければfalseを返します。

/**
 * 偶数チェック
 */
const list = [1, 2, 3, 4, 5]
const check = value => ((value % 2) === 0)

// テストを行う
const check1 = list.every(check)  // すべて偶数か (AND)
const check2 = list.some(check)   // 一つでも偶数か (OR)

// 結果表示
console.log(check1)  // false
console.log(check2)  // true

every()はすべての要素が条件を満たしているかどうか、some()は一つでも満たしているかの違いになります。要はeveryがANDで、someがORですね。
続きを読む

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

map()を利用すると、元になった配列の要素を順番に処理していき新しい配列を生み出すことができます。mapは元になった配列を変更しません。

/**
 * 2乗する
 */
const list = [1, 2, 3, 4, 5]
const newlist = list.map( value => value * value)

// [1, 4, 9, 16, 25]
console.log(newlist)

mapはよくforEachと比較されますが、forEachは戻り値を返さない特徴があります。戻り値を利用しない場合はforEachを使った方が一般的に高速に処理が行なえます。

続きを読む

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

reduce()は配列内の値を順番に処理していき、最終的に1つの値を生成することができます。

/**
 * 配列の値をすべて足す
 */
const list = [1, 2, 3, 4, 5]
const sum = list.reduce( (prev, current) => prev + current )

// 15
console.log(sum)

returnした値が、次に処理する際のprevに入っています。returnする値は文字列や数値以外には配列やハッシュでもかまいません。初見だとちょっと理解しにくいかもしれませんねw

続きを読む

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

filter()は配列の要素を順番にテストしていきtrueが返された要素だけの新しい配列を返却します。

/**
 * 配列から偶数だけを取り出す
 */
const list = [1, 2, 3, 4, 5]
const newlist = list.filter( value => ((value % 2) === 0) )

// [2, 4]
console.log(newlist)
  • 元になった配列(list)は変更されません。
  • すべてfalseになった場合は空の配列が返ります。
    続きを読む

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

Eletronでアプリを開発していると、ユーザーをWebブラウザに飛ばしたなるときがあります。

これ実装は非常にかんたんなのですが、最近はセキュリティの関係で描画以外の処理はメインプロセスで行う流れになってきていることもあり、今回はメインプロセスでイベントを補足して標準ブラウザで開くところまでをまとめます。
続きを読む

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

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

今回はそんなNeDBをElectronで利用する方法をまとめていきます。
続きを読む

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

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

これまではレンダラープロセスからメインプロセスを呼び出す際にはipcRenderer.invoke()を実行するだけでしたが、これがそのままでは使えなくなりました。

const {ipcRenderer} = require('electron')

(async () => {
  const value = await ipcRenderer.invoke('MyAPI')
})()

上記を実行すると次のようなエラーとなります。これはrequire()でもimportに限らずエラーメッセージが表示されます。

# requireでのエラーメッセージ
Uncaught (in promise) ReferenceError: require is not defined
# importでのエラーメッセージ
Uncaught TypeError: Failed to resolve module specifier "electron". Relative references must start with either "/", "./", or "../".

今回はElectron v12でもIPC通信が行えるコードを書いていきます。
続きを読む