ページ

2021年2月10日水曜日

【MySQL】 ソートで NULL を一番最後にするとき,IS NULL ASC としてはいけない理由.

少々挑戦的なタイトルですが,本当は IS NULL ASC で全然構いません.(笑)

ただ私が言いたいのは,魔法の呪文のように意味も分からず IS NULL ASC とするのはやめたほうが良い.
より厳密には,それだけ覚えてしまうのは勿体無い.ということです.

IS NULL ASC のように ORDER BY 句を用いれば,様々な条件でソートすることができるので,この記事では,
なぜ IS NULL ASC で NULL を後ろにできるのか実演しながら,より汎用的な条件付きソートについて考えていきます.

サンプルとして以下のようなテーブルを用意しました.(例によってラズパイを使っているので MariaDBですが,基本的に MySQL でも同じです)
 MariaDB [sample]> SELECT * FROM SAMPLE;
 +------+-------+
 | id   | value |
 +------+-------+
 |    1 |     0 |
 |    2 |    10 |
 |    3 |     4 |
 |    4 |  NULL |
 |    5 |     8 |
 |    6 |     1 |
 |    7 |     3 |
 |    8 |     2 |
 |    9 |  NULL |
 |   10 |    -5 |
 +------+-------+

2021年2月7日日曜日

【MySQL,MariaDB】 レプリケーションを設定する

データベースでマスタースレーブ型のレプリケーションを設定する方法を示す.
手元のラズパイ2台を使用するため,MariaDBで設定するが,基本的にはMySQLも同様の方法でできるはずだ.

データベースの初期設定手順は以下のエントリーを参照されたし.
WM×LI: Raspberry Pi にデータベースを構築する【MySQL,MariaDB】

Raspberry Pi のモデル名を確認する

性能が段違いなので,基本的なことはラズパイ4 にやらせているが,敢えてラズパイ4 からは切り離して可動させているサービスもあったりするので,我が家ではラズパイ3,ラズパイ2 もまだまだ現役だ.

基本,ホスト名で判別しているが,どのラズパイがどのモデルだったか分からなくなることが時々ある.

そんなときは,/proc/device-tree/mode を確認すると,モデル名が表示される.

2021年2月6日土曜日

Raspberry Pi で初回起動時からsshでアクセスする方法

何番煎じかわからないけれど,Raspberry Pi用のmicro SDカードにRaspberry Pi OSをインストールした直後の初回起動時からsshでアクセスできるようにする方法.

結論から言うと,/boot/ 直下に ssh という名前のファイルを置くだけ.

それでは細かい手順を解説します.

2021年2月4日木曜日

マルチスレッドなプログラムをgdbでデバッグする

たまにはエンジニアらしくソフトウェアのお話を.

マルチスレッドなプログラムを書くとき, 常に念頭に置きながら設計しなければならないのが排他制御だが,そんなとき,どの処理がどのスレッドで実施されているか表示できることは非常に有効なテクニックだ.

そこで次のようなコードで実験する.

<サンプルコード:test.cpp>
test.cpp
--------------------------------------------------------------------------------
#include <iostream>
#include <thread>
#include <unistd.h>

void a( void )
{
  for( int i = 0; i < 30; i++ )
  {
    std::cout << "i : " << i << std::endl;
    sleep( 1 );
  }
}

void b( void )
{
  for( int j = 0; j < 10; j++ )
  {
    std::cout << "j : " << j << std::endl;
    sleep( 3 );
  }
}

int main( void )
{
  std::thread * _a = new std::thread( a );
  std::thread * _b = new std::thread( b );
  _a->join();
  _b->join();
  return 0;
}

※本来は,coutする前後でmutexを貼る必要があるが,今回は可読性重視で割愛する.

これをコンパイルして,gdbで実行する
 $ g++ -g -pthread test.cpp -o test
 $ gdb ./test

2021年1月17日日曜日

理想の手帳が無かったので自作してみた.一冊から製本できるオンデマンド印刷サービス"製本直送.com"が便利.

年が明けてから2週間以上も過ぎてしまいましたが,ようやく今年の手帳が届きました.


ここ数年は取引先の会社から頂いた手帳を使わせてもらっていましたが,いつまでも同じ会社と取引が続くとも限らないし,他社のロゴが入った手帳を持ち歩くのもなんだか虚しい...そこで昨年の12月,「来年はちゃんと自分で買った手帳を使おう」と,本屋の手帳コーナーで色々と手にとってみたのですが,理想の手帳は見つかりませんでした.

2021年1月13日水曜日

svnsync で定期的にSubversion のバックアップを取得する

これまでSubversion については,何度か取り上げてきたが,

WM×LI: Raspberyy Pi を Subversion のリポジトリサーバにして,systemd で自動起動するように設定する.
WM×LI: 【svnadmin dump】Subversionのリポジトリを別のサーバーに移行する.
WM×LI: Subversionで直前のコミットを取り消す.

今回はsvnsync コマンドを使用して,リモートで定期的にSubversion をバックアップを取るお話.

先日,WebArena IndigoでレンタルしているVPSをアップデート(apt upgrade)していたら,途中で突然停止し,その後アクセス不可,再起動不能になり,Subversionのリポジトリデータが全部吹っ飛んだので,やり方を調べた.