[SQL] SQLの共通表式

SQLの共通表式(CTE: common table expressions)が結構便利だけど、構文を忘れがちなのでメモ。

以下のようにWITH句の中にSELECT文を書くと、その直後のSELECTでビューのように参照できる。
名前付きの副問い合わせだと思うとわかりやすいかも。
ただし、WITHからカッコの後のSELCTまでで1つの文だから、当然見える範囲はこのSQL文の中のみになる。

[C] restrict修飾子

Cのstrict aliasingについてではポインタのエイリアシングを見たけど、C99では明示的に異なる領域を指していることを示すためにrestrict修飾子が導入されている。

# 残念ながらrestrictはC++では導入されていない。なので、これを使うとC++とは互換性のないコードになってしまう。。。

例えば、以下のようにchar配列の内容を反転することを考えよう。
void reverse(char * dest, const char * src, size_t n) {
    for (size_t i = 0; i < n; i++) {
        dest[i] = src[n - i - 1];
    }
}

[C] Cのstrict aliasingについて

[C] Cで10進小数を使う方法 でdecNumberを紹介したけど、そのドキュメントの中にこんな記述があった。

http://speleotrove.com/decimal/dnmods.html
The modules all conform to some general rules:
They are reentrant (they have no static variables and may safely be used in multi-threaded applications), and use only aligned integers and strict aliasing.

リエントラントやアラインメントはいいとしてもstrict aliasingってなんだろう?

[Raspberry Pi]ラズパイでLチカ(6)

さぁ、フルカラーLEDで色を変えるぞ!



とおもったんですが。raspbianの4.1.19にはnode.js(version 0.10.29)が搭載されている様子だったので、前回の手動PWMをnodeでやってみる。

(もちろん、PWM用のライブラリは存在するのですが、今回もハンドメイドで)

[Raspberry Pi] ラズパイでLチカ(5)

さて、前回はラズパイから少し離れて電池でLEDを光らせてみたわけですが、今回はラズパイでその制御をやってみようと思います。

何は無くともラズパイのGPIOの制御の仕方を見ていかなくてはいけませんね。


GPIOピンはラズパイのバージョンアップと共に増えているので、ご自分のラズパイに合わせたピン配置図を参照するようにしてください。


[C] Cで10進小数を使う方法

CでJavaのBigDecimalのような10進小数を扱えるライブラリはないかなと探していたのですが、decNumberというのがありました。

The decNumber Library
http://speleotrove.com/decimal/decnumber.html

gccにも使われているようで、なかなかよさそう。

[python] ジェネレータとイテレータでフィボナッチ

イテレータバージョン
<< fib_iter.py >>
class Fib(object):
    def __init__(self, n): 
        self.x_2, self.x_1 = 0, 1
        self._i = 0 
        self._max = n 
    def __iter__(self):
        return self
    def next(self):
        x_2 = self.x_2
        if self._i >= self._max:
            self._i =0
            raise StopIteration
        self.x_2, self.x_1 = self.x_1, self.x_1+self.x_2
        self._i += 1
        return x_2
if __name__ == "__main__": 
    f = Fib(40)                                
    for n in f:
        print n

ジェネレータバージョン
<< fib_gen.py >>
def fib():
    x2, x1 = 0, 1
    while True:
        yield x2
        x2, x1 = x1, x2 + x1
if __name__ == "__main__":
    f = fib()
    for x in xrange(40):
        print f.next()




[Raspberry Pi]ラズパイでLチカ(4)

今回は、一度ラズパイから離れてLEDを制御する回路側を設計していきます。





まず、今回はフルカラーLEDを使います。フルカラーLEDは何のことはない、光の三原色のLEDが束になったLEDです。

[Raspberry Pi]ラズパイでLチカ(3)

さて、ご希望のディストリビューションはインストールできたでしょうか?

一番オーソドックスなRasbianだと、インストールして起動するとX window systemが実行されるので、HDMIでディスプレイを繋いでいればGUIで操作できると思います。


Etherケーブルを挿せばdhcpでIPを取得しようと試みます。

マウス、キーボードを繋いでLXterminalのアイコンをクリックすると、ターミナル操作ができます。

ブラウジングもできます。

暗いですが、左がラズパイ3、右がブラウザでhelpページを表示しているところです。

ラズパイ3なので、無線LANにつなげることもできますが、それはまた別の機会に記事にします。

さて、ディスプレイをつなげたままで操作してもよいのですが、ラズパイは小型軽量過ぎて、HDMIケーブルやEtherケーブル、ときにはキーボードやマウスのケーブルにも引っ張られます。ちょっとストレスになります。さらにここに電子パーツをつなげていくなんて辛すぎます。

ということで、sshdを起動させておき、モニターやマウス、キーボードを切り離しても大丈夫な状態で使っていこうと思います。usbデバイスも電気供給しなくてはならないものがあるので、不必要なものは切り離してしまう方がいいのかなぁ、と思っています。

$ sudo service sshd restart

これで、sshコマンドもしくはteratermなどのターミナルソフトからコマンド打てますね。

ssh コマンドなら-Xか-Yでxの画面の転送もできますね。mac/windowsだとxサーバを追加インストールする必要があります。MacならXQuartz、WindowsならXmingで検索するとよいと思います。







[Raspberry Pi]ラズパイでLチカ(2)

ではまず、起動用SDカードを作成します。

どのホストOSでも、以下の流れです。

1. イメージファイルの入手
2. イメージファイルをSDカードに書き込む

イメージファイルというのは、ディスクの中身を(管理情報なども含んで)まるごとファイルにしたものです。
imageには、うりふたつとか、生き写しって意味がありますから、まぁ、そういう意味なのでしょうね。

ちなみにこのイメージファイルは圧縮されることもあるので、より正確には(伸張などをかけて)ディスクの中身を丸々写した形として使えるもの。ってところでしょうか。

イメージファイルの入手や書き込み手順に関しては検索すると多数出てきますので割愛しますが、注意点だけ幾つか。

1. ダウンロードしたものが正しいか検索する(md5など)

正しいイメージファイルを使いましょう。ネットワークはときにデータの欠損が生じます。正常性をmd5sumコマンドなどで確認して使いましょう

まぁ、アーカイブされてるものを解凍して使う分には、解凍できなかったりする時点で気づくかもしれませんが。

2. SDカードの書き込みは、コピーではない

イメージの書き込みは、ファイル群とその管理情報全てを書き込む必要があります。イメージファイルを書き込むためのソフトを使いましょう。linux/unixならばddコマンドが入っているでしょうから、それでやればオーケーです。Windowsでは、それ用のソフト(Win32 Disk Imagerなど)をインストールする必要があります。

3. きちんとアンマウントしてから使う

OSによっては、データをバッファリングしてユーザーインターフェイスに応答を返す可能性がありますから、バッファのフラッシュおよびデバイスの切り離しを行ってからライターから取り出してください。