なんじゃくにっき

プログラミングの話題中心。

無料から使えるPostgresqlのNeonをRailsから使ってみる

概要

無料から使える(※2024年5月時点)Database SaaSNeonを使います。

Neonとしては提供しているのは本当にPostgresqlの部分だけで、アプリケーション部分は別途用意する必要があります。

アプリケーションにNext系のものを使う場合はVercelがNeonと連携しているので、Vercelで使うのが楽なんじゃないかと思います。

というわけで、それ以外のもので、ということでRailsからNeonを使ってみます。

続きを読む

Railsのviewで部分テンプレート(partial template)内でエラーが起きた時に画面全体がエラーになるのを防ぐ(2)

概要

Railsのviewで部分テンプレート内でエラーが起きたときに画面全体がエラーになるのを防ぎたい、の第二段。

昨日の続き。

Railsのviewで部分テンプレート(partial template)内でエラーが起きた時に画面全体がエラーになるのを防ぐ(1) - なんじゃくにっき

昨日のやり方だと、部分テンプレート内でエラーが起きた時に途中まで描画されて閉じタグない状態などができてしまいます。

ということで部分テンプレート内でエラーが起きたときは部分テンプレート全部表示されなくする版も作ってみました。

続きを読む

Railsのviewで部分テンプレート(partial template)内でエラーが起きた時に画面全体がエラーになるのを防ぐ(1)

やりたいこと

Railsのviewで部分テンプレート内でエラーが起きたときに画面全体がエラーになるのを防ぎたい

想定しているケースは

  • ヘッダやフッタの描画やscriptタグの埋め込み時にエラーが発生するパターン
  • データ欠損だったりの場合が意図せず発生して本来nilを想定していない場所がnilになったり、考慮漏れでnilになったり
続きを読む

CLIからの画像の加工にImageMagickの代わりにlibvips(vips)を使う

概要

高速かつ省メモリの画像操作ライブラリとしてlibvipsがあります。

RailsのActiveStorageなんかに使われているんですが、もちろん単体でも使えます。

で、画像処理したいときにこれを使えば良い場面は結構あるんですが、存在を忘れててImageMagickを使いがち。

ということで備忘録として使い方のメモです。

続きを読む

生成AIサービスのリートンで遊ぶ

リートンという生成AIサービスでChatGPT 4.0が使えるので遊ばせてもらいました。

リートン

現時点だと無料で無制限に使える太っ腹っぷり。マネタイズどうするんでしょうね。

続きを読む

Ubuntuで/etc/resolv.confを変更してDNSのタイムアウト時間変更

やりたいこと

DNS解決のタイムアウトの時間を変更したい。

Webサイトによっては、JavaScriptなどのリソースが無効なドメイン指定していて、それがページの読み込みのブロックする形で置かれている場合、タイムアウトするまでページ全体が表示されないことがある。

タイムアウトを短くすることでこの待ち時間を短くしたい。

(あと、自分でドメインルーターでブロックしていたり、ネットワーク管理者にブロックされているときも同様のことが起きることがある)

続きを読む

無料でDB(データベース)使えるサービスあるの? 2024年春

  • 注意
  • 各サービス
    • RDBMS
      • Neon
      • Vercel Postgres
      • Cloudflare D1
      • Supabase
    • NoSQL
      • Firestore(Firebase) / Cloud Datastore
      • MongoDB Atlas
    • DWH(Data ware house)
      • BigQuery
    • 比較的安価なサービス
    • 期間限定無料枠のあるプラットフォーム
    • 僕はこう思ったっス

Herokuに引き続き、PlanetScaleの半永久無料枠が終了してしまいました。

個人開発でサービスを公開したいけど維持費を無料にしたいとか、法人でもサービス開発初期の費用を抑えたいときはどうしましょう、という話。

注意

紹介しているサービスの内容は変更されている可能性があります。また、筆者の調査が不十分なこともあります。

この記事によって損害を被っても補償しかねます。必ず自身の目でサービスの契約内容をお読みになって下さい。

あとデータ容量/通信量等の単位はGBとGiBとか厳密に区別せずに全部GBの表記にしています(1つのサービス内でもドキュメントによって混在したりしていて1つ1つ確認が大変だったため)。

続きを読む

Astroでローカル開発中に別のマシンから動作確認する

Astroでローカル開発中に別のマシンから動作確認する

Astroで静的サイトの開発中にローカルで動かしている時、別のマシンから動作確認したいときがあります。

スマホ実機での表示、動作の確認をしたいときとかね。

そんなときにデフォルトの状態ではローカルipアドレスでアクセスできません。

http://192.168.0.19:4321/sub_dir みたいな感じ。

そんなときはhostオプションを指定します。

astro dev --host 0.0.0.0

こうすると以下のように標準出力に他のローカルネットワーク上のマシンからアクセスするためのアドレスが出力されます。

(※環境によって出力されるIPアドレスは異なります。念の為。)

┃ Local    http://localhost:4321/sub_dir
┃ Network  http://192.168.0.10:4321/sub_dir

注意

公衆無線LANなどにつないでいる際は有効にしないようにしましょう。

悪戯攻撃される恐れがあります。

デフォルトで有効になっていないのはこういうケースがあるからだと思います。

ボタンが押されたら現在のURLをQRコードにして出力する

この前任意の文字列をQRコードで出力するのをGithub Pagesのお試し用に作ったんですが

百徳ツール | QRコード生成

現在のURLをQR出力するだけのスニペットもほしいかもと思い書いてみました。

というかボタン押してモーダルを出すところまではChatGPTに書かせました。

QR出すところだけ人力(つっても3行くらい)。

ライブラリはqrcodejsを使わせてもらってます。

https://github.com/davidshimjs/qrcodejs

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Modal Example</title>
<style>
  /* スタイルを追加して、モーダルが中央に表示されるようにする */
  dialog {
    width: 80%;
    max-width: 600px;
    padding: 20px;
    border: 1px solid #888;
    background-color: #fefefe;
  }

  /* ボタンを画面の右下に配置するスタイル */
  #myBtn {
    position: fixed;
    bottom: 20px;
    right: 20px;
    padding: 10px 20px;
    font-size: 16px;
    background-color: #007bff;
    color: #fff;
    border: none;
    border-radius: 5px;
    cursor: pointer;
  }
</style>
</head>
<body>

<!-- モーダルを開くボタン -->
<button id="myBtn">Open Modal</button>

<!-- モーダル本体 -->
<dialog id="myModal">
  <button id="closeBtn">&times;</button>
  <div id="qr"></div>
</dialog>

<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<script>
// ボタンを取得
var btn = document.getElementById("myBtn");

// モーダルを取得
var modal = document.getElementById("myModal");

// 閉じるボタンを取得
var closeBtn = document.getElementById("closeBtn");

// ボタンをクリックした時にモーダルを表示する
btn.onclick = function() {
  modal.showModal();
}

// 閉じるボタンをクリックした時にモーダルを非表示にする
closeBtn.onclick = function() {
  modal.close();
}

new QRCode(document.getElementById("qr"), window.location.href);
</script>
</body>
</html>

既存のHTMLにモーダル出すscriptタグ埋め込むならこんな感じ。

コードは適当です。QRコードクリックで閉じるようになっています。

style当てるなり閉じるボタン作るなりはお好みでどうぞ。

<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<script>
var modal = document.createElement('dialog');
var qr_area = document.createElement('div');
qr_area.id="qr";
modal.appendChild(qr_area)
document.body.appendChild(modal);
new QRCode(document.getElementById("qr"),window.location.href);
qr_area.onclick = function(){modal.close()}
var btn = document.createElement('button');
btn.textContent = 'QRコード表示';
btn.style.position = 'fixed';
btn.style.bottom = '20px';
btn.style.fontSize = '16px';
btn.onclick = function(){modal.showModal()}
document.body.appendChild(btn);
</script>

ランダムな名前を生成

この前作ったGithub Pagesのサンプルプロジェクト、百徳ツールとか言う名前を付けた割に機能が1つしかなくて、 とても寂しいので機能を追加してみました。

何を作ったの?

ランダム名前 生成

ランダムな名前を生成するものを作りました。日本人の人名ね。

名字と名前をそれぞれランダムに取ってきてくっつけてるだけ。

ここで試せます。

百徳ツール | ランダム名前生成

他、技術的なところでは、prettier入れたり、playwright入れたりしてました。

テストライブラリはjestだかvitestだか何を入れようか悩み中。

ただ、個人開発なのでUnit testもE2Eテストもどこまでちゃんと書くかは分かりません(^^;

余談

今回の機能追加で一番大変だったのは名前のデータを作ることろ。

漢字の名字、名前を集めてくるのはまあ出来るんですが、

そこからフリガナ振るのが全部人力。

名字、男性名、女性名それぞれ100件、計300件を人力で処理したっていう・・

追記

4/18 生成したものをダウンロード可能に