LinuxでUSB接続のAudioインターフェイスから音が出ない
表題の通り 忘れないうちに取り急ぎ
OSはArchLinux
認識されているのか?
$ cat /proc/asound/modules 0 snd_hda_intel 1 snd_hda_intel
snd_usb_audio
が出力されるはずですがされていません.
dmesg
をしてみても,
cannot find the slot for index 0 (range 0-1)
とエラーが出ています.
対処
/etc/modprobe.d/alsa-base.confに優先順位を設定します.snd_hda_intelが2つあって区別ができないので,Vendor IDを指定します.
Vendor ID はlspci -nn
のさいごの[8086:aa3e]の8086の部分です.
/etc/modprobe.d/alsa-base.conf
options snd slots=snd-usb-audio,snd-hda-intel optioins snd-hda-intel index=1,2 vid=8086,10de options snd-usb-audio index=0
indexが0に近いほうが優先になります.
Nimをnodejsにコンパイルして競技プログラミングした
こんにちは 最近Nimで競技プログラミングをすることにハマっています.
準備
Nimとは?
プログラミング言語です.Pythonライクな文法で気軽に書けます.C言語を介してバイナリを吐くので実行時間はとても早いです.JavaScriptも吐くことができます.
競技プログラミングとは?
問題をプログラミングで解くコンテストです.国内のコンテストサイトには Atcoder, Aizu Online Judge(AOJ), yukicoder, paizaなどがあります.
背景
- AOJを解こうとしたらNimが使えなかった.
- ちなみにAtcoderとyukicoderでは使えます.
- どうしてもNimで書きたかった.
- Nimの良さの一つは早いことだがこの際仕方ない.JavaScriptで吐いて提出しよう.
解説
普通に解いてコンパイルして投げるだけと思いきや,JavaScriptに吐くときはstdinが使えません.この点だけ注意します.
AOJ 1000 A + B Problem を例に解説します.問題自体は足すだけです.
1.普通にNimで解く
普通に解きます. ただし,NimのstdinはCのstdio.h由来であるため,JSにコンパイルするときは利用できません.そこで,以下のように入力を受け取るmain函数を作ります. mainの引数には適当にテスト用の文字列でも埋め込んでください.
import strutils, sequtils proc main(inputLines:string): void= var input = inputLines.split('\n') for line in input: var tmp = line.split.map(parseInt) a = tmp[0] b = tmp[1] echo a+b main("4 6\n3 1\n2 1")
2. JavaScriptにコンパイルする
$ nim js -d:nodejs -o:aoj1000.js aoj1000.nim
aoj1000.jsが出力されます.
3. JavaScriptのファイルを編集する
ファイルを開くとやたら長いコードが出てきますが,一番下までスクロールします. すると,
main_53001(makeNimstrLit("4 6\x0A3 1\x0A2 1"));
という部分が一番下にあります.
この部分を標準入力を読み込むように改変します.
ここでは,http://koturn.hatenablog.com/entry/2016/02/04/050000 を参考にしました.
(function() { 'use strict'; var lines = []; require('readline').createInterface({ input: process.stdin, output: process.stdout }).on('line', function(line) { lines.push(line); }); process.stdin.on('end', function() { main_53001(makeNimstrLit(lines.join("\x0A"))); }); })();
4 完成
完成です.ファイルを全部コピーして提出します.
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2961239#1
シェルにアスタリスク入れたらファイル一覧が出てきた
きっかけ
dotfiles(設定ファイルをGitHubに置いてどこでもマイ環境を構築できるスクリプト)を作ろうと思い,他人の設定を参考にしていたときに目にしたShell Scriptがこちら
cd ${DOT_DIRECTORY} for f in .??* do [[ ${f} = ".git" ]] && continue [[ ${f} = ".gitignore" ]] && continue ln -snfv ${DOT_DIRECTORY}/${f} ${HOME}/${f} done
.??*
ってなんだ??????????
どっと はてな はてな あすたりすく????????
JavaScriptで手っ取り早く64bit符号なし整数文字列の大小関係を比較
JavaScriptが53bitまでしか整数をまともに扱えないのはよく知られた話です.
JavaScriptの整数の精度が保たれるのは9007199254740991まで - Qiita
Twitterからのレスポンスは
id_str:'12345678765543212345'
のように文字列でJSONが降ってきます.
これをそのまま大小関係を比較するのはよくありません.
javascript 文字列のまま数字を比較すると危険が危ない。 - かもメモに詳しいように
'99'<'100' // false
となります.
しかし64bit整数は数値に変換しても不正確になるジレンマがあります.
そこで,
// ES5版 const pad0 = function(num){return ('00000000000000000000'+num).slice(-20)} // ES6版 const pad0 = num => ('0'.repeat(21)+num).slice(-20) pad0('99')<pad0('100') // true
という強引な解決策を提案します
'99'>'100'
となる理由は桁が揃ってないから起こるのであり,桁を揃えてしまえばいいのです.