n度あることはn+1度ある

憶測が多いブログなので鵜呑みにしないこと

HD-DAC1の入力をUSBから光デジタルにした

入力が無いときにリレーが切り替わるとノイズが聞こえるレベルで発生し、電源を切ってもなっていたので光デジタルにした。 光デジタルにしたところ、今の所可聴レベルのノイズは発生していない。またSPDIF端子は音がなっていなくても、出力しっぱなしなようでリレー音の切り替えがなくなり選曲時のストレスもなくなった。
音質の違いはよく分からないが、HD-DAC1の主なストレスは消えたので良かった。

マザボの光出力だとHD-DAC1から音が出ないときの解決策

症状

マザボのSPDIF出力からHD-DAC1に出力してもUNSUPPORTと表示される

原因

realtekの5.1chに非対応(ヘッドフォン用のDACだから当たり前?)

解決策

コンパネのサウンドから出力形式を2chにする f:id:benntann:20180326174459p:plain

折り畳み傘のススメ

折り畳み傘を購入して半年くらい経ったが、とても素晴らしいので是非様々な人に使ってほしいという記事

折り畳み傘の良い点

傘の盗難・忘れを防止できる

ビニール傘を盗まれたり、帰り際晴れていて傘を置き忘れたという経験は無いだろうか。
折り畳み傘は基本的に傘置き場に置くという行動を必要としないため、傘の盗難・置き忘れを防止できる。

邪魔にならない

傘を持って歩くという行為は、手が塞がり場合によっては非常に邪魔な場合がある。しかし、折り畳み傘は鞄の中に突っ込んでおけばいいだけなので邪魔だということは基本的にない。

突発的な雨に対応できる

鞄の中に常に入れておけば、急に天気が変わったときでも対応ができる。

折り畳み傘の悪い点

鞄を専有する

当たり前だが、鞄の中に入れっぱなしにしておけばその鞄の容量を常に圧迫する状態となる。大きめの鞄や、折り畳み傘を入れるスペースなどがあれば問題ないが小さめの鞄を持ち歩く人にとっては大いに邪魔になる。

収納がめんどくさい

鞄から折り畳み傘を出し、ケースから傘本体を出すという行程が追加されるため傘をさす、しまうという動作が通常の傘と比べて、めんどくさくなる。

折り畳み傘への予想される懸念

壊れやすい

百均のものではなく少し高めの傘を買えば、すぐに壊れるということは無いと思われる。
Crayon Palmeの傘を使用しているが、現在まで特に問題はない。

髪の毛を巻き込む

これも一定水準以上の折り畳み傘ならば問題ないと思われる。

収納時、鞄などに水滴がつく

一緒についてくる折り畳み傘を入れるケースだと防水性がなく、傘に付着した水滴がそこら中に散乱するため、以下のようなケースを一緒に購入するとこのような事態を防げる。

傘が小さい

自分が使用してる傘なら展開時、コンビニで販売してるビニール傘くらいのサイズはある。展開時のサイズは通常商品ページに記載されているので、購入時に確認すれば良い。120cmくらいあれば十分かと。

基本的に収納がめんどくさいこと以外は、普通の傘より便利だと思っているので購入を検討してはどうだろうか。

Ubuntuでユーザー切り替えがうまくいかないときに

症状

新規に作成したユーザーでUbuntuにログインしようとすると、ログインGUIから移り変わらない

原因

ユーザーのホームディレクトリが作成されていない

解決策

adduserコマンドで作り直すなどホームディレクトリを作る

参考

qiita.com

C言語のchar配列の不思議

C言語の文字列の宣言は、よく入門書などにchar str[10]、文字数が決まっていない場合はchar str[]といったように、変数名の後に大カッコをつけた宣言がよく知られると思う。
この方法だと文字列の扱いが少し面倒くさい。
以下のようなプログラム(test.c)をコンパイルしてみる。

#include <stdio.h>

int main(void){
    char str1[] = "str1";
    char str2[] = "str2;
    s1 = s2;
    printf("%s\n",s2);
    return 0;
}
$ gcc test.c
test.c: In function ‘main’:
test.c:7:5: error: assignment to expression with array type
  s1 = s2;

当たり前だけどエラー
strcpyなどを使用せざるをえない。
しかし以下のようにポインタで宣言を行うと

#include <stdio.h>

int main(void){
    char *s1_ = "str1";
    char *s2 _= "str2";
    s1_ = s2_;
    printf("%s\n",s2_);
    return 0;
}
$ gcc test.c
$ ./a.out
str2

実行できる
str1もstr1_も"str1"の's'へのポインタだと思うのだが、恐らく前者の方法だとint型の配列同様に扱われ配列同士の代入が禁止になってるのではないかと考えられる。
ポインタで宣言すれば配列で宣言したわけではないので、ポインタ変数同士のアドレスの交換でこのように文字列を代入できるのではないだろうか。
この原因に関してはよくわからないので、詳しい方いたら教えてください。

C言語のifの挙動について

C言語のif文の挙動についてメモ
以下のプログラムにおいて

#include<stdio.h>

int test_func(int);
int main(void){
        int a;
        a = 0;
        if(a && test_func(1))
                printf("true1\n");
        if(test_func(2) && a)
                printf("true2\n"); 
}

int test_func(int jud){
        printf("call no.%d\n",jud);
}

実行結果は
call no.2
一番最初のif文ではaが0のためif内のtest_funcは呼び出されない。ただし二番目のif文のように関数を先に呼び出されるようにすればaが0でも実行される。
つまりif内の項は左から順番に処理され、0が来た瞬間に終わるようになっている。   ここでif内の条件演算をビット演算の&に変えると

call no.1
call no.2

つまり&&の処理はifやwhileなどの制御処理内で左から実行や0のチェックをされているが、ビット演算子も含めその他は一度実行した結果を見て条件分岐をしているといえる。
それがなんだという話であるが、if(a && test_func())のようにif内に関数が含まれるとき、自分より先にある項が0であっても必ず実行したい場合に&&でなく&を使うとできる。
単純な話、項の順序を入れ替えればいいだけだが。

apt-get build-depができない

apt-get build-depをすると

Reading package lists... Done
E: You must put some 'source' URIs in your sources.list

とかでてくる。

askubuntu.com

より、/etc/apt/sources.listの末に

deb-src http://archive.ubuntu.com/ubuntu trusty main restricted
deb-src http://gb.archive.ubuntu.com/ubuntu/ trusty restricted main universe multiverse
deb-src http://gb.archive.ubuntu.com/ubuntu/ trusty-updates restricted main universe multiverse
deb-src http://gb.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu trusty-security restricted main universe multiverse
deb-src http://gb.archive.ubuntu.com/ubuntu/ trusty-proposed restricted main universe multiverse

と追記してsudo apt-get updateしたらできるようになった。 (USにはなかった?)
GBはイギリスなので通信速度的にはあまりよろしくない。気にする人は変えようね