2022年2月27日日曜日

JavaScriptで予約語を使わないワンライナーFizzBuzz

今回はただのネタです。

Code Golfとは別方向の趣向で、予約語を使わないFizzBuzzの実装です。

Array(100).fill(0).map((_,i)=>console.log(++i%15?i%5?i%3?i:"Fizz":"Buzz":"FizzBuzz"))

これでもまだわかりやすい部類の書き方だと思うので、わかりやすさを犠牲にすれば多分もっと文字数は減らせます。

他の言語ではどうなるんだろう。CとかJavaみたいに絶対に実現できない言語もあるけど。

プログラミングスクール生のみなさん、FizzBuzzの課題を出されたらこれを提出してもいいですよ

2022年2月20日日曜日

パスワードの制限が厳しいとハッシュ化していない可能性が高い理由

以前、イライラするパスワード登録画面5選という記事でこんな趣旨のことを書きました。

パスワードが「8文字以上16文字以下で入力してください」とか「英数字で入力してください」のように制限が厳しいサービスは、パスワードをハッシュ化せずにそのままDBに保存している可能性が高い

生パスワードをそのまま保存する危険性については言わずもがなですが、上記の内容について先日「なんで?」という質問を受けたので、この場でも書いておきます。

2022年2月13日日曜日

ヤバいエラーには早く気づきたい

みなさん、作ったウェブサービスが吐いているログをちゃんと確認していますか?

サービス監視、ログファイルの出力と集約の設定はやった。でもログの監視をしていなくて、ヤバいエラーが出ていたのに気づかずにユーザーから問い合わせが来て初めて知った・・・みたいなことは割とあるあるです。

これをなんとかした話。とは言っても別に画期的な方法とかではありません。

2022年2月6日日曜日

JavaScriptで非同期処理のawaitつけ忘れを防ぐ

 JavaScriptでバックエンド開発していると非同期処理を使うことが多いですよね。

そこで問題になるのがasync関数に対するawaitのつけ忘れ。まだasync/awaitが使えなくてPromiseオブジェクトに対してthen()catch()をしていた頃ならすぐ気づいたんですが、単に関数呼び出しにawaitをつけるだけというのは便利な反面忘れやすいです。よくやらかします。

JavaScriptは実行するまでPromiseオブジェクトかどうかわからないからESLintじゃ検出できないよなぁ。TypeScript ESLintならできるんかなぁと思いながらルールを探したらありました。

2022年1月30日日曜日

Linuxカーネルを更新したらタッチパッドが使えなくなった

 今まではGentoo Linuxで5.10系のカーネルを使っていたんですが、ちょっと前に5.15系に上げたら急にタッチパッドが使えなくなりました。

そのせいでしばらく5.10系に戻して使っていたんですが、さすがにいつまでもバージョンアップしないわけにはいかないよなぁ・・・と思って原因を調べたところ、原因は意外とあっさり見つかりました。

原因はこちら

どうやら5.12で設定が分割されて、新しいCONFIG_I2C_HID_ACPIモジュールがデフォルトでオフになっていたようです。

こいつをオンにして再ビルドをかけたら無事タッチパッドが使えるようになりました。めでたしめでたし。


2022年1月23日日曜日

アプリケーションは300系リダイレクトするけどクライアントは実体を受け取れるようにする方法

 ウェブサービスを作っていると、大きなファイルを認証付きでダウンロードさせたいけど、ダウンロード処理自体はアプリケーションサーバーを経由したくない場合があります。

それだけならアプリケーションサーバーから300系のリダイレクトを使えばいいんですが、クライアント側に実体のURLを知られたくない場合もあります。

例えばこんな状況。

  • ECサイトでダウンロード商品を扱っていて、ダウンロードファイル自体はアプリケーションサーバーとは別のサーバーにある
  • 商品を購入済みの人にだけダウンロードを許可したいので、商品購入済みかどうかをダウンロード前にアプリケーション側でチェックしたい
  • でもダウンロード処理自体にはアプリケーションサーバーを経由したくない(例えば、ダウンロードのためにPHPのreadfile()とかで別サーバーのファイルを読みたくない)
  • かといってアプリケーションサーバーから300系リダイレクトをするとクライアントにファイルの実体のURLが知られてしまうので、リダイレクトはやりたくない(S3の署名付きURLのような上等なものは使えない)
つまり「ダウンロード要求をアプリケーションが受けるけど、アプリケーションからは実体を返したくない。でもクライアントには実体を届けたい」という困ったちゃんな要望。

2022年1月16日日曜日

イライラするパスワード登録画面5選

 世の中には色々なウェブサービスがあるわけですが、特にパスワード登録に関してはひどいUIが本当に多いです。

以下に挙げるものは、全て今までに遭遇した実際にあるウェブサービスのパスワード登録画面です。